# Индекс метаданных и модулей конфигураций 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С** в репозитории — папка `/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` | какие `/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//` для `@` в чате. ### Что попадает в индекс - **Метаданные:** `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// # опционально (--md) ``` Старые per-config `search.sqlite` в подкаталогах не используются.