Развертка: закрываем расхождения и открываем исходники

02.11.26

Разработка - DevOps и автоматизация разработки

В прошлой статье у ERP оставалось 89 отказов загрузки, у ЗУП — 19. Теперь обе конфигурации совпали с эталонами, а собранные файлы прошли круг через платформу. Развертка выделена в открытый репозиторий cf-unwrapper: библиотека на Rust и консольная утилита. Показываю результаты, объясняю границы «100%» и приглашаю к проверкам и развитию проекта.

Открытый механизм Развертки и проверенные ERP и ЗУП

 

В прошлой статье я показал результаты выгрузки пяти конфигураций и пообещал вынести конвертер в отдельный продукт. В таблице тогда оставались неприятные строки: ERP загружалась с 89 отказами, ЗУП — с 19, а старая Бухгалтерия не собиралась вовсе.

Теперь эти отказы закрыты. ERP и ЗУП совпали с эталонами и при выгрузке XML, и при сравнении записей после загрузки. Собранные файлы прошли дополнительный круг через платформу.

Отдельный продукт тоже появился: Развертка / cf-unwrapper. В репозитории — библиотека на Rust, консольная утилита, тесты и инструкции для сборки. Ниже расскажу, что пришлось исправить, что именно означает результат «100%» и где проекту нужна помощь сообщества.

 

Что изменилось в цифрах

Сначала три строки из прошлой публикации и их нынешнее состояние:

Конфигурация Было при выгрузке Стало при выгрузке Отказов при загрузке: было → стало
ERP 2.5.22.186 121 701 из 121 712 121 712 из 121 712 89 → 0
ЗУП 3.1.37.54 40 322 из 40 560 40 560 из 40 560 19 → 0
БП 3.0.107.34 68 742 из 68 742 68 742 из 68 742 11 302 → 0

 

И полная таблица после общей регрессии:

Конфигурация Выгрузка: совпало файлов Загрузка: совпало записей Отказов загрузки
Клиент ЭДО 2.9 21 758 из 21 758 17 626 из 17 626 0
БП 3.0.171.23 90 385 из 90 385 77 265 из 77 266* 0
БП 3.0.107.34 68 742 из 68 742 58 637 из 58 637 0
ЗУП 3.1.37.54 40 560 из 40 560 33 966 из 33 966 0
ERP 2.5.22.186 121 712 из 121 712 102 375 из 102 375 0

 

Проверки выполнены с платформой 8.5.1.1529. При выгрузке сравниваются файлы XML-выгрузки с результатом платформы. При загрузке — внутренние записи с записями файла, который платформа собрала из того же XML. Служебная запись versions со случайными GUID из этой сверки исключена: таблица не означает побайтового равенства всего .cf.

В свежей Бухгалтерии остался описанный в прошлой статье макет Reports/ПраваРолей/Макет: платформа объединяет одинаковые оформления с учетом адресов картинок в памяти. Это мешает воспроизвести ее результат побайтово. Эту строку я оставляю в таблице как есть.

 

Почему последние расхождения заняли столько работы

Когда совпадает больше ста тысяч файлов, оставшиеся несколько выглядят небольшой задачей. Но за одним файлом может стоять отдельный механизм платформы.

В ERP пришлось доделать диаграммы: шкалы, рамки и палитры серий. У динамических списков — восстановить роли полей своего запроса и особенности виртуальных таблиц. На длинных списках обнаружилась еще одна деталь: важно не только содержимое ServerState, но и то, как писатель разбивает его на буферы и части. Эквивалентного содержимого недостаточно для совпадения внутренней записи.

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

В ЗУП оставались особенности метаданных: история данных старых записей регистров сведений, стандартный реквизит PredefinedDataName, создание справочников при вводе, свойства старых web- и HTTP-сервисов, история выбора. Это уже не большие новые типы объектов, а небольшие различия, разбросанные по выгрузке.

Принцип загрузки сохранился: если хотя бы один входной файл отвергнут, итоговый файл конфигурации не создается и существующий результат не заменяется. После исправлений все пять конфигураций собираются без отказов.

 

Проверка, которую нельзя заменить сравнением записей

После совпадения записей остается практический вопрос: примет ли файл сама платформа?

Для ERP и ЗУП я выполнил два одинаковых круга:

Исходный XML U94; Развертка U94; наш CF     U94; база U94; XML №1
Исходный XML U94; платформа U94; эталонный CF U94; база U94; XML №2

Оба файла загружались через ibcmd, затем платформа выгружала конфигурацию в XML. Между результатами этих кругов:

  • ERP — 121 712 совпавших файлов из 121 712.
  • ЗУП — 40 560 из 40 560.

Если сравнить их с самым первым XML, появляются отличия: 16 файлов у ERP и 7 у ЗУП. Но они одинаковы в обоих кругах. В ERP это свойство командной панели в формах с диаграммами Ганта. В ЗУП — порядок стандартных реквизитов планов обмена и отдельные свойства управляемых форм.

То есть сама платформа меняет часть выгрузки при повторном сохранении. Без второго, эталонного круга эти изменения можно было бы ошибочно приписать конвертеру.

Поэтому «100%» здесь относится к перечисленным проверкам конкретных релизов ERP и ЗУП. Следующая версия или небольшая чужая обработка вполне может принести случай, которого еще не было в тестах.

 

Теперь это отдельный репозиторий

Раньше форматный движок жил внутри constructor рядом с интерфейсом и другими инструментами. Чтобы использовать только выгрузку, приходилось иметь дело со всем проектом. Теперь у Развертки свой репозиторий cf-unwrapper и две части:

cf-unwrapper
_00;^72;^72; crates/cf-unwrapper       библиотека форматов
^92;^72;^72; crates/cf-unwrapper-cli   консольная утилита

В библиотеке находятся контейнеры, метаданные, XML, формы, макеты и вспомогательный разбор запросов для динамических списков. CLI вызывает ту же библиотеку. Ее можно использовать и в других инструментах, не дублируя реализацию форматов.

GUI, отладчик и BSL-сервер остались в constructor. Подключение constructor к новой библиотеке — отдельная следующая работа.

Код перенесен в новый репозиторий без истории исходного проекта и без проверочных конфигураций. Для автономных проверок подготовлены синтетические тесты; CI настроен на Windows и Linux. Происхождение встроенных ресурсов описано в аудите. Исходный код объявлен под MIT; для платформенных seed/default templates происхождение и ограничения указаны отдельно.

Важная граница: таблица выше получена на исходном движке до выделения. Самостоятельный workspace прошел синтетические проверки, включая сборку пакета. Повторного прогона всех пяти типовых конфигураций уже из нового репозитория пока не было. Такой прогон будет полезной ближайшей проверкой переноса.

 

Как попробовать

Понадобятся Git и Rust stable. Платформа для сборки и работы самой утилиты не нужна:

git clone https://github.com/RunetX/cf-unwrapper.git
cd cf-unwrapper
cargo build --release --locked --bin cf-unwrapper

Исполняемый файл появится в target/release/: cf-unwrapper.exe на Windows, cf-unwrapper на Linux. После добавления каталога в PATH:

cf-unwrapper export 1Cv8.cf src
cf-unwrapper import src rebuilt.cf
cf-unwrapper export rebuilt.cf src-again
cf-unwrapper xml-diff src-again src 3

Для старых версий XML остался выбор формата:

cf-unwrapper export 1Cv8.cf src-2.20 --format 2.20
cf-unwrapper export 1Cv8.cf src-2.17 --format 2.17

По умолчанию используется 2.21. Также есть распаковка и сборка контейнера, дерево метаданных, просмотр модулей, поиск и создание минимальной внешней обработки. Полный список — в README и cf-unwrapper --help.

Одна деталь для скриптов: xml-diff и import-check возвращают код 0, если сравнение выполнено, даже при найденных различиях. Проверять нужно счетчики отчета. Отказы загрузки у import дают ненулевой код.

 

Что предлагаю делать вместе

 

Общий рабочий стол: участники проверяют и дополняют открытый движок

 

Следующий шаг — расширять проверку за пределы моих пяти конфигураций. Для этого не обязательно писать на Rust.

Проверить свою конфигурацию. Указать релиз, платформу, режим совместимости, коммит утилиты и результат сравнения. Особенно интересны расширения, внешние обработки, старые версии и редкие свойства форм. Успешный результат тоже полезен: он показывает, где движок уже работает.

Свести ошибку к небольшому примеру. Сообщение «моя ERP не собирается» трудно превратить в тест. Одна синтетическая форма, один макет или одна конструкция запроса с тем же отказом позволяют разобраться гораздо быстрее. Рабочие конфигурации и данные клиентов выкладывать не нужно.

Доработать движок. Исправить формат, добавить regression test, проверить поведение на другой ОС или улучшить документацию. Предложения и результаты можно оставлять в issues, изменения — присылать pull request.

Хочется, чтобы Развертка стала общей библиотекой для инструментов вокруг файлов конфигураций: с проверяемыми правилами формата и небольшими тестами на найденные случаи. Теперь для этого есть отдельное место и код, который можно взять в работу.

Если попробуете на своей конфигурации — напишите, что получилось. И какой сценарий стоит развивать первым: расширения, выборочную работу с объектами или интеграцию в ваши сборочные инструменты?

Иллюстрации созданы с помощью нейросети.

Вступайте в нашу телеграмм-группу Инфостарт

Развертка cf-unwrapper Rust XML cf epf cfe ERP ЗУП git CI открытый код выгрузка конфигурации загрузка конфигурации форматы 1С

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Разработка Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Платные (руб)

Практический курс по работе с AI-агентами для разработчиков 1С уровня middle и senior, а также тимлидов команд: от постановки задач и передачи контекста до создания расширений, интеграций, MCP-инструментов, тестов и проверки готового решения.

50000 руб.

10.09.2026    13214    104    0    

78

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Файловый обмен (TXT, XML, DBF), FTP Системный администратор Разработчик 1С 8.5 Бесплатно (free)

Выгрузка типовой Бухгалтерии в XML через базу занимает больше четырёх минут. Я написал движок, который читает файл конфигурации напрямую и выгружает его за 35 секунд, совпадая с выгрузкой платформы байт в байт во всех 90 385 файлах. Загрузка обратно тоже работает: круг через платформу совпадает полностью. Рассказываю, как ускоряли, как проверяем и что при загрузке XML теряет сама платформа. А в конце спрашиваю, нужно ли это кому-то, кроме меня, и на какой конфигурации проверить следующей.

27.10.2026    846    oyti    20    

16

Нейросети DevOps и автоматизация разработки Разработчик Руководитель проекта 1С 8.3 1С 8.5 Бесплатно (free)

Полтора месяца ИИ-агенты писали мне коммерческое расширение 1С. Я поднял журналы всех сессий и сложил по прайсу: $13 365, из них 94 % — за то, что агент заново перечитывает уже известное. Разбор счёта, три дыры, правила, которые вчетверо удешевили шаг, и скрипт, чтобы посчитать свой.

08.10.2026    2356    deda    29    

16

Нейросети DevOps и автоматизация разработки Разработчик 1С 8.3 Абонемент ($m)

Запуск MCP-сервера в Docker с --read-only, --cap-drop ALL, сетью none и внутренней сетью только до заглушки 1С. Что показали попытки соединения, записи на диск и чтения окружения, почему сервер падал на журнале и как это исправлено. Прогон на Docker 29.8.0 и mcp 2.2.0, в архиве Dockerfile и скрипт проверки.

1 стартмани

06.10.2026    782    Ninel_S    0    

8

Нейросети DevOps и автоматизация разработки Разработчик 1С 8.3 Бесплатно (free)

Подключаем Cursor к 1C: Platform Tools MCP на Windows: установка расширений, packagedef, IPC, токен и mcp.json. Восемь шагов со снимками экрана, проверка env_status, разбор MODULE_NOT_FOUND и конфликта портов. Исправляем ошибки предыдущей статьи и объясняем, как агент получает метаданные из XML. Стенд: Cursor 3.19.7, Platform Tools 0.9.6, MCP 0.3.0.

28.09.2026    6053    Ninel_S    2    

10

DevOps и автоматизация разработки Администрирование СУБД Групповая разработка (Git, хранилище) Разработчик 1С 8.3 Абонемент ($m)

В корпоративных инсталляциях «1С:Предприятие 8.3» под управлением PostgreSQL всё чаще проявляются архитектурные пределы масштабирования: рост числа пользователей, обязательная маркировка, плотный поток API-интеграций и высокая стоимость простоя. Вводная часть цикла разбирает ключевые факторы современной эксплуатационной нагрузки и формирует инженерную методологию эволюционной модернизации без остановки продуктивного контура. Материал основан на практическом кейсе «Торговый контур» и показывает, как определить целевые метрики (p95, MTTR, APDEX), выстроить наблюдаемость, стабилизировать работу кластера и подготовить инфраструктуру к дальнейшему масштабированию. Публикация задаёт фундамент для последующих частей, посвящённых телеметрии, оптимизации PostgreSQL, CI/CD и архитектурному росту.

1 стартмани

10.09.2026    1506    Ninel_S    0    

6

DevOps и автоматизация разработки Тестирование QA Групповая разработка (Git, хранилище) Разработчик 1С:Предприятие 8 Бесплатно (free)

Четыре года в интеграторе я работал с git и EDT. Git после хранилища полюбил сразу: видно, кто и что менял. С EDT сложнее: тормозит, ошибки при обновлении ERP, автономный сервер внутри него работает только с файловой базой. На новой работе команда захотела перейти на git, я развернул EDT, и оно на второй день разрушило проект при загрузке расширения. Тогда я решил дать команде git с привычным Конфигуратором и инструмент, который за минуту доносит коммит до базы через ibcmd, вместо получасовой загрузки из файлов. На новой работе разрешили ИИ, и я написал это приложение с его помощью: от чтения документации и первого ТЗ до идей в электричке. Впервые за годы снова почувствовал себя творцом, а не закрывателем задач. По дороге приросли выгрузка, объединение и проверка конфигурации по коммитам, YAxUnit и режим MCP-сервера. В статье: схемы, скриншоты, грабли и честный список ограничений. Ссылки пока нет: хочу понять, нужно ли это кому-то, кроме меня.

03.09.2026    12308    KatanaDragon511    30    

40

DevOps и автоматизация разработки Разработчик Бесплатно (free)

Представьте, что вас попросили «сделай нам DevOps для 1С». С чего начинать? Часто за этой потребностью скрывается хаос в самом процессе разработки. Поэтому начинать нужно не с инструментов, не с серверов и не со скриптов, а с понимания того, что именно необходимо изменить. Предлагаем небольшой спасительный чек-лист, по которому можно относительно безболезненно запустить современные процессы управления разработкой 1С, даже когда у команды нет ничего, а изменения они присылают друг другу почтой и в мессенджерах. Вы получите структурированный пошаговый список задач, с которым не страшно окунаться в любой проект аудита разработки на 1С с целью навести там порядок.

31.08.2026    3813    Evil Beaver    3    

13
Для отправки сообщения требуется регистрация/авторизация