From bb7696bf28c1e4bdb618d90d39088b42b537f867 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sat, 23 May 2026 21:01:59 +0300 Subject: [PATCH] =?UTF-8?q?fix(skd-decompile):=20StandardPeriod=20=D0=B2?= =?UTF-8?q?=20object-form=20dataParameter=20=D1=8D=D0=BC=D0=B8=D1=82=D0=B8?= =?UTF-8?q?=D0=BC=20=D0=BA=D0=B0=D0=BA=20{variant}?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Когда dataParameter имеет viewMode/userSettingPresentation и значение — StandardPeriod без явных дат (просто вариант "Custom"/"ThisMonth"), decompile сохранял value как плоскую строку "Custom" + valueType=v8:StandardPeriod. Compile, видя valueType с префиксом, эмитил Custom — плоский xs:string-like тег вместо StandardPeriod-блока с . Теперь когда object-form нужен по другим причинам (viewMode/USP), StandardPeriod-вариант сохраняется как {variant: ...}, и compile правильно генерирует . sample30: −66 строк (1396 → 1330). --- .claude/skills/skd-decompile/scripts/skd-decompile.ps1 | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 b/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 index 088dbc15..a93b0d09 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.67 — Decompile 1C DCS Template.xml to JSON DSL (draft) +# skd-decompile v0.68 — Decompile 1C DCS Template.xml to JSON DSL (draft) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -1817,7 +1817,13 @@ function Build-DataParameters { if ($ed) { $stdPeriodObj['endDate'] = $ed } $canAuto = $false } elseif ($variant) { + # Для shorthand эмитим как строку "Period = ThisMonth"; для object form — + # объектом {variant: ThisMonth}, чтобы compile сгенерировал + # вместо плоского ThisMonth. $vDisplay = $variant + if ($vmN -or $uspN) { + $stdPeriodObj = [ordered]@{ variant = $variant } + } } } elseif ($vt -eq 'DesignTimeValue') { $vDisplay = $valNode.InnerText @@ -1834,6 +1840,7 @@ function Build-DataParameters { $obj = [ordered]@{ parameter = $pn } if ($stdPeriodObj) { $obj['value'] = $stdPeriodObj + # valueType не нужен — compile определит StandardPeriod по value.variant } elseif ($null -ne $vDisplay -and $vDisplay -ne '') { # Конвертация для типизированных значений (compile различает по типу JSON) if ($vt -eq 'boolean') { $obj['value'] = ($vDisplay -eq 'true') }