Разработка внешних печатных форм (ВПФ) — одна из самых частых задач при адаптации конфигураций на базе Библиотеки стандартных подсистем (БСП). Однако специфика работы БСП накладывает серьезные ограничения на процесс разработки: файл загружается в информационную базу как двоичные данные, а при запуске сохраняется во временный каталог со случайным именем. Это делает невозможным простую установку точки останова в конфигураторе. Разберем подробно, как обойти эти ограничения и эффективно отладить код печатной формы.
Проанализируем механизм работы системы. Когда пользователь нажимает кнопку «Печать», БСП выполняет следующие действия:
ДополнительныеОтчетыИОбработки.ВнешниеОбработки.Подключить().Печать() в модуле объекта.Поскольку при каждом вызове создается новый файл с новым именем, конфигуратор «не узнает» этот объект, и ваши точки останова игнорируются. Чтобы решить эту проблему, рассмотрим несколько проверенных методик.
Самый надежный способ — сделать внешнюю печатную форму автономной, чтобы ее можно было запустить через меню Файл — Открыть. Для этого добавим в обработку форму и научим ее имитировать вызов со стороны БСП.
Рассмотрим пошагово, как реализовать этот механизм:
ОбъектНазначения (тип — ссылка на документ, для которого пишется форма).В модуле формы реализуем следующий код, который подготовит необходимые структуры данных:
&НаСервере
Процедура ВыполнитьПечатьНаСервере()
// Подготавливаем параметры, которые обычно передает БСП
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(Объект.ОбъектНазначения);
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("ИмяМакета");
ОбъектыПечати = Новый СписокЗначений;
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
// Вызываем экспортную процедуру Печать из модуля объекта
РеквизитФормыВЗначение("Объект").Печать(
МассивОбъектов,
КоллекцияПечатныхФорм,
ОбъектыПечати,
ПараметрыВывода);
// Если нужно вывести результат на экран
Для Каждого Стр Из КоллекцияПечатныхФорм Цикл
ТабДок = Стр.ТабличныйДокумент;
ТабДок.Показать();
КонецЦикла;
КонецПроцедуры
Теперь мы можем открыть файл .epf в конфигураторе, поставить точку останова в модуле объекта и просто запустить форму через 1С:Предприятие. Система корректно остановится на нужной строке кода.
Если логика формирования печатной формы очень сложная и завязана на макеты, можно пойти по пути наименьшего сопротивления. Рассмотрим ситуацию, когда мы создаем обычный внешний отчет, в котором реализуем всю логику построения ТабличногоДокумента. После того как макет и данные отлажены, мы просто копируем функции и процедуры в модуль объекта нашей печатной формы. Это позволяет избежать «танцев с бубнами» вокруг параметров БСП на начальном этапе разработки.
Этот метод позволяет отлаживать форму непосредственно при нажатии кнопки «Печать» в интерфейсе документа, не добавляя лишних форм в обработку. Выясним, как это работает. Нам потребуется внести временное изменение в общий модуль, отвечающий за подключение внешних обработок (обычно это ДополнительныеОтчетыИОбработки).
Найдем функцию, где происходит создание объекта внешней обработки, и добавим условие:
// В общем модуле ДополнительныеОтчетыИОбработки
Функция ПолучитьОбъектВнешнейОбработки(Ссылка) Экспорт
// ВРЕМЕННЫЙ КОД ДЛЯ ОТЛАДКИ
Если Ссылка.Наименование = "МояПечатнаяФорма" Тогда
Возврат ВнешниеОбработки.Создать("C:\Dev\MyPrintForm.epf", Ложь);
КонецЕсли;
// ... штатный код ...
КонецФункции
Проанализируем преимущество: теперь система при попытке напечатать документ будет брать файл не из справочника, а напрямую с вашего жесткого диска. Вы можете открыть этот же файл в конфигураторе, поставить точки останова, и они будут срабатывать при каждом интерактивном вызове из формы документа. Важно: не забудьте удалить этот код перед обновлением рабочей базы.
Часто программисты сталкиваются с тем, что даже при открытии обработки через «Файл — Открыть» точки останова в модуле объекта не срабатывают. Разберем причину: код модуля объекта печатной формы всегда выполняется на сервере. Если сервер 1С:Предприятия запущен без ключа -debug, отладка серверных вызовов будет недоступна.
Проверим настройки сервера:
-debug.Проанализируем еще один важный нюанс. Внешние печатные формы по умолчанию регистрируются в безопасном режиме. В этом режиме 1С блокирует работу с файловой системой, COM-объектами и некоторыми другими функциями. Если ваша форма работает при открытии через «Файл — Открыть», но выдает ошибки после загрузки в систему, причина именно в этом. Для отладки таких ситуаций временно установите флаг «Безопасный режим» в значение Ложь в карточке дополнительной обработки в интерфейсе программы.
Подведем итог: наиболее универсальным методом считается создание внутренней формы отладки (Метод 1). Он позволяет сохранить чистоту кода и дает возможность быстро вносить изменения. Для тех, кто ценит время и работает с расширениями, рекомендуется реализовать перехват (Метод 3) через расширение конфигурации, чтобы не менять типовой код БСП. Помните, что качественная отладка — это 90% успеха при разработке сложных печатных форм с использованием Запросов и временных таблиц.