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]