Как получить макет из внешней обработки в 1С?

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

Рассмотрим распространенную задачу при разработке внешних печатных форм и обработок: как программно обратиться к макету, который находится внутри самого файла внешней обработки. Эта задача часто вызывает вопросы, так как контекст работы (сервер/клиент, модуль объекта/формы) влияет на выбор правильного метода.

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

Сценарий 1: Получение макета в модуле объекта обработки

Если программный код выполняется непосредственно в модуле объекта самой внешней обработки (например, при формировании печатной формы), обращение к макету выполняется наиболее простым способом.

В этом случае система уже "знает" о контексте текущего объекта. Нам достаточно использовать встроенную функцию ПолучитьМакет. Посмотрим на пример кода:


// В модуле объекта
Макет = ПолучитьМакет("ПФ_MXL_МойМакет");

Если же код выполняется в модуле, где прямой контекст недоступен, но доступна переменная, содержащая объект обработки (обычно именуемая ЭтотОбъект), используем следующий подход:


// Если мы внутри модуля объекта, но хотим явно указать контекст
Макет = ЭтотОбъект.ПолучитьМакет("ПФ_MXL_МойМакет");

Сценарий 2: Получение макета из файла на диске

Часто возникает ситуация, когда необходимо получить макет из файла внешней обработки (.epf или .erf), который лежит в определенной папке на диске сервера или клиента. Для этого нам не нужно открывать форму обработки, достаточно создать её объектный контекст.

Рассмотрим алгоритм действий:

  1. Определяем полный путь к файлу.
  2. Используем менеджер ВнешниеОбработки (или ВнешниеОтчеты).
  3. Создаем экземпляр обработки и получаем макет.

Изучим программный код для этого решения:


ПутьКФайлу = "C:\Exchange\MyProcessor.epf";

// Создаем объект внешней обработки
Обработка = ВнешниеОбработки.Создать(ПутьКФайлу);

// Получаем нужный макет по имени
Макет = Обработка.ПолучитьМакет("МакетЗагрузки");

Важно: Метод ВнешниеОбработки.Создать() безопаснее выполнять на сервере. При работе в веб-клиенте доступ к локальной файловой системе будет ограничен.

Сценарий 3: Работа через БСП (Дополнительные отчеты и обработки)

Если внешняя обработка хранится в справочнике ДополнительныеОтчетыИОбработки (библиотека БСП), файл физически находится в хранилище значений информационной базы. Чтобы получить макет, нам потребуется сначала "подключить" эту обработку.

Разберем этот процесс по шагам:

  1. Получаем ссылку на элемент справочника дополнительных обработок.
  2. Используем метод ВнешниеОбработки.Подключить() для регистрации обработки во временном хранилище.
  3. Создаем объект через менеджер внешних обработок, используя полученное имя подключения.

Проанализируем пример реализации:


// СсылкаНаОбработку - ссылка на элемент справочника ДополнительныеОтчетыИОбработки

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

// 2. Создаем объект
ВнешняяОбработкаОбъект = ВнешниеОбработки.Создать(ИмяОбработки);

// 3. Получаем макет
Макет = ВнешняяОбработкаОбъект.ПолучитьМакет("ПФ_MXL_Заказ");

Возможные ошибки и нюансы

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

Используя эти методы, вы сможете гибко управлять доступом к данным макетов внешних модулей в любой конфигурации на базе 1С:Предприятие 8.

← На главную