feat(meta-compile,meta-edit,form-compile,form-edit,mxl-compile,skd-compile,skd-edit): вывод meta-info принимается на входе

Вывод читающего навыка модель несёт обратно в компилятор, а тот его не
понимал. Из 41 метки, которую печатает meta-info, в словаре typeSynonyms не
было 33: «ДокументОбъект.Заказ» из источников подписки meta-compile отвергал с
«Неизвестный тип», хотя сам же печатал эту форму через meta-info. Не
принимались и «ПВХСсылка.ВидыСубконто», и «Характеристика.Виды» — при том что
Characteristic.Xxx описан в спеке как штатная форма DSL.

Добавлены русские имена объектных типов, менеджеров и наборов записей.
Аббревиатуры (ПВХ/ПВР, РС/РН/РБ/РР) приняты наравне с полными именами: вывод
навыка сокращает долгие виды, чтобы в списке на сорок реквизитов не терялось
имя объекта, и раз он их печатает — обязан принимать.

В Resolve-TypeStr снимаются хвосты, которые дописывает глоссарий meta-info:
суффикс «(все)», счётчик «— типов: N» и раскрытие после стрелки. Срезаются
только эти известные формы — круглые скобки заняты параметризованными типами
вроде Число(15,2), слепой срез сломал бы их.

Функция под гардом check-inline-drift, поэтому правка синхронна во всех семи
навыках и обоих портах.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-09-20 17:34:49 +03:00
co-authored by Claude Opus 5
parent 7cbc8e9b7f
commit 74e88e75c2
14 changed files with 349 additions and 18 deletions
+57 -2
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# meta-edit v1.52 — Edit existing 1C metadata object XML
#!/usr/bin/env python3
# meta-edit v1.53 — Edit existing 1C metadata object XML
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
@@ -537,6 +537,49 @@ type_synonyms = {
"задачассылка": "TaskRef",
"определяемыйтип": "DefinedType",
"definedtype": "DefinedType",
# Русские имена объектных типов, менеджеров и наборов записей — те самые метки, которые
# печатает meta-info. Без них раундтрип «прочитал вывод → подал на вход» рвался:
# `ДокументОбъект.Заказ` из источников подписки компилятор отвергал с «Неизвестный тип»,
# хотя сам же печатал эту форму через meta-info. Аббревиатуры (ПВХ/ПВР, РС/РН/РБ/РР) приняты
# наравне с полными именами: вывод навыка сокращает долгие виды, чтобы в списке на сорок
# реквизитов не терялось имя объекта.
# Состав держит гард tests/skills/check-typeset-coverage.mjs.
"бизнеспроцессменеджер": "BusinessProcessManager",
"бизнеспроцессобъект": "BusinessProcessObject",
"документменеджер": "DocumentManager",
"документобъект": "DocumentObject",
"журналдокументовменеджер": "DocumentJournalManager",
"задачаменеджер": "TaskManager",
"задачаобъект": "TaskObject",
"константаменеджерзначения": "ConstantValueManager",
"любаяссылка": "AnyRef",
"любаяссылкаиб": "AnyIBRef",
"наборзаписейперерасчета": "RecalculationRecordSet",
"наборзаписейпоследовательности": "SequenceRecordSet",
"наборзаписейрб": "AccountingRegisterRecordSet",
"наборзаписейрн": "AccumulationRegisterRecordSet",
"наборзаписейрр": "CalculationRegisterRecordSet",
"наборзаписейрс": "InformationRegisterRecordSet",
"обработкаменеджер": "DataProcessorManager",
"отчетменеджер": "ReportManager",
"пврменеджер": "ChartOfCalculationTypesManager",
"пвробъект": "ChartOfCalculationTypesObject",
"пврссылка": "ChartOfCalculationTypesRef",
"пвхменеджер": "ChartOfCharacteristicTypesManager",
"пвхобъект": "ChartOfCharacteristicTypesObject",
"пвхссылка": "ChartOfCharacteristicTypesRef",
"перечислениеменеджер": "EnumManager",
"планобменаменеджер": "ExchangePlanManager",
"планобменаобъект": "ExchangePlanObject",
"плансчетовменеджер": "ChartOfAccountsManager",
"плансчетовобъект": "ChartOfAccountsObject",
"регистрбухгалтериименеджер": "AccountingRegisterManager",
"регистрнакопленияменеджер": "AccumulationRegisterManager",
"регистррасчетаменеджер": "CalculationRegisterManager",
"регистрсведенийменеджер": "InformationRegisterManager",
"справочникменеджер": "CatalogManager",
"справочникобъект": "CatalogObject",
"характеристика": "Characteristic",
"catalogref": "CatalogRef",
"documentref": "DocumentRef",
"enumref": "EnumRef",
@@ -602,6 +645,18 @@ def resolve_type_str(type_str):
type_str = type_str[4:]
elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str):
type_str = type_str[type_str.index(':') + 1:]
# Хвосты, которые дописывает вывод meta-info к множествам типов: суффикс обобщённого метатипа
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
# (Число(15,2)), слепой срез скобок сломал бы их.
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str).strip()
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str).strip()
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str).strip()
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
# раскрытие справа — берём левую часть, она и есть тип.
m = re.match(r'^(.+?)\s*(?:→|->)\s*.+$', type_str)
if m:
type_str = m.group(1).strip()
# Параметризованные типы: Number(15,2), Строка(100)
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
if m: