diff --git a/.claude/skills/skd-compile/scripts/skd-compile.ps1 b/.claude/skills/skd-compile/scripts/skd-compile.ps1 index fb258c67..a5c13cd5 100644 --- a/.claude/skills/skd-compile/scripts/skd-compile.ps1 +++ b/.claude/skills/skd-compile/scripts/skd-compile.ps1 @@ -1,4 +1,4 @@ -# skd-compile v1.97 — Compile 1C DCS from JSON +# skd-compile v1.98 — Compile 1C DCS from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [string]$DefinitionFile, @@ -336,6 +336,14 @@ function Emit-SingleValueType { return } + # TypeSet (композитный тип-набор): голое имя без точки, типа DocumentRef / CatalogRef / + # EnumRef / ChartOfAccountsRef / etc. (все ссылки указанного класса). + # Эмитим вместо . + if ($typeStr -match '^(CatalogRef|DocumentRef|EnumRef|ChartOfAccountsRef|ChartOfCharacteristicTypesRef|ChartOfCalculationTypesRef|BusinessProcessRef|TaskRef|ExchangePlanRef|InformationRegisterRef|AnyRef)$') { + X "$indentd5p1:$(Esc-Xml $typeStr)" + return + } + # Fallback — assume dot-qualified types are also config references if ($typeStr.Contains('.')) { X "$indentd5p1:$(Esc-Xml $typeStr)" diff --git a/.claude/skills/skd-compile/scripts/skd-compile.py b/.claude/skills/skd-compile/scripts/skd-compile.py index ad2cef33..8c5444b0 100644 --- a/.claude/skills/skd-compile/scripts/skd-compile.py +++ b/.claude/skills/skd-compile/scripts/skd-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# skd-compile v1.97 — Compile 1C DCS from JSON +# skd-compile v1.98 — Compile 1C DCS from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json @@ -214,6 +214,11 @@ def emit_single_value_type(lines, type_str, indent): lines.append(f'{indent}d5p1:{esc_xml(type_str)}') return + # TypeSet (композитный тип-набор): голое имя без точки. + if re.match(r'^(CatalogRef|DocumentRef|EnumRef|ChartOfAccountsRef|ChartOfCharacteristicTypesRef|ChartOfCalculationTypesRef|BusinessProcessRef|TaskRef|ExchangePlanRef|InformationRegisterRef|AnyRef)$', type_str): + lines.append(f'{indent}d5p1:{esc_xml(type_str)}') + return + # Fallback -- assume dot-qualified types are also config references if '.' in type_str: lines.append(f'{indent}d5p1:{esc_xml(type_str)}') diff --git a/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 b/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 index 6a5ab9bc..a730370d 100644 --- a/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 +++ b/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 @@ -1,4 +1,4 @@ -# skd-decompile v0.80 — Decompile 1C DCS Template.xml to JSON DSL (draft) +# skd-decompile v0.81 — Decompile 1C DCS Template.xml to JSON DSL (draft) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -335,12 +335,19 @@ function Get-ValueTypeShorthand { param($valueTypeNode) if (-not $valueTypeNode) { return $null } $types = $valueTypeNode.SelectNodes("v8:Type", $ns) - if ($types.Count -eq 0) { return $null } + $typeSets = $valueTypeNode.SelectNodes("v8:TypeSet", $ns) + if ($types.Count -eq 0 -and $typeSets.Count -eq 0) { return $null } $qualN = $valueTypeNode.SelectSingleNode("v8:NumberQualifiers", $ns) $qualS = $valueTypeNode.SelectSingleNode("v8:StringQualifiers", $ns) $qualD = $valueTypeNode.SelectSingleNode("v8:DateQualifiers", $ns) $shorts = @() foreach ($t in $types) { $shorts += (Get-OneTypeShorthand -typeNode $t -qualNumber $qualN -qualString $qualS -qualDate $qualD) } + # TypeSet (композитный тип-набор) — извлекаем local-name из значения ":Name". + foreach ($ts in $typeSets) { + $txt = $ts.InnerText + if ($txt -match ':(.+)$') { $shorts += $matches[1] } + else { $shorts += $txt } + } if ($shorts.Count -eq 1) { return $shorts[0] } return ,$shorts } diff --git a/docs/skd-dsl-spec.md b/docs/skd-dsl-spec.md index 94bf44e9..71beda7c 100644 --- a/docs/skd-dsl-spec.md +++ b/docs/skd-dsl-spec.md @@ -176,9 +176,12 @@ | `EnumRef.XXX` | `d5p1:EnumRef.XXX` | inline xmlns:d5p1 | | `ChartOfAccountsRef.XXX` | `d5p1:ChartOfAccountsRef.XXX` | inline xmlns:d5p1 | | `StandardPeriod` | `v8:StandardPeriod` | — | +| `DocumentRef` (без `.XXX`) | `d5p1:DocumentRef` | композитный тип-набор (все ссылки указанного класса) | > **Ссылочные типы** (`CatalogRef.XXX`, `DocumentRef.XXX` и др.) эмитируются с inline namespace declaration: `d5p1:CatalogRef.XXX`. Использование префикса `cfg:` вместо `d5p1:` с объявлением namespace приводит к ошибке XDTO. Сборка EPF со ссылочными типами требует базу с соответствующей конфигурацией (не пустую). +> **TypeSet (тип-набор)** — голое имя без точки (`CatalogRef`, `DocumentRef`, `EnumRef`, `ChartOfAccountsRef`, `ChartOfCharacteristicTypesRef`, `ChartOfCalculationTypesRef`, `BusinessProcessRef`, `TaskRef`, `ExchangePlanRef`, `InformationRegisterRef`, `AnyRef`) — указывает на **все** ссылки этого класса конфигурации (а не на конкретный объект). Эмитится как `` вместо ``. Используется в параметрах типа «исключаемые документы» и подобных. + ### Синонимы типов Все имена типов регистронезависимые. Поддерживаются русские и альтернативные имена: