mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-28 14:09:41 +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
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
param(
|
param(
|
||||||
[Parameter(Mandatory)]
|
[Parameter(Mandatory)]
|
||||||
@@ -1453,9 +1453,20 @@ function Build-FilterItem {
|
|||||||
} elseif ($rightNodes.Count -gt 1) {
|
} elseif ($rightNodes.Count -gt 1) {
|
||||||
# Несколько значений → массив (InList с конкретными значениями)
|
# Несколько значений → массив (InList с конкретными значениями)
|
||||||
$arr = @()
|
$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
|
$value = $arr
|
||||||
$valueIsArrayFlag = $true
|
$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"
|
$use = Get-Text $itemNode "dcsset:use"
|
||||||
|
|||||||
Reference in New Issue
Block a user