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

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

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

Предварительные требования для успешной отладки

Прежде чем переходить к написанию кода, убедитесь, что ваша среда настроена правильно:

  1. Сервер 1С должен быть запущен с ключом отладки. Если вы работаете в клиент-серверном варианте, сервер 1С должен быть запущен с параметром /debug. Без этого точки останова в модулях, выполняемых на сервере, просто не сработают.
  2. Доступ к отладке. Убедитесь, что у вас есть права на отладку, а конфигуратор и клиентское приложение запущены под одним и тем же пользователем (или отладчик подключен к нужному сеансу).
  3. Серверная отладка. Помните, что если код выполняется в фоновом задании, вам нужно подключить отладчик к «Фоновым заданиям», а не только к текущему сеансу.

Способ 1: Метод «Исключение» для быстрого перехвата

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


// Вставьте этот код в начало функции, которую хотите отладить
ВызватьИсключение \"Остановка отладки!\";

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

Способ 2: Создание собственной формы отладки (Профессиональный подход)

Чтобы не подключать обработку через справочник каждый раз при внесении правок, создадим «стенд» прямо внутри внешней обработки. Это позволит имитировать вызов метода Печать так, как это делает типовая Библиотека Стандартных Подсистем (БСП).

Шаг 1: Подготовка формы

Добавьте новую форму в вашу внешнюю обработку. На форме создайте:

Шаг 2: Реализация логики

В модуле формы опишем обработчик кнопки и серверные функции. Это позволит нам вызывать Печать в изолированной среде.


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

Теперь добавим серверную логику, которая готовит параметры печати аналогично типовому механизму:


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

Инициализируем список команд в событии ПриСозданииНаСервере, чтобы при открытии формы сразу видеть доступные для печати макеты.


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

Способ 3: Использование готовых инструментов

Если вы не хотите создавать форму внутри каждой обработки, сообщество 1С предлагает готовые решения. Существуют универсальные внешние обработки, которые позволяют подключать файлы .epf без регистрации в справочнике ДополнительныеОтчетыИОбработки. Они работают по схожему с описанным выше принципу: эмулируют контекст БСП и позволяют «на лету» запускать метод Печать с нужным объектом базы данных.

Заключение

Для эффективной работы мы рекомендуем следующий порядок действий:

  1. Всегда проверяйте наличие ключа /debug на сервере.
  2. Для быстрой отладки используйте создание специальной формы-стенда внутри самой обработки — это дает полный контроль над передаваемыми параметрами.
  3. Если используете метод ВызватьИсключение, не забудьте удалить его перед итоговой выгрузкой файла.
  4. Используйте отладчик конфигуратора для анализа коллекций значений, таких как КоллекцияПечатныхФорм, чтобы видеть, как заполняется табличный документ на каждом этапе.

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

← На главную