Как отладить внешнюю печатную форму в 1С при ошибках в нетиповых документах?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

При обновлении конфигураций на платформе 1С:Предприятие 8.3 (например, ЗУП 3, ERP, КА, УТ) часто обновляется и Библиотека стандартных подсистем (БСП). В результате внешняя печатная форма (ВПФ), которая успешно работала ранее или открывается через Файл — Открыть, перестает реагировать на нажатие кнопки печати из нетипового документа. Выясним причины такого поведения и разберем проверенные способы отладки внешних печатных форм.

Почему внешняя печатная форма не срабатывает в нетиповом документе

Проанализируем основные причины, из-за которых кнопка печати в нетиповом документе может не вызывать формирование печатной формы:

  1. Переход БСП на подсистему «Подключаемые команды»: Начиная с БСП 2.4, механизмы вызова команд печати кардинально изменились. Если форма и модуль нетипового документа не адаптированы под новые стандарты подсистемы, клиентский обработчик команды не находит контекст выполнения и завершает работу без отправки запроса на сервер.
  2. Неполная интеграция документа с метаданными БСП: Для корректной работы механизма дополнительных отчетов и обработок документ должен входить в состав определяемых типов конфигурации: ОпределяемыйТип.ОбъектСПодключаемымиКомандами и ОпределяемыйТип.ВладелецДополнительныхОбработок.
  3. Отсутствие процедур БСП в модулях документа: В модуле менеджера нетипового документа должна присутствовать экспортная процедура ДобавитьКомандыПечати(КомандыПечати), а в модуле формы документа — вызовы инициализации подключаемых команд в обработчиках ПриСозданииНаСервере, ПриЧтенииНаСервере и обработчике команды печати.
  4. Необновленный кэш вспомогательных данных: Список команд печати и назначений обработок кэшируется во внутренних регистрах БСП. Если после добавления документа не была выполнена процедура обновления вспомогательных данных, механизм печати не свяжет внешнюю обработку с новым объектом.
  5. Перехват исключений БСП (Silent Fail): Механизм выполнения команд дополнительных обработок оборачивает вызов внешнего кода в блок Попытка ... Исключение. Если в процедуре Печать модуля объекта возникает ошибка, БСП может зафиксировать ее только в журнале регистрации, не показывая модальное окно пользователю.

Способ 1. Создание вспомогательной формы внутри ВПФ для ручного запуска

Рассмотрим наиболее простой и универсальный способ отладки логики формирования макета без необходимости подключения обработки в справочник БСП:

  1. Открываем внешнюю печатную форму в Конфигураторе и добавляем в нее основную форму обработки.
  2. Размещаем на форме поле для выбора ссылки на документ (например, реквизит ДокументСсылка с типом ссылки нужного документа) и кнопку Печать.
  3. В модуле формы создаем обработчик нажатия кнопки, который вызывает экспортную процедуру печати напрямую из модуля объекта.

Посмотрим на пример кода серверной процедуры формы:


&НаСервере
Процедура ВыполнитьПечатьНаСервере()
	
	ОбъектОбработки = РеквизитВФорму(Объект);
	
	МассивОбъектов = Новый Массив;
	МассивОбъектов.Добавить(ДокументСсылка);
	
	КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("ИдентификаторКомандыПечати");
	ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
	
	ОбъектОбработки.Печать(МассивОбъектов, КоллекцияПечатныхФорм, Новый СписокЗначений, ПараметрыВывода);
	
	ТабличныйДокумент = КоллекцияПечатныхФорм[0].ТабличныйДокумент;
	
КонецПроцедуры

При таком подходе файл запускается в режиме 1С:Предприятие через Файл — Открыть, а в коде модуля объекта ВПФ корректно срабатывают любые точки останова.

Способ 2. Временное перенаправление загрузки ВПФ на файл на диске

Когда внешняя обработка загружена в базу через справочник Дополнительные отчеты и обработки, платформа выполняет ее из временного хранилища. Из-за этого точки останова в исходном файле .epf не срабатывают. Разберем, как включить прямую отладку на время разработки:

  1. В тестовой базе открываем общий модуль ДополнительныеОтчетыИОбработки или ДополнительныеОтчетыИОбработкиСервер.
  2. Находим функцию подключения внешней обработки (например, ПодключитьВнешнююОбработку).
  3. Временно заменяем создание объекта из двоичных данных на вызов метода ВнешниеОбработки.Создать() с указанием прямого пути к файлу на диске:

// Временный код для отладки ВПФ
Возврат ВнешниеОбработки.Создать("C:\ВПФ\ПечатнаяФорма.epf", Ложь);

После этой правки вызов печати из интерфейса документа начнет исполнять физический файл на диске, и установленные в Конфигураторе точки останова успешно сработают.

Способ 3. Отладка через искусственное исключение

Если вносить изменения в общие модули конфигурации нельзя, воспользуемся режимом остановки по ошибке:

  1. В модуле объекта внешней печатной формы в первой строке процедуры Печать добавляем строку: ВызватьИсключение "Остановка для отладки ВПФ";
  2. В Конфигураторе переходим в меню Отладка — Настройка остановки по ошибке и активируем флаг Останавливаться по ошибке.
  3. Запускаем печать из документа в режиме 1С:Предприятие. При возникновении исключения Конфигуратор автоматически откроет временный исполняемый модуль обработки, после чего можно удалить аварийную строку и продолжить пошаговую трассировку клавишами F10 и F11.

Способ 4. Анализ Журнала регистрации

Если при нажатии на кнопку печатная форма не появляется и ошибок на экране нет, необходимо проверить системные логи. БСП перехватывает сбои и фиксирует детальный стек вызовов. Откроем Журнал регистрации и установим отбор по событиям подсистем Дополнительные отчеты и обработки или Печать, чтобы увидеть точную причину падения скрипта.

Чеклист адаптации нетипового документа для БСП

Чтобы ВПФ стабильно вызывалась из нетипового документа, проверим правильность его настройки в конфигурации:

  1. Документ включен в тип ОпределяемыйТип.ОбъектСПодключаемымиКомандами.
  2. Документ зарегистрирован в общем модуле УправлениеПечатьюПереопределяемый.ПриОпределенииОбъектовСКомандамиПечати.
  3. В модуле менеджера документа объявлена экспортная процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт.
  4. В форме документа вызваны стандартные процедуры подсистемы подключаемых команд БСП.
  5. Выполнено обновление вспомогательных данных через запуск конфигурации с параметром ЗапуститьОбновлениеИнформационнойБазы или программный вызов обновления метаданных БСП.
← На главную