При разработке печатных форм в расширениях конфигураций на базе БСП (Библиотеки Стандартных Подсистем) разработчики часто сталкиваются с ситуацией: скопированная из демо-базы БСП обработка печати перенесена в расширение, однако созданная печатная форма не появляется в меню «Печать» документа. Разберем причинно-следственные связи этой проблемы и рассмотрим правильные варианты реализации печатных форм через расширение.
В Библиотеке Стандартных Подсистем процедура ПриОпределенииНастроек и заполнение структуры Настройки.Размещение предназначены для внешних обработок, которые подключаются через справочник ДополнительныеОтчетыИОбработки. Когда вы создаете обычную обработку внутри метаданных расширения, подсистема печати БСП не выполняет автоматический опрос модуля менеджера этой обработки и не собирает из нее команды печати.
Написание процедур ПриОпределенииНастроек и ДобавитьКомандыПечати в модуле менеджера обработки расширения «вхолостую» не передает исполнение в подсистему печати, поэтому кнопка печати в форме списка или форме документа не появляется.
Рассмотрим наиболее прямой способ решения задачи — заимствование целевого документа в расширение и перехват процедуры добавления команд печати.
РасходныйОрдерНаТовары) в расширение конфигурации.ДобавитьКомандыПечати с помощью аннотации &После:
&После("ДобавитьКомандыПечати")
Процедура Расш_ДобавитьКомандыПечати(КомандыПечати) Экспорт
Команда = КомандыПечати.Добавить();
Команда.Представление = НСтр("ru = 'Счет на оплату (из расширения)'");
Команда.Идентификатор = "СчетВПФ";
Команда.МенеджерПечати = "Обработка.Расш_ПечатьСчета";
КонецПроцедуры
В свойстве МенеджерПечати явно указывается имя обработки из расширения или общий модуль, отвечающий за формирование табличного документа в процедуре Печать.
Разберем альтернативный вариант, при котором не требуется менять модуль менеджера каждого отдельного документа. В этом случае расширяется общий модуль подсистемы печати.
УправлениеПечатьюПереопределяемый или УправлениеПечатью.
&После("ПриОпределенииОбъектовСКомандамиПечати")
Процедура Расш_ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт
СписокОбъектов.Добавить(Метаданные.Документы.РасходныйОрдерНаТовары);
КонецПроцедуры
Также дорабатываем процедуру формирования команд для конкретной формы:
&После("КомандыПечатиФормы")
Процедура Расш_КомандыПечатиФормы(ИмяФормы, КомандыПечати) Экспорт
Если ИмяФормы = "Документ.РасходныйОрдерНаТовары.Форма.ФормаСписка"
Или ИмяФормы = "Документ.РасходныйОрдерНаТовары.Форма.ФормаДокумента" Тогда
Команда = КомандыПечати.Добавить();
Команда.Представление = НСтр("ru = 'Счет на оплату (из расширения)'");
Команда.Идентификатор = "СчетВПФ";
Команда.МенеджерПечати = "Обработка.Расш_ПечатьСчета";
КонецЕсли;
КонецПроцедуры
Если нет необходимости хранить обработку именно внутри метаданных расширения, проанализируем стандартный механизм работы БСП с внешними обработками. Сохраним созданную обработку в файл формата .epf и подключим ее штатно через пользовательский интерфейс:
ПриОпределенииНастроек с указанием Настройки.Размещение.Добавить(...) отработает автоматически и добавит команду печати в указанный документ без дополнительного программирования.При работе с печатными формами в расширениях обратим внимание на следующие ключевые моменты:
МенеджерПечати всегда учитывайте префикс расширения в имени обработки (например, Обработка.Префикс_ИмяОбработки).