Как программно сохранить макет отчета в файл и использовать его для формирования отчета?

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

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

Алгоритм работы с внешним макетом

Чтобы успешно использовать внешний файл ТабличныйДокумент, нам необходимо пройти путь от получения двоичных данных до инициализации объекта в памяти сервера. Основная идея заключается в том, что мы храним файл в формате MXL, который является родным для платформы 1С.

Разберем основные шаги реализации:

  1. Получение данных макета (из справочника, временного хранилища или макетов метаданных).
  2. Запись двоичных данных во временный файл на диске сервера.
  3. Чтение файла в объект ТабличныйДокумент.
  4. Заполнение параметров и областей стандартными средствами 1С.

Реализация на стороне сервера

Для выполнения этой задачи мы воспользуемся методом ПолучитьИзВременногоХранилища для извлечения данных и методом Прочитать() для загрузки макета. Важно помнить, что все операции с файловой системой при работе в клиент-серверном варианте должны выполняться на стороне сервера.

Посмотрим на пример функции, которая выполняет первичную загрузку макета:


&НаСервере
Функция СформироватьТабличныйДокумент(АдресМакета)
    // Извлекаем двоичные данные из временного хранилища
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресМакета);
    
    // Генерируем уникальное имя для временного файла
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("mxl");
    
    // Записываем данные на диск
    ДвоичныеДанные.Записать(ИмяВременногоФайла);
    
    // Создаем объект и считываем структуру макета
    Макет = Новый ТабличныйДокумент;
    Макет.Прочитать(ИмяВременногоФайла);
    
    // Теперь макет готов к заполнению данными
    Возврат Макет;
КонецФункции

Работа с областями и параметрами

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

После того как метод Прочитать() выполнил свою задачу, объект ТабличныйДокумент содержит все именованные области и вложенные в них параметры. Мы можем работать с ними привычным способом, обращаясь к свойству Параметры областей макета.

Рассмотрим структуру заполнения:


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

// Заполняем параметры, определенные в дизайнере 1С
ОбластьСтроки.Параметры.Дата = ТекущаяДата();
ОбластьСтроки.Параметры.Сумма = 1000;

// Выводим заполненную область в итоговый документ
ТабличныйДокумент.Вывести(ОбластьСтроки);

Важные рекомендации при работе с внешними макетами

При проектировании системы с внешними макетами следует учитывать несколько факторов:

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

← На главную