feat(form-decompile,form-compile): Button Parameter (параметр команды кнопки)

Кнопка команды может нести <Parameter> (после CommandName) — параметр команды:
- xr:MDObjectRef (20 в корпусе 8.3.24): ссылка на объект метаданных, напр.
  DocumentJournal.Взаимодействия (команда ShowInList «Показать в списке»);
- v8:TypeDescription (16): описание типа <v8:Type>cfg:DocumentRef.X</v8:Type>
  (команда CreateByParameter «Создать по параметру»).
Декомпилятор не ловил → терялось (форма ЭлектронноеПисьмоИсходящее и др.).

DSL: ключ button.parameter (синоним «параметр»), дизамбигуация по форме значения —
строка → MDObjectRef (verbatim), объект {type} → TypeDescription (грамматика типа,
переиспользует Emit-Type с tag=Parameter). Декомпилятор: MDObjectRef → строка,
TypeDescription → {type} (Decompile-Type). Позиция: после CommandName.

Выборка 16 форм с Button Parameter: match 16/16, 0 потерь (оба вида). Кейс commands
(+кнопка с параметр:{type:CatalogRef} через рус-синоним) сертифицирован загрузкой в 1С —
позиция Parameter и синоним подтверждены. MDObjectRef-вариант: та же позиция эмиссии +
corpus round-trip (ShowInList требует list-контекст, синтетически не воспроизвести).
Регресс 43/43, ps1==py. parameter в knownKeys allowlist.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-06-12 22:07:41 +03:00
parent 934462f4d2
commit c0487c51b7
9 changed files with 383 additions and 13 deletions
+1
View File
@@ -677,6 +677,7 @@ Pages поддерживает `pagesRepresentation`: `None`, `TabsOnTop`, `Tabs
| `command` | string | Имя команды формы (→ `Form.Command.<name>`) |
| `commandName` | string | Глобальная команда «как есть» (`CommonCommand.X`, `Catalog.X.Command.Y` …) — без обёртки `Form.` |
| `stdCommand` | string | Стандартная команда (→ `Form.StandardCommand.<name>`; `X.Y``Form.Item.X.StandardCommand.Y`) |
| `parameter` | string/object | Параметр команды (`<Parameter>`, после `CommandName`). **Строка**`xr:MDObjectRef` (объект метаданных, напр. `"DocumentJournal.Взаимодействия"` — для `ShowInList`). **Объект `{ type }`**`v8:TypeDescription` (грамматика типа, напр. `{ "type": "DocumentRef.Заказ" }` — для `CreateByParameter`). Синоним `параметр` |
| `type` | string | `usual`, `hyperlink`, `commandBar` |
| `defaultButton` | bool | Кнопка по умолчанию |
| `checked` | bool | Пометка (нажатое состояние toggle-кнопки командной панели) → `<Check>true</Check>`. Платформа эмитит только `true`. Ключ `checked` (не `check``check` — тип-ключ ПоляФлажка) |