Детализирована документация. Небольшие изменения имен параметров.
This commit is contained in:
@@ -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` в подкаталогах не используются.
|
||||
|
||||
Reference in New Issue
Block a user