# Индекс метаданных и модулей конфигураций 1С **Версия:** см. [`VERSION`](VERSION) (текущая: **0.3.4**) · [CHANGELOG](CHANGELOG.md) **Автор:** Michael BAG · [mk@p7net.ru](mailto:mk@p7net.ru) **Лицензия:** [GNU GPL v3](LICENSE) · [русский перевод (справочно)](LICENSE.ru) Единый кэш проекта: **`cache/1c_meta/index.sqlite`** — все выгрузки 1С в одной БД (SQLite FTS5). | Скрипт | Назначение | |--------|------------| | [`index_1c.py`](index_1c.py) | построение и обновление индекса | | [`query_1c.py`](query_1c.py) | поиск и просмотр по готовому индексу | ```bash python index_1c.py --version python query_1c.py --version ``` --- ## Зачем это нужно Обход десятков тысяч XML/BSL в `<выгрузка>/src` через Grep в IDE медленный. Индекс один раз разбирает метаданные и модули и даёт: | Задача | Команда | |--------|---------| | Найти объект по имени/синониму | `query_1c.py search` / `object` | | Структура реквизитов, обязательность, типы | `query_1c.py object` | | Кто ссылается на справочник/документ | `query_1c.py refs` | | Документ ↔ регистры движений | `query_1c.py movements` | | Найти процедуру/фрагмент в BSL | `query_1c.py modules` | | Сравнить несколько выгрузок в одном репозитории | `-b cfg1 -b cfg2` | **Типичный workflow:** `reindex` (после выгрузки) → `object` / `search` → `refs` / `modules` → открыть конкретный `.xml` / `.bsl`. --- ## Параметры командной строки (общие) | Параметр | Короткий | Назначение | |----------|----------|------------| | `--config` | `-c` | Файл **настроек утилиты** (YAML). **Не** конфигурация 1С. См. [`config.example.yml`](config.example.yml). | | `--root` | `-r` | Корень проекта с выгрузками 1С (если запуск не из дерева проекта). | | `--baseconf` | `-b` | Источник индексации: `/src/` или virtual внешняя обработка `.<ИмяОбработки>`. Можно несколько раз. | | `--version` | | Версия утилиты. | Приоритет корня проекта: `--root` > `project_root` в `--config` > авто (каталог с `index_1c.py` и `VERSION`). Если `--config` не указан, утилита пытается автоматически найти `config.local.yml`, `config.local.yaml` или `config.local.json`. ### Алиасы `--baseconf` Краткие имена задаются в файле `--config`, поле **`baseconf_aliases`**: ```yaml project_root: "/path/to/project" baseconf_aliases: main: "my-config" ext: "my-config.ext" ``` После этого `-b main` эквивалентно `-b my-config`. Если в YAML задан блок `default_baseconfs`, то `reindex` без `-b` использует этот список. Если блока нет — `reindex` без `-b` индексирует **все** каталоги с `src/` и найденные внешние обработки. `query_1c.py` без `-b` ищет по **всем** конфигурациям в индексе. Список выгрузок: `python index_1c.py list` --- ## `index_1c.py` — переиндексация ### Команды | Команда | Описание | |---------|----------| | `reindex` | обновить индекс | | `status` | размер БД, meta, список проиндексированных baseconf | | `list` | источники индексации в репозитории + что уже в индексе | ### Режимы `reindex` | Вызов | Поведение | |-------|-----------| | `reindex -j 12` | инкремент: только файлы с изменившимися `mtime`/`size` | | `reindex --full -j 12` | удалить всю БД и собрать заново все известные выгрузки | | `reindex --full -b my-config` | пересобрать только указанную конфигурацию | | `reindex -b main -t Documents,Catalogs` | только выбранные типы объектов | | `reindex -b my-config --no-modules` | метаданные без BSL | | `reindex --md` | дополнительно Markdown в `cache/1c_meta/md//` | `-j` / `--workers` — число потоков (по умолчанию 4–16). ### Что индексируется - **Метаданные конфигураций/расширений** `src/<Тип>/*.xml`: имя, синоним, комментарий, реквизиты / измерения / ресурсы / ТЧ, типы (в т.ч. `TypeSet`), ссылки, `FillChecking`, `RegisterRecords` (документ → регистры движений). - **Метаданные внешних обработок**: `/<ИмяОбработки>.xml` (как `ExternalDataProcessor`). - **Модули** `**/*.bsl`: путь, owner (`Document.X`), вид модуля, имена процедур/функций, тело (до 200 КБ в FTS). - **Связи движений** — таблица `register_records` (обратный индекс регистраторов). По умолчанию пропускаются: `CommonPicture`, `StyleItem`, `XDTOPackage`, `CommonTemplate`, `Language`, `Bot`. ### Примеры переиндексации ```bash # после обновления одной выгрузки python index_1c.py reindex -b my-config -j 12 # полная пересборка всего проекта python index_1c.py reindex --full -j 12 # основная конфигурация + расширение, только документы и справочники python index_1c.py reindex -b main -b ext -t Documents,Catalogs -j 8 # внешние обработки: развернуть папку в virtual baseconf python index_1c.py reindex -b my-transfer.ext -j 8 python index_1c.py status python 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.Customers` / `Contract` | обратные ссылки полей | `-b`, `--limit` (на каждую baseconf) | | `movements` | документ или регистр | регистратор ↔ регистры движений | `-b`, `--type`, `--limit` | | `modules` | строка | поиск по BSL | `-b`, `-n` / `--names-only`, `--limit` | | `module` | путь или owner | символы модуля, строки | `-b` | ### `object` — дерево реквизитов ```bash # полная структура документа python query_1c.py object Contract -b my-config # только реквизиты с именем/синонимом «Partner» в документах python query_1c.py object Partner -b my-config --type Document --clear # совпал сам объект → --clear печатает только заголовок python query_1c.py object Contract -b my-config --clear ``` Формат строки реквизита: ```text ├── `Attribute.Partner` — Клиент [обяз.] : CatalogRef.Customers ├── `Attribute.Amount` — … [необяз.] : DefinedType.MoneyAmount ├── `TabularSection.Lines` — Строки │ └── `Column.Item` — … [обяз.] : CatalogRef.Items ``` - **[обяз.]** — `FillChecking=ShowError`; **[необяз.]** — `DontCheck` - составной тип: несколько вариантов через `|` - при наличии XML структура подтягивается с диска (актуальный `FillChecking`) ### `refs` — кто ссылается ```bash python query_1c.py refs "Contract" python query_1c.py refs Catalog.Customers -b my-config --limit 50 python query_1c.py refs Document.Contract -b main ``` Без `-b` — все конфигурации в индексе; `--limit` действует **на каждую**. Составной тип поля: `→ DocumentRef.Contract (среди прочего: DocumentRef.…)`. ### `movements` — регистратор ↔ регистры движений ```bash # документ → регистры, в которых он регистратор python query_1c.py movements Contract -b my-config python query_1c.py movements Document.Sales -b my-config # регистр → документы-регистраторы python query_1c.py movements AccumulationRegister.Stock -b my-config python query_1c.py movements Stock -b my-config --type AccumulationRegister ``` Данные из свойства метаданных `RegisterRecords` (таблица `register_records` в индексе). При первом запуске утилиты v0.3+ схема индекса мигрирует 2→3 автоматически (без полного `reindex`). ### `modules` / `module` ```bash python query_1c.py modules "ProcessData" -b my-config python query_1c.py modules "MyModule" -b my-config.ext -n python query_1c.py module CommonModules/MyModule -b my-config ``` ### Прочие примеры ```bash python query_1c.py search "Contract" python query_1c.py search "Partner" --type Document -b my-config python query_1c.py show Document.Contract -b main python query_1c.py search "Partner" -b main -b ext ``` ### Ошибки и подсказки | Ситуация | Поведение | |----------|-----------| | Нет `index.sqlite` | подсказка `index_1c.py reindex --full` | | `-b` без папки `src/` | список доступных выгрузок | | `-b` есть в репо, нет в индексе | список проиндексированных + команда `reindex -b …` | | `show` / `object` не нашли | похожие имена из индекса | --- ## Файл настроек утилиты (`--config`) ```bash cp config.example.yml config.local.yml # project_root: "/path/to/project" python query_1c.py --config config.local.yml search "Contract" ``` `config.local.yml` в `.gitignore` (локальные пути и алиасы). Legacy-вариант `config.local.json` тоже поддерживается и подхватывается авто-поиском. --- ## Применение в Cursor / IDE 1. После выгрузки из EDT/конфигуратора: `python index_1c.py reindex -j 12` (или `-b my-config`). 2. Метаданные и связи — через `query_1c.py`, не Grep по всему `src/`. 3. При нескольких выгрузках — ограничивать `-b` нужной baseconf. 4. Код: `modules` → открыть `rel_path`; структура документа: `object`. --- ## Артефакты кэша ```text cache/1c_meta/ # в корне проекта (обычно в .gitignore) index.sqlite # единая БД INDEX.md manifest.json md// # опционально (--md) ``` Per-config `search.sqlite` устарели и не используются. --- ## Автор и обратная связь | | | |---|---| | **Автор** | Michael BAG | | **E-mail** | [mk@p7net.ru](mailto:mk@p7net.ru) | | **Предложения, вопросы, ошибки** | пишите на **mk@p7net.ru** | --- ## Лицензирование Программа **index_1c.py**, **query_1c.py** и пакет **index1c/** распространяются на условиях **GNU General Public License версии 3** (или более поздней). | Файл | Язык | Статус | |------|------|--------| | [`LICENSE`](LICENSE) | английский | **юридически значимый** текст лицензии (FSF) | | [`LICENSE.ru`](LICENSE.ru) | русский | **неофициальный перевод** для ознакомления | Юридическую силу имеет только английский текст [`LICENSE`](LICENSE). Русский перевод [`LICENSE.ru`](LICENSE.ru) не опубликован FSF и не заменяет оригинал; он помогает русскоязычным пользователям понять условия GPL v3. **Copyright © 2025–2026 Michael BAG** \ При распространении или модификации сохраняйте уведомление об авторских правах и текст лицензии. Производные работы должны распространяться на тех же условиях GPL v3.