# Индекс метаданных и модулей конфигураций 1С **Версия:** см. [`VERSION`](VERSION) (текущая: **0.3.0**) · [CHANGELOG](CHANGELOG.md) Единый кэш проекта: **`cache/1c_meta/index.sqlite`** — все выгрузки 1С в одной БД (SQLite FTS5). | Скрипт | Назначение | |--------|------------| | [`index_1c.py`](index_1c.py) | построение и обновление индекса | | [`query_1c.py`](query_1c.py) | поиск и просмотр по готовому индексу | Репозиторий утилиты: Правило для Cursor (в корне CRM3-26): `.cursor/rules/1c-meta-index.mdc` ```bash python tools/index/index_1c.py --version python tools/index/query_1c.py --version ``` --- ## Зачем это нужно Обход десятков тысяч XML/BSL в `crm3-26/src` и соседних выгрузках через Grep в Cursor медленный. Индекс один раз разбирает метаданные и модули и даёт: | Задача | Команда | |--------|---------| | Найти объект по имени/синониму | `query_1c.py search` / `object` | | Структура реквизитов, обязательность, типы | `query_1c.py object` | | Кто ссылается на справочник/документ | `query_1c.py refs` | | Документ ↔ регистры движений | `query_1c.py movements` | | Найти процедуру/фрагмент в BSL | `query_1c.py modules` | | Сравнить целевую и исходную конфигурацию | `-b target` / `-b source` | **Типичный workflow агента:** `reindex` (после выгрузки) → `object` / `search` → `refs` / `modules` → открыть конкретный `.xml` / `.bsl`. --- ## Параметры командной строки (общие) | Параметр | Короткий | Назначение | |----------|----------|------------| | `--config` | `-c` | Файл **настроек утилиты** (JSON). **Не** конфигурация 1С. См. [`config.example.json`](config.example.json). | | `--root` | `-r` | Корень проекта CRM3-26 (если запуск не из дерева проекта). | | `--baseconf` | `-b` | Выгрузка конфигурации 1С: папка `/src/` в репозитории. Можно несколько раз. | | `--version` | | Версия утилиты. | Приоритет корня проекта: `--root` > `project_root` в `--config` > авто из расположения `tools/index/`. ### Алиасы `--baseconf` | Алиас | Папка | |-------|-------| | `target`, `crm3_26` | `crm3-26` | | `source`, `crm3_old`, `crm3-old`, `crm3_dev` | `crm3-dev` | Другие выгрузки без алиаса: `crm3-26.rhana`, `crm3-dev.rhana`, `ws-rhana`, `bu-corp`, … Полный список: `python tools/index/index_1c.py list` --- ## `index_1c.py` — переиндексация ### Команды | Команда | Описание | |---------|----------| | `reindex` | обновить индекс | | `status` | размер БД, meta, список проиндексированных baseconf | | `list` | выгрузки с `src/` в репозитории + что уже в индексе | ### Режимы `reindex` | Вызов | Поведение | |-------|-----------| | `reindex -j 12` | инкремент: только файлы с изменившимися `mtime`/`size` | | `reindex --full -j 12` | удалить всю БД и собрать заново все известные выгрузки | | `reindex --full -b crm3-26` | пересобрать только указанную конфигурацию | | `reindex -b target -t Documents,Catalogs` | только выбранные типы объектов | | `reindex -b ws-rhana --no-modules` | метаданные без BSL | | `reindex --md` | дополнительно Markdown в `cache/1c_meta/md//` | `-j` / `--workers` — число потоков (по умолчанию 4–16). ### Что индексируется - **Метаданные** `src/<Тип>/*.xml`: имя, синоним, комментарий, реквизиты / измерения / ресурсы / ТЧ, типы (в т.ч. `TypeSet`), ссылки, `FillChecking`, `RegisterRecords` (документ → регистры движений). - **Модули** `**/*.bsl`: путь, owner (`Document.X`), вид модуля, имена процедур/функций, тело (до 200 КБ в FTS). - **Связи движений** — таблица `register_records` (обратный индекс регистраторов). По умолчанию пропускаются: `CommonPicture`, `StyleItem`, `XDTOPackage`, `CommonTemplate`, `Language`, `Bot`. ### Примеры переиндексации ```bash # после обновления выгрузки целевой конфигурации python tools/index/index_1c.py reindex -b target -j 12 # полная пересборка всего проекта python tools/index/index_1c.py reindex --full -j 12 # только документы и справочники исходной + расширения python tools/index/index_1c.py reindex -b source -b crm3-dev.rhana -t Documents,Catalogs -j 8 python tools/index/index_1c.py status python tools/index/index_1c.py list ``` --- ## `query_1c.py` — поиск Нужен готовый `cache/1c_meta/index.sqlite`. ### Команды | Команда | Аргумент | Результат | Полезные опции | |---------|----------|-----------|----------------| | `search` | строка | объекты метаданных (FTS) | `-b`, `--type`, `--limit` | | `object` | имя/синоним объекта **или** реквизита | дерево структуры | `-b`, `--type`, `--clear`, `--limit` | | `show` | имя объекта | полная карточка JSON | `-b` | | `refs` | `Catalog.Партнеры` / `ЗаказКлиента` | обратные ссылки полей | `-b`, `--limit` (на каждую baseconf) | | `movements` | документ или регистр | регистратор ↔ регистры движений | `-b`, `--type`, `--limit` | | `modules` | строка | поиск по BSL | `-b`, `-n` / `--names-only`, `--limit` | | `module` | путь или owner | символы модуля, строки | `-b` | ### `object` — дерево реквизитов ```bash # полная структура документа python tools/index/query_1c.py object ЗаказКлиента -b target # только реквизиты с именем/синонимом «Партнер» в документах python tools/index/query_1c.py object Партнер -b target --type Document --clear # совпал сам объект → --clear печатает только заголовок python tools/index/query_1c.py object ЗаказКлиента -b target --clear ``` Формат строки реквизита: ```text ├── `Attribute.Партнер` — Клиент [обяз.] : CatalogRef.Партнеры ├── `Attribute.СуммаДокумента` — … [необяз.] : DefinedType.ДенежнаяСуммаЛюбогоЗнака ├── `TabularSection.Товары` — Товары │ └── `Column.Номенклатура` — … [обяз.] : CatalogRef.Номенклатура ``` - **[обяз.]** — `FillChecking=ShowError`; **[необяз.]** — `DontCheck` - составной тип: несколько вариантов через `|` - при наличии XML структура подтягивается с диска (актуальный `FillChecking`) ### `refs` — кто ссылается ```bash python tools/index/query_1c.py refs "ЗаказКлиента" python tools/index/query_1c.py refs Catalog.Партнеры -b target --limit 50 python tools/index/query_1c.py refs Document.ЗаказКлиента -b source ``` Без `-b` — все конфигурации в индексе; `--limit` действует **на каждую**. Составной тип поля: `→ DocumentRef.ЗаказКлиента (среди прочего: DocumentRef.…)`. ### `movements` — регистратор ↔ регистры движений ```bash # документ → регистры, в которых он регистратор python tools/index/query_1c.py movements ЗаказКлиента -b target python tools/index/query_1c.py movements Document.РеализацияТоваровУслуг -b target # регистр → документы-регистраторы python tools/index/query_1c.py movements AccumulationRegister.ТоварыНаСкладах -b target python tools/index/query_1c.py movements ТоварыНаСкладах -b target --type AccumulationRegister ``` Данные из свойства метаданных `RegisterRecords` (таблица `register_records` в индексе). При первом запуске утилиты v0.3+ схема индекса мигрирует 2→3 автоматически (без полного `reindex`). ### `modules` / `module` ```bash python tools/index/query_1c.py modules "ОбработатьHealth" -b ws-rhana python tools/index/query_1c.py modules "РВС_Transfer" -b ws-rhana -n python tools/index/query_1c.py module CommonModules/РВС_TransferAPIДокументы -b ws-rhana ``` ### Прочие примеры ```bash python tools/index/query_1c.py search "ЗаказКлиента" python tools/index/query_1c.py search "Партнер" --type Document -b crm3-26 python tools/index/query_1c.py show Document.ЗаказКлиента -b target python tools/index/query_1c.py search "Партнер" -b source -b crm3-dev.rhana ``` ### Ошибки и подсказки | Ситуация | Поведение | |----------|-----------| | Нет `index.sqlite` | подсказка `index_1c.py reindex --full` | | `-b` без папки `src/` | список доступных выгрузок + алиасы | | `-b` есть в репо, нет в индексе | список проиндексированных + команда `reindex -b …` | | `show` / `object` не нашли | похожие имена из индекса | --- ## Файл настроек утилиты (`--config`) ```bash cp tools/index/config.example.json tools/index/config.local.json # project_root: "/path/to/crm3-26" python tools/index/query_1c.py --config tools/index/config.local.json search "Заказ" ``` `config.local.json` в `.gitignore` (локальные пути). --- ## Применение в Cursor 1. После выгрузки из EDT/конфигуратора: `python tools/index/index_1c.py reindex -j 12` (или `-b target`). 2. Метаданные и связи — через `query_1c.py`, не Grep по всему `src/`. 3. Разделять контекст: `-b target` vs `-b source`. 4. Код: `modules` → открыть `rel_path`; структура документа: `object`. 5. Правило агента: `.cursor/rules/1c-meta-index.mdc`. --- ## Артефакты кэша ```text cache/1c_meta/ # в корне проекта CRM3-26 (gitignore) index.sqlite # единая БД INDEX.md manifest.json md// # опционально (--md) ``` Per-config `search.sqlite` устарели и не используются.