mihailkudravcev 45e798f2bf Release 0.3.1: baseconf help, GPL v3, author Michael BAG.
Улучшена справка --help подкоманд (--baseconf до/после подкоманды), добавлены
LICENSE (GPL v3 EN) и LICENSE.ru (справочный перевод), контакты mk@p7net.ru.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-17 10:00:09 +03:00

Индекс метаданных и модулей конфигураций 1С

Версия: см. VERSION (текущая: 0.3.1) · CHANGELOG
Автор: Michael BAG · mk@p7net.ru
Лицензия: GNU GPL v3 · русский перевод (справочно)

Единый кэш проекта: 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
Документ ↔ регистры движений query_1c.py movements
Найти процедуру/фрагмент в 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, RegisterRecords (документ → регистры движений).
  • Модули **/*.bsl: путь, owner (Document.X), вид модуля, имена процедур/функций, тело (до 200 КБ в FTS).
  • Связи движений — таблица register_records (обратный индекс регистраторов).

По умолчанию пропускаются: 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)
movements документ или регистр регистратор ↔ регистры движений -b, --type, --limit
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.…).

movements — регистратор ↔ регистры движений

# документ → регистры, в которых он регистратор
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

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 устарели и не используются.


Автор и обратная связь

Автор Michael BAG
E-mail mk@p7net.ru
Предложения, вопросы, ошибки пишите на mk@p7net.ru

Репозиторий: https://git.p7net.ru/1c/index.git


Лицензирование

Программа index_1c.py, query_1c.py и пакет index1c/ распространяются на условиях GNU General Public License версии 3 (или более поздней).

Файл Язык Статус
LICENSE английский юридически значимый текст лицензии (FSF)
LICENSE.ru русский неофициальный перевод для ознакомления

Юридическую силу имеет только английский текст LICENSE. Русский перевод LICENSE.ru не опубликован FSF и не заменяет оригинал; он помогает русскоязычным пользователям понять условия GPL v3.

Copyright © 20252026 Michael BAG <mk@p7net.ru>

При распространении или модификации сохраняйте уведомление об авторских правах и текст лицензии. Производные работы должны распространяться на тех же условиях GPL v3.

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