mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-03 00:30:52 +03:00
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:
co-authored by
Claude Opus 4.8
parent
dd9af25e67
commit
a3395d4abe
@@ -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
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
param(
|
param(
|
||||||
[string]$JsonPath,
|
[string]$JsonPath,
|
||||||
@@ -3429,6 +3429,7 @@ function Emit-Group {
|
|||||||
"vertical" { "Vertical" }
|
"vertical" { "Vertical" }
|
||||||
"alwayshorizontal" { "AlwaysHorizontal" }
|
"alwayshorizontal" { "AlwaysHorizontal" }
|
||||||
"alwaysvertical" { "AlwaysVertical" }
|
"alwaysvertical" { "AlwaysVertical" }
|
||||||
|
"horizontalifpossible" { "HorizontalIfPossible" }
|
||||||
"collapsible" { "Vertical" }
|
"collapsible" { "Vertical" }
|
||||||
default { $null }
|
default { $null }
|
||||||
}
|
}
|
||||||
@@ -4323,12 +4324,15 @@ function Emit-Page {
|
|||||||
Emit-CommonFlags -el $el -indent $inner
|
Emit-CommonFlags -el $el -indent $inner
|
||||||
|
|
||||||
if ($el.group) {
|
if ($el.group) {
|
||||||
|
# Доступные значения страницы/обычной группы: Vertical / HorizontalIfPossible / AlwaysHorizontal
|
||||||
|
# (InCell — только у columnGroup). Horizontal/AlwaysVertical оставлены forgiving (legacy).
|
||||||
$orientation = switch ("$($el.group)") {
|
$orientation = switch ("$($el.group)") {
|
||||||
"horizontal" { "Horizontal" }
|
"horizontal" { "Horizontal" }
|
||||||
"vertical" { "Vertical" }
|
"vertical" { "Vertical" }
|
||||||
"alwaysHorizontal" { "AlwaysHorizontal" }
|
"alwaysHorizontal" { "AlwaysHorizontal" }
|
||||||
"alwaysVertical" { "AlwaysVertical" }
|
"alwaysVertical" { "AlwaysVertical" }
|
||||||
default { $null }
|
"horizontalIfPossible" { "HorizontalIfPossible" }
|
||||||
|
default { $null }
|
||||||
}
|
}
|
||||||
if ($orientation) { X "$inner<Group>$orientation</Group>" }
|
if ($orientation) { X "$inner<Group>$orientation</Group>" }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/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
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
import argparse
|
import argparse
|
||||||
import copy
|
import copy
|
||||||
@@ -3514,6 +3514,7 @@ def emit_group(lines, el, name, eid, indent):
|
|||||||
'vertical': 'Vertical',
|
'vertical': 'Vertical',
|
||||||
'alwayshorizontal': 'AlwaysHorizontal',
|
'alwayshorizontal': 'AlwaysHorizontal',
|
||||||
'alwaysvertical': 'AlwaysVertical',
|
'alwaysvertical': 'AlwaysVertical',
|
||||||
|
'horizontalifpossible': 'HorizontalIfPossible',
|
||||||
'collapsible': 'Vertical',
|
'collapsible': 'Vertical',
|
||||||
}
|
}
|
||||||
orientation = orientation_map.get(group_val)
|
orientation = orientation_map.get(group_val)
|
||||||
@@ -4048,6 +4049,7 @@ def emit_page(lines, el, name, eid, indent):
|
|||||||
'vertical': 'Vertical',
|
'vertical': 'Vertical',
|
||||||
'alwaysHorizontal': 'AlwaysHorizontal',
|
'alwaysHorizontal': 'AlwaysHorizontal',
|
||||||
'alwaysVertical': 'AlwaysVertical',
|
'alwaysVertical': 'AlwaysVertical',
|
||||||
|
'horizontalIfPossible': 'HorizontalIfPossible',
|
||||||
}
|
}
|
||||||
orientation = orientation_map.get(str(el['group']))
|
orientation = orientation_map.get(str(el['group']))
|
||||||
if orientation:
|
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
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
|
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
|
||||||
param(
|
param(
|
||||||
@@ -1495,7 +1495,7 @@ function Decompile-Element {
|
|||||||
# не эмитим). Платформа явно пишет Vertical в большинстве случаев, поэтому '' ≠ 'vertical'
|
# не эмитим). Платформа явно пишет Vertical в большинстве случаев, поэтому '' ≠ 'vertical'
|
||||||
# — иначе компилятор додумает <Group>Vertical</Group> там, где его нет.
|
# — иначе компилятор додумает <Group>Vertical</Group> там, где его нет.
|
||||||
$g = Get-Child $node '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] = '' }
|
if ($g -and $gmap.ContainsKey($g)) { $obj[$key] = $gmap[$g] } else { $obj[$key] = '' }
|
||||||
$behavior = Get-Child $node 'Behavior'
|
$behavior = Get-Child $node 'Behavior'
|
||||||
if ($behavior) {
|
if ($behavior) {
|
||||||
@@ -1734,7 +1734,7 @@ function Decompile-Element {
|
|||||||
$obj[$key] = $name
|
$obj[$key] = $name
|
||||||
Add-CommonProps $obj $node $name
|
Add-CommonProps $obj $node $name
|
||||||
$g = Get-Child $node '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['group'] = $gmap[$g] }
|
if ($g -and $gmap.ContainsKey($g)) { $obj['group'] = $gmap[$g] }
|
||||||
if ((Get-Child $node 'ShowTitle') -eq 'false') { $obj['showTitle'] = $false }
|
if ((Get-Child $node 'ShowTitle') -eq 'false') { $obj['showTitle'] = $false }
|
||||||
$kids = Decompile-Children $node
|
$kids = Decompile-Children $node
|
||||||
|
|||||||
@@ -65,7 +65,7 @@
|
|||||||
| `verticalScroll` | `<VerticalScroll>` | `useIfNecessary`, `Auto`, `AlwaysShow`, `Never` |
|
| `verticalScroll` | `<VerticalScroll>` | `useIfNecessary`, `Auto`, `AlwaysShow`, `Never` |
|
||||||
| `width` | `<Width>` | число |
|
| `width` | `<Width>` | число |
|
||||||
| `height` | `<Height>` | число |
|
| `height` | `<Height>` | число |
|
||||||
| `group` | `<Group>` | `Vertical`, `Horizontal`, `AlwaysHorizontal`, `AlwaysVertical` |
|
| `group` | `<Group>` | `Vertical`, `Horizontal`, `AlwaysHorizontal`, `AlwaysVertical`, `HorizontalIfPossible` |
|
||||||
| `useForFoldersAndItems` | `<UseForFoldersAndItems>` | `Folders`, `Items`, `FoldersAndItems` |
|
| `useForFoldersAndItems` | `<UseForFoldersAndItems>` | `Folders`, `Items`, `FoldersAndItems` |
|
||||||
| `reportResult` | `<ReportResult>` | Имя реквизита-результата (форма отчёта) |
|
| `reportResult` | `<ReportResult>` | Имя реквизита-результата (форма отчёта) |
|
||||||
| `detailsData` | `<DetailsData>` | Имя реквизита данных расшифровки (форма отчёта) |
|
| `detailsData` | `<DetailsData>` | Имя реквизита данных расшифровки (форма отчёта) |
|
||||||
@@ -351,7 +351,7 @@ companion-панели с собственным контентом. Оба не
|
|||||||
|
|
||||||
| Свойство | Тип | Описание |
|
| Свойство | Тип | Описание |
|
||||||
|----------|-----|----------|
|
|----------|-----|----------|
|
||||||
| `group` | string | Ориентация: `horizontal`, `vertical`, `alwaysHorizontal`, `alwaysVertical`. **`""`** → `<Group>` не эмитится (тег отсутствовал в исходнике; платформа сериализует «Группировку», только если она задана в конфигураторе — даже явный `Vertical` хранится, поэтому `""` ≠ `vertical`). Ключ обязателен как тип-маркер группы. (Legacy: `collapsible` = `vertical` + `behavior:'collapsible'`) |
|
| `group` | string | Ориентация: `vertical`, `horizontalIfPossible`, `alwaysHorizontal` (страница/обычная группа); `horizontal`, `vertical`, `inCell` (группа колонок таблицы — `columnGroup`). `horizontal`/`alwaysVertical` принимаются forgiving (реальные значения в корпусе, хотя UI конфигуратора их не предлагает). **`""`** → `<Group>` не эмитится (тег отсутствовал в исходнике; платформа сериализует «Группировку», только если она задана в конфигураторе — даже явный `Vertical` хранится, поэтому `""` ≠ `vertical`). Ключ обязателен как тип-маркер группы. (Legacy: `collapsible` = `vertical` + `behavior:'collapsible'`) |
|
||||||
| `behavior` | string | Поведение (`<Behavior>`): `usual`, `collapsible`, `popup`. **Отсутствие = Авто** (дефолт, не эмитится). Свёртываемая/всплывающая несут доп. свойства |
|
| `behavior` | string | Поведение (`<Behavior>`): `usual`, `collapsible`, `popup`. **Отсутствие = Авто** (дефолт, не эмитится). Свёртываемая/всплывающая несут доп. свойства |
|
||||||
| `collapsed` | bool | Свёрнута (у `collapsible`/`popup`) |
|
| `collapsed` | bool | Свёрнута (у `collapsible`/`popup`) |
|
||||||
| `collapsedTitle` | string/object | Заголовок свёрнутого представления (`<CollapsedRepresentationTitle>`), мультиязычный текст |
|
| `collapsedTitle` | string/object | Заголовок свёрнутого представления (`<CollapsedRepresentationTitle>`), мультиязычный текст |
|
||||||
|
|||||||
@@ -21,11 +21,11 @@
|
|||||||
{ "page": "Шаг1", "title": "", "showTitle": false, "children": [
|
{ "page": "Шаг1", "title": "", "showTitle": false, "children": [
|
||||||
{ "input": "Параметр1", "path": "Параметр1" }
|
{ "input": "Параметр1", "path": "Параметр1" }
|
||||||
]},
|
]},
|
||||||
{ "page": "Шаг2", "title": "Результат", "titleDataPath": "Итог", "tooltip": "Шаг \"Результат\"", "group": "horizontal", "children": [
|
{ "page": "Шаг2", "title": "Результат", "titleDataPath": "Итог", "tooltip": "Шаг \"Результат\"", "group": "horizontalIfPossible", "children": [
|
||||||
{ "input": "Итог", "path": "Итог", "readOnly": true }
|
{ "input": "Итог", "path": "Итог", "readOnly": true }
|
||||||
]}
|
]}
|
||||||
]},
|
]},
|
||||||
{ "group": "horizontal", "name": "Навигация", "children": [
|
{ "group": "horizontalIfPossible", "name": "Навигация", "children": [
|
||||||
{ "button": "Назад", "command": "Назад", "title": "< Назад" },
|
{ "button": "Назад", "command": "Назад", "title": "< Назад" },
|
||||||
{ "button": "Далее", "command": "Далее", "title": "Далее >" }
|
{ "button": "Далее", "command": "Далее", "title": "Далее >" }
|
||||||
]}
|
]}
|
||||||
|
|||||||
+2
-2
@@ -43,7 +43,7 @@
|
|||||||
<v8:content>Шаг "Результат"</v8:content>
|
<v8:content>Шаг "Результат"</v8:content>
|
||||||
</v8:item>
|
</v8:item>
|
||||||
</ToolTip>
|
</ToolTip>
|
||||||
<Group>Horizontal</Group>
|
<Group>HorizontalIfPossible</Group>
|
||||||
<TitleDataPath>Итог</TitleDataPath>
|
<TitleDataPath>Итог</TitleDataPath>
|
||||||
<ExtendedTooltip name="Шаг2РасширеннаяПодсказка" id="9"/>
|
<ExtendedTooltip name="Шаг2РасширеннаяПодсказка" id="9"/>
|
||||||
<ChildItems>
|
<ChildItems>
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
</ChildItems>
|
</ChildItems>
|
||||||
</Pages>
|
</Pages>
|
||||||
<UsualGroup name="Навигация" id="13">
|
<UsualGroup name="Навигация" id="13">
|
||||||
<Group>Horizontal</Group>
|
<Group>HorizontalIfPossible</Group>
|
||||||
<ExtendedTooltip name="НавигацияРасширеннаяПодсказка" id="14"/>
|
<ExtendedTooltip name="НавигацияРасширеннаяПодсказка" id="14"/>
|
||||||
<ChildItems>
|
<ChildItems>
|
||||||
<Button name="Назад" id="15">
|
<Button name="Назад" id="15">
|
||||||
|
|||||||
Reference in New Issue
Block a user