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
+
+ DontIndex
+ Use
+ Use
+
+
+
+
+ ЛюбаяСсылкаИБ
+
+
+ ru
+ Любая ссылка иб
+
+
+
+
+ cfg:AnyIBRef
+
+ false
+
+
+
+ false
+
+ false
+ false
+
+
+ false
+
+ DontCheck
+ Items
+
+
+ Auto
+ Auto
+
+
+ Auto
+
+ DontIndex
+ Use
+ Use
+
+
+
+
+ Основание
+
+
+ ru
+ Основание
+
+
+
+
+ cfg:DocumentRef
+ cfg:CatalogRef
+
+ false
+
+
+
+ false
+
+ false
+ false
+
+
+ false
+
+ DontCheck
+ Items
+
+
+ Auto
+ Auto
+
+
+ Auto
+
+ DontIndex
+ Use
+ Use
+
+