Почему не работает отладка внешней печатной формы в 1С и как ее настроить?

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

При разработке и модификации внешних печатных форм (ВПФ) для конфигураций на базе Библиотеки Стандартных Подсистем (например, 1С:Управление торговлей 11, 1С:ERP, 1С:Комплексная автоматизация или 1С:Бухгалтерия предприятия) разработчики часто сталкиваются с ситуацией, когда точка останова в модуле объекта печатной формы не срабатывает. При попытке сформировать документ отладчик просто игнорирует выставленные точки останова.

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

Причины, по которым отладчик не останавливается в коде ВПФ

Выясним внутренние механизмы платформы 1С и БСП, приводящие к данной проблеме:

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

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

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

Для реализации этого подхода выполним следующие шаги:

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

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


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

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

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

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

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

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

Способ 3. Переход по шагам из точки вызова

Разберем еще один практический прием, позволяющий добраться до выполняемого кода без доработки формы:

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