Skip to content

ibcmd-rs v0.4.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 06:41
· 547 commits to master since this release
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.

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