При работе с крупными конфигурациями 1С, такими как ERP или Комплексная автоматизация, полная выгрузка конфигурации в файлы для последующего анализа (есть инструмент архитектурного анализа конфигураций 1С) или версионирования может занимать значительное время. Часто перед разработчиком встает задача выгрузить не всю конфигурацию целиком, а лишь конкретные объекты (справочники, документы, модули), над которыми велась работа. В этой статье мы подробно разберем, как реализовать выборочную выгрузку и загрузку метаданных, используя штатные механизмы платформы 1С:Предприятие 8.3.
Платформа 1С предоставляет возможность декомпозиции конфигурации на текстовые и XML-файлы. Это необходимо для интеграции с системами контроля версий (Git, SVN) и автоматизации процессов сборки (CI/CD) (поможет автоматизация CI/CD и интеграция 1С с GitLab). Основной командой для этого процесса является запуск конфигуратора в пакетном режиме с ключом /DumpConfigToFiles. Однако по умолчанию эта команда обрабатывает всю конфигурацию. Чтобы ограничить список объектов, мы будем использовать специальный параметр -listFile.
Рассмотрим по шагам, как подготовить окружение и выполнить команду.
Для того чтобы платформа «поняла», какие именно объекты нам нужны, необходимо создать текстовый файл (например, objdump.txt). Этот файл должен быть сохранен в кодировке UTF-8. Рассмотрим подробнее правила его наполнения:
ТипОбъекта.ИмяОбъекта.Проанализируем пример содержимого такого файла:
Configuration
Document.БольничныйЛист
Catalog.Сотрудники.Form.ФормаЭлемента
CommonModule.ОбщегоНазначения
Важное примечание: Обратите внимание на объект Configuration. Его включение в список позволяет выгрузить корень конфигурации, что включает в себя модули управляемого приложения, сеанса, а также общие свойства конфигурации. Если его не указать, будут выгружены только файлы самих объектов (документов, справочников), но общая структура проекта может оказаться неполной.
Теперь разберем структуру команды для запуска из командной строки (cmd) или PowerShell. Нам потребуется указать путь к исполняемому файлу платформы, параметры авторизации и ключи выгрузки.
Посмотрим на пример командной строки:
"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" DESIGNER /S "Server\Base" /N "Admin" /P "Password" /DumpConfigToFiles "C:\Export\Files" -listFile "C:\Scripts\objdump.txt" /Out "C:\Logs\dump.log"
Разберем основные параметры этой команды:
DESIGNER — запуск в режиме конфигуратора./S — адрес информационной базы на сервере (или /F для файловой базы)./DumpConfigToFiles — путь к каталогу, куда будут помещены файлы.-listFile — путь к нашему подготовленному списку объектов./Out — путь к лог-файлу, где будет зафиксирован результат операции.Одной из недокументированных в базовых примерах, но крайне важных особенностей является ключ -update. Если вы выполняете выгрузку в папку, где уже лежат ранее выгруженные файлы, использование этого ключа заставит платформу сравнивать текущее состояние метаданных с файлами на диске. В этом случае будут обновлены только те XML и BSL файлы, в которых действительно произошли изменения.
Без ключа -update при выборочной выгрузке платформа может очистить целевой каталог или создать конфликт версий, поэтому мы рекомендуем всегда добавлять его для ускорения процесса и сохранения истории в Git.
Если вы отредактировали файлы модулей или форм во внешнем редакторе и хотите загрузить их обратно в конфигурацию, используется симметричная команда /LoadConfigFromFiles. Здесь также крайне желательно использовать -listFile, чтобы случайно не затереть другие объекты конфигурации старыми версиями из файлов.
Пример команды для частичной загрузки:
"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" DESIGNER /S "Server\Base" /N "Admin" /P "Password" /LoadConfigFromFiles "C:\Export\Files" -listFile "C:\Scripts\objload.txt" -update
Нюанс целостности: Выясним причину возможных ошибок при загрузке. Если вы загружаете документ, который ссылается на новый общий модуль или реквизит, которого еще нет в базе, загрузка завершится ошибкой. Платформа проверяет ссылочную целостность метаданных в момент импорта.
Если разработка ведется с использованием хранилища 1С, процесс усложняется. Проанализируем правильный алгоритм действий, чтобы не нарушить работу команды:
/ConfigurationRepositoryUpdateCfg)./ConfigurationRepositoryLock)./ConfigurationRepositoryCommit).Рассмотрим пример комплексной строки, учитывающей работу с хранилищем:
"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" DESIGNER /DisableStartupMessages /S "DEV1C\Base" /N "User" /P "Pass" /ConfigurationRepositoryS "tcp://Server/Repo" /ConfigurationRepositoryN "User" /ConfigurationRepositoryP "Pass" /DumpConfigToFiles "C:\Cache" -listFile "C:\Scripts\objects.xml" /Out "C:\Logs\report.log"
Механизм выборочной выгрузки применим и к расширениям. Для этого используются специализированные ключи:
/DumpExtensionToFiles — для выгрузки./LoadExtensionToFiles — для загрузки.-Extension "ИмяРасширения".Параметр -listFile работает здесь точно так же, позволяя обновлять только заимствованные или новые объекты внутри конкретного расширения.
Разберем несколько важных моментов, которые часто упускают новички:
1. Кодировка и BOM. Платформа 1С чувствительна к наличию метки BOM (Byte Order Mark) в файлах UTF-8. Если при попытке выгрузки вы получаете ошибку «Файл списка не найден», хотя путь указан верно, попробуйте пересохранить -listFile в кодировке UTF-8 без BOM.
2. Служебный файл ConfigDumpInfo.xml. При каждой выгрузке в целевом каталоге создается файл ConfigDumpInfo.xml. Это своего рода индекс, в котором хранится информация о версии конфигурации и времени выгрузки каждого объекта. Никогда не удаляйте его вручную, если планируете использовать инкрементальную выгрузку с ключом -update.
3. Разделение файлов. Помните, что платформа при выгрузке разбивает один объект 1С на множество файлов. Например, для формы будут созданы:
ManagedForm.xml — описание визуальной структуры.Ext/Form/Module.bsl — программный код на языке 1С.Это очень удобно для анализа изменений кода (code review), так как в Git будет видно изменение только в .bsl файле, а не во всем огромном XML-описании объекта — для этих целей есть нейросетевой помощник для разработки на 1С.
4. Пустые строки. Проанализируем структуру -listFile: в нем не должно быть пустых строк в начале или в середине списка. Каждая строка должна содержать ровно одно имя объекта. Лишние пробелы также могут привести к сбою парсинга.
Таким образом, мы рассмотрели мощный инструмент для оптимизации работы разработчика 1С. Использование выборочной выгрузки позволяет сократить время на рутинные операции и построить надежный конвейер автоматизации разработки.