При разработке и сопровождении конфигураций на управляемых формах разработчики регулярно сталкиваются с проблемой: точки останова в модуле внешней печатной формы (ВПФ) упорно игнорируются платформой. Документ печатается, но конфигуратор не перехватывает управление, а включение отладки фоновых заданий не дает ожидаемого результата. Разберем по шагам, почему так происходит и какие существуют надежные способы отладки печатных форм в 1С 8.3.
Проанализируем техническую сторону механизма печати в современных конфигурациях на базе Библиотеки стандартных подсистем (БСП). Существует три основные причины отсутствия реакции отладчика:
ДополнительныеОтчетыИОбработки, при вызове команды печати извлекается из базы данных и сохраняется во временный файл во временном каталоге сервера. Если разработчик открыл исходный файл обработки с диска в конфигураторе и расставил в нем точки останова, отладчик их проигнорирует, поскольку исполняется совершенно другой экземпляр файла.ragent должна быть запущена с флагом -debug. Если данный параметр не включен, серверный контекст и фоновые потоки не будут передавать сигналы отладчику.Рассмотрим наиболее популярный, надежный и рекомендуемый практиками способ. Он заключается в том, чтобы запустить внешнюю печатную форму напрямую через меню «Файл» → «Открыть» как обычную обработку с интерфейсной формой. В таком режиме файл выполняется прямо с диска, что гарантирует мгновенное срабатывание точек останова.
Разберем по шагам порядок действий:
ДокументСсылка с типом ссылки на документ, для которого предназначена эта печатная форма. Перетащим этот реквизит на форму.СформироватьПечать) и разместим для нее кнопку.Посмотрим на пример клиентского и серверного кода вспомогательной формы:
&НаКлиенте
Процедура СформироватьПечать(Команда)
Если Не ЗначениеЗаполнено(ДокументСсылка) Тогда
Предупреждение("Выберите документ для формирования печатной формы!");
Возврат;
КонецЕсли;
СформироватьПечатьНаСервере();
КонецПроцедуры
&НаСервере
Процедура СформироватьПечатьНаСервере()
ОбъектОбработки = РеквизитВФорму(РеквизитФормыВЗначение("Объект"));
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(ДокументСсылка);
КоллекцияПечатныхФорм = Новый ТаблицаЗначений;
КоллекцияПечатныхФорм.Колонки.Добавить("ИмяМакета", Новый ОписаниеТипов("Строка"));
КоллекцияПечатныхФорм.Колонки.Добавить("ТабличныйДокумент", Новый ОписаниеТипов("ТабличныйДокумент"));
КоллекцияПечатныхФорм.Колонки.Добавить("СинонимМакета", Новый ОписаниеТипов("Строка"));
СтрокаПечати = КоллекцияПечатныхФорм.Добавить();
СтрокаПечати.ИмяМакета = "ОсновнойМакет"; // Укажите имя макета из модуля объекта
ОбъектыПечати = Новый СписокЗначений;
ПараметрыВывода = Новый Структура;
// Вызываем стандартную экспортную процедуру печати ВПФ
ОбъектОбработки.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
// При необходимости можно вывести полученный результат на экран
СтрокаПечати.ТабличныйДокумент.Показать();
КонецПроцедуры
Теперь сохраним файл, откроем его в режиме «1С:Предприятие» через пункт «Файл» → «Открыть», выберем нужный документ и нажмем кнопку. Отладчик гарантированно остановится на любой точке останова внутри процедуры Печать модуля объекта.
Если требуется проверить поведение формы именно в составе справочника БСП без изменения состава самой обработки, настроим среду отладки:
-debug. В операционной системе Windows это значение задается в реестре в параметре ImagePath соответствующей службы, после чего служба перезапускается.Сервер и Фоновые задания.Для постоянной разработки и сопровождения удобным решением является использование специализированных инструментов (например, подсистемы «Инструменты разработчика», подключаемой в конфигурацию или через расширение). Такие инструменты содержат встроенный перехват подключаемых обработок: при вызове внешней печатной формы инструмент принудительно перенаправляет исполнение на локальный файл с диска или отключает запуск фонового задания, благодаря чему штатный отладчик сразу перехватывает процесс выполнения.
Если доступ к настройкам сервера ограничен (например, на рабочем сервере нельзя перезапустить службу для включения отладки), разберем приемы экспресс-анализа:
ЗаписьЖурналаРегистрации() с передачей значений переменных. Это позволит проследить ход вычислений и параметры запросов в реальном времени.ВызватьИсключение "Контрольная точка: " + Значение;. Формирование печатной формы прервется, а пользователю будет выведено диагностическое сообщение с текущим состоянием переменных и полным стеком вызовов.