Копирование макета в 1С: Конфигуратор, файл .mxl и код

· 9 мин

Содержание

Макет в 1С копируют тремя способами: прямо в дереве метаданных Конфигуратора (Ctrl+C / Ctrl+V на самом макете), через файл .mxl (сохранить из одного макета, загрузить в другой) и кодом через ПолучитьМакет() и метод Записать(). Какой выбрать, зависит от того, куда нужно перенести макет: в тот же объект, в другой объект или в другую конфигурацию.

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

Что именно вы копируете: макет, область или файл

Слово «макет» в разговоре означает три разные вещи. От этого зависит способ.

Что копируетеГде это находитсяПодходящий способ
Макет целиком (объект метаданных)Дерево конфигурации, ветка МакетыКопирование в Конфигураторе
Часть макета: шапка, строки, таблицаОкно редактирования макетаКопирование области ячеек
Макет между базамиФайл .mxl на дискеСохранить и загрузить
Макет в рантаймеКод модуляПолучитьМакет + Записать

Макет — это объект конфигурации со своим именем, синонимом и типом. Для печатных форм и отчётов это чаще всего Табличный документ. Бывают ещё Двоичные данные, HTML-документ, Текстовый документ, Схема компоновки данных (в отчётах), но копируются они по тем же правилам.

Что нужно подготовить

  • 🔒 Откройте конфигурацию в Конфигураторе, а не в режиме Предприятия. Макеты как объекты метаданных правятся только там.
  • 📦 Сделайте выгрузку .dt или копию файла базы, если работаете в рабочей базе, а не в разработческой.
  • 🧩 Проверьте, не заблокирована ли конфигурация поддержкой. Типовые макеты на замке: изменить их можно только после снятия с поддержки или через расширение.

Не правьте типовой макет в конфигурации на поддержке. Копия, лежащая рядом, переживёт обновление, а изменения в оригинале при обновлении придётся сливать вручную.

Копирование макета в дереве конфигурации

Это самый быстрый способ, если макет нужно продублировать внутри одного объекта или перенести к другому.

  1. Откройте Конфигуратор и дерево конфигурации (Конфигурация → Открыть конфигурацию).
  2. Раскройте объект, которому принадлежит макет: документ, справочник, обработку или отчёт.
  3. Откройте ветку Макеты и выделите нужный макет.
  4. Нажмите Ctrl+C, затем выделите ветку Макеты целевого объекта и нажмите Ctrl+V.
  5. Проверьте имя и синоним копии. Если в целевом объекте уже есть макет с таким именем, дайте копии новое.
  6. Откройте свойства копии (Alt+Enter) и поправьте Имя, Синоним, при необходимости Комментарий.

Копию можно сделать и командой контекстного меню на макете, если в вашей версии платформы она есть. Результат тот же.

Копирование между объектами

Если копируете макет из документа в другой документ, имена областей остаются прежними. Код, который выводит секции (Макет.ПолучитьОбласть("Шапка")), продолжит работать без правок. Если же вы переименовали область в копии, то правьте и модуль.

Копирование между конфигурациями

Дерево метаданных из одной конфигурации в другую напрямую не копируется. Для этого есть два пути:

  • 📁 Сохранить макет в .mxl (способ ниже) и загрузить в новом макете другой конфигурации.
  • 🧪 Выгрузить объект в файлы (Конфигурация → Выгрузить конфигурацию в файлы) и перенести каталог макета. Способ для тех, кто ведёт конфигурацию в Git.

Для небольших макетов проще и надёжнее .mxl: файл самодостаточен и не тянет за собой связей с другими объектами.

Работа с табличным документом внутри макета

Когда нужно скопировать не весь макет, а блок: шапку из одного бланка в другой, строку с итогом, подпись.

  1. Откройте макет двойным щелчком. Он откроется в табличном редакторе.
  2. Выделите ячейки блока мышью или через Shift + стрелки.
  3. Нажмите Ctrl+C, перейдите в нужный макет, выделите левую верхнюю ячейку вставки и нажмите Ctrl+V.

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

Что не копируется само

  • 🏷 Имена областей. Именованная область (Шапка, Строка, Подвал) принадлежит макету, а не ячейкам. После вставки блока присвойте область заново: выделите диапазон и воспользуйтесь командой присвоения имени в меню Таблица → Имена.
  • 📐 Параметры. Ячейки с параметрами копируются, но связь с кодом остаётся только если имя параметра совпадает с тем, что ждёт код.
  • 🖨 Настройки печати. Масштаб, поля, колонтитулы и ориентацию листа выставьте в целевом макете отдельно.

Копирование строк и колонок

Для вставки строк целиком выделите заголовки строк слева, нажмите Ctrl+C, затем в целевом макете щёлкните заголовок строки, перед которой нужна вставка, и нажмите Ctrl+V. Если выделена строка с именованной областью, при вставке получится дубль имени — переименуйте.

Экспорт и импорт макета через файл .mxl

Формат .mxl — файл табличного документа 1С. Он нужен, когда макет надо перенести между базами или хранить как шаблон.

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

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

Как загрузить файл в другой макет

  1. Создайте в целевом объекте новый макет (правая кнопка на ветке Макеты → Добавить) с типом Табличный документ.
  2. Откройте новый пустой макет.
  3. Выберите Файл → Открыть… и укажите сохранённый .mxl.
  4. Сохраните макет (Ctrl+S) и обновите конфигурацию БД (F7).

Не забудьте присвоить новому макету понятное имя и синоним: загрузка файла имя не подтягивает.

Имена областей внутри .mxl сохраняются, а имя самого макета — нет. Если код ищет макет по имени, проверьте, что имя объекта совпадает с тем, что в ПолучитьМакет("…").

Копирование в режиме Предприятия

Пользователь без Конфигуратора тоже может получить копию печатной формы. В любой печатной форме есть кнопка сохранения: Файл → Сохранить как, формат MXL или Excel. Получится копия результата, а не макета, но для разовой переделки в Excel хватает.

В типовых конфигурациях на БСП есть режим правки макетов печатных форм: он позволяет изменить макет без Конфигуратора и вернуть стандартный. Искать его стоит в разделе Администрирование — обычно в подразделе печатных форм, отчётов и обработок. Правка ложится в отдельное хранилище и переживает обновление.

Программное копирование макета в коде

Когда макет нужно скопировать на ходу: сохранить во временный файл, отправить по почте, подменить внешним.

Получить макет и записать в файл

Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("ПФ_MXL_Бланк");
ИмяФайла = ПолучитьИмяВременногоФайла("mxl");
Макет.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.MXL);

Метод ПолучитьМакет() возвращает табличный документ; имя макета и менеджер объекта подставьте свои. Записать() пишет его в файл с нужным типом. Для Excel используйте ТипФайлаТабличногоДокумента.XLSX.

Прочитать файл в табличный документ

ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяФайла);

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

Скопировать область в другой табличный документ

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
Результат = Новый ТабличныйДокумент;
Результат.Вывести(ОбластьШапка);

Вывести() добавляет область в конец результата. Если нужно вставить в конкретное место, можно воспользоваться методом Присоединить() для горизонтальной склейки.

Если макет лежит в расширении, ПолучитьМакет() вернёт версию из расширения, а не оригинал. Проверяйте, откуда пришёл макет, прежде чем сохранять его как «эталон».

Загрузка в хранилище и из него

Если вы храните макеты во внешних файлах или в справочнике, поместите двоичные данные из .mxl в реквизит типа ХранилищеЗначения и читайте их обратно в ТабличныйДокумент. Это даёт копию макета, которую пользователь может править без Конфигуратора.

Расширения: как скопировать макет без правки типового

Для конфигурации на поддержке копировать макет в её же дерево — не лучшая идея. Правильнее подключить расширение (поддерживается с платформы 8.3.6).

  1. В Конфигураторе откройте конфигурацию расширения (Конфигурация → Расширения конфигурации).
  2. Выделите объект с нужным макетом в основной конфигурации и добавьте его в расширение командой «Добавить в расширение».
  3. Раскройте объект в расширении: макет появится в ветке Макеты и будет редактируемым.
  4. Внесите правки и загрузите расширение в базу. Это отдельные шаги: загрузка файла .cfe и затем обновление конфигурации БД.

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

Как выбрать способ и проверить копию

Не нужно использовать все способы подряд. Ориентируйтесь на задачу.

Куда нужно перенести макет?

Проверка после копирования

Запустите 1С:Предприятие в режиме отладки и откройте печатную форму, которая использует макет. Проверьте по порядку:

  1. Форма открывается без ошибок и не выводит пустых секций.
  2. Все параметры подставились: нет пустых ячеек там, где должны быть данные.
  3. Многострочные таблицы растут вниз и не накладываются на подвал.
  4. Предварительный просмотр и печать дают тот же вид, что и экран: проверьте границы страницы и масштаб.

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

Именование копий

Договоритесь в команде об одном правиле имён. Рабочая схема: к имени оригинала добавляют суффикс, по которому видно, что это ваша версия, например ПФ_MXL_Бланк_Доработанный. В синониме пишут понятное название для пользователя. Тогда при обновлении конфигурации легко найти собственные макеты поиском по дереву, а в коде видно, какой вызов нужно будет перевести на новое имя.

Что делать с оригиналом

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

Типичные проблемы при копировании макета

СимптомВероятная причинаЧто делать
Кнопки вставки нет, макет «серый»Объект на поддержкеСнять с поддержки или использовать расширение
После вставки не работает печатьИмя копии не совпадает с вызовом в кодеСверьте имя в ПолучитьМакет("…")
Пустой результат при выводе областиОбласть не получила имя после вставкиПрисвойте имя области заново
«Ошибка при чтении файла» при открытии .mxlФайл сохранён в другой версии платформы или повреждёнОткройте в той же или более новой версии, перезапишите
Поля формы остаются пустымиВ копии нет параметров, которые заполняет кодДобавьте параметры с теми же именами в целевой макет

Если ничего не помогло, откройте оригинал и копию рядом и сравните имена областей и параметров: чаще всего расхождение именно там. Крайний вариант: сохранить оригинал в .mxl, удалить копию и создать её заново из файла.

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

Можно ли скопировать макет из одной базы в другую без `.mxl`?
Да, выгрузкой объекта в файлы или через сравнение и объединение конфигураций. Но для одного макета .mxl проще и быстрее.
Копируются ли права и роли вместе с макетом?
Нет. Макет сам по себе прав не имеет, доступ к печати регулируется правами на объект, которому он принадлежит.
Почему после копирования макета пропали рамки?
Вероятно, вы копировали выделенные ячейки без форматирования, например через вставку из внешнего приложения. Копируйте область внутри редактора табличного документа или через .mxl.
Можно ли вернуть исходный макет, если копию правили долго?
Если оригинал не менялся, просто удалите копию и скопируйте заново. Если менялся, восстанавливайте из резервной копии или выгрузки .dt.
Как скопировать макет в Excel?
Выведите печатную форму и сохраните её через Файл → Сохранить как в формат Excel. Макет как объект метаданных в Excel не копируется, только готовый результат.