Индекс метаданных и модулей конфигураций 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 / searchrefs / 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

  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.

Артефакты кэша

cache/1c_meta/          # в корне проекта CRM3-26 (gitignore)
  index.sqlite          # единая БД
  INDEX.md
  manifest.json
  md/<baseconf>/        # опционально (--md)

Per-config search.sqlite устарели и не используются.

S
Description
Утилита индексирования конфигураций 1С для контекстного и полнотекстового поиска без сканирования многочисленных папок
Readme GPL-3.0 326 KiB
Languages
Python 100%