mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-26 14:41:02 +03:00
feat(skd): multi-value параметры (valueListAllowed список значений по умолчанию)
Параметр с valueListAllowed=true может иметь несколько <value> элементов
подряд — список значений по умолчанию (например список счетов плана).
Раньше decompile читал только первый (SelectSingleNode), compile эмитил
один <value> → терялись все остальные значения.
DSL: value в параметре может быть массивом строк (или native bool/int/double).
decompile: SelectNodes("r:value") → если >1 элемент, value = array.
compile (PS+Py): если value — array, эмитим каждый отдельным <value>
через Emit-ParamValue.
Альт-indent корпус: 18009 → 17946 строк diff.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# skd-decompile v0.84 — Decompile 1C DCS Template.xml to JSON DSL (draft)
|
||||
# skd-decompile v0.85 — Decompile 1C DCS Template.xml to JSON DSL (draft)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[Parameter(Mandatory)]
|
||||
@@ -758,11 +758,26 @@ function Build-Parameter {
|
||||
$valueTypeNode = $pNode.SelectSingleNode("r:valueType", $ns)
|
||||
$typeShort = Get-ValueTypeShorthand $valueTypeNode
|
||||
|
||||
# value
|
||||
$valueNode = $pNode.SelectSingleNode("r:value", $ns)
|
||||
# value — может быть несколько (valueListAllowed: список значений по умолчанию).
|
||||
$valueNodes = $pNode.SelectNodes("r:value", $ns)
|
||||
$valueDisplay = $null
|
||||
$valueIsNil = $false
|
||||
if ($valueNode) {
|
||||
if ($valueNodes.Count -gt 1) {
|
||||
# Multi-value (список значений по умолчанию для параметра-списка)
|
||||
$valueArr = @()
|
||||
foreach ($vn in $valueNodes) {
|
||||
$vt = Get-LocalXsiType $vn
|
||||
$vTxt = $vn.InnerText
|
||||
if ($vt -eq 'boolean') { $valueArr += ($vTxt -eq 'true') }
|
||||
elseif ($vt -eq 'decimal') {
|
||||
if ($vTxt -match '^-?\d+$') { $valueArr += [int]$vTxt }
|
||||
else { $valueArr += [double]$vTxt }
|
||||
} else { $valueArr += $vTxt }
|
||||
}
|
||||
$valueDisplay = $valueArr
|
||||
}
|
||||
elseif ($valueNodes.Count -eq 1) {
|
||||
$valueNode = $valueNodes[0]
|
||||
$nil = $valueNode.GetAttribute("nil", $NS_XSI)
|
||||
if ($nil -eq 'true') { $valueIsNil = $true }
|
||||
else {
|
||||
|
||||
Reference in New Issue
Block a user