Как эффективно отлаживать внешние печатные формы в 1С:Предприятие?

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

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

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

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

Разберем этот процесс по шагам:

  1. Откроем внешнюю обработку в конфигураторе и создадим новую форму.
  2. На форме добавим реквизит СсылкаНаОбъект с типом данных того документа или справочника, для которого предназначена эта форма (например, ДокументСсылка.РеализацияТоваровУслуг).
  3. Создадим команду формы (например, "Отладка") и выведем её на форму в виде кнопки.
  4. В модуле формы напишем код, который преобразует обработку в объект и вызовет процедуру печати.

Рассмотрим пример кода для обработки команды отладки:


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

Этот метод хорош тем, что позволяет ставить точки останова в любом месте модуля объекта и сразу видеть результат формирования ТабличныйДокумент.

Метод 2. Использование механизмов БСП для вызова команды

Если ваша конфигурация построена на Библиотеке стандартных подсистем (БСП), можно использовать штатные методы для вызова команд внешних объектов. Это позволяет протестировать работу формы в условиях, максимально приближенных к "боевым".

Проанализируем ситуацию: иногда ошибка возникает не в самом алгоритме печати, а на этапе регистрации или вызова формы системой. В этом случае поможет использование программного интерфейса БСП. Мы можем вызвать метод ВыполнитьКомандуИзФормыВнешнегоОбъекта, передав туда идентификатор команды и необходимые параметры.

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

Метод 3. Отладка через временные файлы операционной системы

Выясним причину, почему иногда точки останова не срабатывают, когда мы запускаем печать из интерфейса программы. Когда 1С запускает внешнюю обработку, она выгружает её двоичные данные во временную папку пользователя. Чтобы отладчик "подцепил" этот файл, нужно выполнить следующие действия:

  1. Запустить печать из 1С, чтобы файл выгрузился на диск.
  2. Найти временную папку пользователя (обычно это %TEMP% в Windows). Файл будет иметь расширение .epf и случайное имя.
  3. Открыть этот файл через меню "Файл — Открыть" непосредственно в конфигураторе того сеанса, где запущена 1С.
  4. Установить точки останова в открытом файле.

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

Метод 4. Отладка фоновых заданий на сервере

В современных конфигурациях формирование печатных форм часто переносится в фоновые задания для повышения отзывчивости интерфейса. Посмотрим на алгоритм настройки отладки в этом случае:

  1. Убедимся, что на сервере 1С разрешена отладка (параметр -debug в строке запуска службы).
  2. В конфигураторе откроем окно "Отладка — Подключения".
  3. Нажмем кнопку "Автоматическое подключение" и установим флажок Фоновые задания.

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

Метод 5. Использование специализированных расширений и инструментов

Существуют готовые инструменты, такие как "Инструменты разработчика" (ИР) или специализированные обработки с InfoStart. Рассмотрим их преимущества:

Метод 6. Использование среды EDT (Enterprise Development Tools)

Если вы перешли на разработку в EDT, процесс упрощается. Система позволяет связывать проект внешней обработки с активным сеансом 1С. Благодаря механизму HotSwap, вы можете вносить небольшие правки в код обработки и сразу проверять их, не перезапуская процесс печати и не перезагружая файл в базу данных.

Рекомендации по логированию

В ситуациях, когда подключение отладчика невозможно (например, на сервере клиента), рекомендуется использовать временное логирование. Разберем пример простой записи в журнал регистрации:


ЗаписьЖурналаРегистрации("ОтладкаВПФ",
    УровеньЖурналаРегистрации.Ошибка,
    ,
    ,
    "Значение переменной Х: " + ЗначениеПеременнойХ);

Это позволит проанализировать ход выполнения программы, просто открыв журнал регистрации в пользовательском режиме.

Подводя итог, можно сказать, что наиболее стабильным и универсальным методом остается создание встроенной формы отладки (Метод 1), так как он дает полный контроль над процессом и не зависит от настроек сервера или прав доступа к временным папкам. Для профессиональной и частой разработки лучшим выбором станет использование Инструментов Разработчика или среды EDT.

← На главную