feat(form-decompile,form-compile): HorizontalIfPossible в ориентации страницы/группы

Страница (Page) и обычная группа (UsualGroup) теряли <Group>HorizontalIfPossible
</Group> — orientation-карта содержала Horizontal/Vertical/AlwaysHorizontal/
AlwaysVertical, но не HorizontalIfPossible (ROOT Page>Group 359 на 189 формах).

Доступные значения (по конфигуратору + корпусу): страница/обычная группа —
Vertical/HorizontalIfPossible/AlwaysHorizontal (+ Horizontal реально встречается:
1288 форм на странице — XML-enum шире UI-дропдауна, оставлен forgiving); группа
колонок таблицы — Vertical/Horizontal/InCell (уже обрабатывалось, не трогаем).
InCell на странице/группе не добавляем — в корпусе не встречается. Коэрция не
делается: фактическое значение сохраняется как есть (верность раундтрипа).

Добавлен horizontalIfPossible в Emit-Page + Emit-Group switch (ps1+py) и в gmap
декомпилятора (Page + UsualGroup). Таргет-верификация (выборка 50 из 189): 0
остатка, 29 стали match, 0 регрессов. Кейс pages пере-сертифицирован в 1С
(HorizontalIfPossible грузится). Регресс 43/43.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-06-11 11:49:45 +03:00
parent dd9af25e67
commit a3395d4abe
6 changed files with 22 additions and 16 deletions
@@ -1,4 +1,4 @@
# form-compile v1.110 — Compile 1C managed form from JSON or object metadata
# form-compile v1.111 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[string]$JsonPath,
@@ -3429,6 +3429,7 @@ function Emit-Group {
"vertical" { "Vertical" }
"alwayshorizontal" { "AlwaysHorizontal" }
"alwaysvertical" { "AlwaysVertical" }
"horizontalifpossible" { "HorizontalIfPossible" }
"collapsible" { "Vertical" }
default { $null }
}
@@ -4323,12 +4324,15 @@ function Emit-Page {
Emit-CommonFlags -el $el -indent $inner
if ($el.group) {
# Доступные значения страницы/обычной группы: Vertical / HorizontalIfPossible / AlwaysHorizontal
# (InCell — только у columnGroup). Horizontal/AlwaysVertical оставлены forgiving (legacy).
$orientation = switch ("$($el.group)") {
"horizontal" { "Horizontal" }
"vertical" { "Vertical" }
"alwaysHorizontal" { "AlwaysHorizontal" }
"alwaysVertical" { "AlwaysVertical" }
default { $null }
"horizontal" { "Horizontal" }
"vertical" { "Vertical" }
"alwaysHorizontal" { "AlwaysHorizontal" }
"alwaysVertical" { "AlwaysVertical" }
"horizontalIfPossible" { "HorizontalIfPossible" }
default { $null }
}
if ($orientation) { X "$inner<Group>$orientation</Group>" }
}
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# form-compile v1.110 — Compile 1C managed form from JSON or object metadata
# form-compile v1.111 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import copy
@@ -3514,6 +3514,7 @@ def emit_group(lines, el, name, eid, indent):
'vertical': 'Vertical',
'alwayshorizontal': 'AlwaysHorizontal',
'alwaysvertical': 'AlwaysVertical',
'horizontalifpossible': 'HorizontalIfPossible',
'collapsible': 'Vertical',
}
orientation = orientation_map.get(group_val)
@@ -4048,6 +4049,7 @@ def emit_page(lines, el, name, eid, indent):
'vertical': 'Vertical',
'alwaysHorizontal': 'AlwaysHorizontal',
'alwaysVertical': 'AlwaysVertical',
'horizontalIfPossible': 'HorizontalIfPossible',
}
orientation = orientation_map.get(str(el['group']))
if orientation:
@@ -1,4 +1,4 @@
# form-decompile v0.86 — Decompile 1C managed Form.xml to JSON DSL (draft)
# form-decompile v0.87 — Decompile 1C managed Form.xml to JSON DSL (draft)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
param(
@@ -1495,7 +1495,7 @@ function Decompile-Element {
# не эмитим). Платформа явно пишет Vertical в большинстве случаев, поэтому '' ≠ 'vertical'
# — иначе компилятор додумает <Group>Vertical</Group> там, где его нет.
$g = Get-Child $node 'Group'
$gmap = @{ 'Horizontal'='horizontal'; 'Vertical'='vertical'; 'AlwaysHorizontal'='alwaysHorizontal'; 'AlwaysVertical'='alwaysVertical' }
$gmap = @{ 'Horizontal'='horizontal'; 'Vertical'='vertical'; 'AlwaysHorizontal'='alwaysHorizontal'; 'AlwaysVertical'='alwaysVertical'; 'HorizontalIfPossible'='horizontalIfPossible' }
if ($g -and $gmap.ContainsKey($g)) { $obj[$key] = $gmap[$g] } else { $obj[$key] = '' }
$behavior = Get-Child $node 'Behavior'
if ($behavior) {
@@ -1734,7 +1734,7 @@ function Decompile-Element {
$obj[$key] = $name
Add-CommonProps $obj $node $name
$g = Get-Child $node 'Group'
$gmap = @{ 'Horizontal'='horizontal'; 'Vertical'='vertical'; 'AlwaysHorizontal'='alwaysHorizontal'; 'AlwaysVertical'='alwaysVertical' }
$gmap = @{ 'Horizontal'='horizontal'; 'Vertical'='vertical'; 'AlwaysHorizontal'='alwaysHorizontal'; 'AlwaysVertical'='alwaysVertical'; 'HorizontalIfPossible'='horizontalIfPossible' }
if ($g -and $gmap.ContainsKey($g)) { $obj['group'] = $gmap[$g] }
if ((Get-Child $node 'ShowTitle') -eq 'false') { $obj['showTitle'] = $false }
$kids = Decompile-Children $node