feat(form-compile): оформление PictureDecoration — un-defer (хвост Appearance закрыт)

Ранее отложил PictureDecoration, ошибочно решив, что падение загрузки = порядок тегов (XSD
расщепляет appearance вокруг <Title>). Разбор остатка показал: падало из-за НЕВАЛИДНОЙ ссылки
на картинку в тесте (picture:"Картинка" → <xr:Ref>Картинка</xr:Ref>, такой CommonPicture нет),
а не из-за оформления. Проверка с валидной StdPicture.Print + appearance → грузится чисто.

Ключевой факт: 1С ТОЛЕРАНТНА к порядку оформления внутри элемента. LabelDecoration в корпусе
тоже расщепляет appearance вокруг Title (TextColor/Font до Title — тысячи раз; BackColor/Border
после), но компилятор эмитит contiguous-после-Title — и LabelDecoration сертифицировался. Значит
профиль decoration валиден и для PictureDecoration.

Разведён 12-й эмиттер (pictureDecoration, профиль decoration), PS+Python. Кейс element-appearance
расширен PictureDecoration (StdPicture.Print, чистое имя через src). Сертификация загрузкой —
чисто. Регресс 36/36 ps+py. Harness: остаток appearance LOST = 0 (был PictureDecoration 2),
TOTAL 1146→1144; весь кластер Appearance 1326→1144 (−182). Версия form-compile v1.67.
This commit is contained in:
Nick Shirokov
2026-06-07 21:20:23 +03:00
parent d5d525aa27
commit d88859580f
5 changed files with 26 additions and 10 deletions
@@ -1,4 +1,4 @@
# form-compile v1.66 — Compile 1C managed form from JSON or object metadata
# form-compile v1.67 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[string]$JsonPath,
@@ -3607,8 +3607,8 @@ function Emit-PictureDecoration {
if ($el.hyperlink -eq $true) { X "$inner<Hyperlink>true</Hyperlink>" }
Emit-Layout -el $el -indent $inner
# Оформление PictureDecoration: XSD расщепляет appearance вокруг Title (Border после Title)
# + позиция Picture — отдельный кластер, пока не разводим (декомпилятор захватывает в keys).
# Оформление (цвета/шрифт/граница) — профиль декорации (1С толерантна к порядку appearance)
Emit-Appearance -el $el -indent $inner -profile 'decoration'
# Companions
Emit-CompanionPanel -tag "ContextMenu" -name "${name}КонтекстноеМеню" -indent $inner -panel $el.contextMenu
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# form-compile v1.66 — Compile 1C managed form from JSON or object metadata
# form-compile v1.67 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import copy
@@ -3302,8 +3302,8 @@ def emit_picture_decoration(lines, el, name, eid, indent):
lines.append(f'{inner}<Hyperlink>true</Hyperlink>')
emit_layout(lines, el, inner)
# Оформление PictureDecoration: XSD расщепляет appearance вокруг Title (Border после Title)
# + позиция Picture — отдельный кластер, пока не разводим (декомпилятор захватывает в keys).
# Оформление (цвета/шрифт/граница) — профиль декорации (1С толерантна к порядку appearance)
emit_appearance(lines, el, inner, 'decoration')
# Companions
emit_companion_panel(lines, 'ContextMenu', f'{name}\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435\u041c\u0435\u043d\u044e', inner, el.get('contextMenu'))