mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-28 14:09:41 +03:00
211 lines
10 KiB
Markdown
211 lines
10 KiB
Markdown
---
|
||
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 <id> — удалить базу из реестра
|
||
/db-list show <id|alias> — подробности по базе
|
||
```
|
||
|
||
## Формат `.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` (форма `--ключ=значение`) |
|
||
| `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 "<path>"
|
||
```
|
||
|
||
**Серверная база:**
|
||
```
|
||
/S "<server>/<ref>"
|
||
```
|
||
|
||
**Аутентификация** (добавляется если user задан):
|
||
```
|
||
/N"<user>" /P"<password>"
|
||
```
|
||
|
||
> **Важно**: между `/N` и именем пробела нет. Между `/P` и паролем пробела нет. Если пароль пустой — опусти `/P` целиком.
|
||
|
||
**Хранилище конфигурации** (если у базы задан `repository`) — скрипты навыков подставляют
|
||
сами, сопоставляя параметры соединения с записью реестра:
|
||
```
|
||
/ConfigurationRepositoryF"<path>" /ConfigurationRepositoryN"<user>" /ConfigurationRepositoryP"<password>"
|
||
```
|
||
|