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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Рассмотрим распространенную задачу при разработке в среде 1С:Предприятие: необходимость выделить часть функциональности или оформления (в данном случае — Стили и Элементы стиля) из основной конфигурации в расширение. Часто это требуется для того, чтобы перенести наработки на другую базу или создать независимый модуль оформления. Если объектов несколько сотен, ручное создание или заимствование каждого элемента («по одному») занимает неприемлемо много времени. Проанализируем способы массового переноса метаданных, опираясь на обсуждение сообщества и современные возможности платформы.

Суть проблемы

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

Способ 1: Использование механизма выгрузки в XML (Решение с форума)

Этот метод является наиболее универсальным, если стандартные средства копирования по каким-то причинам не подходят или требуется автоматизация процесса. Метод основан на том факте, что структуру расширения можно представить в виде набора XML-файлов (к слову, существует и выгрузка метаданных в JSON), аналогично обычной конфигурации, но с добавлением специальных тегов. Разберем алгоритм по шагам:

  1. Подготовка «донорской» конфигурации. Создадим пустую новую конфигурацию. В эту конфигурацию с помощью механизма «Сравнение и объединение» перенесем из основной базы только нужные нам объекты (в нашем примере — Стили и Элементы стиля). Сохраним эту конфигурацию. Теперь у нас есть чистый CF-файл, содержащий только целевые объекты (для работы с такими форматами также создан распаковщик конфигураций В8АнПак).
  2. Выгрузка в XML. В меню «Конфигурация» выберем пункт «Выгрузить конфигурацию в файлы...». Укажем пустую папку. Платформа разберет нашу мини-конфигурацию на множество XML-файлов (при частой работе с подобными выгрузками может очень пригодиться Конвертер обработок XML в EPF).
  3. Модификация корневого файла. Это самый важный этап. Нам нужно превратить выгрузку обычной конфигурации в выгрузку расширения. Найдем в папке с выгрузкой корневой файл, обычно он называется Configuration.xml (при автоматизации служебных процессов выгрузки обратите внимание на Генерацию ConfigDumpInfo.xml в 1С). Откроем его любым текстовым редактором (Notepad++, VS Code и т.д.). В структуру XML необходимо добавить специальные теги, которые укажут платформе, что это именно расширение. Вставим следующие строки внутрь основного блока конфигурации (значения могут варьироваться в зависимости от ваших задач):
    
    <ConfigurationExtensionPurpose>AddOn</ConfigurationExtensionPurpose>
    <ObjectBelonging>Adopted</ObjectBelonging>
    <KeepMappingToExtendedConfigurationObjectsByIDs>true</KeepMappingToExtendedConfigurationObjectsByIDs>
    <NamePrefix>ВашПрефикс_</NamePrefix>
    
    Пояснение тегов:
    • ConfigurationExtensionPurpose — назначение расширения. Значение AddOn указывает на то, что это дополнение.
    • ObjectBelonging — принадлежность объектов. Значение Adopted в данном контексте помогает платформе принять объекты как часть расширения.
    • NamePrefix — префикс имен, обязательный для расширений в режиме совместимости «Не использовать» (или для контроля имен).
  4. Загрузка в расширение. Создадим в целевой базе (или в той же самой) новое пустое расширение. В меню «Конфигурация — Расширения конфигурации» выберем наше новое расширение. В меню «Конфигурация» выберем пункт «Загрузить конфигурацию из файлов...». Внимание: это нужно делать, когда активно (открыто) именно окно конфигурации расширения, а не основной конфигурации. Укажем папку, где мы правили XML. Платформа загрузит объекты, и они станут собственными объектами этого расширения.

Способ 2: Прямое копирование через буфер обмена (Современный подход)

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

  1. Откройте основную конфигурацию и дерево метаданных.
  2. Выделите нужную ветку (например, «Элементы стиля») или группу конкретных объектов, используя клавишу Shift или Ctrl.
  3. Нажмите Ctrl + C (Копировать).
  4. Откройте дерево метаданных вашего Расширения.
  5. Встаньте на аналогичную ветку или на корень расширения и нажмите Ctrl + V (Вставить).

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

Способ 3: Использование 1C:EDT (Enterprise Development Tools)

Если вы используете среду разработки 1C:EDT, задача решается через инструменты рефакторинга. 1C:EDT построена на базе Eclipse и оперирует метаданными как файлами изначально. Порядок действий в EDT:

  1. Откройте проект основной конфигурации.
  2. В навигаторе выделите группу объектов (ваши сотни стилей).
  3. Нажмите правой кнопкой мыши и выберите в контекстном меню пункт, связанный с перемещением или рефакторингом в расширение (название пункта может меняться в разных версиях, обычно это «Move to extension» или «Переместить в расширение»).
  4. Среда автоматически перенесет объекты и постарается корректно обновить ссылки.

Особенности работы со стилями в Управляемых формах

В обсуждении возник спор относительно применимости объектов Стиль в управляемом приложении. Разъясним этот момент, так как это важно для понимания целесообразности действий. Объект метаданных Стиль и ЭлементСтиля полноценно используются в управляемом приложении (УФ). Более того, это основной штатный механизм для брендирования прикладных решений. Начиная с определенных версий платформы, возможности стилизации были значительно расширены. Мы можем управлять:

Создание отдельного расширения, содержащего только корпоративный стиль (брендбук), — это правильная архитектурная практика. Это позволяет «накатывать» оформление на любые базы (Бухгалтерия, ЗУП, УТ) без изменения их логики и без снятия с поддержки.

Возможные проблемы при переносе в другую конфигурацию

При реализации задачи «перенести расширение на другую конфигурацию» обратите внимание на следующие риски: 1. Целостность ссылок Если ваш стиль использует картинку из ОбщиеКартинки, вы обязаны скопировать в расширение и саму картинку. Если в новой базе не будет этой картинки, при подключении расширения возникнет ошибка проверки метаданных. 2. Имена объектов Если вы используете Способ 2 (прямое копирование), убедитесь, что имена объектов не пересекаются с именами типовых объектов в новой базе. Использование префикса в именах объектов внутри расширения — хорошая практика, которая страхует от подобных конфликтов. 3. Зависимости от типовых подсистем Если стиль ссылается на цвета, определенные в БСП (Библиотека Стандартных Подсистем), убедитесь, что версия БСП в целевой конфигурации содержит такие же идентификаторы или имена элементов стиля, иначе связи будут разорваны. При создании автономного расширения лучше делать все элементы стиля собственными, избегая заимствования типовых цветов.

Заключение

Массовый перенос метаданных в расширение возможен. Самый технологичный способ для разработчиков «старой школы» — через манипуляции с XML (Способ 1). Самый быстрый способ в современной платформе — массовое копирование через буфер обмена с контролем ссылочной целостности (Способ 2). Оба метода позволяют решить задачу автора: избежать ручного труда при переносе сотен элементов оформления.

← На главную