156 lines
7.1 KiB
Markdown
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` в подкаталогах не используются.
|