mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-06-14 01:44:57 +03:00
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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user