Как программно вызвать внешнюю печатную форму из обработки или АРМ в 1С

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

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

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

Причины возникновения ошибки «Метод объекта не обнаружен»

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

  1. Несовпадение количества параметров (сигнатуры метода). В соответствии со стандартами БСП экспортная процедура печати обычно объявляется с обязательными параметрами: Процедура Печать(ИдентификаторКоманды, ОбъектыНазначения) Экспорт. Если вызвать метод без аргументов через ОбрОбъект.Печать(), платформа 1С выдаст ошибку отсутствия метода, так как ищет процедуру с нулевым количеством параметров.
  2. Несовпадение контекста выполнения (Модуль объекта vs Модуль формы). Функция ВнешниеОбработки.Создать(...) создает объект типа ОбработкаОбъект и предоставляет доступ исключительно к экспортным процедурам и функциям модуля объекта. Если команда печати в ВПФ настроена как клиентская и процедура Печать размещена в модуле основной формы обработки, вызов через объект созданной обработки не сработает.
  3. Использование процедуры в выражении получения значения. Если метод объявлен как Процедура (без возврата значения), конструкция вида ТаблДок = ОбрОбъект.Печать(...) приведет к ошибке выполнения.
  4. Безопасный режим платформы. При загрузке внешней обработки методом ВнешниеОбработки.Создать(ПутьКФайлу) по умолчанию включается безопасный режим, который блокирует создание COM-объектов (например, Word.Application) и работу с файловой системой.

Вариант 1. Вызов клиентской печатной формы через получение формы обработки

Если внешняя печатная форма формирует офисный документ (например, макет Word через COM-объект) непосредственно на клиенте, процедура печати размещается в модуле формы. В этом случае вызов необходимо выполнять через получение формы обработки.

Рассмотрим пример правильного вызова на стороне клиента:


// Подключаем внешнюю обработку во временном каталоге
ИмяОбработки = ВнешниеОбработки.Подключить(ИмяВременногоФайла, , Ложь);

// Получаем основную форму подключенной обработки
ФормаВПФ = ПолучитьФорму("ВнешняяОбработка." + ИмяОбработки + ".Форма");

// Формируем массив объектов назначения
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СсылкаНаДокумент);

// Вызываем экспортную процедуру формы с передачей требуемых параметров
ФормаВПФ.Печать("ИдентификаторКоманды", МассивОбъектов);

Вариант 2. Вызов серверной процедуры печати из модуля объекта

Если печатная форма формирует табличный документ на сервере, процедура Печать должна быть объявлена как экспортная в модуле объекта внешней обработки. Обратите внимание на точную передачу всех параметров, объявленных в процедуре.

Посмотрим на пример кода в обработке АРМ на сервере:


// Получаем двоичные данные из справочника
ДвоичныеДанные = СсылкаНаВПФ.ХранилищеОбработки.Получить();
ИмяВременногоФайла = КаталогВременныхФайлов() + "ВнешняяПечать.epf";
ДвоичныеДанные.Записать(ИмяВременногоФайла);

// Создаем объект внешней обработки с отключением безопасного режима при необходимости
ОбрОбъект = ВнешниеОбработки.Создать(ИмяВременногоФайла, Ложь);

// Подготавливаем параметры для передачи
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СсылкаНаДокумент);
ИдентификаторКоманды = "Печать";

// Вызываем процедуру из модуля объекта
ОбрОбъект.Печать(ИдентификаторКоманды, МассивОбъектов);

Вариант 3. Использование штатных механизмов БСП

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

Разберем вызов команды печати через БСП на клиенте:


МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СсылкаНаДокумент);

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

// Штатный вызов команды подсистемы БСП
ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьКоманду("ИдентификаторПечатнойФормы", ПараметрыВыполнения);

Такой подход обеспечивает корректную обработку прав доступа, безопасного режима и контекста выполнения (клиент/сервер), принятых в конфигурации.

← На главную