feat(skd-compile): пустой <dcsset:filter/> на conditionalAppearance item

Платформа эмитит <dcsset:filter/> (self-closing, без условий) на
каждом condApp item, где фильтр не задан — это нормальная форма
"правило применяется ко всем строкам без дополнительных условий".

Compile теперь эмитит пустой тег если filter отсутствует/пуст.
Decompile-side уже корректно игнорировал пустой filter (Build-CondApp
читает items только если они есть).

Эффект на sample30: −252 строки diff.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-05-22 21:51:49 +03:00
parent 480d828c35
commit 0846740db7
3 changed files with 11 additions and 4 deletions
@@ -1,4 +1,4 @@
# skd-compile v1.60 — Compile 1C DCS from JSON
# skd-compile v1.61 — Compile 1C DCS from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[string]$DefinitionFile,
@@ -2248,8 +2248,11 @@ function Emit-ConditionalAppearance {
}
# Filter (reuse existing Emit-Filter logic)
if ($ca.filter) {
if ($ca.filter -and $ca.filter.Count -gt 0) {
Emit-Filter -items $ca.filter -indent "$indent`t`t"
} else {
# Платформа эмитит пустой <dcsset:filter/> на каждом condApp item
X "$indent`t`t<dcsset:filter/>"
}
# Appearance (parameter-value pairs)
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# skd-compile v1.60 — Compile 1C DCS from JSON
# skd-compile v1.61 — Compile 1C DCS from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import json
@@ -1882,8 +1882,11 @@ def emit_conditional_appearance(lines, items, indent, block_view_mode=None):
lines.append(f'{indent}\t\t<dcsset:selection/>')
# Filter
if ca.get('filter'):
if ca.get('filter') and len(ca['filter']) > 0:
emit_filter(lines, ca['filter'], f'{indent}\t\t')
else:
# Платформа эмитит пустой <dcsset:filter/> на каждом condApp item
lines.append(f'{indent}\t\t<dcsset:filter/>')
# Appearance
if ca.get('appearance'):
@@ -57,6 +57,7 @@
<dcsset:field>ДатаДокумента</dcsset:field>
</dcsset:item>
</dcsset:selection>
<dcsset:filter/>
<dcsset:appearance>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>Формат</dcscor:parameter>