From abca61da66353f1dbfaeed1a2f42d2a63daee878 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sun, 24 May 2026 15:43:41 +0300 Subject: [PATCH] =?UTF-8?q?fix(skd-decompile):=20=D1=81=D0=BE=D1=85=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D1=8F=D1=82=D1=8C=20xsi:type=20=D0=B2=20multi-righ?= =?UTF-8?q?t=20filter=20values?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit При чтении FilterItemComparison с несколькими элементами теряли xsi:type — все значения уходили как строки, и compile эмитил DesignTimeValue по auto-detect для строк вида "Перечисление.*". Но оригинал может хранить эти значения как xs:string (см. АнализНачисленийИУдержаний @22718). Теперь читаем xsi:type каждого ; если все одинаковые — сохраняем в valueType. Compile уже умеет использовать переданный valueType вместо auto-detect. --- .../skd-decompile/scripts/skd-decompile.ps1 | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 b/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 index cdf2a584..396e5bc6 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.70 — Decompile 1C DCS Template.xml to JSON DSL (draft) +# skd-decompile v0.71 — Decompile 1C DCS Template.xml to JSON DSL (draft) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -1453,9 +1453,20 @@ function Build-FilterItem { } elseif ($rightNodes.Count -gt 1) { # Несколько значений → массив (InList с конкретными значениями) $arr = @() - foreach ($rn in $rightNodes) { $arr += (Get-FilterValue $rn) } + $rawTypes = @() + foreach ($rn in $rightNodes) { + $arr += (Get-FilterValue $rn) + $rawTypes += $rn.GetAttribute("type", $NS_XSI) + } $value = $arr $valueIsArrayFlag = $true + # Сохраняем raw xsi:type если все одинаковые — compile будет использовать + # как явный valueType (иначе авто-detect выберет DesignTimeValue для строк + # "Перечисление.*", но оригинал может хранить как xs:string). + $uniqTypes = @($rawTypes | Sort-Object -Unique) + if ($uniqTypes.Count -eq 1 -and $uniqTypes[0]) { + $valueTypeAttr = $uniqTypes[0] + } } $use = Get-Text $itemNode "dcsset:use"