Release 0.3.2: YAML config, default_baseconfs, autodiscover.

Конфиг утилиты переведён на YAML; default_baseconfs для reindex без -b;
автопоиск config.local.yml/.yaml/.json; обобщённая документация.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
mihailkudravcev
2026-07-17 10:56:56 +03:00
parent 45e798f2bf
commit 404659a545
14 changed files with 293 additions and 151 deletions
+70 -64
View File
@@ -1,6 +1,6 @@
# Индекс метаданных и модулей конфигураций 1С
**Версия:** см. [`VERSION`](VERSION) (текущая: **0.3.1**) · [CHANGELOG](CHANGELOG.md)
**Версия:** см. [`VERSION`](VERSION) (текущая: **0.3.2**) · [CHANGELOG](CHANGELOG.md)
**Автор:** Michael BAG · [mk@p7net.ru](mailto:mk@p7net.ru)
**Лицензия:** [GNU GPL v3](LICENSE) · [русский перевод (справочно)](LICENSE.ru)
@@ -11,19 +11,16 @@
| [`index_1c.py`](index_1c.py) | построение и обновление индекса |
| [`query_1c.py`](query_1c.py) | поиск и просмотр по готовому индексу |
Репозиторий утилиты: <https://git.p7net.ru/1c/index.git>
Правило для Cursor (в корне CRM3-26): `.cursor/rules/1c-meta-index.mdc`
```bash
python tools/index/index_1c.py --version
python tools/index/query_1c.py --version
python index_1c.py --version
python query_1c.py --version
```
---
## Зачем это нужно
Обход десятков тысяч XML/BSL в `crm3-26/src` и соседних выгрузках через Grep в Cursor медленный. Индекс один раз разбирает метаданные и модули и даёт:
Обход десятков тысяч XML/BSL в `<выгрузка>/src` через Grep в IDE медленный. Индекс один раз разбирает метаданные и модули и даёт:
| Задача | Команда |
|--------|---------|
@@ -32,9 +29,9 @@ python tools/index/query_1c.py --version
| Кто ссылается на справочник/документ | `query_1c.py refs` |
| Документ ↔ регистры движений | `query_1c.py movements` |
| Найти процедуру/фрагмент в BSL | `query_1c.py modules` |
| Сравнить целевую и исходную конфигурацию | `-b target` / `-b source` |
| Сравнить несколько выгрузок в одном репозитории | `-b cfg1 -b cfg2` |
**Типичный workflow агента:**
**Типичный workflow:**
`reindex` (после выгрузки) → `object` / `search``refs` / `modules` → открыть конкретный `.xml` / `.bsl`.
---
@@ -43,22 +40,33 @@ python tools/index/query_1c.py --version
| Параметр | Короткий | Назначение |
|----------|----------|------------|
| `--config` | `-c` | Файл **настроек утилиты** (JSON). **Не** конфигурация 1С. См. [`config.example.json`](config.example.json). |
| `--root` | `-r` | Корень проекта CRM3-26 (если запуск не из дерева проекта). |
| `--config` | `-c` | Файл **настроек утилиты** (YAML). **Не** конфигурация 1С. См. [`config.example.yml`](config.example.yml). |
| `--root` | `-r` | Корень проекта с выгрузками 1С (если запуск не из дерева проекта). |
| `--baseconf` | `-b` | Выгрузка конфигурации 1С: папка `<name>/src/` в репозитории. Можно несколько раз. |
| `--version` | | Версия утилиты. |
Приоритет корня проекта: `--root` > `project_root` в `--config` > авто из расположения `tools/index/`.
Приоритет корня проекта: `--root` > `project_root` в `--config` > авто (каталог с `index_1c.py` и `VERSION`).
Если `--config` не указан, утилита пытается автоматически найти
`config.local.yml`, `config.local.yaml` или `config.local.json`.
### Алиасы `--baseconf`
| Алиас | Папка |
|-------|-------|
| `target`, `crm3_26` | `crm3-26` |
| `source`, `crm3_old`, `crm3-old`, `crm3_dev` | `crm3-dev` |
Краткие имена задаются в файле `--config`, поле **`baseconf_aliases`**:
Другие выгрузки без алиаса: `crm3-26.rhana`, `crm3-dev.rhana`, `ws-rhana`, `bu-corp`, …
Полный список: `python tools/index/index_1c.py list`
```yaml
project_root: "/path/to/project"
baseconf_aliases:
main: "my-config"
ext: "my-config.ext"
```
После этого `-b main` эквивалентно `-b my-config`.
Если в YAML задан блок `default_baseconfs`, то `reindex` без `-b` использует этот список.
Если блока нет — `reindex` без `-b` индексирует **все** каталоги с `src/` в корне проекта.
`query_1c.py` без `-b` ищет по **всем** конфигурациям в индексе.
Список выгрузок: `python index_1c.py list`
---
@@ -78,9 +86,9 @@ python tools/index/query_1c.py --version
|-------|-----------|
| `reindex -j 12` | инкремент: только файлы с изменившимися `mtime`/`size` |
| `reindex --full -j 12` | удалить всю БД и собрать заново все известные выгрузки |
| `reindex --full -b crm3-26` | пересобрать только указанную конфигурацию |
| `reindex -b target -t Documents,Catalogs` | только выбранные типы объектов |
| `reindex -b ws-rhana --no-modules` | метаданные без BSL |
| `reindex --full -b my-config` | пересобрать только указанную конфигурацию |
| `reindex -b main -t Documents,Catalogs` | только выбранные типы объектов |
| `reindex -b my-config --no-modules` | метаданные без BSL |
| `reindex --md` | дополнительно Markdown в `cache/1c_meta/md/<baseconf>/` |
`-j` / `--workers` — число потоков (по умолчанию 4–16).
@@ -96,17 +104,17 @@ python tools/index/query_1c.py --version
### Примеры переиндексации
```bash
# после обновления выгрузки целевой конфигурации
python tools/index/index_1c.py reindex -b target -j 12
# после обновления одной выгрузки
python index_1c.py reindex -b my-config -j 12
# полная пересборка всего проекта
python tools/index/index_1c.py reindex --full -j 12
python index_1c.py reindex --full -j 12
# только документы и справочники исходной + расширения
python tools/index/index_1c.py reindex -b source -b crm3-dev.rhana -t Documents,Catalogs -j 8
# основная конфигурация + расширение, только документы и справочники
python index_1c.py reindex -b main -b ext -t Documents,Catalogs -j 8
python tools/index/index_1c.py status
python tools/index/index_1c.py list
python index_1c.py status
python index_1c.py list
```
---
@@ -122,7 +130,7 @@ python tools/index/index_1c.py list
| `search` | строка | объекты метаданных (FTS) | `-b`, `--type`, `--limit` |
| `object` | имя/синоним объекта **или** реквизита | дерево структуры | `-b`, `--type`, `--clear`, `--limit` |
| `show` | имя объекта | полная карточка JSON | `-b` |
| `refs` | `Catalog.Партнеры` / `ЗаказКлиента` | обратные ссылки полей | `-b`, `--limit` (на каждую baseconf) |
| `refs` | `Catalog.Customers` / `Contract` | обратные ссылки полей | `-b`, `--limit` (на каждую baseconf) |
| `movements` | документ или регистр | регистратор ↔ регистры движений | `-b`, `--type`, `--limit` |
| `modules` | строка | поиск по BSL | `-b`, `-n` / `--names-only`, `--limit` |
| `module` | путь или owner | символы модуля, строки | `-b` |
@@ -131,22 +139,22 @@ python tools/index/index_1c.py list
```bash
# полная структура документа
python tools/index/query_1c.py object ЗаказКлиента -b target
python query_1c.py object Contract -b my-config
# только реквизиты с именем/синонимом «Партнер» в документах
python tools/index/query_1c.py object Партнер -b target --type Document --clear
# только реквизиты с именем/синонимом «Partner» в документах
python query_1c.py object Partner -b my-config --type Document --clear
# совпал сам объект → --clear печатает только заголовок
python tools/index/query_1c.py object ЗаказКлиента -b target --clear
python query_1c.py object Contract -b my-config --clear
```
Формат строки реквизита:
```text
├── `Attribute.Партнер` — Клиент [обяз.] : CatalogRef.Партнеры
├── `Attribute.СуммаДокумента` — … [необяз.] : DefinedType.ДенежнаяСуммаЛюбогоЗнака
├── `TabularSection.Товары` — Товары
│ └── `Column.Номенклатура` — … [обяз.] : CatalogRef.Номенклатура
├── `Attribute.Partner` — Клиент [обяз.] : CatalogRef.Customers
├── `Attribute.Amount` — … [необяз.] : DefinedType.MoneyAmount
├── `TabularSection.Lines` — Строки
│ └── `Column.Item` — … [обяз.] : CatalogRef.Items
```
- **[обяз.]** — `FillChecking=ShowError`; **[необяз.]** — `DontCheck`
@@ -156,24 +164,24 @@ python tools/index/query_1c.py object ЗаказКлиента -b target --clear
### `refs` — кто ссылается
```bash
python tools/index/query_1c.py refs "ЗаказКлиента"
python tools/index/query_1c.py refs Catalog.Партнеры -b target --limit 50
python tools/index/query_1c.py refs Document.ЗаказКлиента -b source
python query_1c.py refs "Contract"
python query_1c.py refs Catalog.Customers -b my-config --limit 50
python query_1c.py refs Document.Contract -b main
```
Без `-b` — все конфигурации в индексе; `--limit` действует **на каждую**.
Составной тип поля: `→ DocumentRef.ЗаказКлиента (среди прочего: DocumentRef.…)`.
Составной тип поля: `→ DocumentRef.Contract (среди прочего: DocumentRef.…)`.
### `movements` — регистратор ↔ регистры движений
```bash
# документ → регистры, в которых он регистратор
python tools/index/query_1c.py movements ЗаказКлиента -b target
python tools/index/query_1c.py movements Document.РеализацияТоваровУслуг -b target
python query_1c.py movements Contract -b my-config
python query_1c.py movements Document.Sales -b my-config
# регистр → документы-регистраторы
python tools/index/query_1c.py movements AccumulationRegister.ТоварыНаСкладах -b target
python tools/index/query_1c.py movements ТоварыНаСкладах -b target --type AccumulationRegister
python query_1c.py movements AccumulationRegister.Stock -b my-config
python query_1c.py movements Stock -b my-config --type AccumulationRegister
```
Данные из свойства метаданных `RegisterRecords` (таблица `register_records` в индексе).
@@ -182,18 +190,18 @@ python tools/index/query_1c.py movements ТоварыНаСкладах -b targe
### `modules` / `module`
```bash
python tools/index/query_1c.py modules "ОбработатьHealth" -b ws-rhana
python tools/index/query_1c.py modules "РВС_Transfer" -b ws-rhana -n
python tools/index/query_1c.py module CommonModules/РВС_TransferAPIДокументы -b ws-rhana
python query_1c.py modules "ProcessData" -b my-config
python query_1c.py modules "MyModule" -b my-config.ext -n
python query_1c.py module CommonModules/MyModule -b my-config
```
### Прочие примеры
```bash
python tools/index/query_1c.py search "ЗаказКлиента"
python tools/index/query_1c.py search "Партнер" --type Document -b crm3-26
python tools/index/query_1c.py show Document.ЗаказКлиента -b target
python tools/index/query_1c.py search "Партнер" -b source -b crm3-dev.rhana
python query_1c.py search "Contract"
python query_1c.py search "Partner" --type Document -b my-config
python query_1c.py show Document.Contract -b main
python query_1c.py search "Partner" -b main -b ext
```
### Ошибки и подсказки
@@ -201,7 +209,7 @@ python tools/index/query_1c.py search "Партнер" -b source -b crm3-dev.rha
| Ситуация | Поведение |
|----------|-----------|
| Нет `index.sqlite` | подсказка `index_1c.py reindex --full` |
| `-b` без папки `src/` | список доступных выгрузок + алиасы |
| `-b` без папки `src/` | список доступных выгрузок |
| `-b` есть в репо, нет в индексе | список проиндексированных + команда `reindex -b …` |
| `show` / `object` не нашли | похожие имена из индекса |
@@ -210,29 +218,29 @@ python tools/index/query_1c.py search "Партнер" -b source -b crm3-dev.rha
## Файл настроек утилиты (`--config`)
```bash
cp tools/index/config.example.json tools/index/config.local.json
# project_root: "/path/to/crm3-26"
python tools/index/query_1c.py --config tools/index/config.local.json search "Заказ"
cp config.example.yml config.local.yml
# project_root: "/path/to/project"
python query_1c.py --config config.local.yml search "Contract"
```
`config.local.json` в `.gitignore` (локальные пути).
`config.local.yml` в `.gitignore` (локальные пути и алиасы).
Legacy-вариант `config.local.json` тоже поддерживается и подхватывается авто-поиском.
---
## Применение в Cursor
## Применение в Cursor / IDE
1. После выгрузки из EDT/конфигуратора: `python tools/index/index_1c.py reindex -j 12` (или `-b target`).
1. После выгрузки из EDT/конфигуратора: `python index_1c.py reindex -j 12` (или `-b my-config`).
2. Метаданные и связи — через `query_1c.py`, не Grep по всему `src/`.
3. Разделять контекст: `-b target` vs `-b source`.
3. При нескольких выгрузках — ограничивать `-b` нужной baseconf.
4. Код: `modules` → открыть `rel_path`; структура документа: `object`.
5. Правило агента: `.cursor/rules/1c-meta-index.mdc`.
---
## Артефакты кэша
```text
cache/1c_meta/ # в корне проекта CRM3-26 (gitignore)
cache/1c_meta/ # в корне проекта (обычно в .gitignore)
index.sqlite # единая БД
INDEX.md
manifest.json
@@ -251,8 +259,6 @@ Per-config `search.sqlite` устарели и не используются.
| **E-mail** | [mk@p7net.ru](mailto:mk@p7net.ru) |
| **Предложения, вопросы, ошибки** | пишите на **mk@p7net.ru** |
Репозиторий: <https://git.p7net.ru/1c/index.git>
---
## Лицензирование