--- name: db-list description: Управление реестром баз данных 1С (.v8-project.json). Используй когда нужно работать с реестром баз — список баз, зарегистрировать базу в реестре, какие базы есть argument-hint: "[add|remove|show]" allowed-tools: - Read - Write - Glob - AskUserQuestion --- # /db-list — Управление реестром баз данных Управляет файлом `.v8-project.json` — реестром информационных баз проекта. Файл хранит параметры подключения, алиасы, привязку к веткам Git. ## Usage ``` /db-list — показать список баз /db-list add — добавить базу (интерактивно) /db-list remove — удалить базу из реестра /db-list show — подробности по базе ``` ## Формат `.v8-project.json` Файл размещается в корне проекта (рядом с `.git/`). ```json { "v8path": "C:\\Program Files\\1cv8\\8.3.25.1257\\bin", "v8args": ["/UseHwLicenses+"], "databases": [ { "id": "dev", "name": "Разработка", "type": "file", "path": "C:\\Bases\\MyApp_Dev", "user": "Admin", "password": "", "aliases": ["dev", "разработка"], "branches": ["dev", "develop", "feature/*"], "configSrc": "C:\\WS\\myapp\\cfsrc", "repository": { "path": "\\\\srv01\\repo\\MyApp", "user": "Ivanov", "password": "" }, "extensions": [ { "name": "МоёРасширение", "src": "src\\cfe\\МоёРасширение", "repository": { "path": "\\\\srv01\\repo\\MyApp_Ext", "user": "Ivanov", "password": "" } } ] }, { "id": "test", "name": "Тестовая", "type": "server", "server": "srv01", "ref": "MyApp_Test", "user": "Admin", "password": "123", "aliases": ["test", "тест"] } ], "default": "dev" } ``` ### Поля корневого объекта | Поле | Тип | Описание | |------|-----|----------| | `v8path` | string | Каталог bin платформы 1С. Необязательный — если не задан, автоопределение | | `v8args` | array | Доп. аргументы запуска `1cv8.exe` для всех навыков, напр. `["/UseHwLicenses+"]` | | `ibcmdargs` | array | Доп. аргументы `ibcmd` (форма `--ключ=значение`) | | `newObjectPosition` | `"end"` / `"byName"` | Куда попадает новый объект в составе конфигурации: в конец своего вида (по умолчанию) или на место по имени. Переопределяется в `databases[]` | | `databases` | array | Массив баз данных | | `default` | string | id базы по умолчанию | ### Поля объекта базы данных | Поле | Тип | Обязательное | Описание | |------|-----|:------------:|----------| | `id` | string | да | Уникальный идентификатор (латиница, без пробелов) | | `name` | string | да | Человекочитаемое имя | | `type` | `"file"` / `"server"` | да | Тип подключения | | `path` | string | для file | Путь к каталогу файловой базы | | `server` | string | для server | Адрес сервера 1С | | `ref` | string | для server | Имя базы на сервере | | `user` | string | нет | Имя пользователя 1С | | `password` | string | нет | Пароль | | `aliases` | string[] | нет | Альтернативные имена для быстрого доступа | | `branches` | string[] | нет | Git-ветки или glob-паттерны (`release/*`, `feature/*`), привязанные к этой базе | | `configSrc` | string | нет | Каталог XML-выгрузки конфигурации | | `repository` | object | нет | Хранилище конфигурации: `path`, `user`, `password` (см. ниже) | | `extensions` | array | нет | Расширения: `name`, `src`, необязательное `repository` (см. ниже) | ### Хранилище конфигурации База, подключённая к хранилищу конфигурации 1С, **не принимает ни одной операции конфигуратора** без реквизитов доступа к хранилищу — это касается не только `/db-repo`, но и `/db-load-xml`, `/db-dump-xml`, `/db-update`, `/db-load-git`. Реквизиты берутся из `repository` записи базы, передавать их в каждом вызове не нужно. | Поле | Тип | Обязательное | Описание | |------|-----|:------------:|----------| | `repository.path` | string | да | Каталог хранилища или `tcp://<хост>[:<порт>]/<имя>` | | `repository.user` | string | нет | Пользователь **хранилища**. Не наследуется от `user` базы | | `repository.password` | string | нет | Пароль пользователя хранилища | У расширения **своё хранилище** со своим путём, поэтому одного `repository` мало: | Поле | Тип | Обязательное | Описание | |------|-----|:------------:|----------| | `extensions[].name` | string | да | Имя расширения, как в конфигурации | | `extensions[].src` | string | нет | Каталог XML-исходников расширения | | `extensions[].repository` | object | нет | Хранилище расширения. Расширение без хранилища — обычный случай | Пароль хранилища — такой же секрет, как `password` базы; `.v8-project.json` в `.gitignore`. > **Сетевое хранилище.** Адрес — `tcp://<хост>[:<порт>]/<имя>`, порт по умолчанию 1542. > Обслуживается сервером хранилища. Если он недоступен, платформа отвечает «Соединение с > хранилищем конфигурации не установлено» — тем же сообщением, что и при отсутствии реквизитов. ## Алгоритм разрешения базы данных Этот алгоритм используется ВСЕМИ навыками (`db-*`, `epf-build`, `epf-dump`, `erf-build`, `erf-dump`) для определения целевой базы. 1. Если пользователь указал **параметры подключения** (путь, сервер) — используй напрямую 2. Если пользователь указал **базу по имени** — ищи совпадение в таком порядке: 1. По `id` (точное совпадение) 2. По `aliases` (совпадение в массиве с учётом морфологии: «тестовую» = «тестовая» = «тестовой») 3. По `name` (нечёткое совпадение с учётом морфологии и регистра) 3. Если пользователь **не указал** базу — сопоставь текущую ветку Git с `databases[].branches`: - Точное совпадение: ветка `dev` → `"branches": ["dev"]` - Glob-паттерн: ветка `release/2.1` → `"branches": ["release/*"]` 4. Если ветка не совпала — используй `default` 5. Если не найдено или неоднозначно — спроси пользователя 6. Если файл `.v8-project.json` не найден — спроси параметры подключения и предложи создать файл После выполнения: если использованная база не зарегистрирована — предложи добавить через `/db-list add`. ### Автоопределение платформы Если `v8path` не задан в конфиге: ```powershell $v8 = Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" | Sort-Object -Descending | Select-Object -First 1 ``` ## Операции ### Показать список баз Прочитай `.v8-project.json`, выведи таблицу: ``` ID Имя Тип Путь/Сервер По умолч. dev Разработка file C:\Bases\MyApp_Dev ✓ test Тестовая server srv01/MyApp_Test ``` ### Добавить базу Спроси у пользователя через AskUserQuestion: - id, name, type (file/server) - path (для file) или server + ref (для server) - user, password (необязательно) - aliases, branches (необязательно) - если база под хранилищем конфигурации — `repository`: путь, пользователь, пароль Добавь в массив `databases`. Если это первая база — установи как `default`. ### Удалить базу Удали из массива `databases` по id. Если удаляемая была `default` — спросить новый default. ### Подробности по базе Выведи все поля конкретной базы. ## Формирование строки подключения Для использования в шаблонах команд других навыков: **Файловая база:** ``` /F "" ``` **Серверная база:** ``` /S "/" ``` **Аутентификация** (добавляется если user задан): ``` /N"" /P"" ``` > **Важно**: между `/N` и именем пробела нет. Между `/P` и паролем пробела нет. Если пароль пустой — опусти `/P` целиком. **Хранилище конфигурации** (если у базы задан `repository`) — скрипты навыков подставляют сами, сопоставляя параметры соединения с записью реестра: ``` /ConfigurationRepositoryF"" /ConfigurationRepositoryN"" /ConfigurationRepositoryP"" ```