fix(skd-decompile): fold @autoDates только для канонических имён НачалоПериода/КонецПериода

Раньше любая пара companion-параметров с expression "&P.ДатаНачала"/
"&P.ДатаОкончания" сворачивалась в @autoDates, независимо от их имён.
Compile же всегда генерирует строго "НачалоПериода"/"КонецПериода" +
type=date + DateFractions=Date. Для отчётов с шаблоном "Период<X>" →
"НачалоПериода<X>"/"КонецПериода<X>" + DateFractions=DateTime
(типовой паттерн БСП — ПериодКонтрольСроков, ПериодОбязательств и т.п.)
это давало некорректный round-trip с потерей суффикса и формата дат.

Теперь fold срабатывает ТОЛЬКО для канонической пары — остальные
companion'ы остаются явными параметрами с полным сохранением имени,
type=dateTime, DateFractions=DateTime и expression.

sample30: −152 строки (1548 → 1396).
This commit is contained in:
Nick Shirokov
2026-05-23 20:38:33 +03:00
parent 639568c039
commit 796403abe3
@@ -1,4 +1,4 @@
# skd-decompile v0.66 — Decompile 1C DCS Template.xml to JSON DSL (draft)
# skd-decompile v0.67 — Decompile 1C DCS Template.xml to JSON DSL (draft)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[Parameter(Mandatory)]
@@ -2362,7 +2362,11 @@ foreach ($p in $paramsRaw) {
if ($q.expression -eq $startExpr) { $startMatch = $q.name }
elseif ($q.expression -eq $endExpr) { $endMatch = $q.name }
}
if ($startMatch -and $endMatch) {
# Fold ТОЛЬКО если companion-имена точно "НачалоПериода"/"КонецПериода" БЕЗ суффикса.
# Иначе compile (который генерирует именно эти имена + type=date + DateFractions=Date)
# не сможет вернуть bit-perfect для отчётов с шаблоном "Период<X>" → "НачалоПериода<X>"/
# "КонецПериода<X>" + DateFractions=DateTime. Оставляем как явные параметры.
if ($startMatch -eq 'НачалоПериода' -and $endMatch -eq 'КонецПериода') {
$p['autoDates'] = $true
$removedNames[$startMatch] = $true
$removedNames[$endMatch] = $true