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

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

В процессе разработки часто возникает необходимость обратиться к макету (например, табличному документу или двоичным данным), который хранится внутри внешней обработки. Чтобы упростить создание таких инструментов, можно использовать шаблон внешней обработки с историей изменений и сохранением параметров, который поможет структурировать проект. Рассмотрим подробнее программную работу с макетами и ресурсами внешних обработок в 1С 8.3 в зависимости от контекста выполнения кода — в модуле объекта или в модуле формы.

Понимание контекста выполнения

Прежде всего, проанализируем, где именно мы пытаемся получить макет. В 1С:Предприятие методы доступа к макетам различаются для клиентского и серверного кода, а также для модуля объекта обработки и модуля управляемой формы.

Важно помнить, что метод ПолучитьМакет доступен только на сервере (или в толстом клиенте). На тонком клиенте напрямую получить макет невозможно, потребуется серверный вызов, учитывая особенности работы с макетами на тонком клиенте и сервере.

Получение макета в модуле объекта

Если код выполняется непосредственно в модуле объекта внешней обработки, задача решается наиболее просто. Разберем этот вариант.

Внутри модуля объекта мы можем использовать метод контекста ПолучитьМакет, обращаясь к нему напрямую или через ЭтотОбъект.


// Пример кода в модуле объекта обработки
Макет = ПолучитьМакет("ИмяВашегоМакета");
// Далее работаем с макетом, например, выводим область

Получение макета в модуле формы

Ситуация усложняется, когда мы работаем в модуле управляемой формы. Форма не содержит в себе макеты самой обработки напрямую. Посмотрим на способы решения этой проблемы.

Чтобы добраться до макета из формы, нам необходимо сначала получить программный объект обработки на сервере. Для этого изучите использование метода РеквизитФормыВЗначение в управляемом приложении. При разработке и отладке таких форм может быть полезна универсальная форма отладки для внешней обработки печатных форм, которая упрощает тестирование взаимодействия с объектом.

Разберем по шагам алгоритм действий в серверной процедуре формы:

  1. Конвертируем основной реквизит формы (обычно это Объект) в реальный объект обработки.
  2. У полученного объекта вызываем метод получения макета.

Посмотрим на пример кода:


&НаСервере
Процедура ПечатьНаСервере()
    
    // Преобразуем данные формы в объект обработки
    ОбъектОбработки = РеквизитФормыВЗначение("Объект");
    
    // Теперь мы можем получить макет
    Макет = ОбъектОбработки.ПолучитьМакет("МакетПечатнойФормы");
    
    // Пример работы с табличным документом
    ТабДок = Новый ТабличныйДокумент;
    Область = Макет.ПолучитьОбласть("Заголовок");
    ТабДок.Вывести(Область);
    
КонецПроцедуры

Особенности работы с внешними обработками, подключенными через файл

Иногда требуется получить макет из внешней обработки, которая не открыта в данный момент, а просто лежит на диске в виде файла .epf. Проанализируем, как поступить в этом случае. Если вы работаете с исходниками в XML, вам может потребоваться конвертер обработок XML в EPF, а для более глубокого анализа структуры файлов пригодится распаковщик конфигураций и epf-файлов.

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


&НаСервере
Функция ПолучитьМакетИзФайла(ПутьКФайлу, ИмяМакета)
    
    // Создаем экземпляр внешней обработки по пути к файлу
    // Важно: второй параметр Ложь указывает на безопасный режим (по необходимости)
    ВнешняяОбработка = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);
    
    // Получаем макет
    Возврат ВнешняяОбработка.ПолучитьМакет(ИмяМакета);
    
КонецФункции

Важные нюансы

Обратите внимание на следующие моменты:

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

← На главную