Загрузка макета из файла в конфигурацию и в рабочую базу 1С 8.3

· 9 мин

Содержание

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

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

Подготовка файла: какие форматы макетов понимает 1С

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

Вид макетаЧто загружаютТипичное применение
Табличный документ.mxl, а также .xls/.xlsx после открытия и пересохранения в 1Спечатные формы, шаблоны загрузки
Двоичные данныелюбой файл: .docx, .odt, .xlsx, .zip, картинкашаблоны Word, вложенные файлы, библиотеки
Текстовый документ.txtшаблоны писем, SQL-тексты, настройки
HTML-документ.htm, .htmlсправочные тексты, формы с HTML
Схема компоновки данныхсоздаётся в редакторе СКДотчёты

Перед загрузкой проверьте файл:

  • 📄 Кодировка текстовых файлов — UTF-8 или Windows-1251. Если кириллица после загрузки превратилась в «кракозябры», файл сохранён в другой кодировке.
  • 📐 Excel-файл лучше заранее открыть в 1С (Файл → Открыть в Конфигураторе) и сохранить как .mxl. Так вы увидите, что ушло при конвертации: объединения ячеек, шрифты, ширина колонок.
  • 🏷️ Именованные области. Если макет печатной формы, код ищет в нём области по именам (Шапка, Строка, Подвал). Новый файл должен содержать те же имена, иначе печать упадёт.
  • 🔣 Параметры ячеек. В табличных макетах ячейки с данными заполнены как «Параметр» (например, Номер, Контрагент). Простой текст вместо параметра код не заполнит.

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

Где найти макет в дереве конфигурации

В Конфигураторе макеты лежат в двух местах.

  1. Общие макеты — ветка Общие → Макеты. Это макеты, доступные из любого модуля через ПолучитьОбщийМакет("Имя").
  2. Макеты конкретного объекта — раскройте документ, справочник, обработку или отчёт в дереве, внутри будет ветка Макеты. Например, Документы → РеализацияТоваровУслуг → Макеты.

Быстрее всего найти нужный макет поиском по дереву: встаньте в окно конфигурации и начните набирать имя — платформа подсветит совпадение. Ещё вариант — Правка → Найти (Ctrl+F) с областью поиска по всей конфигурации, если знаете кусок имени макета из кода (ПолучитьМакет("ПФ_MXL_...")).

Чтобы понять, какой именно макет использует печатная форма, откройте модуль менеджера объекта и найдите в нём вызов ПолучитьМакет или УправлениеПечатью.МакетПечатнойФормы. В типовых конфигурациях на БСП имя передаётся строкой вида "Документ.РеализацияТоваровУслуг.ПФ_MXL_Накладная" — последняя часть и есть имя макета.

Если объект на поддержке без возможности изменения, макет откроется только для чтения. Как с этим быть — в разделе про ошибки.

Загрузка макета через Конфигуратор: пошагово

Здесь порядок зависит от вида макета.

Макет вида «Двоичные данные» (Word, архивы, картинки)

  1. Найдите макет в дереве конфигурации.
  2. Откройте контекстное меню (правая кнопка мыши) и выберите команду загрузки макета из файла. Рядом стоит парная команда сохранения в файл — ею удобно сначала сделать резервную копию.
  3. Укажите файл на диске и подтвердите замену.
  4. Сохраните конфигурацию и обновите конфигурацию базы данных: Конфигурация → Обновить конфигурацию базы данных (F7).

Новый макет такого вида создаётся иначе: правой кнопкой по ветке Макеты → Добавить, в конструкторе выберите тип «Двоичные данные» — платформа сразу предложит указать файл.

Макет вида «Табличный документ» (.mxl)

Табличный макет удобнее менять целиком через открытие файла:

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

Если нужен новый табличный макет, при добавлении выберите тип «Табличный документ», а затем заполните его так же — копированием из открытого файла.

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

Перенос макета через буфер обмена в редакторе

Этот способ выручает, когда нужно перенести не весь макет, а часть: одну область, шапку, строку таблицы. И когда файл пришёл в Excel.

  1. Откройте файл-источник через Файл → Открыть (Конфигуратор понимает .mxl и .xls/.xlsx).
  2. Выделите нужные строки целиком — щелчком по номерам строк слева. Для всего макета нажмите Ctrl+A.
  3. Скопируйте Ctrl+C.
  4. Перейдите в макет конфигурации, встаньте в первую ячейку (R1C1) или в начало нужной области.
  5. Вставьте Ctrl+V.
  6. Проверьте имена областей: выделите строки и посмотрите, отображается ли имя слева от номеров. Список имён доступен в меню Таблица → Имена.

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

Если код обращается к областям «Строка|Колонка» (пересечение горизонтальной и вертикальной областей), проверьте и вертикальные имена — их выделяют по заголовкам колонок.

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

Загрузка макета в режиме Предприятия без Конфигуратора

В типовых конфигурациях на Библиотеке стандартных подсистем (Бухгалтерия 3.0, ЗУП 3.1, УТ 11, КА, ERP) есть механизм пользовательских макетов. Изменённый макет хранится в данных базы, а не в конфигурации. Плюсы очевидны: не нужно снимать с поддержки, не мешает обновлению, можно откатить одной командой.

Путь одинаков в основных конфигурациях:

КонфигурацияГде список макетов
Бухгалтерия предприятия 3.0Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм
ЗУП 3.1Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм
УТ 11, КА 2, ERPНСИ и администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм

Порядок действий:

  1. Найдите макет в списке — поиском по названию печатной формы (например, «Счет на оплату»).
  2. Откройте его на изменение. Табличный макет откроется во встроенном редакторе, а макет Word или OpenDocument предложит выгрузку в файл и открытие во внешней программе.
  3. Внесите правки или замените содержимое: для табличного макета — копированием из открытого .mxl (Файл → Открыть в главном меню Предприятия), для офисного — правкой файла и загрузкой обратно.
  4. Сохраните. В списке у макета появится отметка, что используется изменённый вариант.

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

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

Внешняя печатная форма как альтернатива

Если нужна не правка существующей формы, а новая, удобнее сделать внешнюю печатную форму (файл .epf с макетом внутри) и подключить её через Дополнительные отчеты и обработки в том же разделе администрирования. Макет при этом загружается в Конфигураторе внутрь обработки — так же, как описано выше, только в дереве внешней обработки.

Программная загрузка макета из файла

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

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

&НаКлиенте
Процедура ЗагрузитьМакет(Команда)
	Оповещение = Новый ОписаниеОповещения("ПослеПомещенияФайла", ЭтотОбъект);
	НачатьПомещениеФайла(Оповещение, , , Истина, УникальныйИдентификатор);
КонецПроцедуры

&НаКлиенте
Процедура ПослеПомещенияФайла(Результат, Адрес, ВыбранноеИмяФайла, ДопПараметры) Экспорт
	Если Не Результат Тогда
		Возврат;
	КонецЕсли;
	Расширение = НРег(Прав(ВыбранноеИмяФайла, 4));
	ЗагрузитьНаСервере(Адрес, Расширение);
КонецПроцедуры

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

Что важно в этом коде:

  • 🗂️ Расширение временного файла должно совпадать с исходным. По нему Прочитать() определяет формат: .mxl или .xlsx.
  • 🧹 УдалитьФайлы в конце — иначе временные файлы копятся на сервере.
  • 🔒 Код работает и в веб-клиенте: используется асинхронный НачатьПомещениеФайла, а не модальные диалоги.

Если макет нужно не просто показать, а сохранить для повторного использования, двоичные данные файла кладут в реквизит типа ХранилищеЗначения справочника или регистра. Изменить макет самой конфигурации из режима Предприятия кодом нельзя — конфигурация меняется только через Конфигуратор или расширение.

Макет внутри внешней обработки

Во внешней обработке свой макет получают так: ЭтотОбъект.ПолучитьМакет("ИмяМакета") в модуле объекта. Если обработку открыли из файла, а макет внутри неё обновили в Конфигураторе, пересохраните .epf и заново подключите или откройте её — иначе в базе останется старая версия.

Ошибки при загрузке макета и как их снять

Большинство проблем делятся на три группы: макет не даёт себя изменить, файл не читается, печать после загрузки ломается.

Диагностика: выберите симптом

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

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

Можно ли загрузить макет из Excel без конвертации в mxl?
Можно как двоичные данные — тогда это просто вложенный файл, и код должен сам его прочитать. Для печатной формы нужен табличный документ, поэтому Excel открывают в 1С и переносят в макет.
Сохранится ли загруженный макет после обновления типовой конфигурации?
Макет, изменённый в режиме Предприятия, хранится в данных и переживает обновление. Макет, заменённый в Конфигураторе на снятом с поддержки объекте, при обновлении попадёт в сравнение-объединение, и его придётся отстоять вручную.
Можно ли поменять макет через расширение конфигурации?
Да: заимствуйте объект в расширение и добавьте в него свой макет, а в коде печати обращайтесь к нему. Основная конфигурация остаётся на поддержке.
Как перенести изменённые макеты в другую базу?
Для пользовательских макетов БСП — выгрузить каждый в файл и загрузить в другой базе тем же способом. Для макетов конфигурации — перенести через сравнение-объединение или файл конфигурации .cf.
Почему в предпросмотре макет выглядит иначе, чем в редакторе?
Редактор не учитывает поля страницы и масштаб печати. Проверяйте результат в предпросмотре и подгоняйте ширину колонок под формат листа.