mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-06 19:50:20 +03:00
fix(skd): сохранять явные startDate/endDate в top-level StandardPeriod parameter
Параметр типа StandardPeriod с variant=Custom может иметь явные даты,
отличающиеся от default 0001-01-01T00:00:00 (например endDate=23:59:59).
См. АнализПричинБлокировкиВычетаНДС @941.
Раньше decompile сохранял variant только если ≠Custom (для Custom —
ничего), и compile эмитил захардкоженные 0001-01-01T00:00:00 для обеих
дат. Теряли явное время.
decompile: для StandardPeriod с явными датами (любая ≠00:00:00) →
object form {variant: Custom, startDate, endDate}.
compile (PS+Py): Emit-ParamValue принимает dict val с variant/startDate/
endDate; для Custom без явных дат сохраняется текущий fallback на
0001-01-01T00:00:00.
Sample30 total: 620 → 618 строк diff.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# skd-decompile v0.79 — Decompile 1C DCS Template.xml to JSON DSL (draft)
|
||||
# skd-decompile v0.80 — Decompile 1C DCS Template.xml to JSON DSL (draft)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[Parameter(Mandatory)]
|
||||
@@ -755,8 +755,18 @@ function Build-Parameter {
|
||||
$vType = Get-LocalXsiType $valueNode
|
||||
if ($vType -eq 'StandardPeriod') {
|
||||
$variant = Get-Text $valueNode "v8:variant"
|
||||
if ($variant -and $variant -ne 'Custom') { $valueDisplay = $variant }
|
||||
# Custom with explicit dates → object form (handled below via needsObject)
|
||||
$sd = Get-Text $valueNode "v8:startDate"
|
||||
$ed = Get-Text $valueNode "v8:endDate"
|
||||
$hasExplicitDates = ($sd -and $sd -ne '0001-01-01T00:00:00') -or ($ed -and $ed -ne '0001-01-01T00:00:00')
|
||||
if ($hasExplicitDates) {
|
||||
# Custom с явными датами → object form {variant, startDate, endDate}
|
||||
$valueDisplay = [ordered]@{ variant = $variant }
|
||||
if ($sd) { $valueDisplay['startDate'] = $sd }
|
||||
if ($ed) { $valueDisplay['endDate'] = $ed }
|
||||
} elseif ($variant -and $variant -ne 'Custom') {
|
||||
$valueDisplay = $variant
|
||||
}
|
||||
# Custom без явных дат — valueDisplay = null, compile подставит 0001-01-01.
|
||||
} elseif ($vType -eq 'DesignTimeValue') {
|
||||
$valueDisplay = $valueNode.InnerText
|
||||
} elseif ($vType -eq 'LocalStringType') {
|
||||
|
||||
Reference in New Issue
Block a user