Рассмотрим распространенную задачу при разработке в среде 1С:Предприятие: необходимость выделить часть функциональности или оформления (в данном случае — Стили и Элементы стиля) из основной конфигурации в расширение. Часто это требуется для того, чтобы перенести наработки на другую базу или создать независимый модуль оформления. Если объектов несколько сотен, ручное создание или заимствование каждого элемента («по одному») занимает неприемлемо много времени. Проанализируем способы массового переноса метаданных, опираясь на обсуждение сообщества и современные возможности платформы.
В основной конфигурации существуют объекты (например, сотни элементов стиля), связанные друг с другом. Наша цель — создать расширение, поместить туда копии этих объектов и сделать так, чтобы расширение стало их «владельцем» (чтобы объекты стали собственными объектами расширения, а не заимствованными). Это позволит подключить данное расширение к абсолютно другой информационной базе, где этих объектов изначально нет.
Этот метод является наиболее универсальным, если стандартные средства копирования по каким-то причинам не подходят или требуется автоматизация процесса. Метод основан на том факте, что структуру расширения можно представить в виде набора XML-файлов (к слову, существует и выгрузка метаданных в JSON), аналогично обычной конфигурации, но с добавлением специальных тегов. Разберем алгоритм по шагам:
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 — префикс имен, обязательный для расширений в режиме совместимости «Не использовать» (или для контроля имен).В современных версиях платформы 1С:Предприятие (начиная с 8.3.10 и развиваясь далее) механизм работы с буфером обмена был значительно улучшен. Если раньше копирование метаданных между основной конфигурацией и расширением могло не работать или создавать только заимствованные объекты, то сейчас поведение стало более гибким. Разберем, как это сделать быстрее всего:
Важный нюанс: При таком копировании платформа создает собственные объекты расширения (копии), а не заимствует их. У них будут новые уникальные идентификаторы (UUID). Это именно то, что нужно для переноса функционала в другую конфигурацию. Однако, если вы копируете объект «Стиль», который ссылается на «Элементы стиля», вам необходимо сначала скопировать все «Элементы стиля», а затем сам «Стиль». В противном случае ссылки внутри «Стиля» могут потеряться или указывать на несуществующие объекты, так как UUID при копировании меняются.
Если вы используете среду разработки 1C:EDT, задача решается через инструменты рефакторинга. 1C:EDT построена на базе Eclipse и оперирует метаданными как файлами изначально. Порядок действий в EDT:
В обсуждении возник спор относительно применимости объектов Стиль в управляемом приложении. Разъясним этот момент, так как это важно для понимания целесообразности действий.
Объект метаданных Стиль и ЭлементСтиля полноценно используются в управляемом приложении (УФ). Более того, это основной штатный механизм для брендирования прикладных решений.
Начиная с определенных версий платформы, возможности стилизации были значительно расширены. Мы можем управлять:
Создание отдельного расширения, содержащего только корпоративный стиль (брендбук), — это правильная архитектурная практика. Это позволяет «накатывать» оформление на любые базы (Бухгалтерия, ЗУП, УТ) без изменения их логики и без снятия с поддержки.
При реализации задачи «перенести расширение на другую конфигурацию» обратите внимание на следующие риски:
1. Целостность ссылок
Если ваш стиль использует картинку из ОбщиеКартинки, вы обязаны скопировать в расширение и саму картинку. Если в новой базе не будет этой картинки, при подключении расширения возникнет ошибка проверки метаданных.
2. Имена объектов
Если вы используете Способ 2 (прямое копирование), убедитесь, что имена объектов не пересекаются с именами типовых объектов в новой базе. Использование префикса в именах объектов внутри расширения — хорошая практика, которая страхует от подобных конфликтов.
3. Зависимости от типовых подсистем
Если стиль ссылается на цвета, определенные в БСП (Библиотека Стандартных Подсистем), убедитесь, что версия БСП в целевой конфигурации содержит такие же идентификаторы или имена элементов стиля, иначе связи будут разорваны. При создании автономного расширения лучше делать все элементы стиля собственными, избегая заимствования типовых цветов.
Массовый перенос метаданных в расширение возможен. Самый технологичный способ для разработчиков «старой школы» — через манипуляции с XML (Способ 1). Самый быстрый способ в современной платформе — массовое копирование через буфер обмена с контролем ссылочной целостности (Способ 2). Оба метода позволяют решить задачу автора: избежать ручного труда при переносе сотен элементов оформления.