fix(skd-decompile): StandardPeriod в object-form dataParameter эмитим как {variant}

Когда dataParameter имеет viewMode/userSettingPresentation и значение —
StandardPeriod без явных дат (просто вариант "Custom"/"ThisMonth"),
decompile сохранял value как плоскую строку "Custom" + valueType=v8:StandardPeriod.
Compile, видя valueType с префиксом, эмитил <value xsi:type="v8:StandardPeriod">Custom</value>
— плоский xs:string-like тег вместо StandardPeriod-блока с <v8:variant>.

Теперь когда object-form нужен по другим причинам (viewMode/USP),
StandardPeriod-вариант сохраняется как {variant: ...}, и compile
правильно генерирует <v8:variant xsi:type="v8:StandardPeriodVariant">.

sample30: −66 строк (1396 → 1330).
This commit is contained in:
Nick Shirokov
2026-05-23 21:01:59 +03:00
parent 0466ae8fd8
commit bb7696bf28
@@ -1,4 +1,4 @@
# skd-decompile v0.67 — Decompile 1C DCS Template.xml to JSON DSL (draft)
# skd-decompile v0.68 — Decompile 1C DCS Template.xml to JSON DSL (draft)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[Parameter(Mandatory)]
@@ -1817,7 +1817,13 @@ function Build-DataParameters {
if ($ed) { $stdPeriodObj['endDate'] = $ed }
$canAuto = $false
} elseif ($variant) {
# Для shorthand эмитим как строку "Period = ThisMonth"; для object form —
# объектом {variant: ThisMonth}, чтобы compile сгенерировал <v8:variant>
# вместо плоского <value xsi:type="v8:StandardPeriod">ThisMonth</value>.
$vDisplay = $variant
if ($vmN -or $uspN) {
$stdPeriodObj = [ordered]@{ variant = $variant }
}
}
} elseif ($vt -eq 'DesignTimeValue') {
$vDisplay = $valNode.InnerText
@@ -1834,6 +1840,7 @@ function Build-DataParameters {
$obj = [ordered]@{ parameter = $pn }
if ($stdPeriodObj) {
$obj['value'] = $stdPeriodObj
# valueType не нужен — compile определит StandardPeriod по value.variant
} elseif ($null -ne $vDisplay -and $vDisplay -ne '') {
# Конвертация для типизированных значений (compile различает по типу JSON)
if ($vt -eq 'boolean') { $obj['value'] = ($vDisplay -eq 'true') }