feat(skd-compile): userSettingID/userSettingPresentation на StructureItemGroup

StructureItemGroup может быть зарегистрирована как пункт пользовательских
настроек (например, "По сотрудникам" — позволяет включить/выключить
группировку через UI). Поля userSettingID и userSettingPresentation
эмитятся после viewMode, перед itemsViewMode (платформенный порядок).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-05-22 21:09:37 +03:00
parent a9deeee2d0
commit 616ac2a23e
2 changed files with 17 additions and 6 deletions
@@ -1,4 +1,4 @@
# skd-compile v1.57 — Compile 1C DCS from JSON
# skd-compile v1.58 — Compile 1C DCS from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[string]$DefinitionFile,
@@ -2646,12 +2646,18 @@ function Emit-StructureItem {
}
}
# viewMode/itemsViewMode on StructureItemGroup are context-dependent —
# platform emits them in some shapes (top-level single group) but not always.
# Emit only when explicitly set in JSON (preserves bit-perfect round-trip).
# viewMode/itemsViewMode/userSettingID/userSettingPresentation on
# StructureItemGroup are context-dependent — emit only when explicitly set.
if ($item.viewMode) {
X "$indent`t<dcsset:viewMode>$(Esc-Xml "$($item.viewMode)")</dcsset:viewMode>"
}
if ($item.userSettingID) {
$gid = if ("$($item.userSettingID)" -eq "auto") { New-Guid-String } else { "$($item.userSettingID)" }
X "$indent`t<dcsset:userSettingID>$(Esc-Xml $gid)</dcsset:userSettingID>"
}
if ($item.userSettingPresentation) {
Emit-MLText -tag "dcsset:userSettingPresentation" -text $item.userSettingPresentation -indent "$indent`t"
}
if ($item.itemsViewMode) {
X "$indent`t<dcsset:itemsViewMode>$(Esc-Xml "$($item.itemsViewMode)")</dcsset:itemsViewMode>"
}
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# skd-compile v1.57 — Compile 1C DCS from JSON
# skd-compile v1.58 — Compile 1C DCS from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import json
@@ -2189,9 +2189,14 @@ def emit_structure_item(lines, item, indent):
for child in item['children']:
emit_structure_item(lines, child, f'{indent}\t')
# viewMode/itemsViewMode — emit only when explicitly set (context-dependent)
# viewMode/itemsViewMode/userSettingID/userSettingPresentation — context-dependent
if item.get('viewMode'):
lines.append(f'{indent}\t<dcsset:viewMode>{esc_xml(str(item["viewMode"]))}</dcsset:viewMode>')
if item.get('userSettingID'):
gid = new_uuid() if str(item['userSettingID']) == 'auto' else str(item['userSettingID'])
lines.append(f'{indent}\t<dcsset:userSettingID>{esc_xml(gid)}</dcsset:userSettingID>')
if item.get('userSettingPresentation'):
emit_mltext(lines, f'{indent}\t', 'dcsset:userSettingPresentation', item['userSettingPresentation'])
if item.get('itemsViewMode'):
lines.append(f'{indent}\t<dcsset:itemsViewMode>{esc_xml(str(item["itemsViewMode"]))}</dcsset:itemsViewMode>')