Добавление индексации внешних обработок #1

Closed
opened 2026-07-21 10:15:11 +00:00 by mk · 1 comment
Owner

Надо доработать индексацию tools/index, чтобы индексировались не только конфигурации, но и внешние обработки.

Например crm3-26.ext/tranfer/crm3_26_ПереносОстатков.xml и папка обработки crm3-26.ext/tranfer/crm3_26_ПереносОстатков (пример с конкретного рабочего пространства).

То есть если прописать в config.local.yml crm3-26.ext (папку с внешними обработками) - сканируется папка не только на наличие src (конфигурации или расширения) но и xml с признаками внешних обработок и на каждую обработку добавляется индексация.

То есть не crm3-26.ext, а crm3-26.ext.crm3_26_ПереносОстатков (в данном примере) и на другие найденные внешние обработки.

Надо доработать индексацию tools/index, чтобы индексировались не только конфигурации, но и внешние обработки. Например crm3-26.ext/tranfer/crm3_26_ПереносОстатков.xml и папка обработки crm3-26.ext/tranfer/crm3_26_ПереносОстатков (пример с конкретного рабочего пространства). То есть если прописать в config.local.yml crm3-26.ext (папку с внешними обработками) - сканируется папка не только на наличие src (конфигурации или расширения) но и xml с признаками внешних обработок и на каждую обработку добавляется индексация. То есть не crm3-26.ext, а crm3-26.ext.crm3_26_ПереносОстатков (в данном примере) и на другие найденные внешние обработки.
Author
Owner

Сделано. Теперь tools/index умеет индексировать внешние обработки через -b crm3-26.ext (или через default_baseconfs: [crm3-26.ext]), с авто-разворачиванием в virtual baseconf crm3-26.ext.<ИмяОбработки>.

Ключевые изменения:

...
def list_config_dirs(...):
    ...
    if child.name.endswith(".ext"):
        found.extend(_discover_external_processors(child))

def _discover_external_processor_entries(...):
    # рекурсивно ищет <Имя>.xml + <Имя>/ и проверяет <ExternalDataProcessor ...>
    ...

def discover_configs(...):
    # поддержка:
    # 1) -b crm3-26.ext.crm3_26_ПереносОстатков
    # 2) -b crm3-26.ext  (разворачивается во все найденные обработки)
...
...
def validate_baseconfs(...):
    # проверка теперь не только <name>/src/,
    # но и virtual external источников
...
...
if source_kind == "external_processor":
    otype = "ExternalDataProcessor"
    xml = src / f"{external_name}.xml"
    out.append((otype, xml))
...
...
meta_files = iter_object_xml_files(..., source_kind=cfg.source_kind, external_name=cfg.external_name)

bsl_paths = (
    sorted((cfg.src / cfg.external_name).rglob("*.bsl"))
    if cfg.source_kind == "external_processor" else iter_bsl_files(cfg.src)
)
...
...
# owner для внешней обработки и её форм:
ExternalDataProcessor.<Обработка>
ExternalDataProcessor.<Обработка>.Form.<Форма>
...

Проверил на вашем кейсе:

  • python tools/index/index_1c.py list показывает:
    • crm3-26.ext.crm3_26_ПереносОстатков
  • python tools/index/index_1c.py reindex -b crm3-26.ext успешно разворачивает и индексирует.
  • python tools/index/query_1c.py modules "ObjectModule" -b crm3-26.ext.crm3_26_ПереносОстатков возвращает модуль с owner ExternalDataProcessor.crm3_26_ПереносОстатков.

Также обновил документацию и версию:

...
## [0.3.4] - 2026-07-21
- добавлена поддержка virtual baseconf для внешних обработок
...
0.3.4

91521e6604

Сделано. Теперь `tools/index` умеет индексировать внешние обработки через `-b crm3-26.ext` (или через `default_baseconfs: [crm3-26.ext]`), с авто-разворачиванием в virtual baseconf `crm3-26.ext.<ИмяОбработки>`. Ключевые изменения: ```220:362:tools/index/index1c/config.py ... def list_config_dirs(...): ... if child.name.endswith(".ext"): found.extend(_discover_external_processors(child)) def _discover_external_processor_entries(...): # рекурсивно ищет <Имя>.xml + <Имя>/ и проверяет <ExternalDataProcessor ...> ... def discover_configs(...): # поддержка: # 1) -b crm3-26.ext.crm3_26_ПереносОстатков # 2) -b crm3-26.ext (разворачивается во все найденные обработки) ... ``` ```229:271:tools/index/index1c/cli.py ... def validate_baseconfs(...): # проверка теперь не только <name>/src/, # но и virtual external источников ... ``` ```335:359:tools/index/index1c/parse_meta.py ... if source_kind == "external_processor": otype = "ExternalDataProcessor" xml = src / f"{external_name}.xml" out.append((otype, xml)) ... ``` ```175:235:tools/index/index1c/build.py ... meta_files = iter_object_xml_files(..., source_kind=cfg.source_kind, external_name=cfg.external_name) bsl_paths = ( sorted((cfg.src / cfg.external_name).rglob("*.bsl")) if cfg.source_kind == "external_processor" else iter_bsl_files(cfg.src) ) ... ``` ```51:66:tools/index/index1c/parse_modules.py ... # owner для внешней обработки и её форм: ExternalDataProcessor.<Обработка> ExternalDataProcessor.<Обработка>.Form.<Форма> ... ``` Проверил на вашем кейсе: - `python tools/index/index_1c.py list` показывает: - `crm3-26.ext.crm3_26_ПереносОстатков` - `python tools/index/index_1c.py reindex -b crm3-26.ext` успешно разворачивает и индексирует. - `python tools/index/query_1c.py modules "ObjectModule" -b crm3-26.ext.crm3_26_ПереносОстатков` возвращает модуль с owner `ExternalDataProcessor.crm3_26_ПереносОстатков`. Также обновил документацию и версию: ```8:23:tools/index/CHANGELOG.md ... ## [0.3.4] - 2026-07-21 - добавлена поддержка virtual baseconf для внешних обработок ... ``` ```1:1:tools/index/VERSION 0.3.4 ``` https://git.p7net.ru/1c/index/commit/91521e66041b76658a30a7215f17d4b4d7f97f89
mk closed this issue 2026-07-21 10:20:58 +00:00
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: 1c/index#1