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

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

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

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

Особенности архитектуры БСП и причины сложностей при отладке

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

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

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

Самый простой и быстрый способ отладить алгоритм — добавить во внешнюю обработку основную форму, через которую можно выбрать целевой объект (сотрудника, документ или справочник) и запустить печать нажатием кнопки.

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

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

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


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

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

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

Способ 2. Вызов печати через механизмы УправлениеПечатьюКлиент

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


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

&НаКлиенте
Процедура КомандаПечать(Команда)
    
    КоллекцияПечатныхФормМассив = СформироватьПечатныеФормыНаСервере();
    УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФормМассив);
    
КонецПроцедуры

Способ 3. Временное встраивание обработки в дерево конфигурации

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

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

Способ 4. Использование внешней обработки-раннера

Чтобы не добавлять временные реквизиты и формы в каждую разрабатываемую печатную форму, можно создать единую служебную обработку-раннер:

  1. На форме раннера размещаем выбор пути к файлу .epf на диске и поле выбора объекта конфигурации.
  2. По нажатию кнопки раннер выполняет подключение файла:
    
    ВнешняяОбработка = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);
    ВнешняяОбработка.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
    
  3. Это позволяет сохранить исходный файл внешней печатной формы в чистоте без лишних временных форм.

Настройка платформы и конфигуратора для перехвата точек останова

Если точки останова внутри серверных процедур все равно не срабатывают, проверим настройки среды:

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

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

← На главную