Разработка и Конфигурация · 12 мин
Как сохранить макет в файл в 1С
Как сохранить макет из 1С в файл: выгрузка табличного, текстового и двоичного макета через конфигуратор и код на встроенном языке. Пошаговые инструкции и ошибки.
Макет в 1С — это объект конфигурации, в котором хранится шаблон: табличный документ, текст, HTML, схема компоновки данных или двоичные данные (например, картинка или внешняя компонента). Потребность сохранить макет в файл возникает при переносе печатных форм между базами, при редактировании шаблона во внешнем редакторе, при резервном копировании доработанных макетов и при отладке выгрузок.
Способ выгрузки зависит от того, где находится макет и какой у него тип. Макет из конфигуратора выгружается через стандартное меню «Файл — Сохранить как» или через выгрузку конфигурации в файлы. Макет, хранящийся в данных (например, в справочнике файлов или в регистре пользовательских макетов), извлекается программно. Ниже разобраны все основные сценарии с точными действиями и кодом.
Какие бывают макеты и почему это важно перед сохранением
Перед выгрузкой нужно понять тип макета, потому что от него зависит и формат файла, и доступные методы. В дереве конфигурации макеты находятся в ветке «Общие — Макеты», а также внутри конкретных объектов: справочников, документов, отчетов, обработок.
Основные типы макетов:
- Табличный документ — шаблоны печатных форм, сохраняются в формате .mxl;
- Текстовый документ — шаблоны писем, скрипты, выгружаются как .txt;
- Двоичные данные — картинки, архивы, внешние компоненты, сохраняются в исходном бинарном виде;
- Схема компоновки данных — выгружается как XML;
- HTML-документ, ActiveDocument — сохраняются как .html и в соответствующих форматах;
- Географическая схема, графическая схема, макет оформления — специализированные форматы платформы.
Сохранение макета из конфигуратора вручную
Самый простой случай — макет открыт в конфигураторе, и его нужно выгрузить один раз, например чтобы передать коллеге или отредактировать вне 1С.
Для табличного макета порядок такой: откройте конфигуратор, разверните нужный объект (например, «Общие — Макеты» или макеты конкретного документа), дважды щелкните по макету. Откроется редактор табличного документа. Далее выберите в главном меню «Файл — Сохранить как», укажите папку и имя файла. Платформа предложит формат .mxl — это родной формат табличного документа 1С.
Текстовый макет сохраняется аналогично: открываете его, затем «Файл — Сохранить как» и выбираете расширение .txt. Для двоичного макета (например, картинки) при открытии платформа покажет содержимое, а сохранение выполняется через то же меню с исходным расширением файла.
- 1Откройте конфигуратор и найдите макет в дереве конфигурации
- 2Дважды щелкните по макету, чтобы открыть редактор
- 3Выберите Файл → Сохранить как и укажите папку и имя
- 4Убедитесь, что формат файла — .mxl (для табличного документа)
- 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 — это нужно редко, в основном при разработке инструментов сравнения отчетов.
// Универсальная выгрузка табличного макета в файл
ТабДок = Справочники.Номенклатура.ПолучитьМакет("МакетКарточки");
ТабДок.Записать("C:\\Temp\\МакетКарточки.mxl", ТипФайлаТабличногоДокумента.MXL);Особенности работы на сервере и в веб-клиенте
Частая причина «не сохраняется файл» — код выполняется на сервере, а путь указан как на клиентском компьютере. В серверном вызове ТабДок.Записать("C:\Temp\...") создаст файл на диске сервера 1С, а пользователь его там не найдет.
Правильный шаблон для клиент-серверной работы: записать файл во временное хранилище на сервере, а затем передать на клиент и сохранить через ПолучитьФайл() или диалог сохранения:
// На сервере
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("mxl");
ТабДок.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.MXL);
Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла));
// На клиенте
ПолучитьФайл(Адрес, "Макет.mxl", Истина);
В веб-клиенте прямой доступ к файловой системе ограничен: сохранение всегда идет через диалог браузера, поэтому автоматическая «тихая» выгрузка на диск пользователя невозможна — только с подтверждением пользователя.
Как сохранить макет, хранящийся в данных базы
Не все макеты живут в конфигурации. В типовых решениях пользовательские печатные формы и редактируемые макеты часто хранятся в базе: в справочниках файлов, в регистрах сведений (например, «Пользовательские макеты печати» в конфигурациях на БСП) или в дополнительных отчетах и обработках.
Для таких макетов логика другая: сначала найти элемент, в котором хранится макет, получить из него двоичные данные (обычно через хранилище значения) и записать в файл:
Выборка = Справочники.ДополнительныеОтчетыИОбработки.Выбрать();
Пока Выборка.Следующий() Цикл
Данные = Выборка.ХранилищеОбработки.Получить();
Если Данные <> Неопределено Тогда
Данные.Записать("C:\Temp\" + Выборка.ИмяФайла);
КонецЕсли;
КонецЦикла;
Конкретные имена справочников и реквизитов зависят от конфигурации — уточните их в структуре метаданных своей базы. Если макет редактировался пользователем в режиме предприятия (например, через «Изменить макет» в форме печати), ищите его именно в регистрах пользовательских макетов, а не в конфигураторе: в дереве конфигурации такой версии не будет.
Как выбрать способ выгрузки
Проверка результата и типичные ошибки
После сохранения убедитесь, что файл действительно содержит макет, а не пустышку. Для .mxl достаточно открыть файл двойным щелчком — он запустится в 1С, и вы увидите структуру шаблона с областями и параметрами. Для двоичных макетов проверьте размер файла: нулевой размер означает, что данные не были получены (например, хранилище значения вернуло Неопределено).
Как проверить результат
Видны области, параметры и форматирование шаблона
Файл не открывается или открывается пустой лист — макет не был получен
Размер соответствует ожидаемому содержимому (картинка, архив)
Размер 0 байт — хранилище вернуло Неопределено
Файл появился в указанной папке пользователя
Файл создан на сервере — код выполнялся в серверном контексте без передачи на клиента
Наиболее частые ошибки при сохранении макетов:
Если выгрузка выполняется регламентным заданием, всегда оборачивайте запись в попытку с записью ошибки в журнал регистрации — иначе сбой останется незамеченным, а файлы просто перестанут появляться.
Что важно запомнить
Тип макета определяет способ сохранения: табличный — через Записать() в .mxl, двоичный — через Записать() двоичных данных. Вручную макет выгружается из конфигуратора через «Сохранить как», массово — через выгрузку конфигурации в файлы. В клиент-серверном режиме файл сначала пишется во временное хранилище, затем передается клиенту. Пользовательские макеты ищите в данных базы, а не в конфигураторе.
Частые вопросы
В каком формате лучше сохранять табличный макет?
Для дальнейшей загрузки обратно в 1С — только .mxl, это родной формат, который корректно открывается редактором макетов. Если файл нужен человеку без 1С, дополнительно сохраните копию в XLSX или PDF, но помните, что при обратной конвертации структура областей и параметров будет потеряна.
Можно ли сохранить макет из режима «Предприятие» без программирования?
Да, если макет открыт как табличный документ (например, при просмотре печатной формы с включенным отображением макета или через стандартную функцию изменения макета в конфигурациях на БСП). В открытом табличном документе доступно «Файл — Сохранить как». Если такой возможности в интерфейсе нет, потребуется обработка с кодом выгрузки.
Почему сохраненный файл пустой или не открывается?
Чаще всего макет не был получен: неверное имя макета, обращение не к тому менеджеру объекта или хранилище значения вернуло Неопределено. Проверьте тип полученного значения перед записью и убедитесь, что имя макета указано точно как в конфигураторе, с учетом регистра.
Как сохранить макет сразу в PDF?
У табличного документа в методе Записать() укажите ТипФайлаТабличногоДокумента.PDF. Учтите, что сохраняется внешний вид документа, а не структура шаблона — обратно превратить PDF в редактируемый макет нельзя.
Как перенести макет из одной базы в другую?
Сохраните макет в файл .mxl в исходной базе, затем в целевой базе откройте нужный макет в конфигураторе и загрузите файл через «Файл — Открыть» в редакторе. После этого сохраните конфигурацию и обновите базу. Для массового переноса удобнее выгрузка конфигурации в файлы с последующим копированием нужных файлов макетов.
Можно ли автоматизировать выгрузку макетов по расписанию?
Да, через регламентное задание с кодом ПолучитьМакет() и Записать(). Файлы будут создаваться на сервере, поэтому указывайте доступный серверу каталог и контролируйте свободное место. Ошибки записи фиксируйте в журнале регистрации, чтобы отследить сбои.