Детализирована документация. Небольшие изменения имен параметров.

This commit is contained in:
mihailkudravcev
2026-07-16 15:38:16 +03:00
parent 7f9d198f79
commit 24200b401a
22 changed files with 2986 additions and 49 deletions
+136 -49
View File
@@ -1,68 +1,155 @@
# Индекс метаданных конфигураций 1С
# Индекс метаданных и модулей конфигураций 1С
Скрипты в `tools/index/` строят кэш для быстрого поиска имён, синонимов, полей и ссылок по XML-выгрузкам EDT — без полного обхода тысяч `.xml` в Cursor.
Единый кэш: **`cache/1c_meta/index.sqlite`** — все выгрузки 1С проекта в одной БД (FTS5).
## Быстрый старт
| Скрипт | Назначение |
|--------|------------|
| [`index_1c.py`](index_1c.py) | построение и обновление индекса |
| [`query_1c.py`](query_1c.py) | поиск по готовому индексу |
Документация для Cursor: [`.cursor/rules/1c-meta-index.mdc`](../.cursor/rules/1c-meta-index.mdc)
---
## Параметры командной строки
| Параметр | Короткий | Что это |
|----------|----------|---------|
| `--config` | `-c` | **Файл настроек утилиты** (JSON), см. [`config.example.json`](config.example.json). Не конфигурация 1С. |
| `--root` | `-r` | Корень проекта CRM3-26 (если скрипт запущен не из дерева проекта). |
| `--baseconf` | `-b` | **Выгрузка конфигурации 1С** в репозитории — папка `<name>/src/`. Можно указывать несколько раз. |
### Алиасы `--baseconf`
| Алиас | Папка в репозитории |
|-------|---------------------|
| `target`, `crm3_26` | `crm3-26` |
| `source`, `crm3_old`, `crm3-old`, `crm3_dev` | `crm3-dev` |
Список выгрузок и алиасов: `python tools/index/index_1c.py list`
---
## Зачем это нужно
При работе в Cursor поиск по XML/BSL всего дерева `crm3-26/src` (десятки тысяч файлов) медленный. Индекс один раз разбирает метаданные и модули и даёт:
- поиск объектов по имени, синониму, полям;
- обратный индекс ссылок (`refs`);
- поиск по BSL (процедуры, фрагменты кода);
- фильтр по конкретной выгрузке (`-b crm3-26`).
**Типичный workflow агента:** `query_1c.py search``show` / `refs` → открыть конкретный `.bsl` или `.xml`, без полного Grep по конфигурации.
---
## `index_1c.py` — переиндексация
### Команды
| Команда | Описание |
|---------|----------|
| `reindex` | обновить индекс (по умолчанию только изменившиеся файлы) |
| `status` | размер БД, метаданные, список проиндексированных baseconf |
| `list` | какие `<name>/src/` есть в репозитории и что уже в индексе |
### Режимы `reindex`
| Вызов | Поведение |
|-------|-----------|
| `reindex -j 12` | инкремент всех известных выгрузок с `src/` |
| `reindex --full -j 12` | удалить `index.sqlite` и собрать заново |
| `reindex --full -b crm3-26` | пересобрать только `crm3-26` (остальные в БД сохраняются) |
| `reindex -b target -t Documents,Catalogs` | только документы и справочники целевой конфигурации |
| `reindex -b ws-rhana --no-modules` | только XML метаданных, без `.bsl` |
Дополнительно: `--md` — экспорт Markdown в `cache/1c_meta/md/<baseconf>/` для `@` в чате.
### Что попадает в индекс
- **Метаданные:** `src/<ТипObjects>/*.xml` — имя, синоним, реквизиты, измерения, типы, ссылки.
- **Модули:** все `**/*.bsl` — путь, владелец (`Document.ЗаказКлиента`), процедуры/функции, тело (до 200 КБ в FTS).
Пропускаются по умолчанию: картинки, стили, XDTO, шаблоны, языки.
---
## `query_1c.py` — поиск
Требует готовый `cache/1c_meta/index.sqlite` (см. `index_1c.py reindex`).
### Команды
| Команда | Аргумент | Результат |
|---------|----------|-----------|
| `search` | строка запроса | объекты метаданных (FTS) |
| `show` | имя объекта | полная карточка JSON |
| `refs` | `Catalog.Партнеры` | кто ссылается полем-ссылкой |
| `modules` | строка | поиск по BSL |
| `module` | путь или owner | метаданные модуля (символы, строки) |
### Примеры
```bash
source .venv-nt-041/bin/activate # опционально (используется stdlib)
python tools/index/index_1c.py reindex
python tools/index/index_1c.py search "ЗаказКлиента"
python tools/index/index_1c.py refs Catalog.Партнеры --config crm3-26
python tools/index/index_1c.py show Document.ЗаказКлиента --config crm3-26
python tools/index/index_1c.py status
# все конфигурации в индексе
python tools/index/query_1c.py search "ЗаказКлиента"
# только целевая (алиас target)
python tools/index/query_1c.py show ЗаказКлиента -b target
python tools/index/query_1c.py show Document.ЗаказКлиента -b crm3-26
# исходная + расширение
python tools/index/query_1c.py search "Партнер" -b source -b crm3-dev.rhana
# модули ws-rhana
python tools/index/query_1c.py modules "ОбработатьHealth" -b ws-rhana
# обратные ссылки в целевой
python tools/index/query_1c.py refs Catalog.Партнеры -b target --limit 20
```
## Что индексируется
### Ошибки
Для каждого объекта метаданных верхнего уровня (`src/<Тип>/*.xml`):
- **Нет индекса** — подсказка запустить `index_1c.py reindex`.
- **`-b unknown`** — список папок в репозитории и алиасы.
- **`-b crm3-26`, но не проиндексировано** — список того, что есть в БД, и команда переиндексации.
- **`show` не нашёл объект** — похожие имена из индекса.
- имя, синоним, комментарий, подсказка;
- реквизиты / измерения / ресурсы / колонки ТЧ / значения перечислений;
- типы полей и ссылки (`cfg:CatalogRef.*`, `cfg:DocumentRef.*`, …);
- владельцы, движения регистров, «ввод на основании» (если есть в Properties).
---
По умолчанию пропускаются шумные типы: `CommonPicture`, `StyleItem`, `XDTOPackage`, `CommonTemplate`, `Language`, `Bot`.
## Файл настроек утилиты (`--config`)
## Выборочная переиндексация
Для нестандартного расположения проекта:
```bash
# только целевая конфигурация
python tools/index/index_1c.py reindex --config crm3-26
# только документы и справочники
python tools/index/index_1c.py reindex -c crm3-26 -t Documents,Catalogs
# регистры (русские/короткие алиасы)
python tools/index/index_1c.py reindex -c crm3-26 -t рс,рн
# расширения
python tools/index/index_1c.py reindex -c crm3-26.rhana -c ws-rhana
# параллельный разбор XML
python tools/index/index_1c.py reindex -c crm3-26 -j 8
cp tools/index/config.example.json tools/index/config.local.json
# отредактировать project_root
python tools/index/query_1c.py --config tools/index/config.local.json search "Заказ"
```
## Куда пишется кэш
Приоритет корня: `--root` > `project_root` в JSON > автоопределение от `tools/index/`.
`cache/1c_meta/``.gitignore`):
---
| Путь | Назначение |
|------|------------|
| `INDEX.md` | сводка по конфигурациям |
| `<config>/objects.jsonl` | объекты (машиночитаемо) |
| `<config>/fields.jsonl` | плоский список полей |
| `<config>/refs.jsonl` | связи по ссылочным типам |
| `<config>/search.sqlite` | FTS5 полнотекстовый поиск |
| `<config>/objects.md` | человекочитаемый перечень |
| `<config>/refs.md` | обратный индекс ссылок |
| `<config>/by_type/*.md` | краткие списки для `@` в Cursor |
| `<config>/manifest.json` | статистика прогона |
## Применение в Cursor
Конфигурации по умолчанию: `crm3-26`, `crm3-26.rhana`, `crm3-dev`, `crm3-dev.rhana`, `crm3-dev.docs`, `ws-rhana`, `bu-corp`, `bu-corp.rhana`, `diadoc.ext.rhana` (если есть `src/`).
1. После выгрузки из EDT/конфигуратора:
`python tools/index/index_1c.py reindex -j 12`
или `reindex -b target` если менялась только целевая.
2. Агент ищет через `query_1c.py`, не через Grep по `src/`.
3. Уточнение контекста: `-b target` / `-b source` чтобы не смешивать старую и новую конфигурацию.
4. Для кода: `modules` → открыть найденный `rel_path` в репозитории.
## Использование в Cursor
---
1. Переиндексировать после обновления выгрузки из EDT/конфигуратора.
2. Для уточнения метаданных — `@cache/1c_meta/<config>/by_type/Document.md` или CLI `search` / `show` / `refs`.
3. Не Grep'ить сырой XML по всей конфигурации, пока нет основания, что индекса недостаточно.
## Артефакты
```
cache/1c_meta/
index.sqlite # единая БД
INDEX.md # сводка последнего reindex
manifest.json
md/<baseconf>/ # опционально (--md)
```
Старые per-config `search.sqlite` в подкаталогах не используются.