Files
index/README.md
T

156 lines
7.1 KiB
Markdown

# Индекс метаданных и модулей конфигураций 1С
Единый кэш: **`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
# все конфигурации в индексе
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
```
### Ошибки
- **Нет индекса** — подсказка запустить `index_1c.py reindex`.
- **`-b unknown`** — список папок в репозитории и алиасы.
- **`-b crm3-26`, но не проиндексировано** — список того, что есть в БД, и команда переиндексации.
- **`show` не нашёл объект** — похожие имена из индекса.
---
## Файл настроек утилиты (`--config`)
Для нестандартного расположения проекта:
```bash
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/`.
---
## Применение в Cursor
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` в репозитории.
---
## Артефакты
```
cache/1c_meta/
index.sqlite # единая БД
INDEX.md # сводка последнего reindex
manifest.json
md/<baseconf>/ # опционально (--md)
```
Старые per-config `search.sqlite` в подкаталогах не используются.