К статье
Практический материал

Разработка и Конфигурация · 12 мин

Как сохранить макет в файл в 1С

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

Макет в 1С — это объект конфигурации, в котором хранится шаблон: табличный документ, текст, HTML, схема компоновки данных или двоичные данные (например, картинка или внешняя компонента). Потребность сохранить макет в файл возникает при переносе печатных форм между базами, при редактировании шаблона во внешнем редакторе, при резервном копировании доработанных макетов и при отладке выгрузок.

Способ выгрузки зависит от того, где находится макет и какой у него тип. Макет из конфигуратора выгружается через стандартное меню «Файл — Сохранить как» или через выгрузку конфигурации в файлы. Макет, хранящийся в данных (например, в справочнике файлов или в регистре пользовательских макетов), извлекается программно. Ниже разобраны все основные сценарии с точными действиями и кодом.

Какие бывают макеты и почему это важно перед сохранением

Перед выгрузкой нужно понять тип макета, потому что от него зависит и формат файла, и доступные методы. В дереве конфигурации макеты находятся в ветке «Общие — Макеты», а также внутри конкретных объектов: справочников, документов, отчетов, обработок.

Основные типы макетов:

  • Табличный документ — шаблоны печатных форм, сохраняются в формате .mxl;
  • Текстовый документ — шаблоны писем, скрипты, выгружаются как .txt;
  • Двоичные данные — картинки, архивы, внешние компоненты, сохраняются в исходном бинарном виде;
  • Схема компоновки данных — выгружается как XML;
  • HTML-документ, ActiveDocument — сохраняются как .html и в соответствующих форматах;
  • Географическая схема, графическая схема, макет оформления — специализированные форматы платформы.

Сохранение макета из конфигуратора вручную

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

Для табличного макета порядок такой: откройте конфигуратор, разверните нужный объект (например, «Общие — Макеты» или макеты конкретного документа), дважды щелкните по макету. Откроется редактор табличного документа. Далее выберите в главном меню «Файл — Сохранить как», укажите папку и имя файла. Платформа предложит формат .mxl — это родной формат табличного документа 1С.

Текстовый макет сохраняется аналогично: открываете его, затем «Файл — Сохранить как» и выбираете расширение .txt. Для двоичного макета (например, картинки) при открытии платформа покажет содержимое, а сохранение выполняется через то же меню с исходным расширением файла.

Выгрузка табличного макета вручную
  1. 1
    Откройте конфигуратор и найдите макет в дереве конфигурации
  2. 2
    Дважды щелкните по макету, чтобы открыть редактор
  3. 3
    Выберите Файл → Сохранить как и укажите папку и имя
  4. 4
    Убедитесь, что формат файла — .mxl (для табличного документа)
  5. 5
    Откройте сохраненный файл двойным щелчком и проверьте, что макет отображается корректно

Обратный процесс — загрузка измененного файла обратно — выполняется через «Файл — Открыть» в открытом редакторе макета либо через «Загрузить» в окне редактирования макета. После замены макета конфигурацию нужно сохранить и обновить.

Выгрузка макетов через выгрузку конфигурации в файлы

Если нужно сохранить не один макет, а все сразу — например, для переноса в другую базу или для версионирования в Git — используйте пакетную выгрузку. В конфигураторе выберите «Конфигурация — Выгрузить конфигурацию в файлы», укажите каталог и при необходимости включите иерархический формат выгрузки.

После выгрузки каждый макет окажется в отдельном файле: в структуре каталогов по пути вида CommonTemplates\ИмяМакета\Ext\Template.xml или в виде файла .mxl рядом с XML-описанием — зависит от формата выгрузки (обычный или EDT-совместимый). Двоичные макеты выгружаются в исходном виде, табличные — как .mxl.

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

Программное сохранение макета в файл

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

Для табличного макета код выглядит так:

ТабДок = Отчеты.МойОтчет.ПолучитьМакет("МакетПечати");

ТабДок.Записать("C:\Temp\МакетПечати.mxl", ТипФайлаТабличногоДокумента.MXL);

Метод Записать() табличного документа поддерживает и другие форматы: MXL, XLSX, PDF, HTML, ODS, TXT. То есть заодно можно сохранить макет сразу в Excel или PDF, если это нужно для передачи тем, у кого нет 1С.

Для двоичного макета (картинки, архива, компоненты) полученное значение имеет тип «ДвоичныеДанные», и у него есть собственный метод записи:

Данные = ПолучитьОбщийМакет("ВнешняяКомпонента");

Данные.Записать("C:\Temp\Component.zip");

Текстовый макет возвращается как объект «ТекстовыйДокумент», который записывается методом Записать() с указанием пути и кодировки. Схема компоновки данных сериализуется в XML через СериализаторXDTO — это нужно редко, в основном при разработке инструментов сравнения отчетов.

bsl
// Универсальная выгрузка табличного макета в файл
ТабДок = Справочники.Номенклатура.ПолучитьМакет("МакетКарточки");
ТабДок.Записать("C:\\Temp\\МакетКарточки.mxl", ТипФайлаТабличногоДокумента.MXL);

Особенности работы на сервере и в веб-клиенте

Частая причина «не сохраняется файл» — код выполняется на сервере, а путь указан как на клиентском компьютере. В серверном вызове ТабДок.Записать("C:\Temp\...") создаст файл на диске сервера 1С, а пользователь его там не найдет.

Правильный шаблон для клиент-серверной работы: записать файл во временное хранилище на сервере, а затем передать на клиент и сохранить через ПолучитьФайл() или диалог сохранения:

// На сервере

ИмяВременногоФайла = ПолучитьИмяВременногоФайла("mxl");

ТабДок.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.MXL);

Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла));

// На клиенте

ПолучитьФайл(Адрес, "Макет.mxl", Истина);

В веб-клиенте прямой доступ к файловой системе ограничен: сохранение всегда идет через диалог браузера, поэтому автоматическая «тихая» выгрузка на диск пользователя невозможна — только с подтверждением пользователя.

Как сохранить макет, хранящийся в данных базы

Не все макеты живут в конфигурации. В типовых решениях пользовательские печатные формы и редактируемые макеты часто хранятся в базе: в справочниках файлов, в регистрах сведений (например, «Пользовательские макеты печати» в конфигурациях на БСП) или в дополнительных отчетах и обработках.

Для таких макетов логика другая: сначала найти элемент, в котором хранится макет, получить из него двоичные данные (обычно через хранилище значения) и записать в файл:

Выборка = Справочники.ДополнительныеОтчетыИОбработки.Выбрать();

Пока Выборка.Следующий() Цикл

Данные = Выборка.ХранилищеОбработки.Получить();

Если Данные <> Неопределено Тогда

Данные.Записать("C:\Temp\" + Выборка.ИмяФайла);

КонецЕсли;

КонецЦикла;

Конкретные имена справочников и реквизитов зависят от конфигурации — уточните их в структуре метаданных своей базы. Если макет редактировался пользователем в режиме предприятия (например, через «Изменить макет» в форме печати), ищите его именно в регистрах пользовательских макетов, а не в конфигураторе: в дереве конфигурации такой версии не будет.

Маршрут решения

Как выбрать способ выгрузки

Макет в конфигурации, нужен один разОткройте макет в конфигураторе и сохраните через Файл → Сохранить как
Нужны все макеты или версионированиеИспользуйте Конфигурация → Выгрузить конфигурацию в файлы
Выгрузка должна выполняться из пользовательского режима или по расписаниюПишите код: ПолучитьМакет() + Записать(), с передачей файла клиенту через временное хранилище
Макет редактировался пользователем в режиме предприятияИщите его в регистре пользовательских макетов или справочнике файлов и извлекайте из хранилища значения

Проверка результата и типичные ошибки

После сохранения убедитесь, что файл действительно содержит макет, а не пустышку. Для .mxl достаточно открыть файл двойным щелчком — он запустится в 1С, и вы увидите структуру шаблона с областями и параметрами. Для двоичных макетов проверьте размер файла: нулевой размер означает, что данные не были получены (например, хранилище значения вернуло Неопределено).

Контрольные точки

Как проверить результат

Файл .mxl открывается в 1С
Норма

Видны области, параметры и форматирование шаблона

Тревожный признак

Файл не открывается или открывается пустой лист — макет не был получен

Размер двоичного файла
Норма

Размер соответствует ожидаемому содержимому (картинка, архив)

Тревожный признак

Размер 0 байт — хранилище вернуло Неопределено

Файл на компьютере пользователя
Норма

Файл появился в указанной папке пользователя

Тревожный признак

Файл создан на сервере — код выполнялся в серверном контексте без передачи на клиента

Наиболее частые ошибки при сохранении макетов:

Типичные ошибки
01
Запись по клиентскому пути в серверном коде — файл оказывается на сервере, пользователь его не находит
02
Попытка записать двоичный макет методом табличного документа — ошибка несоответствия типов; у двоичных данных свой метод Записать()
03
Сохранение макета из конфигурации, хотя актуальная версия изменена пользователем в базе — выгружается устаревший шаблон
04
Отсутствие расширения работы с файлами в веб-клиенте — диалог сохранения не появляется
05
Запись в каталог без прав на запись — исключение прерывает обработку без понятного сообщения

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

Итог

Что важно запомнить

Тип макета определяет способ сохранения: табличный — через Записать() в .mxl, двоичный — через Записать() двоичных данных. Вручную макет выгружается из конфигуратора через «Сохранить как», массово — через выгрузку конфигурации в файлы. В клиент-серверном режиме файл сначала пишется во временное хранилище, затем передается клиенту. Пользовательские макеты ищите в данных базы, а не в конфигураторе.

Частые вопросы

В каком формате лучше сохранять табличный макет?

Для дальнейшей загрузки обратно в 1С — только .mxl, это родной формат, который корректно открывается редактором макетов. Если файл нужен человеку без 1С, дополнительно сохраните копию в XLSX или PDF, но помните, что при обратной конвертации структура областей и параметров будет потеряна.

Можно ли сохранить макет из режима «Предприятие» без программирования?

Да, если макет открыт как табличный документ (например, при просмотре печатной формы с включенным отображением макета или через стандартную функцию изменения макета в конфигурациях на БСП). В открытом табличном документе доступно «Файл — Сохранить как». Если такой возможности в интерфейсе нет, потребуется обработка с кодом выгрузки.

Почему сохраненный файл пустой или не открывается?

Чаще всего макет не был получен: неверное имя макета, обращение не к тому менеджеру объекта или хранилище значения вернуло Неопределено. Проверьте тип полученного значения перед записью и убедитесь, что имя макета указано точно как в конфигураторе, с учетом регистра.

Как сохранить макет сразу в PDF?

У табличного документа в методе Записать() укажите ТипФайлаТабличногоДокумента.PDF. Учтите, что сохраняется внешний вид документа, а не структура шаблона — обратно превратить PDF в редактируемый макет нельзя.

Как перенести макет из одной базы в другую?

Сохраните макет в файл .mxl в исходной базе, затем в целевой базе откройте нужный макет в конфигураторе и загрузите файл через «Файл — Открыть» в редакторе. После этого сохраните конфигурацию и обновите базу. Для массового переноса удобнее выгрузка конфигурации в файлы с последующим копированием нужных файлов макетов.

Можно ли автоматизировать выгрузку макетов по расписанию?

Да, через регламентное задание с кодом ПолучитьМакет() и Записать(). Файлы будут создаваться на сервере, поэтому указывайте доступный серверу каталог и контролируйте свободное место. Ошибки записи фиксируйте в журнале регистрации, чтобы отследить сбои.