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