14 KiB
name, description, argument-hint, allowed-tools
| name | description | argument-hint | allowed-tools | ||||
|---|---|---|---|---|---|---|---|
| db-repo | Работа с хранилищем конфигурации 1С. Используй когда нужно захватить объекты, поместить изменения в хранилище конфигурации, получить изменения из него, подключить базу к хранилищу | <lock|unlock|commit|update> [database] -Objects "<объекты>" |
|
/db-repo — Хранилище конфигурации 1С
Захват и помещение объектов, получение изменений, подключение базы, история версий, администрирование хранилища.
Хранилище конфигурации 1С, а не Git-репозиторий.
Usage
/db-repo lock [database] -Objects "Справочник.Номенклатура"
/db-repo commit [database] -Objects "Справочник.Номенклатура" -Comment "Добавлен Артикул"
/db-repo unlock [database] -Objects "Справочник.Номенклатура"
/db-repo update [database]
Порядок работы
В базу, подключённую к хранилищу, исходники грузятся только частично и только по захваченным объектам. Выполняй строго по шагам:
0. /db-repo update <база> — начать с актуального состояния
1. /db-repo lock <база> -Objects "Справочник.Номенклатура"
2. если шаг 0 или 1 напечатал «локальная конфигурация изменена, получено объектов из хранилища: N» —
выгрузи названные объекты: /db-dump-xml <база> <каталог> -Mode Partial -ObjectsFile "<файл из вывода>"
3. правки в исходниках: /meta-edit, /form-edit, /skd-edit, /meta-compile и т. д.
4. /db-load-xml <каталог> <база> -Mode Partial -Files "Catalogs/Номенклатура.xml,…" -UpdateDB
5. /db-repo commit <база> -Objects "Справочник.Номенклатура" -Comment "…"
Шаг 0 стоит делать всегда, когда работа не продолжается сразу после предыдущего цикла: правки должны опираться на актуальное состояние — в том числе тех объектов, которые ты не меняешь, но используешь.
Шаг 2 пропускать нельзя: захват и обновление подтягивают из хранилища свежие версии, и загрузка исходников, снятых раньше, откатит чужие изменения — молча, без ошибки.
Что вообще захватывается. Отдельные объекты хранилища — сам объект, а также его формы, макеты и команды. Реквизиты, табличные части, измерения и ресурсы отдельными объектами не являются: они правятся в составе владельца.
| Что правишь | Что захватывать |
|---|---|
| Реквизит, табличную часть, измерение, ресурс, модуль объекта | сам объект: Справочник.Контрагенты |
| Существующую форму, макет, команду | её саму: Справочник.Контрагенты.Форма.ФормаЭлемента |
| Добавляешь новую форму, макет, команду | объект-владельца; при помещении назови и новый объект |
| Добавляешь новый объект конфигурации | только корень: Конфигурация. Самого объекта ещё нет — захватить его нельзя; при помещении назови и его |
Захватывай минимум того, что правишь: чем шире захват, тем больше конфликтов с коллегами.
Захват объекта его формы и макеты не захватывает — для этого есть -WithChildren.
Параметры подключения
Прочитай .v8-project.json из корня проекта. Возьми v8path и разреши базу:
- Если пользователь указал параметры подключения — используй напрямую
- Если указал базу по имени — ищи по id / alias / name
- Если не указал — сопоставь текущую ветку Git с
databases[].branches - Если ветка не совпала — используй
default
Реквизиты хранилища передавать не нужно: запись базы находится по переданным параметрам
соединения (-InfoBasePath либо -InfoBaseServer + -InfoBaseRef), реквизиты берутся из её
repository. Задать их явно можно параметрами -Repository*.
Команда
python ".opencode/skills/db-repo/scripts/db-repo.py" -Command <подкоманда> <параметры>
Рабочий цикл
| Подкоманда | Что делает |
|---|---|
lock |
Захватить объекты |
unlock |
Отменить захват |
commit |
Поместить изменения в хранилище |
update |
Получить изменения из хранилища |
Параметры
| Параметр | Обязательный | Описание |
|---|---|---|
-InfoBasePath <путь> |
* | Файловая база |
-InfoBaseServer <сервер> |
* | Сервер 1С |
-InfoBaseRef <имя> |
* | Имя базы на сервере |
-UserName <имя> |
нет | Пользователь базы |
-Password <пароль> |
нет | Пароль пользователя базы |
-Objects <список> |
усл. | Объекты через запятую. Для lock, unlock, commit обязателен, если не задан -All |
-ObjectsFile <путь> |
нет | Файл со списком объектов, одно имя на строку |
-All |
нет | Операция над всей конфигурацией — вместо -Objects, а не вместе с ним |
-WithChildren |
нет | Вместе с подчинёнными объектами на полную глубину |
-Comment <текст> |
нет | Комментарий к помещению (commit). Многострочный — как есть, с переводами строк |
-KeepLocked |
нет | Оставить объекты захваченными после помещения |
-Revised |
нет | Получать захваченные объекты, если потребуется |
-Force |
нет | Разное по подкомандам — см. ниже |
-Extension <имя> |
нет | Работать с хранилищем расширения |
-RepositoryPath <путь> |
нет | Хранилище явно, вместо реестра |
-RepositoryUser <имя> |
нет | Пользователь хранилища явно |
-RepositoryPassword <пароль> |
нет | Пароль пользователя хранилища явно |
-AdditionalV8Arguments <список> |
нет | Доп. аргументы 1cv8.exe через запятую |
*— нужен либо-InfoBasePath, либо пара-InfoBaseServer+-InfoBaseRef
-Force
| Подкоманда | Что делает |
|---|---|
unlock |
Теряет локальные правки: объекты перезаписываются версией из хранилища |
commit |
Пытается очистить ссылки на удалённые объекты вместо ошибки |
update |
Подтверждает добавление и удаление объектов конфигурации |
Имена объектов
Объект — Справочник.Номенклатура. Форма, макет, команда — полным путём:
Документ.ЗаказПокупателя.Форма.ФормаДокумента, Справочник.Номенклатура.Макет.Печать.
Корень конфигурации — Конфигурация.
Если объект «не найден», это не всегда опечатка: он мог появиться в хранилище позже, чем
обновлялась база (/db-repo update), либо это вовсе не объект хранилища — реквизит или
табличная часть.
Результат
Нулевой код не означает, что что-то изменилось. Под нулём приходят «уже захвачено», «обновлять нечего», «помещать нечего» и частичный захват — когда часть объектов занята другими, а остальное захвачено и его можно править.
Читай текст вывода, а не только код. Там же приходит список полученных из хранилища объектов, который требует перевыгрузки перед правкой.
Требуют подтверждения пользователя
Перед этими операциями спроси подтверждение:
| Операция | Почему |
|---|---|
lock -All |
Захватывает всю конфигурацию: на большой базе идёт долго и блокирует работу всей команде |
unlock -Force |
Теряются локальные правки захваченных объектов |
disconnect |
Теряется подключение базы к хранилищу, в том числе на стороне хранилища |
connect -ForceReplaceCfg |
Конфигурация базы заменяется конфигурацией из хранилища |
update не выполнится, если у базы в реестре не объявлено repository, а реквизиты не заданы
явно: на неподключённой к хранилищу базе эта команда заменяет всю конфигурацию его содержимым и
рапортует успех.
Расширения
У расширения своё хранилище со своим путём. Укажи -Extension "<Имя>" — реквизиты возьмутся из
extensions[].repository записи базы. Подкоманды работают одинаково для основной конфигурации и
для расширения.
Остальные задачи
| Файл | Про что |
|---|---|
| connect.md | Подключение и отключение базы от хранилища |
| history.md | История версий, отчёт, выгрузка версии в CF |
| admin.md | Создание хранилища, пользователи и права |
| service.md | Метки версий, оптимизация, очистка кеша |
Примеры
# Захватить справочник вместе с подчинёнными объектами
python ".opencode/skills/db-repo/scripts/db-repo.py" -Command lock -InfoBasePath "C:\Bases\MyDB" -Objects "Справочник.Номенклатура" -WithChildren
# Захватить корень — он нужен, чтобы добавить или удалить объект конфигурации
python ".opencode/skills/db-repo/scripts/db-repo.py" -Command lock -InfoBasePath "C:\Bases\MyDB" -Objects "Конфигурация"
# Поместить новый объект: он уже существует, поэтому называется вместе с корнем
python ".opencode/skills/db-repo/scripts/db-repo.py" -Command commit -InfoBasePath "C:\Bases\MyDB" -Objects "Конфигурация,Справочник.Склады" -Comment "Добавлен справочник Склады"
# Поместить с комментарием, оставив захват
python ".opencode/skills/db-repo/scripts/db-repo.py" -Command commit -InfoBasePath "C:\Bases\MyDB" -Objects "Справочник.Номенклатура" -Comment "Добавлен реквизит Артикул" -KeepLocked
# Получить изменения из хранилища
python ".opencode/skills/db-repo/scripts/db-repo.py" -Command update -InfoBasePath "C:\Bases\MyDB"
# Серверная база, расширение
python ".opencode/skills/db-repo/scripts/db-repo.py" -Command lock -InfoBaseServer "srv01" -InfoBaseRef "MyApp_Dev" -UserName "Admin" -Extension "МоёРасширение" -Objects "Справочник.Номенклатура"
После выполнения
lockилиupdateсообщил о полученных объектах — выполни/db-dump-xml -Mode Partialс указанным в выводе файлом, и только потом правь исходники- после
lockправки идут через/db-load-xml -Mode Partialи/db-update - изменения готовы — предложи
/db-repo commitс комментарием