From 09c3dcd988f45f07e9673b7300cd4b97793dba85 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Mon, 8 Jun 2026 17:22:39 +0300 Subject: [PATCH] =?UTF-8?q?feat(form-decompile,form-compile):=20Horizontal?= =?UTF-8?q?Location=20=D1=83=20CommandBar=20(=D1=85=D0=B2=D0=BE=D1=81?= =?UTF-8?q?=D1=82=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Свойство horizontalLocation у элемента cmdBar (): auto (дефолт, не эмитим) / left / right / center, forgiving + рус.синонимы. Переиспользует Get-HLocation от дополнений (+ добавлен center). Только у в корпусе (104 шт, в осн. Right), не у ButtonGroup/Popup/AutoCommandBar. Компилятор (ps1+py байт-в-байт) + декомпилятор (захват ). Форма с CommandBar HorizontalLocation → round-trip match. Кейс commands расширен, сертифицирован в 1С. Регресс 39/39 ps1+py. Закрывает остаток CommandBar>HorizontalLocation. Co-Authored-By: Claude Opus 4.8 (1M context) --- .claude/skills/form-compile/scripts/form-compile.ps1 | 4 +++- .claude/skills/form-compile/scripts/form-compile.py | 8 +++++++- .claude/skills/form-decompile/scripts/form-decompile.ps1 | 3 ++- docs/form-dsl-spec.md | 4 +++- tests/skills/cases/form-compile/commands.json | 2 +- .../DataProcessors/Команды/Forms/Форма/Ext/Form.xml | 1 + 6 files changed, 17 insertions(+), 5 deletions(-) diff --git a/.claude/skills/form-compile/scripts/form-compile.ps1 b/.claude/skills/form-compile/scripts/form-compile.ps1 index 9568800e..05c9962e 100644 --- a/.claude/skills/form-compile/scripts/form-compile.ps1 +++ b/.claude/skills/form-compile/scripts/form-compile.ps1 @@ -1,4 +1,4 @@ -# form-compile v1.74 — Compile 1C managed form from JSON or object metadata +# form-compile v1.75 — Compile 1C managed form from JSON or object metadata # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [string]$JsonPath, @@ -2351,6 +2351,7 @@ function Get-HLocation { '^(auto|авто)$' { return $null } # дефолт — не эмитим '^(left|слева|лево)$' { return 'Left' } '^(right|справа|право)$' { return 'Right' } + '^(center|центр|по центру)$' { return 'Center' } default { return "$v" } } } @@ -3997,6 +3998,7 @@ function Emit-CommandBar { if ($el.autofill -eq $true) { X "$innertrue" } + $hl = Get-HLocation $el; if ($hl) { X "$inner$hl" } Emit-CommonFlags -el $el -indent $inner Emit-Layout -el $el -indent $inner Emit-Companion -tag "ExtendedTooltip" -name "${name}РасширеннаяПодсказка" -indent $inner -content $el.extendedTooltip diff --git a/.claude/skills/form-compile/scripts/form-compile.py b/.claude/skills/form-compile/scripts/form-compile.py index 7ea65a06..8eaf6c6a 100644 --- a/.claude/skills/form-compile/scripts/form-compile.py +++ b/.claude/skills/form-compile/scripts/form-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# form-compile v1.74 — Compile 1C managed form from JSON or object metadata +# form-compile v1.75 — Compile 1C managed form from JSON or object metadata # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import copy @@ -2369,6 +2369,8 @@ def get_hlocation(el): return 'Left' if s in ('right', 'справа', 'право'): return 'Right' + if s in ('center', 'центр', 'по центру'): + return 'Center' return str(v) @@ -3700,6 +3702,10 @@ def emit_command_bar(lines, el, name, eid, indent): if el.get('autofill') is True: lines.append(f'{inner}true') + _hl = get_hlocation(el) + if _hl: + lines.append(f'{inner}{_hl}') + emit_common_flags(lines, el, inner) emit_layout(lines, el, inner) emit_companion(lines, 'ExtendedTooltip', f'{name}РасширеннаяПодсказка', inner, el.get('extendedTooltip')) diff --git a/.claude/skills/form-decompile/scripts/form-decompile.ps1 b/.claude/skills/form-decompile/scripts/form-decompile.ps1 index b49cae83..0df919db 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.51 — Decompile 1C managed Form.xml to JSON DSL (draft) +# form-decompile v0.52 — Decompile 1C managed Form.xml to JSON DSL (draft) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью. param( @@ -1539,6 +1539,7 @@ function Decompile-Element { $obj[$key] = $name Add-CommonProps $obj $node $name $cs = Get-Child $node 'CommandSource'; if ($cs) { $obj['commandSource'] = $cs } + $hl = Get-Child $node 'HorizontalLocation'; if ($hl) { $obj['horizontalLocation'] = $hl.ToLower() } if ((Get-Child $node 'Autofill') -eq 'true') { $obj['autofill'] = $true } $kids = Decompile-Children $node if ($kids) { $obj['children'] = $kids } diff --git a/docs/form-dsl-spec.md b/docs/form-dsl-spec.md index b47d6c37..8e1377a1 100644 --- a/docs/form-dsl-spec.md +++ b/docs/form-dsl-spec.md @@ -667,9 +667,11 @@ Pages поддерживает `pagesRepresentation`: `None`, `TabsOnTop`, `Tabs #### cmdBar — CommandBar ```json -{ "cmdBar": "КоманднаяПанель", "children": [ ... ] } +{ "cmdBar": "КоманднаяПанель", "horizontalLocation": "right", "children": [ ... ] } ``` +Свойства: `commandSource`, `autofill`, `horizontalLocation` (``: `auto` дефолт / `left` / `right` / `center`, + рус. синонимы), `title`, `children` + общие флаги/layout. + #### popup — Popup ```json diff --git a/tests/skills/cases/form-compile/commands.json b/tests/skills/cases/form-compile/commands.json index 725f7530..0691440c 100644 --- a/tests/skills/cases/form-compile/commands.json +++ b/tests/skills/cases/form-compile/commands.json @@ -16,7 +16,7 @@ "input": { "title": "Форма с командами", "elements": [ - { "cmdBar": "Панель", "children": [ + { "cmdBar": "Панель", "horizontalLocation": "right", "children": [ { "button": "Выполнить", "command": "Выполнить", "defaultButton": true }, { "button": "Закрыть", "stdCommand": "Close" } ]}, diff --git a/tests/skills/cases/form-compile/snapshots/commands/DataProcessors/Команды/Forms/Форма/Ext/Form.xml b/tests/skills/cases/form-compile/snapshots/commands/DataProcessors/Команды/Forms/Форма/Ext/Form.xml index 19659c8c..51c8aac6 100644 --- a/tests/skills/cases/form-compile/snapshots/commands/DataProcessors/Команды/Forms/Форма/Ext/Form.xml +++ b/tests/skills/cases/form-compile/snapshots/commands/DataProcessors/Команды/Forms/Форма/Ext/Form.xml @@ -12,6 +12,7 @@ + Right