diff --git a/.claude/skills/form-compile/scripts/form-compile.ps1 b/.claude/skills/form-compile/scripts/form-compile.ps1 index e17ec49e..2f614b77 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.108 — Compile 1C managed form from JSON or object metadata +# form-compile v1.109 — Compile 1C managed form from JSON or object metadata # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [string]$JsonPath, @@ -3326,6 +3326,13 @@ function Emit-Appearance { function Emit-Layout { param($el, [string]$indent, [switch]$skipHeight, [bool]$multiLineDefault = $false) + # CommandSet (отключённые команды редактора) — общее свойство поля (input/label/check/ + # spreadsheet/html/formatted/picture); в схеме рано (после TitleLocation, перед скалярами). + if ($el.excludedCommands -and @($el.excludedCommands).Count -gt 0) { + X "$indent" + foreach ($cmd in $el.excludedCommands) { X "$indent`t$cmd" } + X "$indent" + } Emit-CommonElementProps -el $el -indent $indent $amwExplicit = ($el.PSObject.Properties.Name -contains 'autoMaxWidth') if ($amwExplicit) { @@ -4235,11 +4242,7 @@ function Emit-Table { if ($el.searchControlLocation) { X "$inner$($el.searchControlLocation)" } Emit-Layout -el $el -indent $inner - if ($el.excludedCommands -and $el.excludedCommands.Count -gt 0) { - X "$inner" - foreach ($cmd in $el.excludedCommands) { X "$inner`t$cmd" } - X "$inner" - } + # CommandSet таблицы эмитится через Emit-Layout (общий механизм поля) # Оформление (цвета/граница таблицы) — перед компаньонами Emit-Appearance -el $el -indent $inner -profile 'field' diff --git a/.claude/skills/form-compile/scripts/form-compile.py b/.claude/skills/form-compile/scripts/form-compile.py index 3ed8cf4a..2d3c6fd3 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.108 — Compile 1C managed form from JSON or object metadata +# form-compile v1.109 — Compile 1C managed form from JSON or object metadata # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import copy @@ -3100,6 +3100,12 @@ def emit_layout(lines, el, indent, skip_height=False, multi_line_default=False): # с историческим выводом input/label, чтобы не сдвигать существующие снапшоты. # skip_height: подавить (зарезервирован; Table теперь эмитит generic-ом + свой ). # multi_line_default: input без явного autoMaxWidth при multiLine → AutoMaxWidth=false. + # CommandSet (отключённые команды редактора) — общее свойство поля; в схеме рано (после TitleLocation). + if el.get('excludedCommands') and len(el['excludedCommands']) > 0: + lines.append(f'{indent}') + for cmd in el['excludedCommands']: + lines.append(f'{indent}\t{cmd}') + lines.append(f'{indent}') emit_common_element_props(lines, el, indent) if 'autoMaxWidth' in el: if el.get('autoMaxWidth') is False: @@ -3965,11 +3971,7 @@ def emit_table(lines, el, name, eid, indent): lines.append(f'{inner}{el["searchControlLocation"]}') emit_layout(lines, el, inner) - if el.get('excludedCommands'): - lines.append(f'{inner}') - for cmd in el['excludedCommands']: - lines.append(f'{inner}\t{cmd}') - lines.append(f'{inner}') + # CommandSet таблицы эмитится через emit_layout (общий механизм поля) # Оформление (цвета/граница таблицы) — перед компаньонами emit_appearance(lines, el, inner, 'field') diff --git a/.claude/skills/form-decompile/scripts/form-decompile.ps1 b/.claude/skills/form-decompile/scripts/form-decompile.ps1 index 38f7e9e7..25459527 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.84 — Decompile 1C managed Form.xml to JSON DSL (draft) +# form-decompile v0.85 — Decompile 1C managed Form.xml to JSON DSL (draft) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью. param( @@ -1027,6 +1027,14 @@ function Add-CommonProps { $fp = Get-PictureRef $node 'FooterPicture'; if ($null -ne $fp) { $obj['footerPicture'] = $fp } $ev = Get-Events $node $elName if ($ev) { $obj['events'] = $ev } + # CommandSet — общий для полей (input/label/check/spreadsheet/html/formatted/picture): + # список отключённых команд редактора. Только , пустого не бывает. + $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) } + } } # --- 3. Type decompile (inverse of Emit-Type) --- 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 152be30b..f4aebfd8 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 @@ -20,17 +20,17 @@ true None None - 80 - false - 5 - false - UseHeightInTableRows Add Delete MoveUp MoveDown + 80 + false + 5 + false + UseHeightInTableRows