Add query object (--clear), modules -n, composite refs labels, FillChecking/TypeSet parsing, VERSION/CHANGELOG and --version. Co-authored-by: Cursor <cursoragent@cursor.com>
Индекс метаданных и модулей конфигураций 1С
Версия: см. VERSION (текущая: 0.2.0) · CHANGELOG
Единый кэш проекта: cache/1c_meta/index.sqlite — все выгрузки 1С в одной БД (SQLite FTS5).
| Скрипт | Назначение |
|---|---|
index_1c.py |
построение и обновление индекса |
query_1c.py |
поиск и просмотр по готовому индексу |
Репозиторий утилиты: https://git.p7net.ru/1c/index.git
Правило для Cursor (в корне CRM3-26): .cursor/rules/1c-meta-index.mdc
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. |
--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.
Примеры переиндексации
# после обновления выгрузки целевой конфигурации
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 — дерево реквизитов
# полная структура документа
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
Формат строки реквизита:
├── `Attribute.Партнер` — Клиент [обяз.] : CatalogRef.Партнеры
├── `Attribute.СуммаДокумента` — … [необяз.] : DefinedType.ДенежнаяСуммаЛюбогоЗнака
├── `TabularSection.Товары` — Товары
│ └── `Column.Номенклатура` — … [обяз.] : CatalogRef.Номенклатура
- [обяз.] —
FillChecking=ShowError; [необяз.] —DontCheck - составной тип: несколько вариантов через
| - при наличии XML структура подтягивается с диска (актуальный
FillChecking)
refs — кто ссылается
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
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
Прочие примеры
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)
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
- После выгрузки из EDT/конфигуратора:
python tools/index/index_1c.py reindex -j 12(или-b target). - Метаданные и связи — через
query_1c.py, не Grep по всемуsrc/. - Разделять контекст:
-b targetvs-b source. - Код:
modules→ открытьrel_path; структура документа:object. - Правило агента:
.cursor/rules/1c-meta-index.mdc.
Артефакты кэша
cache/1c_meta/ # в корне проекта CRM3-26 (gitignore)
index.sqlite # единая БД
INDEX.md
manifest.json
md/<baseconf>/ # опционально (--md)
Per-config search.sqlite устарели и не используются.