При обновлении конфигураций на платформе 1С:Предприятие 8.3 (например, ЗУП 3, ERP, КА, УТ) часто обновляется и Библиотека стандартных подсистем (БСП). В результате внешняя печатная форма (ВПФ), которая успешно работала ранее или открывается через Файл — Открыть, перестает реагировать на нажатие кнопки печати из нетипового документа. Выясним причины такого поведения и разберем проверенные способы отладки внешних печатных форм.
Проанализируем основные причины, из-за которых кнопка печати в нетиповом документе может не вызывать формирование печатной формы:
ОпределяемыйТип.ОбъектСПодключаемымиКомандами и ОпределяемыйТип.ВладелецДополнительныхОбработок.ДобавитьКомандыПечати(КомандыПечати), а в модуле формы документа — вызовы инициализации подключаемых команд в обработчиках ПриСозданииНаСервере, ПриЧтенииНаСервере и обработчике команды печати.Попытка ... Исключение. Если в процедуре Печать модуля объекта возникает ошибка, БСП может зафиксировать ее только в журнале регистрации, не показывая модальное окно пользователю.Рассмотрим наиболее простой и универсальный способ отладки логики формирования макета без необходимости подключения обработки в справочник БСП:
ДокументСсылка с типом ссылки нужного документа) и кнопку Печать.Посмотрим на пример кода серверной процедуры формы:
&НаСервере
Процедура ВыполнитьПечатьНаСервере()
ОбъектОбработки = РеквизитВФорму(Объект);
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(ДокументСсылка);
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("ИдентификаторКомандыПечати");
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
ОбъектОбработки.Печать(МассивОбъектов, КоллекцияПечатныхФорм, Новый СписокЗначений, ПараметрыВывода);
ТабличныйДокумент = КоллекцияПечатныхФорм[0].ТабличныйДокумент;
КонецПроцедуры
При таком подходе файл запускается в режиме 1С:Предприятие через Файл — Открыть, а в коде модуля объекта ВПФ корректно срабатывают любые точки останова.
Когда внешняя обработка загружена в базу через справочник Дополнительные отчеты и обработки, платформа выполняет ее из временного хранилища. Из-за этого точки останова в исходном файле .epf не срабатывают. Разберем, как включить прямую отладку на время разработки:
ДополнительныеОтчетыИОбработки или ДополнительныеОтчетыИОбработкиСервер.ПодключитьВнешнююОбработку).ВнешниеОбработки.Создать() с указанием прямого пути к файлу на диске:
// Временный код для отладки ВПФ
Возврат ВнешниеОбработки.Создать("C:\ВПФ\ПечатнаяФорма.epf", Ложь);
После этой правки вызов печати из интерфейса документа начнет исполнять физический файл на диске, и установленные в Конфигураторе точки останова успешно сработают.
Если вносить изменения в общие модули конфигурации нельзя, воспользуемся режимом остановки по ошибке:
Печать добавляем строку:
ВызватьИсключение "Остановка для отладки ВПФ";
Если при нажатии на кнопку печатная форма не появляется и ошибок на экране нет, необходимо проверить системные логи. БСП перехватывает сбои и фиксирует детальный стек вызовов. Откроем Журнал регистрации и установим отбор по событиям подсистем Дополнительные отчеты и обработки или Печать, чтобы увидеть точную причину падения скрипта.
Чтобы ВПФ стабильно вызывалась из нетипового документа, проверим правильность его настройки в конфигурации:
ОпределяемыйТип.ОбъектСПодключаемымиКомандами.УправлениеПечатьюПереопределяемый.ПриОпределенииОбъектовСКомандамиПечати.ДобавитьКомандыПечати(КомандыПечати) Экспорт.ЗапуститьОбновлениеИнформационнойБазы или программный вызов обновления метаданных БСП.