1 подписчик
#1C #1С
Добавление формы отбора перед печатью произвольного макета в расширении
Задача: напечатать произвольный макет из документа, предварительно вывести форму списка печатаемых элементов (по аналогии с обработкой печать этикеток и ценников).
1) Создаю макет в документе.
2) Из конфигурации заимствую общий модуль ПечатьДокументовУНФКлиент и добавляю свою процедуру (ПечатьМаркировкаПроизводства). Процедура экспортная.
В процедуре открываю свою (произвольную) форму (форма прицеплена к объекту документа).
Для передачи объектов печати создаю структуру из входящего параметра ПараметрыКоманды.
(при передаче структуры ПараметрыКоманды возникает ошибка передачи реквизита с типом ФормаКлиентскогоПриложения.)
3) Из модуля менеджера документа заимствую в расширение процедуру ДобавитьКомандыПечати (я поставил после, чтобы порядковый номер был +1).
И указываю обработчик созданный на первом шаге.
КомандаПечати.Обработчик = "ПечатьДокументовУНФКлиент.ПечатьМаркировкаПроизводства";
КомандаПечати.Порядок = КомандыПечати.Количество() + 1;
Заимствую процедуру Печать. В этой процедуре добавляю обработчик для своей печатной формы и процедуру для заполнения макета (условия взял типовые и поправил под себя. МаркировкаПроизводства - имя печатной формы).
ОписаниеПечатнойФормы = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "МаркировкаПроизводства");
Если ОписаниеПечатнойФормы <> Неопределено Тогда
СформироватьМаркировкаПроизводства(ОписаниеПечатнойФормы, МассивОбъектов, ОбъектыПечати, ПараметрыПечати);
КонецЕсли;
4) Создаю произвольную форму в документе. Добавляю процедуру ПриСозданииНаСервере.
При создании формы заполняю нужные мне поля. Добавляю на форму команду Печать (клиентский вызов). В процедуре делаю вызов (менеджер печати, имя макета, массив объектов печати*, ЭтаФорма, структура с массивом данных для заполнения макета):
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Документ.ЗаказНаПроизводство", "МаркировкаПроизводства", ПолучитьМассивИзТЗНаСервере(), ЭтаФорма, СформироватьСтруктуруПараметровПечати());
*Массив объектов печати содержит документ(ы) для которых выполняется печать (например, из списка документов).
1 минута
9 февраля 2023