Поводом для написания послужили трудности с которыми я столкнулся при реализации данной задачи. Необходимо было разработать печатную форму с возможностью формирования дополнительного документа и вывода формы с ссылкой на сформированный документ, с целью его редактирования. После правки форма со ссылкой закрывается и продолжается процесс печати.
При печати с использованием типа команды "ВызовСерверногоМетода" информации много и никаких трудностей его использование не вызывает. Но, по очевидным причинам, использовать его нельзя, т. к. диалог с пользователем ведется "на клиенте". В этом случае справка по БСП предлагает использовать тип команды "ВызовКлиентскогоМетода" и три варианта его использования. В частности, для внешней печатной формы предлагается создать форму обработки и реализовать в ней процедуру печати следующего вида
&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив)
//Реализация логики процедуры
КонецПроцедуры
В дополнении указано, что в параметре формы "ДополнительнаяОбработкаСсылка", передается ссылка этого объекта с типом Справочники.ДополнительныеОтчетыИОбработки. И на этом все.
Если с самой реализацией алгоритма выборки данных, созданием дополнительного документа и выводом формы со ссылкой на него проблем никаких, то с выводом на печать итогового документа возникли трудности. По логике, для использования механизма БСП надо вызвать вызвать процедуру печати,
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) и далее
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "МТТН") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ИмяМакета", "СинонимМакета", ТабличныйДокумент)
КонецЕсли;
Но, при прямом вызове этой процедуры с помощью
РеквзитФормыВЗначение(Объект).Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
работать не будет. Табличный документ формируется, выводится в коллекцию, но не отображается.
На этом месте я застрял на пару часов. "Гугление" особого результата не принесло. В основном предлагалось сформировать табличный документ и использовать его метод "Показать()". Но, хотелось получить результат аналогичный полученному с помощью "ВызоваСерверногоМетода", т. е. вывести документ в стандартную форму БСП "ПечатьДокументов". Наконец, на просторах интернета наткнулся на статью, где описана передача параметров во "внешнюю" форму обработки. Адаптировав информацию в статье под свою задачу, все получилось.
Итак, для реализации задачи необходимо:
Указать в интерфейсе регистрации обработки использование "ВызвовКлиентскогоМетода"
ДобавитьКоманду(ТаблицаКоманд, "ПредставлениеКоманды,"ИдентификаторКоманды",Перечисление.СпособыВызоваДополнительныхОбработок.ВызовКлиентскогоМетода,
,Истина, "ПечатьMXL");
Реализовать две процедуры "Печать" в соответствии с требованиями БСП, в основной форме обработки "НаКлиенте" и в модуле объекта обработки.
Далее, что бы вызвать процедуру печати из модуля объекта обработки, необходимо заполнить структуру параметров открытия формы и открыть общую форму "ПечатьДокументов".
Код процедуры "Печать" в форме выглядит так:
//Идентификатор - Идентификатор команды заданный в интерфейсе регистрации
//ОбъектыНазначенияМассив - массив объектов печати.
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив)
//Структура параметров формы, которую необходимо передать в форму при открытии
ПараметрыОткрытия = Новый Структура("ИсточникДанных, ПараметрыИсточника");
//Получаем параметр ДополнительнаяОбработкаСсылка, который так скупо описан в БПС, т. е.
//мы указываем ссылку на объект справочника "ДополнительныеОтчетыИОбработки, как источних данных для формы.
ПараметрыОткрытия.ИсточникДанных=ВыполняемаяКоманда.ДополнительнаяОбработкаСсылка;
//Еще одна структура описывающая параметры источника данных, вставляем в структуру идентификатор команды
//и массив объектов печати
ПараметрыОткрытия.ПараметрыИсточника = Новый Структура("ИдентификаторКоманды, ОбъектыНазначения");
ПараметрыОткрытия.ПараметрыИсточника.ИдентификаторКоманды = ИдентификаторКоманды;
ПараметрыОткрытия.ПараметрыИсточника.ОбъектыНазначения = МассивОбъектов;
//И открываем стандартную форму БСП, она сама вызовет процедуру печати модуля объекта обработки о отобразит табличный документ
ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия);
На этом, в общем то, и все.
В файле пример обработки, использующей данный метод. Обработка печатает "Международную транспортную накладную (CMR)", на основе документов "РеализацияТоваровУслуг" и "ТранспортнаяНакладная". В случае отсутствия транспортных накладных, пользователю выводится предложение их создать и форма со ссылкой на созданный документ в случае согласия, для заполнения транспортной накладной согласно требованиям.
Обработка разработана для конфигурации УТ 11.2.3.218 (БСП 2.3.2.94).
Статья очень полезная. В БСП всегда найдется что-то, что заставит споткнуться на ровном месте и статьи подобные этой делают разработку намного проще. Однозначно плюс.
Ничего полезного не нашел. Исходя из статьи смотрим как автор предлагает оформить код процедуры Печать в форме на клиенте.
Показать
как минимум естественно получаем
ПараметрыОткрытия.ИсточникДанных = <<?>>ВыполняемаяКоманда.ДополнительнаяОбработкаСсылка; (Проверка: Тонкий клиент)
{ВнешняяОбработка.НакладнаяНаСписание.Форма.Форма.Форма(11,59)}: Переменная не определена (МассивОбъектов)
ПараметрыОткрытия.ПараметрыИсточника.ОбъектыНазначения = <<?>>МассивОбъектов; (Проверка: Тонкий клиент)
т.к. эти переменные не определены в коде
Выполняемая команда — элемент стандартной структуры. Массив объектов, переменная передающаяся в процедуру печать.
В справке по БСП это описано, хоть и, как обычно, криво. Что там надо определять в коде известно только вам…
Да автор не может нормально статью написать, у меня такие же ошибки. Только при печати они не появляются, т.к. в эту процедуру программа даже не заходит. Буду дальше искать…
Ругается на Недопустимое значение параметра ПараметрКоманды при вызове метода УправлениеПечатьюКлиент.ВыполнитьКомандуПечати.
Ожидалось: Массив, ЛюбаяСсылка. Возникает при открытии общей формы. Дело в том, что ДополнительнаяОбработкаСсылка не присваивает значение ссылки на обработку, а равняется пустому значению.
Согласна с staheev 15.05.19 14:39.
Ошибка: ДополнительнаяОбработкаСсылка не присваивает значение ссылки на обработку, а равняется пустому значению.
Не запускается ни как тест как внешняя обработка , ни из Дополнительных печатных форм.
Не смогла отправить сообщение автору.
При попытке написать выдалось сообщение — отложенная группа.
Получается, что процедура не работающая.
Ждем комментов автора. 🙂
А задумка была хорошая. На эту тему действительно мало информации, но она очень нужная.