feat(form-decompile,form-compile): StandardBeginningDate — короткая форма значения (строка-вариант)

Добавлена короткая запись значения фильтра StandardBeginningDate (как в skd для
StandardPeriod): именованный вариант → просто строка "BeginningOfThisDay" (без даты);
Custom → объект {variant:"Custom", date:"…"} (нужна дата). Компилятор Emit-FilterItem
принимает обе формы (строка → variant-only; объект → variant+date); декомпилятор
эмитит строку для именованных вариантов, объект для Custom.

Зеркало py. Кейс input-fields: именованный вариант переведён на короткую строку
(snapshot байт-в-байт = объектной форме). Round-trip: Custom→объект,
BeginningOfThisDay→строка. Регресс 43/43, SBD-корпус (40 форм) без регрессий.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-06-11 18:31:45 +03:00
co-authored by Claude Opus 4.8
parent 3ce71d436f
commit 89bb58a101
5 changed files with 33 additions and 25 deletions
@@ -1,4 +1,4 @@
# form-decompile v0.93 — Decompile 1C managed Form.xml to JSON DSL (draft)
# form-decompile v0.94 — Decompile 1C managed Form.xml to JSON DSL (draft)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
param(
@@ -465,14 +465,15 @@ function Get-FilterValueWithType {
if ($vType -eq 'LocalStringType') {
return @{ value = (Get-MLText $valNode); type = $rawType }
}
# Стандартная дата начала/окончания — структурное значение {variant, date?}
# (Custom несёт <v8:date>; именованные варианты — без даты). Иначе InnerText склеивал variant+date.
# Стандартная дата начала/окончания. Custom несёт <v8:date> → объект {variant, date};
# именованный вариант (BeginningOfThisDay/…) без даты → строка-вариант (short form).
# Иначе InnerText склеивал variant+date.
if ($vType -eq 'StandardBeginningDate' -or $vType -eq 'StandardEndDate') {
$variantN = $valNode.SelectSingleNode("v8:variant", $ns)
$dateN = $valNode.SelectSingleNode("v8:date", $ns)
$o = [ordered]@{ variant = if ($variantN) { $variantN.InnerText } else { '' } }
if ($dateN) { $o['date'] = $dateN.InnerText }
return @{ value = $o; type = $rawType }
$variantStr = if ($variantN) { $variantN.InnerText } else { '' }
if ($dateN) { return @{ value = [ordered]@{ variant = $variantStr; date = $dateN.InnerText }; type = $rawType } }
return @{ value = $variantStr; type = $rawType }
}
$txt = $valNode.InnerText
if (-not $txt) { return @{ value = '_'; type = $rawType } }