При совместной разработке, подготовке обновлений или переносе функционала между базами разработчики часто сталкиваются с задачей выгрузить не всю конфигурацию целиком, а только объекты, принадлежащие конкретной подсистеме. Нередко возникает путаница: ранее в меню конфигуратора присутствовала возможность отметить нужные объекты флажками, однако в современных версиях платформы стандартное окно выгрузки предлагает только указать каталог без каких-либо настроек состава. Разберем детально, почему так произошло, какие механизмы выгрузки существуют в платформе 1С:Предприятие и как решить эту задачу на практике.
Для понимания сути проблемы проанализируем архитектуру платформы. В «1С:Предприятии» существуют два визуально и функционально похожих, но совершенно разных механизма выгрузки:
/DumpConfigFiles). Данная функция никогда не выгружала полноценную структуру метаданных конфигурации, пригодную для последующей загрузки. Она предназначена лишь для извлечения определенных элементов: текстов модулей, макетов, картинок, справочной информации и прав доступа. Именно в этом окне исторически находилось дерево метаданных с возможностью выбора объектов. В современных релизах платформы 8.3 этот пункт по умолчанию убран из основного меню конфигуратора, чтобы не вводить разработчиков в заблуждение, однако при необходимости его можно вернуть через диалог настройки панелей инструментов и меню./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 поместить строку Подсистема.МояПодсистема, платформа выгрузит только описание самого объекта метаданных подсистемы, но не включит туда справочники, документы или регистры, входящие в нее. Для успешной выгрузки в файл списка необходимо явно поместить полные имена всех подчиненных объектов.
Если наша цель — получить обособленную конфигурацию или файл поставки (.cf), содержащий исключительно объекты целевой подсистемы, наиболее надежным способом является использование механизма сравнения и объединения. Разберем этот процесс по шагам:
.cf или воспользоваться стандартным механизмом «Конфигурация» → «Выгрузить конфигурацию в файлы...» для получения набора исходных XML.Если требуется регулярно автоматизировать процесс выгрузки файлов одной подсистемы в скриптах CI/CD, проанализируем программный подход к заполнению параметра -listFile. Для этого напишем небольшую внешнюю обработку, которая программно обходит состав подсистемы и формирует текстовый файл в кодировке UTF-8.
Посмотрим на пример кода модуля для обхода метаданных подсистемы:
ИмяПодсистемы = "УправлениеСкладом";
МетаданныеПодсистемы = Метаданные.Подсистемы.Найти(ИмяПодсистемы);
Если МетаданныеПодсистемы = Неопределено Тогда
ВызватьИсключение "Указанная подсистема не найдена!";
КонецЕсли;
ТекстовыйДокумент = Новый ТекстовыйДокумент;
// Добавляем саму подсистему в список
ТекстовыйДокумент.ДобавитьСтроку(МетаданныеПодсистемы.ПолноеИмя());
// Обходим состав объектов подсистемы
Для Каждого ОбъектСостава Из МетаданныеПодсистемы.Состав Цикл
ТекстовыйДокумент.ДобавитьСтроку(ОбъектСостава.ПолноеИмя());
КонецЦикла;
// Сохраняем файл для пакетного режима Конфигуратора
ТекстовыйДокумент.Записать("C:\Temp\ExportList.txt", КодировкаТекста.UTF8);
После создания такого файла можно без участия пользователя запустить команду пакетной выгрузки с параметром -listFile "C:\Temp\ExportList.txt". В результате в целевом каталоге будут сформированы XML-файлы только тех объектов, которые принадлежат указанной подсистеме.
В современной разработке выделение части метаданных по функциональным подсистемам для передачи или обособленного версионирования чаще всего реализуется через расширения конфигурации (.cfe). Выясним преимущества этого подхода:
-Extension <ИмяРасширения>, что делает автоматизацию выгрузки исходников прозрачной и не требующей формирования дополнительных текстовых файлов с перечислением метаданных.Если проект переведен на среду разработки EDT, структура конфигурации изначально хранится на диске в виде структурированного проекта. Это позволяет выполнять экспорт, версионирование и отслеживание изменений конкретных пакетов и функциональных подсистем встроенными средствами среды без необходимости запуска классического конфигуратора «1С:Предприятия».