fix(skd-compile): не пропускать Auto-items в top-level selection/order

Platform может содержать SelectedItemAuto/OrderItemAuto в top-level
<dcsset:selection>/<dcsset:order> (рядом с явными полями) — это валидно.
Раньше compile использовал -skipAuto на top-level, теряя эти items.

Снапшоты регенерированы.

sample30: −10 строк (942 → 932).
This commit is contained in:
Nick Shirokov
2026-05-23 22:06:03 +03:00
parent fdc8c518aa
commit f642f673d9
91 changed files with 105 additions and 26 deletions
@@ -1,4 +1,4 @@
# skd-compile v1.84 — Compile 1C DCS from JSON
# skd-compile v1.85 — Compile 1C DCS from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[string]$DefinitionFile,
@@ -3076,12 +3076,11 @@ function Emit-SettingsVariants {
Emit-UserFields -items $s.userFields -indent "`t`t`t"
}
# Selection (Auto items only belong at group level, not top-level settings).
# Эмитим даже если items пустые, но есть block-level viewMode/userSettingID
# (platform пишет такой блок как <dcsset:selection><dcsset:viewMode>.../...>).
# Selection — эмитим даже если items пустые, но есть block-level viewMode/userSettingID.
# Platform может содержать Auto-items на top-level (вместе с явными полями).
$svm = Get-BlockVM 'selection'; $susid = Get-BlockUSID 'selection'
if ($s.selection -or $null -ne $svm -or $null -ne $susid) {
Emit-Selection -items $s.selection -indent "`t`t`t" -skipAuto -blockViewMode $svm -blockUserSettingID $susid
Emit-Selection -items $s.selection -indent "`t`t`t" -blockViewMode $svm -blockUserSettingID $susid
}
# Filter
@@ -3090,10 +3089,10 @@ function Emit-SettingsVariants {
Emit-Filter -items $s.filter -indent "`t`t`t" -blockViewMode $fvm -blockUserSettingID $fusid
}
# Order (Auto items only belong at group level, not top-level settings)
# Order
$ovm = Get-BlockVM 'order'; $ousid = Get-BlockUSID 'order'
if ($s.order -or $null -ne $ovm -or $null -ne $ousid) {
Emit-Order -items $s.order -indent "`t`t`t" -skipAuto -blockViewMode $ovm -blockUserSettingID $ousid
Emit-Order -items $s.order -indent "`t`t`t" -blockViewMode $ovm -blockUserSettingID $ousid
}
# ConditionalAppearance
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# skd-compile v1.84 — Compile 1C DCS from JSON
# skd-compile v1.85 — Compile 1C DCS from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import json
@@ -2468,11 +2468,11 @@ def emit_settings_variants(lines, defn):
emit_user_fields(lines, s['userFields'], '\t\t\t')
# Selection/Filter/Order/CA — эмитим даже если items пустые, но есть
# block-level viewMode/userSettingID (platform пишет такой блок как
# <dcsset:selection><dcsset:viewMode>...</dcsset:viewMode></dcsset:selection>).
# block-level viewMode/userSettingID. Platform может содержать Auto-items
# на top-level (вместе с явными полями), поэтому не skip_auto.
svm, susid = _block_vm('selection'), _block_usid('selection')
if s.get('selection') or svm is not None or susid is not None:
emit_selection(lines, s.get('selection'), '\t\t\t', skip_auto=True, block_view_mode=svm, block_user_setting_id=susid)
emit_selection(lines, s.get('selection'), '\t\t\t', block_view_mode=svm, block_user_setting_id=susid)
fvm, fusid = _block_vm('filter'), _block_usid('filter')
if s.get('filter') or fvm is not None or fusid is not None:
@@ -2480,7 +2480,7 @@ def emit_settings_variants(lines, defn):
ovm, ousid = _block_vm('order'), _block_usid('order')
if s.get('order') or ovm is not None or ousid is not None:
emit_order(lines, s.get('order'), '\t\t\t', skip_auto=True, block_view_mode=ovm, block_user_setting_id=ousid)
emit_order(lines, s.get('order'), '\t\t\t', block_view_mode=ovm, block_user_setting_id=ousid)
cavm, causid = _block_vm('conditionalAppearance'), _block_usid('conditionalAppearance')
if s.get('conditionalAppearance') or cavm is not None or causid is not None: