Копирование макета в 1С: Конфигуратор, файл .mxl и код
Содержание
Макет в 1С копируют тремя способами: прямо в дереве метаданных Конфигуратора (Ctrl+C / Ctrl+V на самом макете), через файл .mxl (сохранить из одного макета, загрузить в другой) и кодом через ПолучитьМакет() и метод Записать(). Какой выбрать, зависит от того, куда нужно перенести макет: в тот же объект, в другой объект или в другую конфигурацию.
Копирование макета нужно, когда печатная форма «почти подходит» и её проще доработать, чем рисовать заново. Самая частая ошибка начинающих разработчиков: правят типовой макет на месте, а после обновления конфигурации правки пропадают или блокируют обновление. Поэтому ниже — не только как копировать, но и где копия должна жить.
Что именно вы копируете: макет, область или файл
Слово «макет» в разговоре означает три разные вещи. От этого зависит способ.
| Что копируете | Где это находится | Подходящий способ |
|---|---|---|
| Макет целиком (объект метаданных) | Дерево конфигурации, ветка Макеты | Копирование в Конфигураторе |
| Часть макета: шапка, строки, таблица | Окно редактирования макета | Копирование области ячеек |
| Макет между базами | Файл .mxl на диске | Сохранить и загрузить |
| Макет в рантайме | Код модуля | ПолучитьМакет + Записать |
Макет — это объект конфигурации со своим именем, синонимом и типом. Для печатных форм и отчётов это чаще всего Табличный документ. Бывают ещё Двоичные данные, HTML-документ, Текстовый документ, Схема компоновки данных (в отчётах), но копируются они по тем же правилам.
Что нужно подготовить
- 🔒 Откройте конфигурацию в Конфигураторе, а не в режиме Предприятия. Макеты как объекты метаданных правятся только там.
- 📦 Сделайте выгрузку
.dtили копию файла базы, если работаете в рабочей базе, а не в разработческой. - 🧩 Проверьте, не заблокирована ли конфигурация поддержкой. Типовые макеты на замке: изменить их можно только после снятия с поддержки или через расширение.
Не правьте типовой макет в конфигурации на поддержке. Копия, лежащая рядом, переживёт обновление, а изменения в оригинале при обновлении придётся сливать вручную.
Копирование макета в дереве конфигурации
Это самый быстрый способ, если макет нужно продублировать внутри одного объекта или перенести к другому.
- Откройте Конфигуратор и дерево конфигурации (
Конфигурация → Открыть конфигурацию). - Раскройте объект, которому принадлежит макет: документ, справочник, обработку или отчёт.
- Откройте ветку
Макетыи выделите нужный макет. - Нажмите
Ctrl+C, затем выделите веткуМакетыцелевого объекта и нажмитеCtrl+V. - Проверьте имя и синоним копии. Если в целевом объекте уже есть макет с таким именем, дайте копии новое.
- Откройте свойства копии (
Alt+Enter) и поправьтеИмя,Синоним, при необходимостиКомментарий.
Копию можно сделать и командой контекстного меню на макете, если в вашей версии платформы она есть. Результат тот же.
Копирование между объектами
Если копируете макет из документа в другой документ, имена областей остаются прежними. Код, который выводит секции (Макет.ПолучитьОбласть("Шапка")), продолжит работать без правок. Если же вы переименовали область в копии, то правьте и модуль.
Копирование между конфигурациями
Дерево метаданных из одной конфигурации в другую напрямую не копируется. Для этого есть два пути:
- 📁 Сохранить макет в
.mxl(способ ниже) и загрузить в новом макете другой конфигурации. - 🧪 Выгрузить объект в файлы (
Конфигурация → Выгрузить конфигурацию в файлы) и перенести каталог макета. Способ для тех, кто ведёт конфигурацию в Git.
Для небольших макетов проще и надёжнее .mxl: файл самодостаточен и не тянет за собой связей с другими объектами.
Работа с табличным документом внутри макета
Когда нужно скопировать не весь макет, а блок: шапку из одного бланка в другой, строку с итогом, подпись.
- Откройте макет двойным щелчком. Он откроется в табличном редакторе.
- Выделите ячейки блока мышью или через
Shift+ стрелки. - Нажмите
Ctrl+C, перейдите в нужный макет, выделите левую верхнюю ячейку вставки и нажмитеCtrl+V.
Вместе с текстом копируются шрифты, рамки, объединения ячеек и ширина колонок, если вы выделили колонки целиком. Если выделить только ячейки, ширину придётся подогнать вручную.
Что не копируется само
- 🏷 Имена областей. Именованная область (
Шапка,Строка,Подвал) принадлежит макету, а не ячейкам. После вставки блока присвойте область заново: выделите диапазон и воспользуйтесь командой присвоения имени в менюТаблица → Имена. - 📐 Параметры. Ячейки с параметрами копируются, но связь с кодом остаётся только если имя параметра совпадает с тем, что ждёт код.
- 🖨 Настройки печати. Масштаб, поля, колонтитулы и ориентацию листа выставьте в целевом макете отдельно.
Копирование строк и колонок
Для вставки строк целиком выделите заголовки строк слева, нажмите Ctrl+C, затем в целевом макете щёлкните заголовок строки, перед которой нужна вставка, и нажмите Ctrl+V. Если выделена строка с именованной областью, при вставке получится дубль имени — переименуйте.
Экспорт и импорт макета через файл .mxl
Формат .mxl — файл табличного документа 1С. Он нужен, когда макет надо перенести между базами или хранить как шаблон.
Как сохранить макет в файл
- Откройте макет в Конфигураторе.
- Выберите
Файл → Сохранить как…(илиФайл → Сохранить копию, название зависит от версии платформы). - Укажите тип
Табличный документ (*.mxl)и имя файла.
Как загрузить файл в другой макет
- Создайте в целевом объекте новый макет (правая кнопка на ветке
Макеты→Добавить) с типомТабличный документ. - Откройте новый пустой макет.
- Выберите
Файл → Открыть…и укажите сохранённый.mxl. - Сохраните макет (
Ctrl+S) и обновите конфигурацию БД (F7).
Не забудьте присвоить новому макету понятное имя и синоним: загрузка файла имя не подтягивает.
Имена областей внутри .mxl сохраняются, а имя самого макета — нет. Если код ищет макет по имени, проверьте, что имя объекта совпадает с тем, что в ПолучитьМакет("…").
Копирование в режиме Предприятия
Пользователь без Конфигуратора тоже может получить копию печатной формы. В любой печатной форме есть кнопка сохранения: Файл → Сохранить как, формат MXL или Excel. Получится копия результата, а не макета, но для разовой переделки в Excel хватает.
В типовых конфигурациях на БСП есть режим правки макетов печатных форм: он позволяет изменить макет без Конфигуратора и вернуть стандартный. Искать его стоит в разделе Администрирование — обычно в подразделе печатных форм, отчётов и обработок. Правка ложится в отдельное хранилище и переживает обновление.
Программное копирование макета в коде
Когда макет нужно скопировать на ходу: сохранить во временный файл, отправить по почте, подменить внешним.
Получить макет и записать в файл
Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("ПФ_MXL_Бланк");
ИмяФайла = ПолучитьИмяВременногоФайла("mxl");
Макет.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.MXL);
Метод ПолучитьМакет() возвращает табличный документ; имя макета и менеджер объекта подставьте свои. Записать() пишет его в файл с нужным типом. Для Excel используйте ТипФайлаТабличногоДокумента.XLSX.
Прочитать файл в табличный документ
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяФайла);
После чтения с табдоком работают как с обычным: выводят области, заполняют параметры, показывают пользователю.
Скопировать область в другой табличный документ
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
Результат = Новый ТабличныйДокумент;
Результат.Вывести(ОбластьШапка);
Вывести() добавляет область в конец результата. Если нужно вставить в конкретное место, можно воспользоваться методом Присоединить() для горизонтальной склейки.
Если макет лежит в расширении, ПолучитьМакет() вернёт версию из расширения, а не оригинал. Проверяйте, откуда пришёл макет, прежде чем сохранять его как «эталон».
Загрузка в хранилище и из него
Если вы храните макеты во внешних файлах или в справочнике, поместите двоичные данные из .mxl в реквизит типа ХранилищеЗначения и читайте их обратно в ТабличныйДокумент. Это даёт копию макета, которую пользователь может править без Конфигуратора.
Расширения: как скопировать макет без правки типового
Для конфигурации на поддержке копировать макет в её же дерево — не лучшая идея. Правильнее подключить расширение (поддерживается с платформы 8.3.6).
- В Конфигураторе откройте конфигурацию расширения (
Конфигурация → Расширения конфигурации). - Выделите объект с нужным макетом в основной конфигурации и добавьте его в расширение командой «Добавить в расширение».
- Раскройте объект в расширении: макет появится в ветке
Макетыи будет редактируемым. - Внесите правки и загрузите расширение в базу. Это отдельные шаги: загрузка файла
.cfeи затем обновление конфигурации БД.
Типовой макет остаётся нетронутым, ваша версия подменяет его. Это тот же приём, что даёт копию, только без дубля имени.
Как выбрать способ и проверить копию
Не нужно использовать все способы подряд. Ориентируйтесь на задачу.
Ctrl+C на макете, Ctrl+V на ветке Макеты целевого объекта..mxl и загрузите в новом макете целевой конфигурации.ПолучитьМакет() и Записать() во временный файл.Проверка после копирования
Запустите 1С:Предприятие в режиме отладки и откройте печатную форму, которая использует макет. Проверьте по порядку:
- Форма открывается без ошибок и не выводит пустых секций.
- Все параметры подставились: нет пустых ячеек там, где должны быть данные.
- Многострочные таблицы растут вниз и не накладываются на подвал.
- Предварительный просмотр и печать дают тот же вид, что и экран: проверьте границы страницы и масштаб.
Для табличной части из десятков строк проверьте разрыв страницы: если шапка не повторяется на второй странице, настройте повторяющиеся строки в свойствах табличного документа макета.
Именование копий
Договоритесь в команде об одном правиле имён. Рабочая схема: к имени оригинала добавляют суффикс, по которому видно, что это ваша версия, например ПФ_MXL_Бланк_Доработанный. В синониме пишут понятное название для пользователя. Тогда при обновлении конфигурации легко найти собственные макеты поиском по дереву, а в коде видно, какой вызов нужно будет перевести на новое имя.
Что делать с оригиналом
После того как копия заработала, не удаляйте оригинал и не переименовывайте его. Другие модули могут вызывать его по старому имени, а при обновлении платформа сравнивает типовые объекты именно по именам. Если нужно, чтобы пользователи печатали вашу версию, измените вызов в модуле менеджера или команде печати, а не подменяйте имя оригинала.
Типичные проблемы при копировании макета
| Симптом | Вероятная причина | Что делать |
|---|---|---|
| Кнопки вставки нет, макет «серый» | Объект на поддержке | Снять с поддержки или использовать расширение |
| После вставки не работает печать | Имя копии не совпадает с вызовом в коде | Сверьте имя в ПолучитьМакет("…") |
| Пустой результат при выводе области | Область не получила имя после вставки | Присвойте имя области заново |
«Ошибка при чтении файла» при открытии .mxl | Файл сохранён в другой версии платформы или повреждён | Откройте в той же или более новой версии, перезапишите |
| Поля формы остаются пустыми | В копии нет параметров, которые заполняет код | Добавьте параметры с теми же именами в целевой макет |
Если ничего не помогло, откройте оригинал и копию рядом и сравните имена областей и параметров: чаще всего расхождение именно там. Крайний вариант: сохранить оригинал в .mxl, удалить копию и создать её заново из файла.
Частые вопросы
Можно ли скопировать макет из одной базы в другую без `.mxl`?
.mxl проще и быстрее.Копируются ли права и роли вместе с макетом?
Почему после копирования макета пропали рамки?
.mxl.Можно ли вернуть исходный макет, если копию правили долго?
.dt.Как скопировать макет в Excel?
Файл → Сохранить как в формат Excel. Макет как объект метаданных в Excel не копируется, только готовый результат.