Как выгрузить конфигурацию 1С с отбором по определенной подсистеме?

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

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

Разбираем путаницу в интерфейсе платформы: два разных механизма выгрузки

Для понимания сути проблемы проанализируем архитектуру платформы. В «1С:Предприятии» существуют два визуально и функционально похожих, но совершенно разных механизма выгрузки:

  1. «Выгрузить файлы конфигурации...» — старый механизм, появившийся еще в версиях 8.1 и 8.2 (в пакетном режиме ему соответствует ключ /DumpConfigFiles). Данная функция никогда не выгружала полноценную структуру метаданных конфигурации, пригодную для последующей загрузки. Она предназначена лишь для извлечения определенных элементов: текстов модулей, макетов, картинок, справочной информации и прав доступа. Именно в этом окне исторически находилось дерево метаданных с возможностью выбора объектов. В современных релизах платформы 8.3 этот пункт по умолчанию убран из основного меню конфигуратора, чтобы не вводить разработчиков в заблуждение, однако при необходимости его можно вернуть через диалог настройки панелей инструментов и меню.
  2. «Выгрузить конфигурацию в файлы...» — современный механизм полной сериализации метаданных (команда пакетного режима /DumpConfigToFiles). Он выгружает всю конфигурацию в виде набора XML-файлов и модулей для работы с системами контроля версий (Git, SVN) и средой 1C:Enterprise Development Tools (EDT). В диалоге этой команды разработчиками платформы намеренно не предусмотрена кнопка настройки или фильтрации по подсистемам, поскольку частичная выгрузка нарушила бы целостность всей схемы метаданных конфигурации при ее последующей обратной загрузке.

Ошибки пакетного режима и ключи командной строки

Нередко можно встретить предположение, что выгрузить конкретную подсистему в файлы XML можно через пакетный режим конфигуратора с помощью вымышленного ключа -Subsystem. Рассмотрим этот момент подробнее: такого параметра у команды /DumpConfigToFiles не существует. Попытка выполнить запуск с подобным синтаксисом приведет к аварийному завершению работы конфигуратора с сообщением о синтаксической ошибке.

Однако, начиная с версии платформы 8.3.10, разработчики платформы добавили в команду /DumpConfigToFiles штатный параметр -listFile, который позволяет выгрузить частичный набор объектов:


1cv8.exe DESIGNER /F "D:\Bases\MyBase" /N "Администратор" /P "Пароль" /DumpConfigToFiles "D:\DumpDir" -listFile "D:\List.txt"

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

Способ 1. Получение объектов подсистемы через сравнение и объединение конфигураций

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

  1. Создадим новую пустую информационную базу без конфигурации.
  2. Откроем пустое дерево метаданных в конфигураторе и перейдем в меню «Конфигурация» → «Сравнить, объединить с конфигурацией из файла...» (выбираем файл выгрузки исходной базы) либо выполним объединение через прямое подключение к базе разработки.
  3. В открывшемся окне сравнения и объединения снимем общий флаг со всех объектов.
  4. Нажмем кнопку «Действия» → «Отметить по подсистемам...».
  5. В появившемся диалоговом окне установим флаг напротив необходимой нам подсистемы. Обратим внимание: платформа автоматически отметит только те метаданные, которые входят в состав выбранной ветки.
  6. Выполним объединение конфигураций и применим изменения (меню «Конфигурация» → «Обновить конфигурацию базы данных»).
  7. После сохранения изменений мы получим чистую конфигурацию, включающую только требуемый функционал. Теперь ее можно сохранить в файл .cf или воспользоваться стандартным механизмом «Конфигурация» → «Выгрузить конфигурацию в файлы...» для получения набора исходных XML.

Способ 2. Автоматическое формирование списка объектов для пакетной выгрузки

Если требуется регулярно автоматизировать процесс выгрузки файлов одной подсистемы в скриптах CI/CD, проанализируем программный подход к заполнению параметра -listFile. Для этого напишем небольшую внешнюю обработку, которая программно обходит состав подсистемы и формирует текстовый файл в кодировке UTF-8.

Посмотрим на пример кода модуля для обхода метаданных подсистемы:


ИмяПодсистемы = "УправлениеСкладом";
МетаданныеПодсистемы = Метаданные.Подсистемы.Найти(ИмяПодсистемы);

Если МетаданныеПодсистемы = Неопределено Тогда
    ВызватьИсключение "Указанная подсистема не найдена!";
КонецЕсли;

ТекстовыйДокумент = Новый ТекстовыйДокумент;
// Добавляем саму подсистему в список
ТекстовыйДокумент.ДобавитьСтроку(МетаданныеПодсистемы.ПолноеИмя());

// Обходим состав объектов подсистемы
Для Каждого ОбъектСостава Из МетаданныеПодсистемы.Состав Цикл
    ТекстовыйДокумент.ДобавитьСтроку(ОбъектСостава.ПолноеИмя());
КонецЦикла;

// Сохраняем файл для пакетного режима Конфигуратора
ТекстовыйДокумент.Записать("C:\Temp\ExportList.txt", КодировкаТекста.UTF8);

После создания такого файла можно без участия пользователя запустить команду пакетной выгрузки с параметром -listFile "C:\Temp\ExportList.txt". В результате в целевом каталоге будут сформированы XML-файлы только тех объектов, которые принадлежат указанной подсистеме.

Способ 3. Перенос функционала в расширение конфигурации

В современной разработке выделение части метаданных по функциональным подсистемам для передачи или обособленного версионирования чаще всего реализуется через расширения конфигурации (.cfe). Выясним преимущества этого подхода:

  1. Объекты подсистемы создаются непосредственно в теле расширения, либо заимствуются из основной конфигурации.
  2. Окно управления расширениями предоставляет штатную кнопку выгрузки структуры расширения в файлы без затрагивания основной конфигурации базы.
  3. Пакетный запуск конфигуратора официально поддерживает работу с расширениями через ключ -Extension <ИмяРасширения>, что делает автоматизацию выгрузки исходников прозрачной и не требующей формирования дополнительных текстовых файлов с перечислением метаданных.

Способ 4. Использование среды разработки 1C:Enterprise Development Tools (EDT)

Если проект переведен на среду разработки EDT, структура конфигурации изначально хранится на диске в виде структурированного проекта. Это позволяет выполнять экспорт, версионирование и отслеживание изменений конкретных пакетов и функциональных подсистем встроенными средствами среды без необходимости запуска классического конфигуратора «1С:Предприятия».

← На главную