mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-06-11 00:14:56 +03:00
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:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user