Разработка и Конфигурация · 11 мин
Как открыть внешнюю печатную форму программно в 1С
Как программно открыть и подключить внешнюю печатную форму в 1С: ВнешниеОбработки.Создать, БСП, дополнительные отчеты и обработки, типовые ошибки и примеры кода.
Внешняя печатная форма в 1С — это файл с расширением .epf, который содержит макет и алгоритм формирования печатного документа (счета, акта, накладной). Открыть её программно требуется, когда нужно напечатать документ из своей обработки, обойти стандартную кнопку «Печать» или сформировать табличный документ без показа пользователю.
Способ открытия зависит от того, как подключена форма: как файл на диске или через справочник «Дополнительные отчеты и обработки» в конфигурациях на Библиотеке стандартных подсистем (БСП). В первом случае используется менеджер ВнешниеОбработки, во втором — программный интерфейс БСП. Ниже разобраны оба варианта с готовым кодом.
Как открыть файл .epf напрямую с диска
Базовый сценарий — файл печатной формы лежит в известном каталоге, а база работает в файловом режиме или сервер имеет доступ к этому пути. Для создания объекта обработки используют метод ВнешниеОбработки.Создать(), для открытия её формы — ВнешниеОбработки.ПолучитьФорму().
ПутьКФайлу = "D:\ПечатныеФормы\СчетНаОплату.epf";
// Вариант 1: открыть форму обработки пользователю
ФормаОбработки = ВнешниеОбработки.ПолучитьФорму(ПутьКФайлу);
ФормаОбработки.Открыть();
// Вариант 2: получить объект и вызвать экспортную функцию печати
Обработка = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);
ТабДок = Обработка.Печать(ДокументСсылка);
ТабДок.Показать("Счет на оплату");
Второй параметр метода Создать() отвечает за использование безопасного режима: Ложь — обычный режим, Истина — безопасный, в котором ограничены операции с файловой системой и COM-объектами. Для печатных форм из недоверенных источников безопасный режим обязателен.
Как вызвать печать без открытия формы обработки
Часто форма обработки не нужна вовсе — требуется только табличный документ. Внешние печатные формы, написанные по стандарту БСП, содержат экспортную функцию Печать() или СформироватьПечатнуюФорму() в модуле объекта. Точное имя и состав параметров смотрят в модуле конкретного .epf — единого обязательного имени нет.
Типовой шаблон вызова выглядит так: создаётся объект обработки, в него передаётся ссылка на документ или массив ссылок, на выходе получают ТабличныйДокумент, который показывают, отправляют на принтер или сохраняют в PDF.
Обработка = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(ДокументСсылка);
ТабДок = Обработка.Печать(МассивОбъектов);
Если ТипЗнч(ТабДок) = Тип("ТабличныйДокумент") Тогда
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.Использовать);
КонецЕсли;
Проверка типа результата обязательна: некоторые формы возвращают структуру с несколькими табличными документами или коллекцию значений, и попытка сразу вызвать Показать() завершится ошибкой.
Как открыть форму, подключенную через «Дополнительные отчеты и обработки»
В конфигурациях на БСП (УТ 11, ERP, БП 3.0, ЗУП 3.1) внешние печатные формы регистрируются в справочнике «Дополнительные отчеты и обработки», а сам файл хранится в базе в виде двоичных данных. Путь на диске в этом случае отсутствует, и ВнешниеОбработки.Создать() напрямую не применить.
Для подключения используется программный интерфейс БСП. Сначала получают ссылку на элемент справочника, затем вызывают подключение, которое возвращает имя подключенной обработки в менеджере внешних обработок.
ДопОбработка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(
"Счет на оплату (внешний)");
ИмяОбработки = ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(ДопОбработка);
// Теперь можно работать через менеджер по полученному имени
ФормаОбработки = ВнешниеОбработки.ПолучитьФорму(ИмяОбработки + ".Форма");
ФормаОбработки.Открыть();
Для выполнения команды печати БСП предоставляет метод ДополнительныеОтчетыИОбработки.ВыполнитьКоманду(), который сам находит команду в данных обработки и вызывает её. Это предпочтительный путь, если нужно повторить поведение кнопки «Печать» из интерфейса.
Как передать параметры и получить результат
У формы внешней обработки, открываемой через ПолучитьФорму(), можно задействовать структуру параметров — она попадёт в обработчик ПриСозданииНаСервере() или ПриОткрытии() формы. Так передают ссылку на документ, вариант макета, признак вывода на печать без предпросмотра.
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ОбъектПечати", ДокументСсылка);
ПараметрыФормы.Вставить("СразуНаПринтер", Истина);
ФормаОбработки = ВнешниеОбработки.ПолучитьФорму(ПутьКФайлу, "Форма", ПараметрыФормы);
ФормаОбработки.Открыть();
Если форма должна вернуть результат (например, выбранный вариант подписанта), открывайте её в режиме блокирования через ОткрытьМодально() или используйте механизм оповещений: в вызывающем коде описывается ОписаниеОповещения, а форма при закрытии передаёт значение через Закрыть(Результат).
- 1Определите, как подключена форма: файл на диске или справочник дополнительных обработок БСП
- 2Для файла используйте ВнешниеОбработки.Создать или ПолучитьФорму, для БСП — ПодключитьВнешнююОбработку
- 3Посмотрите в модуле .epf имя экспортной функции печати и состав её параметров
- 4Передайте ссылку или массив ссылок на документы, получите ТабличныйДокумент
- 5Проверьте тип результата и выведите его: Показать, Напечатать или Записать в PDF
- 6Протестируйте вызов под пользователем с ограниченными правами
Ограничения клиент-серверного режима и прав доступа
Частая причина ошибки «Файл не обнаружен» — обращение к диску по локальному пути в клиент-серверной базе. Код, выполняемый на сервере 1С, ищет файл на диске сервера, а не на компьютере пользователя. Решения: разместить файл в сетевом каталоге, доступном серверу, хранить обработку в справочнике дополнительных обработок или передавать двоичные данные файла с клиента на сервер через временное хранилище.
Второе ограничение — права. У пользователя должно быть право «Интерактивное открытие внешних обработок» (для файлового варианта) и доступ к справочнику дополнительных отчетов и обработок (для БСП). При недостатке прав платформа выдаёт ошибку нарушения прав доступа либо молча не открывает форму в зависимости от места вызова.
Третий момент — безопасный режим. В файловых базах при отключенной защите от опасных действий платформа может запросить у пользователя подтверждение открытия внешнего файла. Программно это подтверждение обойти нельзя, и это осознанное ограничение безопасности.
Сравнение вариантов
Подходит для файловой базы и отладки. Ограничение: путь должен быть доступен той стороне, где выполняется код
Когда нужно открыть именно форму обработки пользователю. Требует интерактивного режима
Для типовых конфигураций с зарегистрированными формами. Работает в клиент-сервере, но только на сервере
Когда нужно повторить штатную команду печати из справочника дополнительных обработок без ручного разбора модуля
Типичные ошибки и как их проверить
Ошибка «Метод объекта не обнаружен (Печать)» означает, что в модуле .epf функция названа иначе или не объявлена экспортной. Откройте файл в конфигураторе и проверьте наличие ключевого слова Экспорт у нужной функции.
Ошибка «Ошибка при вызове конструктора» при Создать() обычно указывает на повреждённый файл, несовместимость версии платформы или попытку создать обработку в безопасном режиме, где это запрещено. Проверьте, открывается ли файл интерактивно через «Файл → Открыть».
Если форма открывается, но печатает пустой документ, чаще всего причина в параметрах: форма ожидает массив ссылок, а получает одиночную ссылку, или ожидает структуру с конкретными ключами. Сверьтесь с модулем обработки — там видно, какой тип параметра разбирается в функции печати.
Как проверить результат и отладить вызов
Минимальная проверка — вывести полученный табличный документ на экран и сверить его с печатью той же формы через стандартную кнопку. Данные, количество страниц и итоги должны совпадать. Расхождение говорит о разных параметрах вызова или о том, что штатная печать использует другую команду.
Для отладки внешней печатной формы откройте её в конфигураторе, поставьте точку останова в функции печати и запустите отладку предприятия — платформа остановится внутри .epf так же, как внутри конфигурации. Это быстрее, чем гадать по косвенным признакам.
Как проверить результат
Содержит данные документа, совпадает со штатной печатью
Пустой документ или данные другого документа — неверные параметры вызова
ТабличныйДокумент или ожидаемая структура
Неопределено — функция не вернула результат или вызвана не та команда
Форма открывается без ошибок под целевой ролью
Ошибка нарушения прав — нужно выдать доступ или вынести вызов в привилегированный модуль
Часто задаваемые вопросы
Можно ли открыть внешнюю печатную форму на веб-клиенте?
Да, но с ограничениями. Прямой путь к файлу на клиенте недоступен, поэтому файл либо хранят в базе (справочник дополнительных обработок БСП), либо передают на сервер через временное хранилище, где и создают объект обработки.
Чем отличается Создать() от ПолучитьФорму()?
Создать() возвращает объект обработки — его используют для вызова экспортных функций модуля объекта, например печати. ПолучитьФорму() возвращает форму обработки для показа пользователю. Для формирования табличного документа без интерфейса форма не нужна.
Как программно напечатать без окна предпросмотра?
Получите табличный документ через функцию печати обработки и вызовите метод Напечатать() с параметром РежимИспользованияДиалогаПечати.НеИспользовать. Документ уйдёт на принтер по умолчанию без диалогов.
Почему платформа просит подтверждение при открытии .epf?
Это защита от опасных действий: платформа предупреждает о запуске внешнего кода. Программно диалог не отключается. Варианты — использовать зарегистрированные обработки БСП или настроить профиль безопасности в кластере для доверенного каталога.
Как узнать, какие параметры ждёт функция печати конкретной формы?
Откройте .epf в конфигураторе и посмотрите модуль объекта: сигнатура экспортной функции и разбор входящих параметров видны в коде. Стандарт БСП обычно предполагает массив ссылок на документы, но конкретная реализация может отличаться.
Можно ли сохранить результат в PDF программно?
Да. Полученный табличный документ сохраняется методом Записать() с указанием типа файла ТипФайлаТабличногоДокумента.PDF. Путь записи должен быть доступен той стороне (клиенту или серверу), где выполняется код.
Что важно запомнить
Файл .epf открывают через ВнешниеОбработки.Создать или ПолучитьФорму, зарегистрированную в БСП форму — через ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку. Проверяйте тип результата, права пользователя и доступность пути к файлу на той стороне, где выполняется код. Недоверенные обработки открывайте только в безопасном режиме.