diff --git a/.claude/skills/skd-compile/scripts/skd-compile.ps1 b/.claude/skills/skd-compile/scripts/skd-compile.ps1 index 116d09b1..b976f29e 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.74 — Compile 1C DCS from JSON +# skd-compile v1.75 — Compile 1C DCS from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [string]$DefinitionFile, @@ -2549,6 +2549,10 @@ function Emit-DataParameters { X "$indent`t`t`t$(Esc-Xml $_sd)" X "$indent`t`t`t$(Esc-Xml $_ed)" X "$indent`t`t" + } elseif ($vtype -match '^[a-zA-Z]+:') { + # Полный xsi:type из decompile (например "xs:boolean", "dcscor:DesignTimeValue"). + $vStr = if ($dp.value -is [bool]) { "$($dp.value)".ToLower() } else { "$($dp.value)" } + X "$indent`t`t$(Esc-Xml $vStr)" } elseif ($vtype -eq 'boolean' -or $dp.value -is [bool]) { $bv = "$($dp.value)".ToLower() X "$indent`t`t$(Esc-Xml $bv)" diff --git a/.claude/skills/skd-compile/scripts/skd-compile.py b/.claude/skills/skd-compile/scripts/skd-compile.py index 0a45825e..e517b9a8 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.74 — Compile 1C DCS from JSON +# skd-compile v1.75 — Compile 1C DCS from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json @@ -2071,6 +2071,10 @@ def emit_data_parameters(lines, items, indent): lines.append(f'{indent}\t\t\t{esc_xml(sd)}') lines.append(f'{indent}\t\t\t{esc_xml(ed)}') lines.append(f'{indent}\t\t') + elif re.match(r'^[a-zA-Z]+:', vtype): + # Полный xsi:type из decompile (например "xs:boolean", "dcscor:DesignTimeValue"). + v_str = str(val).lower() if isinstance(val, bool) else str(val) + lines.append(f'{indent}\t\t{esc_xml(v_str)}') elif vtype == 'boolean' or isinstance(val, bool): bv = str(val).lower() lines.append(f'{indent}\t\t{esc_xml(bv)}') diff --git a/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 b/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 index 81cd933b..5b5f21ab 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.57 — Decompile 1C DCS Template.xml to JSON DSL (draft) +# skd-decompile v0.58 — Decompile 1C DCS Template.xml to JSON DSL (draft) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -1760,6 +1760,10 @@ function Build-DataParameters { # use на dataParameter item — это (не dcsset) $use = Get-Text $it "dcscor:use" if ($use -eq 'false') { $canAuto = $false } + # viewMode / userSettingPresentation на dataParameter item — это dcsset:* (после value) + $vmN = $it.SelectSingleNode("dcsset:viewMode", $ns) + $uspN = $it.SelectSingleNode("dcsset:userSettingPresentation", $ns) + if ($vmN -or $uspN) { $canAuto = $false } $tp = $visibleTop[$pn] $flags = @() if ($usid) { $flags += '@user' } @@ -1790,11 +1794,30 @@ function Build-DataParameters { # Compare to top-level default if ($tp -and $tp.valueDisplay -ne $vDisplay) { $canAuto = $false } if (-not $tp) { $canAuto = $false } # extra param not in top-level - if ($stdPeriodObj) { - # Object form для StandardPeriod с явными датами - $obj = [ordered]@{ parameter = $pn; value = $stdPeriodObj } + # Object form требуется если есть viewMode / userSettingPresentation / StandardPeriod-с-датами + if ($stdPeriodObj -or $vmN -or $uspN) { + $obj = [ordered]@{ parameter = $pn } + if ($stdPeriodObj) { + $obj['value'] = $stdPeriodObj + } elseif ($null -ne $vDisplay -and $vDisplay -ne '') { + # Конвертация для типизированных значений (compile различает по типу JSON) + if ($vt -eq 'boolean') { $obj['value'] = ($vDisplay -eq 'true') } + elseif ($vt -eq 'decimal') { + if ($vDisplay -match '^-?\d+$') { $obj['value'] = [int]$vDisplay } + else { $obj['value'] = [double]$vDisplay } + } + else { $obj['value'] = $vDisplay } + # Сохраняем полный xsi:type для bit-perfect эмиссии + $ta = $valNode.Attributes['xsi:type'] + if ($ta) { $obj['valueType'] = $ta.Value } + } if ($use -eq 'false') { $obj['use'] = $false } if ($usid) { $obj['userSettingID'] = 'auto' } + if ($vmN) { $obj['viewMode'] = $vmN.InnerText } + if ($uspN) { + $uspV = Get-MLText $uspN + if ($uspV) { $obj['userSettingPresentation'] = $uspV } + } $entries += $obj } else { # Build shorthand entry