feat(form-decompile,form-compile): itemsUserSettingPresentation в дескрипторе ListSettings

ListSettings может нести items-уровневую подпись <dcsset:itemsUserSettingPresentation>
(рядом с itemsViewMode/itemsUserSettingID). Get-ListSettingsShape ронял её в канон-fallback
(unknown top-level element → return $null) → терялась. Аналог container-level
userSettingPresentation (commit 66817312), но items-уровень.

Декомпилятор: захват itemsUserSettingPresentation в дескриптор (Get-PresByType — форма
по xsi:type). Компилятор: новый case в потреблении дескриптора (Emit-USPresentation /
emit_us_presentation). Зеркало py.

Корпус 8.3.24: 2 формы (ОплатаПлатежнойКартой/ФормаПлатежиПоРеестрам, …): match 0→2,
TOTAL→0. ps1==py байт-в-байт. Регресс 43/43. Spec обновлён.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-06-13 16:39:00 +03:00
co-authored by Claude Opus 4.8
parent 6cfc504509
commit 47e980f932
4 changed files with 9 additions and 5 deletions
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# form-compile v1.164 — Compile 1C managed form from JSON or object metadata
# form-compile v1.165 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import copy
@@ -5570,6 +5570,8 @@ def emit_attributes(lines, attrs, indent, conditional_appearance=None):
lines.append(f'{lsi}<dcsset:itemsViewMode>Normal</dcsset:itemsViewMode>')
elif tag == 'itemsUserSettingID':
lines.append(f'{lsi}<dcsset:itemsUserSettingID>{CANON_ITEMS_ID}</dcsset:itemsUserSettingID>')
elif tag == 'itemsUserSettingPresentation':
emit_us_presentation(lines, lsi, 'dcsset:itemsUserSettingPresentation', pv)
elif tag == 'structure':
emit_list_grouping(lines, get_list_grouping_value(s), lsi)
else: