Рассмотрим распространенную задачу при разработке внешних печатных форм и обработок: как программно обратиться к макету, который находится внутри самого файла внешней обработки. Эта задача часто вызывает вопросы, так как контекст работы (сервер/клиент, модуль объекта/формы) влияет на выбор правильного метода.
Разберем основные сценарии и способы решения проблемы. Проанализируем ситуации, когда обработка запускается как файл с диска, и когда она подключена через механизм дополнительных отчетов и обработок.
Если программный код выполняется непосредственно в модуле объекта самой внешней обработки (например, при формировании печатной формы), обращение к макету выполняется наиболее простым способом.
В этом случае система уже "знает" о контексте текущего объекта. Нам достаточно использовать встроенную функцию ПолучитьМакет. Посмотрим на пример кода:
// В модуле объекта
Макет = ПолучитьМакет("ПФ_MXL_МойМакет");
Если же код выполняется в модуле, где прямой контекст недоступен, но доступна переменная, содержащая объект обработки (обычно именуемая ЭтотОбъект), используем следующий подход:
// Если мы внутри модуля объекта, но хотим явно указать контекст
Макет = ЭтотОбъект.ПолучитьМакет("ПФ_MXL_МойМакет");
Часто возникает ситуация, когда необходимо получить макет из файла внешней обработки (.epf или .erf), который лежит в определенной папке на диске сервера или клиента. Для этого нам не нужно открывать форму обработки, достаточно создать её объектный контекст.
Рассмотрим алгоритм действий:
ВнешниеОбработки (или ВнешниеОтчеты).Изучим программный код для этого решения:
ПутьКФайлу = "C:\Exchange\MyProcessor.epf";
// Создаем объект внешней обработки
Обработка = ВнешниеОбработки.Создать(ПутьКФайлу);
// Получаем нужный макет по имени
Макет = Обработка.ПолучитьМакет("МакетЗагрузки");
Важно: Метод ВнешниеОбработки.Создать() безопаснее выполнять на сервере. При работе в веб-клиенте доступ к локальной файловой системе будет ограничен.
Если внешняя обработка хранится в справочнике ДополнительныеОтчетыИОбработки (библиотека БСП), файл физически находится в хранилище значений информационной базы. Чтобы получить макет, нам потребуется сначала "подключить" эту обработку.
Разберем этот процесс по шагам:
ВнешниеОбработки.Подключить() для регистрации обработки во временном хранилище.Проанализируем пример реализации:
// СсылкаНаОбработку - ссылка на элемент справочника ДополнительныеОтчетыИОбработки
// 1. Подключаем обработку (работа с двоичными данными)
// Второй параметр - Ложь (безопасный режим), зависит от ваших задач
ИмяОбработки = ВнешниеОбработки.Подключить(СсылкаНаОбработку, Ложь);
// 2. Создаем объект
ВнешняяОбработкаОбъект = ВнешниеОбработки.Создать(ИмяОбработки);
// 3. Получаем макет
Макет = ВнешняяОбработкаОбъект.ПолучитьМакет("ПФ_MXL_Заказ");
При работе с методами получения макетов обратите внимание на следующие моменты:
ПолучитьМакет возвращает разные типы объектов в зависимости от типа макета в конфигураторе (Табличный документ, Двоичные данные, Схема компоновки данных). Всегда проверяйте тип возвращаемого значения, если код должен быть универсальным.Используя эти методы, вы сможете гибко управлять доступом к данным макетов внешних модулей в любой конфигурации на базе 1С:Предприятие 8.