Как отладить внешнюю печатную форму в 1С: подходы от новичка до эксперта

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

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

Почему стандартная отладка не работает?

Проанализируем механизм работы системы. Когда пользователь нажимает кнопку «Печать», БСП выполняет следующие действия:

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

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

Метод 1: Создание вспомогательной формы отладки (Уровень «Джуниор»)

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

Рассмотрим пошагово, как реализовать этот механизм:

  1. Добавим в обработку основную форму.
  2. Разместим на форме реквизит ОбъектНазначения (тип — ссылка на документ, для которого пишется форма).
  3. Добавим кнопку «Выполнить печать».

В модуле формы реализуем следующий код, который подготовит необходимые структуры данных:


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

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

Метод 2: Временная трансформация в отчет (Уровень «Стажер»)

Если логика формирования печатной формы очень сложная и завязана на макеты, можно пойти по пути наименьшего сопротивления. Рассмотрим ситуацию, когда мы создаем обычный внешний отчет, в котором реализуем всю логику построения ТабличногоДокумента. После того как макет и данные отлажены, мы просто копируем функции и процедуры в модуль объекта нашей печатной формы. Это позволяет избежать «танцев с бубнами» вокруг параметров БСП на начальном этапе разработки.

Метод 3: Подмена объекта через программный код (Уровень «Сеньор»)

Этот метод позволяет отлаживать форму непосредственно при нажатии кнопки «Печать» в интерфейсе документа, не добавляя лишних форм в обработку. Выясним, как это работает. Нам потребуется внести временное изменение в общий модуль, отвечающий за подключение внешних обработок (обычно это ДополнительныеОтчетыИОбработки).

Найдем функцию, где происходит создание объекта внешней обработки, и добавим условие:


// В общем модуле ДополнительныеОтчетыИОбработки
Функция ПолучитьОбъектВнешнейОбработки(Ссылка) Экспорт
    
    // ВРЕМЕННЫЙ КОД ДЛЯ ОТЛАДКИ
    Если Ссылка.Наименование = "МояПечатнаяФорма" Тогда
        Возврат ВнешниеОбработки.Создать("C:\Dev\MyPrintForm.epf", Ложь);
    КонецЕсли;
    // ... штатный код ...
КонецФункции

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

Метод 4: Настройка сервера для отладки

Часто программисты сталкиваются с тем, что даже при открытии обработки через «Файл — Открыть» точки останова в модуле объекта не срабатывают. Разберем причину: код модуля объекта печатной формы всегда выполняется на сервере. Если сервер 1С:Предприятия запущен без ключа -debug, отладка серверных вызовов будет недоступна.

Проверим настройки сервера:

  1. Убедимся, что в строке запуска службы 1С присутствует параметр -debug.
  2. В конфигураторе зайдем в меню Отладка — Подключение.
  3. Проверим, что в списке «Доступные предметы» отображается тип «Сервер».

Особенности работы в безопасном режиме

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

Резюме и рекомендации

Подведем итог: наиболее универсальным методом считается создание внутренней формы отладки (Метод 1). Он позволяет сохранить чистоту кода и дает возможность быстро вносить изменения. Для тех, кто ценит время и работает с расширениями, рекомендуется реализовать перехват (Метод 3) через расширение конфигурации, чтобы не менять типовой код БСП. Помните, что качественная отладка — это 90% успеха при разработке сложных печатных форм с использованием Запросов и временных таблиц.

← На главную