diff --git a/.claude/skills/form-compile/scripts/form-compile.ps1 b/.claude/skills/form-compile/scripts/form-compile.ps1 index 3c5f04d3..e43a3018 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.27 — Compile 1C managed form from JSON or object metadata +# form-compile v1.28 — Compile 1C managed form from JSON or object metadata # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [string]$JsonPath, @@ -1922,7 +1922,8 @@ function Emit-Element { "children"=1;"columns"=1 # table-specific "changeRowSet"=1;"changeRowOrder"=1;"header"=1;"footer"=1 - "commandBarLocation"=1;"searchStringLocation"=1 + "commandBarLocation"=1;"searchStringLocation"=1;"viewStatusLocation"=1;"searchControlLocation"=1 + "excludedCommands"=1 "choiceMode"=1;"initialTreeView"=1;"enableDrag"=1;"enableStartDrag"=1 "rowPictureDataPath"=1;"tableAutofill"=1 # pages-specific @@ -2528,8 +2529,16 @@ function Emit-Table { if ($el.enableStartDrag -eq $true) { X "$innertrue" } if ($el.enableDrag -eq $true) { X "$innertrue" } if ($el.rowPictureDataPath) { X "$inner$($el.rowPictureDataPath)" } + if ($el.viewStatusLocation) { X "$inner$($el.viewStatusLocation)" } + if ($el.searchControlLocation) { X "$inner$($el.searchControlLocation)" } Emit-Layout -el $el -indent $inner -skipHeight + if ($el.excludedCommands -and $el.excludedCommands.Count -gt 0) { + X "$inner" + foreach ($cmd in $el.excludedCommands) { X "$inner`t$cmd" } + X "$inner" + } + # Companions Emit-Companion -tag "ContextMenu" -name "${name}КонтекстноеМеню" -indent $inner # AutoCommandBar — with optional Autofill control diff --git a/.claude/skills/form-compile/scripts/form-compile.py b/.claude/skills/form-compile/scripts/form-compile.py index 64d9df88..773e4ab8 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.27 — Compile 1C managed form from JSON or object metadata +# form-compile v1.28 — Compile 1C managed form from JSON or object metadata # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import copy @@ -1356,7 +1356,8 @@ KNOWN_KEYS = { "showTitle", "united", "collapsed", "children", "columns", "changeRowSet", "changeRowOrder", "header", "footer", - "commandBarLocation", "searchStringLocation", + "commandBarLocation", "searchStringLocation", "viewStatusLocation", "searchControlLocation", + "excludedCommands", "pagesRepresentation", "type", "command", "stdCommand", "defaultButton", "locationInCommandBar", "src", "valuesPicture", "loadTransparent", @@ -2186,8 +2187,18 @@ def emit_table(lines, el, name, eid, indent): lines.append(f'{inner}true') if el.get('rowPictureDataPath'): lines.append(f'{inner}{el["rowPictureDataPath"]}') + if el.get('viewStatusLocation'): + lines.append(f'{inner}{el["viewStatusLocation"]}') + if el.get('searchControlLocation'): + lines.append(f'{inner}{el["searchControlLocation"]}') emit_layout(lines, el, inner, skip_height=True) + if el.get('excludedCommands'): + lines.append(f'{inner}') + for cmd in el['excludedCommands']: + lines.append(f'{inner}\t{cmd}') + lines.append(f'{inner}') + # Companions emit_companion(lines, 'ContextMenu', f'{name}\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435\u041c\u0435\u043d\u044e', inner) # AutoCommandBar — with optional Autofill control diff --git a/.claude/skills/form-decompile/scripts/form-decompile.ps1 b/.claude/skills/form-decompile/scripts/form-decompile.ps1 index 32690714..dcc44a9e 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.6 — Decompile 1C managed Form.xml to JSON DSL (draft) +# form-decompile v0.7 — Decompile 1C managed Form.xml to JSON DSL (draft) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью. param( @@ -450,6 +450,15 @@ function Decompile-Element { if ((Get-Child $node 'Footer') -eq 'true') { $obj['footer'] = $true } $htr = Get-Child $node 'HeightInTableRows'; if ($htr) { $obj['height'] = [int]$htr } $cbl = Get-Child $node 'CommandBarLocation'; if ($cbl) { $obj['commandBarLocation'] = $cbl } + $ssl = Get-Child $node 'SearchStringLocation'; if ($ssl) { $obj['searchStringLocation'] = $ssl } + $vsl = Get-Child $node 'ViewStatusLocation'; if ($vsl) { $obj['viewStatusLocation'] = $vsl } + $scl = Get-Child $node 'SearchControlLocation'; if ($scl) { $obj['searchControlLocation'] = $scl } + $csNode = $node.SelectSingleNode("lf:CommandSet", $ns) + if ($csNode) { + $exc = New-Object System.Collections.ArrayList + foreach ($ec in @($csNode.SelectNodes("lf:ExcludedCommand", $ns))) { [void]$exc.Add($ec.InnerText) } + if ($exc.Count -gt 0) { $obj['excludedCommands'] = @($exc) } + } $cols = Decompile-Children $node if ($cols) { $obj['columns'] = $cols } } diff --git a/docs/form-dsl-spec.md b/docs/form-dsl-spec.md index d8153b7c..724338d8 100644 --- a/docs/form-dsl-spec.md +++ b/docs/form-dsl-spec.md @@ -296,6 +296,9 @@ | `footer` | bool | Показывать подвал | | `commandBarLocation` | string | `None`, `Top`, `Bottom`, `Auto` | | `searchStringLocation` | string | `None`, `Top`, `Bottom`, `CommandBar`, `Auto` | +| `viewStatusLocation` | string | `None`, `Top`, `Bottom`, `Auto` | +| `searchControlLocation` | string | `None`, `Top`, `Bottom`, `Auto` | +| `excludedCommands` | string[] | Исключённые стандартные команды таблицы (`Add`, `Delete`, `MoveUp`, `SortListAsc`, …) → `` | #### columnGroup — ColumnGroup diff --git a/tests/skills/cases/form-compile/snapshots/table/DataProcessors/Таблица/Forms/Форма/Ext/Form.xml b/tests/skills/cases/form-compile/snapshots/table/DataProcessors/Таблица/Forms/Форма/Ext/Form.xml index e6882c9d..eefcfc45 100644 --- a/tests/skills/cases/form-compile/snapshots/table/DataProcessors/Таблица/Forms/Форма/Ext/Form.xml +++ b/tests/skills/cases/form-compile/snapshots/table/DataProcessors/Таблица/Forms/Форма/Ext/Form.xml @@ -12,6 +12,14 @@ Данныеtrue + None + None + + Add + Delete + MoveUp + MoveDown + diff --git a/tests/skills/cases/form-compile/table.json b/tests/skills/cases/form-compile/table.json index bdd3e9b3..4ceea0b7 100644 --- a/tests/skills/cases/form-compile/table.json +++ b/tests/skills/cases/form-compile/table.json @@ -16,7 +16,9 @@ "input": { "title": "Просмотр данных", "elements": [ - { "table": "Данные", "path": "Данные", "changeRowSet": true, "columns": [ + { "table": "Данные", "path": "Данные", "changeRowSet": true, + "viewStatusLocation": "None", "searchControlLocation": "None", + "excludedCommands": ["Add", "Delete", "MoveUp", "MoveDown"], "columns": [ { "input": "Дата", "path": "Данные.Дата" }, { "input": "Сумма", "path": "Данные.Сумма" }, { "input": "Комментарий", "path": "Данные.Комментарий" }