1c-db-update

Обновление конфигурации базы данных 1С. Используй когда пользователь просит обновить БД, применить конфигурацию, UpdateDBCfg

SKILL.md

GitHub

/db-update - Обновление конфигурации БД

Применяет изменения основной конфигурации к конфигурации базы данных (/UpdateDBCfg). Обязательный шаг после /db-load-cf, /db-load-xml, /db-load-git.

EDT MCP: Если проект открыт в EDT и доступен EDT MCP-сервер - используй update_database через MCP вместо этого скила. MCP поддерживает полное и инкрементальное обновление с автоматической реструктуризацией. Используй этот скил только если пользователь явно просит обновление через конфигуратор.

Usage

/db-update [database]
/db-update dev
/db-update dev -Dynamic+

Параметры подключения

Прочитай .v8-project.json из корня проекта. Возьми v8path (путь к платформе) и разреши базу:

  1. Если пользователь указал параметры подключения (путь, сервер) - используй напрямую
  2. Если указал базу по имени - ищи по id / alias / name в .v8-project.json
  3. Если не указал - сопоставь текущую ветку Git с databases[].branches
  4. Если ветка не совпала - используй default Если v8path не задан - автоопределение: Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" | Sort -Desc | Select -First 1 Если файла нет - предложи /db-list add. Если использованная база не зарегистрирована - после выполнения предложи добавить через /db-list add. База с ролью prod в .v8-project.json отказывает изменяющей операции: скрипт завершается кодом 1, пока не передан -AllowProd.

Команда

powershell.exe -NoProfile -File skills/1c-db-update/scripts/db-update.ps1 <параметры>

Параметры скрипта

Параметр Обязательный Описание
-V8Path <путь> нет Каталог bin платформы (или полный путь к 1cv8.exe)
-InfoBasePath <путь> * Файловая база
-InfoBaseServer <сервер> * Сервер 1С (для серверной базы)
-InfoBaseRef <имя> * Имя базы на сервере
-UserName <имя> нет Имя пользователя
-Password <пароль> нет Пароль
-AllowProd нет Разрешить операцию над базой, помеченной боевой (role: prod в .v8-project.json)
-Extension <имя> нет Обновить расширение
-AllExtensions нет Обновить все расширения
-Dynamic <+/-> нет + - динамическое обновление, - - отключить
-Server нет Обновление на стороне сервера
-WarningsAsErrors нет Предупреждения считать ошибками (ключ платформы)
-StrictLog нет Отказ в журнале поднимает код возврата до 1, даже если платформа вернула 0
-CheckApplicability нет Перед обновлением проверить, применимо ли расширение к этой базе

* - нужен либо -InfoBasePath, либо пара -InfoBaseServer + -InfoBaseRef

Расширения: проверка применимости и путь отката

-CheckApplicability запускает проверку применимости расширения к конкретной базе до обновления. Она ловит то, что не видят ни синтаксический контроль, ни проверка XML: перехватчик, который ссылается на метод, переименованный поставщиком. Исходники при этом корректны, и отказ проявился бы уже на боевой базе. Проверка не меняет базу; при отказе обновление не выполняется.

Замена расширения необратима сама по себе, поэтому до обновления снимаются два РАЗНЫХ состояния: редактируемая конфигурация расширения и конфигурация базы (то, что исполняют сеансы). Возврат к конфигурации базы отменяет правку, но уничтожает непримененные изменения, которые были до операции - он допустим только тогда, когда редактируемое состояние уже сохранено.

Удаление расширения обратной операцией к замене не является: оно сносит объекты расширения и все его привязки к конфигурации вместе с вашей правкой. Для нового расширения, которого в базе еще не было, точкой восстановления служат исходники.

Фоновое обновление (серверная база)

Параметр Описание
-BackgroundStart Начать фоновое обновление
-BackgroundFinish Дождаться окончания
-BackgroundCancel Отменить
-BackgroundSuspend Приостановить
-BackgroundResume Возобновить

Коды возврата

Код Описание
0 Успешно
1 Ошибка (см. лог)

Предупреждения

  • Если обновление не динамическое - потребуется монопольный доступ к базе (все пользователи должны выйти)
  • Для серверных баз рекомендуется -Dynamic+ для обновления без остановки
  • Если структура данных существенно изменилась (удаление реквизитов, изменение типов) - динамическое обновление может быть невозможно

Примеры

# Обычное обновление (файловая база)
powershell.exe -NoProfile -File skills/1c-db-update/scripts/db-update.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin"

# Динамическое обновление (серверная база)
powershell.exe -NoProfile -File skills/1c-db-update/scripts/db-update.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -Dynamic "+"

# Обновление расширения
powershell.exe -NoProfile -File skills/1c-db-update/scripts/db-update.ps1 -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -Extension "МоеРасширение"