diff --git a/.claude/skills/form-decompile/scripts/form-decompile.ps1 b/.claude/skills/form-decompile/scripts/form-decompile.ps1 index 7fed5922..39429da6 100644 --- a/.claude/skills/form-decompile/scripts/form-decompile.ps1 +++ b/.claude/skills/form-decompile/scripts/form-decompile.ps1 @@ -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 = направление (); behavior = (Авто = нет тега → ключ опускаем). + # group = направление (). Нет тега → '' (тип-маркер сохраняется, направление + # не эмитим). Платформа явно пишет Vertical в большинстве случаев, поэтому '' ≠ 'vertical' + # — иначе компилятор додумает Vertical там, где его нет. $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 = направление (). Нет тега → '' (тип-маркер сохраняется, направление + # не эмитим). Иначе компилятор додумает Horizontal там, где его нет. $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 } diff --git a/docs/form-dsl-spec.md b/docs/form-dsl-spec.md index 09f11282..2188da73 100644 --- a/docs/form-dsl-spec.md +++ b/docs/form-dsl-spec.md @@ -277,7 +277,7 @@ companion-панели с собственным контентом. Оба не | Свойство | Тип | Описание | |----------|-----|----------| -| `group` | string | Ориентация: `horizontal`, `vertical`, `alwaysHorizontal`, `alwaysVertical`. (Legacy: `collapsible` = `vertical` + `behavior:'collapsible'`) | +| `group` | string | Ориентация: `horizontal`, `vertical`, `alwaysHorizontal`, `alwaysVertical`. **`""`** → `` не эмитится (тег отсутствовал в исходнике; платформа сериализует «Группировку», только если она задана в конфигураторе — даже явный `Vertical` хранится, поэтому `""` ≠ `vertical`). Ключ обязателен как тип-маркер группы. (Legacy: `collapsible` = `vertical` + `behavior:'collapsible'`) | | `behavior` | string | Поведение (``): `usual`, `collapsible`, `popup`. **Отсутствие = Авто** (дефолт, не эмитится). Свёртываемая/всплывающая несут доп. свойства | | `collapsed` | bool | Свёрнута (у `collapsible`/`popup`) | | `children` | array | Вложенные элементы | @@ -462,7 +462,7 @@ companion-панели с собственным контентом. Оба не | Свойство | Тип | Описание | |----------|-----|----------| -| `columnGroup` | string | Ориентация: `horizontal`, `vertical`, `inCell` (склейка колонок в одной ячейке шапки) | +| `columnGroup` | string | Ориентация: `horizontal`, `vertical`, `inCell` (склейка колонок в одной ячейке шапки). **`""`** → `` не эмитится (тега не было в исходнике). Ключ обязателен как тип-маркер | | `name` | string | Имя элемента (рекомендуется задавать явно) | | `title` | string/object | Заголовок группы | | `showTitle` | bool | Показывать заголовок |