fix(skd-decompile): не сворачивать @autoDates companions с availableAsField=false

Companions НачалоПериода/КонецПериода имеют canonical имена/expression в
некоторых корпусах, но дополнительно несут availableAsField=false
(поле-ограничение, не участвует в выборе). Наш @autoDates auto-generator
не передаёт этот атрибут — для совместимости с другими корпусами без него.

Решение в decompile: не сворачивать в @autoDates если хотя бы один
companion имеет availableAsField=false → companions остаются явными
параметрами, compile эмитит их со всеми атрибутами через стандартный
path.

Sample30: 607 → 458 строк diff (-149).
This commit is contained in:
Nick Shirokov
2026-05-24 20:27:21 +03:00
parent 61cc8f3b9a
commit ceaaa8bc55
3 changed files with 10 additions and 4 deletions
@@ -1,4 +1,4 @@
# skd-compile v1.98 — Compile 1C DCS from JSON
# skd-compile v1.100 — Compile 1C DCS from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[string]$DefinitionFile,
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# skd-compile v1.98 — Compile 1C DCS from JSON
# skd-compile v1.100 — Compile 1C DCS from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import json
@@ -1,4 +1,4 @@
# skd-decompile v0.83 — Decompile 1C DCS Template.xml to JSON DSL (draft)
# skd-decompile v0.84 — Decompile 1C DCS Template.xml to JSON DSL (draft)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[Parameter(Mandatory)]
@@ -2646,7 +2646,13 @@ foreach ($p in $paramsRaw) {
# Иначе compile (который генерирует именно эти имена + type=date + DateFractions=Date)
# не сможет вернуть bit-perfect для отчётов с шаблоном "Период<X>" → "НачалоПериода<X>"/
# "КонецПериода<X>" + DateFractions=DateTime. Оставляем как явные параметры.
if ($startMatch -eq 'НачалоПериода' -and $endMatch -eq 'КонецПериода') {
# Также НЕ сворачиваем если companions имеют availableAsField=false — compile
# auto-gen не передаёт этот атрибут (ERP-стиль без него; БСП-стиль с ним —
# вариативность не выразима через @autoDates флаг, пусть companions останутся явными).
$beginP = $paramByName[$startMatch]
$endP = $paramByName[$endMatch]
$hasNotAField = ($beginP -and $beginP.notAField) -or ($endP -and $endP.notAField)
if ($startMatch -eq 'НачалоПериода' -and $endMatch -eq 'КонецПериода' -and -not $hasNotAField) {
$p['autoDates'] = $true
$removedNames[$startMatch] = $true
$removedNames[$endMatch] = $true