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