Как отладить печатную форму в управляемом приложении 1С?

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

При разработке и сопровождении конфигураций на управляемых формах разработчики регулярно сталкиваются с проблемой: точки останова в модуле внешней печатной формы (ВПФ) упорно игнорируются платформой. Документ печатается, но конфигуратор не перехватывает управление, а включение отладки фоновых заданий не дает ожидаемого результата. Разберем по шагам, почему так происходит и какие существуют надежные способы отладки печатных форм в 1С 8.3.

Выясним причину: почему отладчик не видит печатную форму

Проанализируем техническую сторону механизма печати в современных конфигурациях на базе Библиотеки стандартных подсистем (БСП). Существует три основные причины отсутствия реакции отладчика:

  1. Исполнение кода из временного хранилища: Внешняя обработка, зарегистрированная в справочнике ДополнительныеОтчетыИОбработки, при вызове команды печати извлекается из базы данных и сохраняется во временный файл во временном каталоге сервера. Если разработчик открыл исходный файл обработки с диска в конфигураторе и расставил в нем точки останова, отладчик их проигнорирует, поскольку исполняется совершенно другой экземпляр файла.
  2. Отсутствие отладки на сервере: Если информационная база работает в клиент-серверном режиме, служба ragent должна быть запущена с флагом -debug. Если данный параметр не включен, серверный контекст и фоновые потоки не будут передавать сигналы отладчику.
  3. Фоновое формирование макета: В типовых механизмах БСП печать часто выполняется в отдельном фоновом задании. Даже при настроенном автоматическом подключении фоновый поток может завершиться быстрее, чем конфигуратор успеет зарегистрировать соединение.

Способ 1: Создание вспомогательной формы для автономной отладки

Рассмотрим наиболее популярный, надежный и рекомендуемый практиками способ. Он заключается в том, чтобы запустить внешнюю печатную форму напрямую через меню «Файл» → «Открыть» как обычную обработку с интерфейсной формой. В таком режиме файл выполняется прямо с диска, что гарантирует мгновенное срабатывание точек останова.

Разберем по шагам порядок действий:

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

Посмотрим на пример клиентского и серверного кода вспомогательной формы:


&НаКлиенте
Процедура СформироватьПечать(Команда)
    Если Не ЗначениеЗаполнено(ДокументСсылка) Тогда
        Предупреждение("Выберите документ для формирования печатной формы!");
        Возврат;
    КонецЕсли;
    
    СформироватьПечатьНаСервере();
КонецПроцедуры

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

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

Способ 2: Настройка отладки на сервере и автоподключения

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

  1. Включение отладки сервера: Проверим, что служба агента сервера 1С запущена с параметром -debug. В операционной системе Windows это значение задается в реестре в параметре ImagePath соответствующей службы, после чего служба перезапускается.
  2. Настройка конфигуратора: В конфигураторе перейдем в главное меню: «Отладка» → «Подключение...» → «Настройка автоматического подключения».
  3. Установим флаги Сервер и Фоновые задания.
  4. Если фоновое задание не перехватывается автоматически, откроем окно «Подключение к предмету отладки» и вручную выберем серверный поток или фоновый процесс нужного пользователя.

Способ 3: Использование инструментов разработчика и специализированных расширений

Для постоянной разработки и сопровождения удобным решением является использование специализированных инструментов (например, подсистемы «Инструменты разработчика», подключаемой в конфигурацию или через расширение). Такие инструменты содержат встроенный перехват подключаемых обработок: при вызове внешней печатной формы инструмент принудительно перенаправляет исполнение на локальный файл с диска или отключает запуск фонового задания, благодаря чему штатный отладчик сразу перехватывает процесс выполнения.

Способ 4: Экспресс-диагностика без остановки выполнения

Если доступ к настройкам сервера ограничен (например, на рабочем сервере нельзя перезапустить службу для включения отладки), разберем приемы экспресс-анализа:

  1. Запись в журнал регистрации: Добавим в подозрительные участки кода вызов метода ЗаписьЖурналаРегистрации() с передачей значений переменных. Это позволит проследить ход вычислений и параметры запросов в реальном времени.
  2. Прерывание исключительной ситуацией: Вставим вызов ВызватьИсключение "Контрольная точка: " + Значение;. Формирование печатной формы прервется, а пользователю будет выведено диагностическое сообщение с текущим состоянием переменных и полным стеком вызовов.
← На главную