Files
index/README.md
T
mihailkudravcev a9d1215820 Release 0.2.0: object tree, refs/modules options, docs
Add query object (--clear), modules -n, composite refs labels,
FillChecking/TypeSet parsing, VERSION/CHANGELOG and --version.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-16 16:37:41 +03:00

223 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Индекс метаданных и модулей конфигураций 1С
**Версия:** см. [`VERSION`](VERSION) (текущая: **0.2.0**) · [CHANGELOG](CHANGELOG.md)
Единый кэш проекта: **`cache/1c_meta/index.sqlite`** — все выгрузки 1С в одной БД (SQLite FTS5).
| Скрипт | Назначение |
|--------|------------|
| [`index_1c.py`](index_1c.py) | построение и обновление индекса |
| [`query_1c.py`](query_1c.py) | поиск и просмотр по готовому индексу |
Репозиторий утилиты: <https://git.p7net.ru/1c/index.git>
Правило для 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` |
| Найти процедуру/фрагмент в 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С: папка `<name>/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/<baseconf>/` |
`-j` / `--workers` — число потоков (по умолчанию 4–16).
### Что индексируется
- **Метаданные** `src/<Тип>/*.xml`: имя, синоним, комментарий, реквизиты / измерения / ресурсы / ТЧ, типы (в т.ч. `TypeSet`), ссылки, `FillChecking`.
- **Модули** `**/*.bsl`: путь, owner (`Document.X`), вид модуля, имена процедур/функций, тело (до 200 КБ в FTS).
По умолчанию пропускаются: `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) |
| `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.…)`.
### `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/<baseconf>/ # опционально (--md)
```
Per-config `search.sqlite` устарели и не используются.