diff --git a/.claude/skills/form-compile/scripts/form-compile.ps1 b/.claude/skills/form-compile/scripts/form-compile.ps1
index e140c855..24f26345 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.145 — Compile 1C managed form from JSON or object metadata
+# form-compile v1.146 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[string]$JsonPath,
@@ -2922,7 +2922,7 @@ function Emit-Element {
# pages-specific
"pagesRepresentation"=1
# button-specific
- "type"=1;"command"=1;"commandName"=1;"stdCommand"=1;"defaultButton"=1;"locationInCommandBar"=1;"displayImportance"=1
+ "type"=1;"command"=1;"commandName"=1;"stdCommand"=1;"parameter"=1;"defaultButton"=1;"locationInCommandBar"=1;"displayImportance"=1
# picture/decoration
"src"=1;"valuesPicture"=1;"loadTransparent"=1;"headerPicture"=1;"footerPicture"=1
# cmdBar-specific
@@ -4718,6 +4718,16 @@ function Emit-Button {
X "$innerForm.StandardCommand.$sc"
}
}
+ # Parameter команды (после CommandName): строка → xr:MDObjectRef (объект метаданных);
+ # объект {type} → v8:TypeDescription (грамматика типа). Forgiving-синоним 'параметр'.
+ $btnParam = if ($null -ne $el.PSObject.Properties['parameter']) { $el.parameter } elseif ($null -ne $el.PSObject.Properties['параметр']) { $el.параметр } else { $null }
+ if ($null -ne $btnParam) {
+ if (($btnParam -is [System.Management.Automation.PSCustomObject] -or $btnParam -is [hashtable]) -and $btnParam.type) {
+ Emit-Type -typeStr "$($btnParam.type)" -indent $inner -tag "Parameter" -tagAttrs ' xsi:type="v8:TypeDescription"'
+ } else {
+ X "$inner$(Esc-Xml "$btnParam")"
+ }
+ }
# DataPath — привязка команды кнопки к контексту (Объект.Ref, Items.X.CurrentData.Поле)
if ($el.path) { X "$inner$($el.path)" }
diff --git a/.claude/skills/form-compile/scripts/form-compile.py b/.claude/skills/form-compile/scripts/form-compile.py
index 0b8121df..22be177f 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.145 — Compile 1C managed form from JSON or object metadata
+# form-compile v1.146 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import copy
@@ -2023,7 +2023,7 @@ KNOWN_KEYS = {
"commandBarLocation", "searchStringLocation", "viewStatusLocation", "searchControlLocation",
"excludedCommands",
"pagesRepresentation",
- "type", "command", "commandName", "stdCommand", "defaultButton", "locationInCommandBar", "displayImportance",
+ "type", "command", "commandName", "stdCommand", "parameter", "defaultButton", "locationInCommandBar", "displayImportance",
"commandBar", "contextMenu", "commandSource",
"src", "valuesPicture", "loadTransparent", "headerPicture", "footerPicture",
"autofill",
@@ -4440,6 +4440,16 @@ def emit_button(lines, el, name, eid, indent, in_cmd_bar=False):
lines.append(f'{inner}Form.Item.{m.group(1)}.StandardCommand.{m.group(2)}')
else:
lines.append(f'{inner}Form.StandardCommand.{sc}')
+ # Parameter команды (после CommandName): строка → xr:MDObjectRef (объект метаданных);
+ # объект {type} → v8:TypeDescription (грамматика типа). Forgiving-синоним 'параметр'.
+ btn_param = el.get('parameter')
+ if btn_param is None:
+ btn_param = el.get('параметр')
+ if btn_param is not None:
+ if isinstance(btn_param, dict) and btn_param.get('type'):
+ emit_type(lines, str(btn_param['type']), inner, tag='Parameter', tag_attrs=' xsi:type="v8:TypeDescription"')
+ else:
+ lines.append(f'{inner}{esc_xml(str(btn_param))}')
# DataPath — привязка команды кнопки к контексту (Объект.Ref, Items.X.CurrentData.Поле)
if el.get('path'):
lines.append(f'{inner}{el["path"]}')
diff --git a/.claude/skills/form-decompile/scripts/form-decompile.ps1 b/.claude/skills/form-decompile/scripts/form-decompile.ps1
index 916d7950..952bb304 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.118 — Decompile 1C managed Form.xml to JSON DSL (draft)
+# form-decompile v0.119 — Decompile 1C managed Form.xml to JSON DSL (draft)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
param(
@@ -2083,6 +2083,13 @@ function Decompile-Element {
else { $obj['commandName'] = $cmd }
}
$dp = Get-Child $node 'DataPath'; if ($dp) { $obj['path'] = $dp }
+ # Parameter команды: xr:MDObjectRef (объект метаданных, строка) или v8:TypeDescription (тип → {type})
+ $btnParam = $node.SelectSingleNode("lf:Parameter", $ns)
+ if ($btnParam) {
+ $pxt = $btnParam.GetAttribute("type", $NS_XSI)
+ if ($pxt -match 'TypeDescription$') { $pt = Decompile-Type $btnParam; if ($pt) { $obj['parameter'] = [ordered]@{ type = $pt } } }
+ elseif ($btnParam.InnerText) { $obj['parameter'] = $btnParam.InnerText }
+ }
Add-CommonProps $obj $node $name
$type = Get-Child $node 'Type'
if ($type) { $tmap=@{'CommandBarButton'='commandBar';'UsualButton'='usual';'Hyperlink'='hyperlink';'CommandBarHyperlink'='hyperlink'}; if ($tmap.ContainsKey($type)) { $obj['type']=$tmap[$type] } else { $obj['type']=$type } }
diff --git a/docs/form-dsl-spec.md b/docs/form-dsl-spec.md
index ed6bd6f6..6f61f05f 100644
--- a/docs/form-dsl-spec.md
+++ b/docs/form-dsl-spec.md
@@ -677,6 +677,7 @@ Pages поддерживает `pagesRepresentation`: `None`, `TabsOnTop`, `Tabs
| `command` | string | Имя команды формы (→ `Form.Command.`) |
| `commandName` | string | Глобальная команда «как есть» (`CommonCommand.X`, `Catalog.X.Command.Y` …) — без обёртки `Form.` |
| `stdCommand` | string | Стандартная команда (→ `Form.StandardCommand.`; `X.Y` → `Form.Item.X.StandardCommand.Y`) |
+| `parameter` | string/object | Параметр команды (``, после `CommandName`). **Строка** → `xr:MDObjectRef` (объект метаданных, напр. `"DocumentJournal.Взаимодействия"` — для `ShowInList`). **Объект `{ type }`** → `v8:TypeDescription` (грамматика типа, напр. `{ "type": "DocumentRef.Заказ" }` — для `CreateByParameter`). Синоним `параметр` |
| `type` | string | `usual`, `hyperlink`, `commandBar` |
| `defaultButton` | bool | Кнопка по умолчанию |
| `checked` | bool | Пометка (нажатое состояние toggle-кнопки командной панели) → `true`. Платформа эмитит только `true`. Ключ `checked` (не `check` — `check` — тип-ключ ПоляФлажка) |
diff --git a/tests/skills/cases/form-compile/commands.json b/tests/skills/cases/form-compile/commands.json
index 33de8a62..41deb0d9 100644
--- a/tests/skills/cases/form-compile/commands.json
+++ b/tests/skills/cases/form-compile/commands.json
@@ -1,6 +1,11 @@
{
"name": "Форма с командами и кнопками",
"preRun": [
+ {
+ "script": "meta-compile/scripts/meta-compile",
+ "input": { "type": "Catalog", "name": "Справочник1" },
+ "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
+ },
{
"script": "meta-compile/scripts/meta-compile",
"input": { "type": "DataProcessor", "name": "Команды" },
@@ -19,7 +24,8 @@
"elements": [
{ "cmdBar": "Панель", "horizontalLocation": "right", "children": [
{ "button": "Выполнить", "command": "Выполнить", "defaultButton": true },
- { "button": "Закрыть", "stdCommand": "Close", "representationInContextMenu": "None" }
+ { "button": "Закрыть", "stdCommand": "Close", "representationInContextMenu": "None" },
+ { "button": "СоздатьПоТипу", "command": "Выполнить", "параметр": { "type": "CatalogRef.Справочник1" } }
]},
{ "input": "Результат", "path": "Результат", "multiLine": true, "height": 8, "readOnly": true }
],
diff --git a/tests/skills/cases/form-compile/snapshots/commands/Catalogs/Справочник1.xml b/tests/skills/cases/form-compile/snapshots/commands/Catalogs/Справочник1.xml
new file mode 100644
index 00000000..b9e26b40
--- /dev/null
+++ b/tests/skills/cases/form-compile/snapshots/commands/Catalogs/Справочник1.xml
@@ -0,0 +1,327 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+ UUID-008
+ UUID-009
+
+
+ UUID-010
+ UUID-011
+
+
+
+ Справочник1
+
+
+ ru
+ Справочник1
+
+
+
+ false
+ HierarchyFoldersAndItems
+ false
+ 2
+ true
+ true
+
+ ToItems
+ 9
+ 25
+ String
+ Variable
+ WholeCatalog
+ false
+ true
+ AsDescription
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ Auto
+ InDialog
+ false
+ BothWays
+
+ Catalog.Справочник1.StandardAttribute.Description
+ Catalog.Справочник1.StandardAttribute.Code
+
+ Begin
+ DontUse
+ Directly
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+ Automatic
+ Use
+
+
+
+
+
+ DontUse
+ Auto
+ DontUse
+ false
+ false
+
+
+
+
diff --git a/tests/skills/cases/form-compile/snapshots/commands/Catalogs/Справочник1/Ext/ObjectModule.bsl b/tests/skills/cases/form-compile/snapshots/commands/Catalogs/Справочник1/Ext/ObjectModule.bsl
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/skills/cases/form-compile/snapshots/commands/Configuration.xml b/tests/skills/cases/form-compile/snapshots/commands/Configuration.xml
index a8d69763..f734c80c 100644
--- a/tests/skills/cases/form-compile/snapshots/commands/Configuration.xml
+++ b/tests/skills/cases/form-compile/snapshots/commands/Configuration.xml
@@ -246,6 +246,7 @@
Русский
+ Справочник1
Команды
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 92985b09..8695a875 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
@@ -39,26 +39,34 @@
None
+
-
+
Результат
true
true
false
8
-
-
+
+
-
+
cfg:DataProcessorObject.Команды
true
-
+
ru
@@ -75,7 +83,7 @@
-
+
ru
@@ -94,7 +102,7 @@
-
+
БезЗаголовкаОбработка
StdPicture.Refresh