diff --git a/.claude/skills/skd-compile/scripts/skd-compile.ps1 b/.claude/skills/skd-compile/scripts/skd-compile.ps1
index b89ec461..d6626da5 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.4 — Compile 1C DCS from JSON
+# skd-compile v1.5 — Compile 1C DCS from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[string]$DefinitionFile,
@@ -857,8 +857,14 @@ function Emit-SingleParam {
# Value
Emit-ParamValue -type $parsed.type -val $parsed.value -indent "`t`t"
+ # Hidden implies useRestriction=true + availableAsField=false
+ if ($parsed.hidden -eq $true) {
+ $parsed.availableAsField = $false
+ $parsed.useRestriction = $true
+ }
+
# UseRestriction
- if ($p -isnot [string] -and $p.useRestriction -eq $true) {
+ if ($parsed.useRestriction -eq $true -or ($p -isnot [string] -and $p.useRestriction -eq $true)) {
X "`t`ttrue"
}
@@ -867,9 +873,6 @@ function Emit-SingleParam {
X "`t`t$(Esc-Xml $parsed.expression)"
}
- # Hidden implies availableAsField=false
- if ($parsed.hidden -eq $true) { $parsed.availableAsField = $false }
-
# AvailableAsField
if ($parsed.availableAsField -eq $false) {
X "`t`tfalse"
@@ -957,6 +960,8 @@ function Emit-ParamValue {
X "$indent$(Esc-Xml $valStr)"
} elseif ($valStr -eq "true" -or $valStr -eq "false") {
X "$indent$(Esc-Xml $valStr)"
+ } elseif ($valStr -match '^(ПланСчетов|Справочник|Перечисление|Документ|ПланВидовХарактеристик|ПланВидовРасчета|БизнесПроцесс|Задача|РегистрСведений|ПланОбмена)\.' -or $valStr -match '^(ChartOfAccounts|Catalog|Enum|Document|ChartOfCharacteristicTypes|ChartOfCalculationTypes|BusinessProcess|Task|InformationRegister|ExchangePlan)\.') {
+ X "$indent$(Esc-Xml $valStr)"
} else {
X "$indent$(Esc-Xml $valStr)"
}
@@ -1744,6 +1749,10 @@ function Parse-StructureShorthand {
if ($seg -match '^(?i)(details|детали)$') {
# Empty groupBy = detailed records
$group | Add-Member -NotePropertyName "groupBy" -NotePropertyValue @()
+ } elseif ($seg -match '^(.+)\[(.+)\]$') {
+ # Named group: "ИмяГруппы[Поле]"
+ $group | Add-Member -NotePropertyName "name" -NotePropertyValue $Matches[1].Trim()
+ $group | Add-Member -NotePropertyName "groupBy" -NotePropertyValue @($Matches[2].Trim())
} else {
$group | Add-Member -NotePropertyName "groupBy" -NotePropertyValue @($seg)
}
diff --git a/.claude/skills/skd-compile/scripts/skd-compile.py b/.claude/skills/skd-compile/scripts/skd-compile.py
index 35a86414..51ee0b27 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.4 — Compile 1C DCS from JSON
+# skd-compile v1.5 — Compile 1C DCS from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import json
@@ -702,6 +702,8 @@ def emit_param_value(lines, type_str, val, indent):
lines.append(f'{indent}{esc_xml(val_str)}')
elif val_str == 'true' or val_str == 'false':
lines.append(f'{indent}{esc_xml(val_str)}')
+ elif re.match(r'^(ПланСчетов|Справочник|Перечисление|Документ|ПланВидовХарактеристик|ПланВидовРасчета|БизнесПроцесс|Задача|РегистрСведений|ПланОбмена|ChartOfAccounts|Catalog|Enum|Document|ChartOfCharacteristicTypes|ChartOfCalculationTypes|BusinessProcess|Task|InformationRegister|ExchangePlan)\.', val_str):
+ lines.append(f'{indent}{esc_xml(val_str)}')
else:
lines.append(f'{indent}{esc_xml(val_str)}')
@@ -726,15 +728,18 @@ def emit_single_param(lines, p, parsed):
# Value
emit_param_value(lines, parsed.get('type', ''), parsed.get('value'), '\t\t')
+ # Hidden implies useRestriction=true + availableAsField=false
+ if parsed.get('hidden') is True:
+ parsed['availableAsField'] = False
+ parsed['useRestriction'] = True
+
# UseRestriction
- if p is not None and not isinstance(p, str) and p.get('useRestriction') is True:
+ if parsed.get('useRestriction') is True or (p is not None and not isinstance(p, str) and p.get('useRestriction') is True):
lines.append('\t\ttrue')
# Expression
if parsed.get('expression'):
lines.append(f'\t\t{esc_xml(parsed["expression"])}')
-
- # Hidden implies availableAsField=false
if parsed.get('hidden'):
parsed['availableAsField'] = False
@@ -1461,7 +1466,13 @@ def parse_structure_shorthand(s):
if re.match(r'(?i)^(details|\u0434\u0435\u0442\u0430\u043b\u0438)$', seg):
group['groupBy'] = []
else:
- group['groupBy'] = [seg]
+ # Named group: "ИмяГруппы[Поле]"
+ m_named = re.match(r'^(.+)\[(.+)\]$', seg)
+ if m_named:
+ group['name'] = m_named.group(1).strip()
+ group['groupBy'] = [m_named.group(2).strip()]
+ else:
+ group['groupBy'] = [seg]
if innermost is not None:
group['children'] = [innermost]