mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-07 20:20:20 +03:00
fix(form-decompile): направление группы — '' при отсутствии <Group> (кластер UsualGroup/ColumnGroup>Group)
Декомпилятор при отсутствии <Group> подставлял дефолт (vertical у UsualGroup, horizontal у ColumnGroup), и компилятор его эмитил → <Group> додумывался там, где в оригинале тега нет (ADDED: ColumnGroup>Group=103, UsualGroup>Group=65). «Опустить дефолт» не подходит: на корпусе Vertical у UsualGroup в двух ролях — явный <Group>Vertical</Group> (51205, 36%, хранить) и опускаемый дефолт (10%, тега нет). 1C сериализует «Группировку», только если задана в конфигураторе, даже Vertical. По значению неразличимы → нужен отдельный маркер «тега не было». Ключ group/columnGroup — тип-дискриминатор, опустить нельзя. Поэтому нет <Group> → значение '' (тип сохраняется, направление не эмитим). Компилятор уже опускает <Group> при пустом/нераспознанном значении — правка только в декомпиляторе. spec для group/columnGroup обновлён. TOTAL diff lines выборки 2.17: 1750 → 1582 (−168); match 23 → 31. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
cfce486004
commit
0636ac6877
@@ -1,4 +1,4 @@
|
||||
# form-decompile v0.43 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# form-decompile v0.44 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
|
||||
param(
|
||||
@@ -1016,9 +1016,12 @@ function Decompile-Element {
|
||||
switch ($tag) {
|
||||
'UsualGroup' {
|
||||
# group = направление (<Group>); behavior = <Behavior> (Авто = нет тега → ключ опускаем).
|
||||
# group = направление (<Group>). Нет тега → '' (тип-маркер сохраняется, направление
|
||||
# не эмитим). Платформа явно пишет Vertical в большинстве случаев, поэтому '' ≠ 'vertical'
|
||||
# — иначе компилятор додумает <Group>Vertical</Group> там, где его нет.
|
||||
$g = Get-Child $node 'Group'
|
||||
$gmap = @{ 'Horizontal'='horizontal'; 'Vertical'='vertical'; 'AlwaysHorizontal'='alwaysHorizontal'; 'AlwaysVertical'='alwaysVertical' }
|
||||
if ($g -and $gmap.ContainsKey($g)) { $obj[$key] = $gmap[$g] } else { $obj[$key] = 'vertical' }
|
||||
if ($g -and $gmap.ContainsKey($g)) { $obj[$key] = $gmap[$g] } else { $obj[$key] = '' }
|
||||
$behavior = Get-Child $node 'Behavior'
|
||||
if ($behavior) {
|
||||
$bmap = @{ 'Usual'='usual'; 'Collapsible'='collapsible'; 'PopUp'='popup' }
|
||||
@@ -1035,9 +1038,11 @@ function Decompile-Element {
|
||||
if ($kids) { $obj['children'] = $kids }
|
||||
}
|
||||
'ColumnGroup' {
|
||||
# columnGroup = направление (<Group>). Нет тега → '' (тип-маркер сохраняется, направление
|
||||
# не эмитим). Иначе компилятор додумает <Group>Horizontal</Group> там, где его нет.
|
||||
$g = Get-Child $node 'Group'
|
||||
$gmap = @{ 'Horizontal'='horizontal'; 'Vertical'='vertical'; 'InCell'='inCell' }
|
||||
if ($g -and $gmap.ContainsKey($g)) { $obj[$key] = $gmap[$g] } else { $obj[$key] = 'horizontal' }
|
||||
if ($g -and $gmap.ContainsKey($g)) { $obj[$key] = $gmap[$g] } else { $obj[$key] = '' }
|
||||
$obj['name'] = $name
|
||||
Add-CommonProps $obj $node $name
|
||||
if ((Get-Child $node 'ShowTitle') -eq 'false') { $obj['showTitle'] = $false }
|
||||
|
||||
@@ -277,7 +277,7 @@ companion-панели с собственным контентом. Оба не
|
||||
|
||||
| Свойство | Тип | Описание |
|
||||
|----------|-----|----------|
|
||||
| `group` | string | Ориентация: `horizontal`, `vertical`, `alwaysHorizontal`, `alwaysVertical`. (Legacy: `collapsible` = `vertical` + `behavior:'collapsible'`) |
|
||||
| `group` | string | Ориентация: `horizontal`, `vertical`, `alwaysHorizontal`, `alwaysVertical`. **`""`** → `<Group>` не эмитится (тег отсутствовал в исходнике; платформа сериализует «Группировку», только если она задана в конфигураторе — даже явный `Vertical` хранится, поэтому `""` ≠ `vertical`). Ключ обязателен как тип-маркер группы. (Legacy: `collapsible` = `vertical` + `behavior:'collapsible'`) |
|
||||
| `behavior` | string | Поведение (`<Behavior>`): `usual`, `collapsible`, `popup`. **Отсутствие = Авто** (дефолт, не эмитится). Свёртываемая/всплывающая несут доп. свойства |
|
||||
| `collapsed` | bool | Свёрнута (у `collapsible`/`popup`) |
|
||||
| `children` | array | Вложенные элементы |
|
||||
@@ -462,7 +462,7 @@ companion-панели с собственным контентом. Оба не
|
||||
|
||||
| Свойство | Тип | Описание |
|
||||
|----------|-----|----------|
|
||||
| `columnGroup` | string | Ориентация: `horizontal`, `vertical`, `inCell` (склейка колонок в одной ячейке шапки) |
|
||||
| `columnGroup` | string | Ориентация: `horizontal`, `vertical`, `inCell` (склейка колонок в одной ячейке шапки). **`""`** → `<Group>` не эмитится (тега не было в исходнике). Ключ обязателен как тип-маркер |
|
||||
| `name` | string | Имя элемента (рекомендуется задавать явно) |
|
||||
| `title` | string/object | Заголовок группы |
|
||||
| `showTitle` | bool | Показывать заголовок |
|
||||
|
||||
Reference in New Issue
Block a user