Skip to content

Releases: Untru/ibcmd-rs

ibcmd-rs v0.4.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 06:41
2a55cb3

ibcmd-rs.exe под именем ibcmd.exe теперь и применяет конфигурацию: выгрузка, загрузка и применение идут теми же командами, что у штатного ibcmd, без платформы 1С:

ibcmd infobase config export --dbms=MSSQLServer --db-server=localhost --db-name=MyBase C:\export\MyBase
ibcmd infobase config import --dbms=MSSQLServer --db-server=localhost --db-name=MyBase C:\export\MyBase
ibcmd infobase config apply  --dbms=MSSQLServer --db-server=localhost --db-name=MyBase --force --dynamic=disable

Что нового

  • Своё применение конфигурации (ibcmd infobase config apply, #337, #343, #392). Переносит ConfigSave в Config монопольно, одной транзакцией: при сбое база остаётся как была. Применяет модули, формы, макеты, картинки и справку любых объектов, безвредные свойства описаний, новые формы и макеты существующих объектов. БСП и ERP УХ 8.3.27, БСП 8.5 (новые формы и макеты на 8.5 отклоняются). Синтаксис, вывод и коды возврата — как у штатной команды; строже штатной в одном: при подключённых сеансах применение отказывает с кодом −1 и списком сеансов (штатный ibcmd, запущенный на базе, их не видит).

  • Проверка «нужна ли реструктуризация» (#338, #404). ibcmd-rs mssql-apply-check (ConfigSave базы или дерево XML против базы) и apply-check-trees (два дерева) говорят, меняет ли загрузка структуру данных, и называют причину: правило, вид объекта, путь, операцию. По умолчанию любое изменение считается структурным; безвредными признаны только перечисленные явно: модули, формы, макеты, справка, картинки, представления, списки форм и команд. Если реструктуризация нужна, mssql-apply-check --fail-on-restructuring возвращает код 10 и пишет «требуется штатный config apply: <причины>». Загрузка штатным config import давала 400 причин, теперь одну реальную: остальные 516 строк доказаны как разница формата записи. --s1 показывает, что из найденного сделает своя реструктуризация; матрица из 89 случаев и 159 проб ничего вне S1 не пропускает.

  • Своя реструктуризация S1 (#391) внутри транзакции применения, на справочниках и документах:

    • добавить реквизит (#341, прототип и исследование);
    • удалить реквизит (#398);
    • увеличить длину строки переменной длины (#399);
    • включить или выключить индексирование реквизита, в том числе с дополнительным упорядочиванием (#400);
    • добавить табличную часть и реквизит существующей табличной части;
    • добавить справочник или документ.

    Кэши *.si нового объекта (#403), регистрация изменённых объектов у узлов планов обмена РИБ (#412), отказ для объекта, который заимствует расширение, и доказательство, что состояние расширений не изменилось (#405). Согласие на реструктуризацию — резервная копия: --recovery-backup=<файл> (применение само делает BACKUP DATABASE ... WITH COPY_ONLY) или --i-have-a-backup. Без них — отказ с кодом 1, база не тронута. По умолчанию перестраивается не больше 10 миллионов строк и 2 ГиБ расчётной записи в журнал за всю загрузку; выше предела — отказ с отсылкой к штатному apply.

  • Всё остальное — ответ требуется штатный config apply: <причины>, код 1, ничего не записано (другие свойства объектов, ссылочные и составные типы, регистры, предопределённые элементы, значения перечислений и остальное вне перечня S1).

  • Производные данные и служебные строки (#339, #340, #336). Что штатный apply пишет кроме Config, снято трассой. Наше применение пишет _ConfigChngR и _ExtProps, .si новых объектов, MobileVersions.dat, сбрасывает номера сообщений и сворачивает строки динамического обновления. Строки .ui (лицензирование платформы) не пишутся: сеанс, начатый после применения, видит новую конфигурацию на 8.3.27 и на 8.5.1.1150 (для сеансов, работавших во время применения, не измерено).

  • Загрузка в существующую базу (#388, #395, #419): переносит изменённые описания, новые объекты и удаления; пишет только изменённые строки, сохраняя остальные байт в байт. Защита по умолчанию сравнивает будущую конфигурацию с деревом до записи. Пустая загрузка БСП 8.5 и правка PaletteColor проходят полный штатный цикл, добавление и удаление сверены с независимыми штатными двойниками.

  • Синонимы: применение обновляет записи существующих объектов в служебном реестре, включая сочетание с S1 и возврат к исходному значению при сворачивании строк динамического обновления. Проверки и границы.

  • Загрузка без базы (#389): свойства регистра бухгалтерии, планов счетов и планов видов расчёта собираются в тех позициях, где их хранит платформа.

  • Выгрузка (#390, #410, #411): выгрузка не падает (SQL 8621) на базе после многих динамических обновлений; заимствованные формы расширений и группы форм по режиму совместимости; выгрузка после штатной загрузки берёт ConfigSave поверх Config и совпадает со штатной, включая ConfigDumpInfo.xml.

  • Исследования, без изменения поведения: infobase create без платформы (#342: что пишет штатная команда, как повторить; сама команда — в следующих версиях); реструктуризация вообще (#341, ibcmd-rs mssql-restructure работает только на лабораторных базах).

  • Качество: разобрано 578 находок проверки физических адаптеров (#396): 196 исправлены, 205 отложены в #413, 177 оставлены с причиной.

Проверено

Наш exe под именем ibcmd.exe, двойник (копия базы с одной и той же загрузкой) против штатного применения:

Штатный Наш Что совпало
БСП 8.3.27, 227 правок (9 517 строк, 81 МБ) 298 с 22 с Config 9 838 из 9 838; номера сообщений _ConfigChngR на 20 685 строках
ERP УХ 8.3.27, 300 изменённых модулей 639,8 с 34,8 с Config 118 377 из 118 377; штатная выгрузка отличается от эталона ровно 300 изменёнными файлами
БСП 8.5.1.1150, применение без реструктуризации — — Config 9 948 из 9 948; штатные выгрузки двойников — 12 337 файлов
БСП 8.3.27, S1: 11 реквизитов удалено, 2 добавлено (6 объектов, 8 таблиц) 34–195 с (все три случая S1) 18,6 с данные перестроенных таблиц, Config, штатная выгрузка (12 198 файлов)
БСП 8.3.27, S1: увеличена длина 6 строк (5 объектов, 10 таблиц) то же 18,1 с то же
БСП 8.3.27, S1: 12 переключений индексирования (6 объектов, 11 таблиц) то же 21,2 с то же
БСП 8.5.1.1150, S1: 11 реквизитов удалено, 2 добавлено (6 объектов, 8 таблиц) 155,8 с 39,6 с данные таблиц, Config, DBSchema и DBNames, штатная выгрузка (12 337 файлов)
БСП 8.5.1.1150, S1: увеличена длина 6 строк (5 объектов, 10 таблиц) 116,6 с 44,4 с то же
БСП 8.5.1.1150, S1: 12 переключений индексирования (6 объектов, 11 таблиц) 60,4 с 47,5 с то же
ERP УХ 8.3.27, S1: 8 реквизитов удалено, 1 добавлен (6 объектов, 10 таблиц; таблицы пусты) 394,9 с 381,9 с Config 118 377 из 118 377, таблицы, колонки, индексы, DBSchema и DBNames, штатная выгрузка (140 709 файлов)
ERP УХ 8.3.27, S1: увеличена длина 7 строк (7 объектов, 13 таблиц; таблицы пусты) 178,9 с 148,9 с то же

Для каждого случая S1 проверено: данные всех перестроенных таблиц (EXCEPT в обе стороны), строки Config (в том числе Creation и Modified), штатный config apply после нашего отвечает «не требуется», штатная выгрузка совпадает; без резервной копии применение отказывает и база не меняется. Время применения — порядок величины: машина была занята другими задачами.

Путь пользователя (#343): загрузка 25 правок (модули 17 видов объектов, формы, макеты, справка) нашим config import, затем наш config apply, без утилит SQL Server; штатная выгрузка совпадает с деревом (12 197 файлов, ConfigDumpInfo.xml — без configVersion); применение 62 с против 169 с у штатного (порядок величин: машина была занята другими задачами).

Ограничения

  • Реструктуризация S1 проверена на БСП 8.3.27 и 8.5 и на ERP УХ 8.3.27 (в резервной копии УХ таблицы пусты: проверена структура, а не копирование данных); на УХ 8.5 и на больших таблицах — нет: используйте штатный config apply.
  • Правка дерева → наша загрузка → наше применение проверены для каждой операции S1 (#407). Загрузка в существующую базу переносит изменённые описания, новые объекты и удаления (#388), а нетронутые строки сохраняет (#395). Удаление отдельного модуля или картинки из дерева пока отклоняется защитой импорта.
  • Удаление формы, макета или модуля (строка deleted) применяется; удаление объектов с таблицами остаётся за штатным config apply.
  • Не поддерживаются: --dynamic=force, --extension, --sqlcmd, --pid, --remote, файловые базы, СУБД кроме MSSQLServer.
  • Создание базы (infobase create) выполняет штатная платформа.

Как установить

  1. Скачайте ibcmd-rs-0.4.0-x86_64-pc-windows-msvc.zip и распакуйте.
  2. Скопируйте ibcmd-rs.exe под именем ibcmd.exe в отдельную папку.
  3. Штатный ibcmd.exe платформы не удаляйте: infobase create и то, что применение отправляет на штатный config apply, выполняет он.

Для Linux есть сборка x86_64-unknown-linux-gnu; на Linux вход только по логину SQL Server.

Подробности — в README, раздел «Применение конфигурации». Все задачи версии — в майлстоуне 0.4.

Полный список изменений.

ibcmd-rs v0.3.0

Choose a tag to compare

@Untru Untru released this 28 Sep 23:53

ibcmd-rs.exe можно положить под именем ibcmd.exe и выгружать и загружать конфигурацию теми же командами, что и штатным ibcmd:

ibcmd infobase config export --dbms=MSSQLServer --db-server=localhost --db-name=MyBase C:\export\MyBase
ibcmd infobase config import --dbms=MSSQLServer --db-server=localhost --db-name=MyBase C:\export\MyBase

Что нового

  • Синтаксис штатного ibcmd для infobase config export и import: те же параметры, тот же вывод ([INFO] …) и коды возврата (0, 2, −1). Остальные команды отвечают «не поддерживается в этой версии ibcmd-rs» с кодом 1; штатный ibcmd вместо них не запускается.
  • Без sqlcmd и bcp: встроенный клиент SQL Server (TDS), вход Windows или логин SQL Server, шифрование, чтение по нескольким соединениям. --sqlcmd возвращает поведение 0.2.
  • Версия платформы 8.3.27 / 8.5.1 вместо формата 2.20 / 2.21. Её задают --platform, переменная IBCMD_RS_PLATFORM, файл ibcmd-rs.toml (с привязкой платформы к конкретным базам) или раздел database: штатного --config.
  • Загрузка в пустую базу без ключей: пустую базу утилита распознаёт сама. У ERP УХ теперь совпадает и ConfigDumpInfo.xml.

Проверено

Наш exe под именем ibcmd.exe, без sqlcmd и bcp в PATH, без флага версии:

Выгрузка: совпало со штатной, время Загрузка в пустую базу → штатный apply → штатная выгрузка
БСП 8.3.27 12 198 из 12 198, 9 с 12 197 из 12 198*
БСП 8.5 12 337 из 12 337, 10 с 12 336 из 12 337*
ERP УХ 8.3.27 140 709 из 140 709, 163 с 140 708 из 140 709*
ERP УХ 8.5 140 709 из 140 709, 142 с 140 708 из 140 709*

* Отличается только configVersion в ConfigDumpInfo.xml.

Штатная выгрузка ERP УХ на той же машине занимает 5,5–7 мин.

Как установить

  1. Скачайте ibcmd-rs-0.3.0-x86_64-pc-windows-msvc.zip и распакуйте.
  2. Скопируйте ibcmd-rs.exe под именем ibcmd.exe в отдельную папку.
  3. Штатный ibcmd.exe платформы не удаляйте: config apply и infobase create выполняет он.

Для Linux есть сборка x86_64-unknown-linux-gnu; на Linux вход только по логину SQL Server.

Подробности — в README. Все задачи версии — в майлстоуне 0.3.

Полный список изменений: v0.2.0...v0.3.0

ibcmd-rs v0.2.0

Choose a tag to compare

@Untru Untru released this 28 Sep 09:15

Выгрузка и загрузка конфигураций 1С между XML и базой на SQL Server — теперь быстрее штатного ibcmd и с загрузкой в пустую базу. Как запускать — в README.

Главное

  • Выгрузка через модель метаданных — по умолчанию. На БСП и ERP УХ, платформы 8.3.27 и 8.5, все файлы XML совпадают со штатной выгрузкой той же базы.
  • Выгрузка быстрее штатной. ERP УХ, около 140 тысяч файлов: 3,5–4,5 мин против 6–7 мин у ibcmd 8.3.27, 3–4 мин против 5,5–7 мин у ibcmd 8.5. БСП: 12 с против 17 с.
  • Загрузка в пустую базу: mssql-stage-source-objects --base-free собирает все строки конфигурации из одного XML. Проверено на БСП и ERP УХ, 8.3.27 и 8.5: пустая база, наша загрузка, штатный config apply, штатная выгрузка — совпадают все файлы, кроме ConfigDumpInfo.xml.
  • Скорость:
    • табличные макеты — в ~10 раз меньше CPU;
    • формы — в ~4 раза меньше;
    • этап индексов выгрузки — в ~3 раза меньше;
    • запись файлов вынесена в отдельные потоки, аллокатор mimalloc;
    • загрузка в пустую базу быстрее в 2–5 раз, ERP УХ — около минуты.
  • 8.5: строка version теперь перечисляет возможности платформы, которые использует конфигурация (цвета палитры). Раньше config apply отказывался: «требуется более новая версия платформы».

Файлы

  • ibcmd-rs.exe — исполняемый файл для Windows x64.
  • ibcmd-rs-0.2.0-x86_64-pc-windows-msvc.zip — exe, README, матрица совместимости и SBOM; рядом .sha256.
  • ibcmd-rs-0.2.0-x86_64-pc-windows-msvc.sbom.cdx.json — состав зависимостей (CycloneDX).

Проверка

  • 3 421 тест, 0 падений.
  • Выгрузка из SQL и из сохранённых строк на четырёх корпусах совпадает со штатной.
  • Загрузка в пустую базу проверена на четырёх корпусах в настоящих базах.
  • Упаковка scripts/package_release.py, аудит scripts/audit_release.py: в бинарнике нет вызовов платформы 1С.

Ограничения

  • Только Microsoft SQL Server. Создание базы и config apply выполняет штатная платформа.
  • Проверено на БСП и ERP УХ (8.3.27.2214 и 8.5.1.1150).
  • При загрузке ERP УХ в пустую базу в ConfigDumpInfo.xml нет 145 пустых служебных записей (справка и предопределённые без содержимого).
  • Этот релиз собран вручную, теми же шагами, что и конвейер release.yml. CI в репозитории сейчас красный: форматирование кода и новые проверки clippy.