feat(meta-compile,meta-decompile): короткая запись типа предопределённых ПВХ (v1.36/v0.25)

Предопределённые виды характеристик несут тип значения на элемент. Раньше это
требовало объектной формы; теперь тип выражается короткой строкой после ':' —
как в полях СКД/реквизитах:
  "(Код) Имя [Наименование]: Тип"    (тип составной через '+')

Правило: нет ':' → без блока Type (Catalog-стиль); непустой тип → короткая
строка; пустой <Type/> / папки / с детьми → объектная форма (ключ type).
Разбор зеркалит Parse-CalcShorthand: сначала вынуть [Наим] (может содержать ':'),
затем отделить тип по ':'. Компилятор принимает обе формы, декомпилятор пишет
короткую для плоских элементов.

На ВидыСубконтоХозрасчетные все 63 предопределённых из объектов стали
компактными строками. Роундтрип/вывод XML не меняется (52 TOTAL). Регресс 47/47
ps1+py, ps1↔py identical. spec §7.2b, кейс chart-of-characteristic-types.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-07-05 18:01:50 +03:00
parent 01ecd8a52d
commit 44bfcf2256
6 changed files with 46 additions and 17 deletions
@@ -9,8 +9,8 @@
"standardAttributes": { "Description": { "synonym": "Свойство" } },
"attributes": ["НаборСвойств: String(100)"],
"predefined": [
{ "name": "Цвет", "code": "000001", "type": "CatalogRef.ЗначенияСвойств" },
{ "name": "Размер", "code": "000002", "type": "String(50) + Number(3,0)" },
"(000001) Цвет: CatalogRef.ЗначенияСвойств",
"(000002) Размер [Размер одежды]: String(50) + Number(3,0)",
{ "name": "Группа", "code": "000003", "isFolder": true, "type": "" }
]
},
@@ -12,7 +12,7 @@
<Item id="UUID-002">
<Name>Размер</Name>
<Code>000002</Code>
<Description>Размер</Description>
<Description>Размер одежды</Description>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>