diff --git a/.claude/skills/meta-compile/scripts/meta-compile.ps1 b/.claude/skills/meta-compile/scripts/meta-compile.ps1 index 8967f97f..2edbce71 100644 --- a/.claude/skills/meta-compile/scripts/meta-compile.ps1 +++ b/.claude/skills/meta-compile/scripts/meta-compile.ps1 @@ -1,4 +1,4 @@ -# meta-compile v1.29 — Compile 1C metadata object from JSON +# meta-compile v1.30 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -566,6 +566,12 @@ function Emit-TypeContent { X "$indentcfg:$typeStr" return } + # Голый метатип-категория (CatalogRef/DocumentRef/…/AnyRef/AnyIBRef без имени объекта) — множество + # «любой объект категории» → TypeSet (а не конкретный Type с именем). + if ($typeStr -match '^(CatalogRef|DocumentRef|EnumRef|ChartOfAccountsRef|ChartOfCharacteristicTypesRef|ChartOfCalculationTypesRef|ExchangePlanRef|BusinessProcessRef|TaskRef|AnyRef|AnyIBRef)$') { + X "$indentcfg:$typeStr" + return + } # ValueStorage (ХранилищеЗначения) — канон v8:ValueStorage (не xs:base64Binary, хоть 1С и принимает оба). if ($typeStr -eq "ValueStorage") { diff --git a/.claude/skills/meta-compile/scripts/meta-compile.py b/.claude/skills/meta-compile/scripts/meta-compile.py index b97a3fb7..6132bfe4 100644 --- a/.claude/skills/meta-compile/scripts/meta-compile.py +++ b/.claude/skills/meta-compile/scripts/meta-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# meta-compile v1.29 — Compile 1C metadata object from JSON +# meta-compile v1.30 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -600,6 +600,11 @@ def emit_type_content(indent, type_str): if re.match(r'^(DefinedType|Characteristic)\.(.+)$', type_str): X(f'{indent}cfg:{type_str}') return + # Голый метатип-категория (CatalogRef/DocumentRef/…/AnyRef/AnyIBRef без имени объекта) — множество + # «любой объект категории» → TypeSet (а не конкретный Type с именем). + if re.match(r'^(CatalogRef|DocumentRef|EnumRef|ChartOfAccountsRef|ChartOfCharacteristicTypesRef|ChartOfCalculationTypesRef|ExchangePlanRef|BusinessProcessRef|TaskRef|AnyRef|AnyIBRef)$', type_str): + X(f'{indent}cfg:{type_str}') + return # ValueStorage (ХранилищеЗначения) — канон v8:ValueStorage (не xs:base64Binary). if type_str == 'ValueStorage': X(f'{indent}v8:ValueStorage') diff --git a/docs/meta-dsl-spec.md b/docs/meta-dsl-spec.md index 1818f211..ace5e5af 100644 --- a/docs/meta-dsl-spec.md +++ b/docs/meta-dsl-spec.md @@ -83,10 +83,16 @@ JSON DSL для описания объектов метаданных конф | `TaskRef.Xxx` | `cfg:TaskRef.Xxx` | | `DefinedType.Xxx` | `cfg:DefinedType.Xxx` (через `v8:TypeSet`) | | `Characteristic.Xxx` | `cfg:Characteristic.Xxx` (через `v8:TypeSet`) | +| `CatalogRef` / `DocumentRef` / … / `AnyRef` / `AnyIBRef` (голый, без имени) | `cfg:<метатип>` (через `v8:TypeSet`) | -**Тип-множество (`v8:TypeSet`)** — тип, подразумевающий набор типов: `DefinedType.Xxx` (Определяемый тип) и -`Characteristic.Xxx` (значение Характеристики из ПВХ — «Вид субконто»/доп.реквизит). У реквизита-значения -Характеристики тип значения обычно определяется другим реквизитом-Видом — см. `linkByType` (§4.2). +**Тип-множество (`v8:TypeSet`)** — тип, подразумевающий набор типов: +- `DefinedType.Xxx` (Определяемый тип) и `Characteristic.Xxx` (значение Характеристики из ПВХ — «Вид субконто»/ + доп.реквизит). У реквизита-значения Характеристики тип обычно определяется другим реквизитом-Видом — см. `linkByType` (§4.2). +- **Голый метатип-категория** без имени объекта — «любой объект категории»: `CatalogRef` (любой справочник), + `DocumentRef`, `EnumRef`, `ChartOfAccountsRef`, `ChartOfCharacteristicTypesRef`, `ChartOfCalculationTypesRef`, + `ExchangePlanRef`, `BusinessProcessRef`, `TaskRef`, а также `AnyRef` (любая ссылка) и `AnyIBRef` (любая ссылка ИБ). + Отличается от именованного `CatalogRef.Xxx` (конкретный тип через `v8:Type`) отсутствием точки. В составном типе — + каждый через `+`: `DocumentRef + CatalogRef`. ### 3.3 Русские синонимы типов diff --git a/tests/skills/cases/meta-compile/catalog-attr-typeset-linkbytype.json b/tests/skills/cases/meta-compile/catalog-attr-typeset-linkbytype.json index d35a7df2..1fee500c 100644 --- a/tests/skills/cases/meta-compile/catalog-attr-typeset-linkbytype.json +++ b/tests/skills/cases/meta-compile/catalog-attr-typeset-linkbytype.json @@ -9,7 +9,10 @@ "linkByType": { "dataPath": "Свойство", "linkItem": 1 } }, { "name": "ЗначениеОпредТип", "type": "DefinedType.Сумма" }, { "name": "СвязьСтрокой", "type": "Characteristic.ВидыСубконто", - "linkByType": "Свойство" } + "linkByType": "Свойство" }, + { "name": "ЛюбаяСсылка", "type": "AnyRef" }, + { "name": "ЛюбаяСсылкаИБ", "type": "AnyIBRef" }, + { "name": "Основание", "type": "DocumentRef + CatalogRef" } ] }, "validatePath": "Catalogs/ТестХарактеристик", diff --git a/tests/skills/cases/meta-compile/snapshots/catalog-attr-typeset-linkbytype/Catalogs/ТестХарактеристик.xml b/tests/skills/cases/meta-compile/snapshots/catalog-attr-typeset-linkbytype/Catalogs/ТестХарактеристик.xml index 56ca92db..3283182f 100644 --- a/tests/skills/cases/meta-compile/snapshots/catalog-attr-typeset-linkbytype/Catalogs/ТестХарактеристик.xml +++ b/tests/skills/cases/meta-compile/snapshots/catalog-attr-typeset-linkbytype/Catalogs/ТестХарактеристик.xml @@ -253,6 +253,127 @@ Use + + + ЛюбаяСсылка + + + ru + Любая ссылка + + + + + cfg:AnyRef + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + ЛюбаяСсылкаИБ + + + ru + Любая ссылка иб + + + + + cfg:AnyIBRef + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + Основание + + + ru + Основание + + + + + cfg:DocumentRef + cfg:CatalogRef + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + +