При разработке автоматизированных рабочих мест (АРМ) и специализированных обработок часто возникает необходимость распечатать документ с использованием внешней печатной формы (ВПФ), зарегистрированной в справочнике ДополнительныеОтчетыИОбработки. Нередко разработчики сталкиваются с ситуацией, когда при попытке вызова экспортной процедуры печати платформа генерирует исключение: «Метод объекта печать не обнаружен», хотя сама внешняя обработка успешно работает из типовой формы документа.
Разберем детально, почему возникает данная ошибка и какими способами можно программно запустить формирование внешней печатной формы.
Проанализируем основные технические причины, приводящие к сбою при попытке программного вызова:
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначения) Экспорт. Если вызвать метод без аргументов через ОбрОбъект.Печать(), платформа 1С выдаст ошибку отсутствия метода, так как ищет процедуру с нулевым количеством параметров.ВнешниеОбработки.Создать(...) создает объект типа ОбработкаОбъект и предоставляет доступ исключительно к экспортным процедурам и функциям модуля объекта. Если команда печати в ВПФ настроена как клиентская и процедура Печать размещена в модуле основной формы обработки, вызов через объект созданной обработки не сработает.Процедура (без возврата значения), конструкция вида ТаблДок = ОбрОбъект.Печать(...) приведет к ошибке выполнения.ВнешниеОбработки.Создать(ПутьКФайлу) по умолчанию включается безопасный режим, который блокирует создание COM-объектов (например, Word.Application) и работу с файловой системой.Если внешняя печатная форма формирует офисный документ (например, макет Word через COM-объект) непосредственно на клиенте, процедура печати размещается в модуле формы. В этом случае вызов необходимо выполнять через получение формы обработки.
Рассмотрим пример правильного вызова на стороне клиента:
// Подключаем внешнюю обработку во временном каталоге
ИмяОбработки = ВнешниеОбработки.Подключить(ИмяВременногоФайла, , Ложь);
// Получаем основную форму подключенной обработки
ФормаВПФ = ПолучитьФорму("ВнешняяОбработка." + ИмяОбработки + ".Форма");
// Формируем массив объектов назначения
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СсылкаНаДокумент);
// Вызываем экспортную процедуру формы с передачей требуемых параметров
ФормаВПФ.Печать("ИдентификаторКоманды", МассивОбъектов);
Если печатная форма формирует табличный документ на сервере, процедура Печать должна быть объявлена как экспортная в модуле объекта внешней обработки. Обратите внимание на точную передачу всех параметров, объявленных в процедуре.
Посмотрим на пример кода в обработке АРМ на сервере:
// Получаем двоичные данные из справочника
ДвоичныеДанные = СсылкаНаВПФ.ХранилищеОбработки.Получить();
ИмяВременногоФайла = КаталогВременныхФайлов() + "ВнешняяПечать.epf";
ДвоичныеДанные.Записать(ИмяВременногоФайла);
// Создаем объект внешней обработки с отключением безопасного режима при необходимости
ОбрОбъект = ВнешниеОбработки.Создать(ИмяВременногоФайла, Ложь);
// Подготавливаем параметры для передачи
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СсылкаНаДокумент);
ИдентификаторКоманды = "Печать";
// Вызываем процедуру из модуля объекта
ОбрОбъект.Печать(ИдентификаторКоманды, МассивОбъектов);
В конфигурациях на базе Библиотеки стандартных подсистем (БСП) наиболее надежным решением является вызов через штатные механизмы подсистемы дополнительных отчетов и обработок. Это исключает ручную работу с временными файлами и корректно учитывает контекст выполнения.
Разберем вызов команды печати через БСП на клиенте:
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СсылкаНаДокумент);
ПараметрыВыполнения = Новый Структура;
ПараметрыВыполнения.Вставить("ДополнительнаяОбработкаСсылка", СсылкаНаВПФ);
ПараметрыВыполнения.Вставить("ИдентификаторКоманды", "ИдентификаторПечатнойФормы");
ПараметрыВыполнения.Вставить("ОбъектыНазначения", МассивОбъектов);
// Штатный вызов команды подсистемы БСП
ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьКоманду("ИдентификаторПечатнойФормы", ПараметрыВыполнения);
Такой подход обеспечивает корректную обработку прав доступа, безопасного режима и контекста выполнения (клиент/сервер), принятых в конфигурации.