fix(skd-decompile): сохранять xsi:type в multi-right filter values

При чтении FilterItemComparison с несколькими <right> элементами теряли
xsi:type — все значения уходили как строки, и compile эмитил DesignTimeValue
по auto-detect для строк вида "Перечисление.*". Но оригинал может хранить
эти значения как xs:string (см. АнализНачисленийИУдержаний @22718).

Теперь читаем xsi:type каждого <right>; если все одинаковые — сохраняем
в valueType. Compile уже умеет использовать переданный valueType вместо
auto-detect.
This commit is contained in:
Nick Shirokov
2026-05-24 15:43:41 +03:00
parent db6a1f2212
commit abca61da66
@@ -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"