feat(form-decompile,form-compile): Popup>CommandSource + InputField multiple-value/itemWidth скаляры

(1) Popup>CommandSource — источник команд попапа (Form/FormCommandPanelGlobalCommands/
Item.X) не ловился/эмитился (был только у ButtonGroup/CommandBar). Добавлен в
обработчик Popup (декомпилятор, с тем же id-ссылка guard) + Emit-Popup (после Title/
ToolTip, перед компаньоном). Зеркало py.

(2) Листовые скаляры в GENERIC_SCALARS (обе стороны + py): ItemWidth (radio/check,
22), ShowCheckBoxesInDropList (input bool, 7), MultipleValueDataPath /
MultipleValuePresentDataPath (input, по 10) + хвост множественного выбора
MultipleValuesTextColor/BackColor (цвет — текст-контент) / MultipleValuePictureShape /
MultipleValuePictureDataPath (input, по 1).

Выборка 41 форма: match 35 (целевые категории ItemWidth/ShowCheckBoxes/
MultipleValue*/Popup>CommandSource закрыты; Контрагенты/ФормаВыбора → match).
ps1==py байт-в-байт. Регресс 43/43. Spec обновлён (commandSource +popup).
Остаток 6 форм — отдельные кластеры (MultipleValuesFont структурный, CA-whitespace
value, DataSet field, DisplayImportance на companion).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-06-13 14:57:00 +03:00
parent 2d326c99a5
commit e1fb40189c
4 changed files with 44 additions and 4 deletions
@@ -1,4 +1,4 @@
# form-compile v1.158 — Compile 1C managed form from JSON or object metadata
# form-compile v1.159 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[string]$JsonPath,
@@ -3253,6 +3253,16 @@ $script:genericScalars = @(
@{ Tag='ItemTitleHeight'; Key='itemTitleHeight'; Kind='value' }
# Спец-режим ввода текста (input, моб.: Email/PhoneNumber/...) — листовой enum-скаляр
@{ Tag='SpecialTextInputMode'; Key='specialTextInputMode'; Kind='value' }
# Ширина пункта (radio/check) / выбор нескольких значений из выпадающего (input)
@{ Tag='ItemWidth'; Key='itemWidth'; Kind='value' }
@{ Tag='ShowCheckBoxesInDropList'; Key='showCheckBoxesInDropList'; Kind='bool' }
@{ Tag='MultipleValueDataPath'; Key='multipleValueDataPath'; Kind='value' }
@{ Tag='MultipleValuePresentDataPath'; Key='multipleValuePresentDataPath'; Kind='value' }
# Оформление/картинка множественного выбора (input, редко; цвета — текст-контент, не атрибуты)
@{ Tag='MultipleValuesTextColor'; Key='multipleValuesTextColor'; Kind='value' }
@{ Tag='MultipleValuesBackColor'; Key='multipleValuesBackColor'; Kind='value' }
@{ Tag='MultipleValuePictureShape'; Key='multipleValuePictureShape'; Kind='value' }
@{ Tag='MultipleValuePictureDataPath'; Key='multipleValuePictureDataPath'; Kind='value' }
)
function Emit-GenericScalars {
@@ -5049,6 +5059,9 @@ function Emit-Popup {
Emit-Title -el $el -name $name -indent $inner -auto
Emit-CommonFlags -el $el -indent $inner
# Источник команд попапа (после Title/ToolTip, перед компаньоном) — как у ButtonGroup/CommandBar
if ($el.commandSource) { X "$inner<CommandSource>$($el.commandSource)</CommandSource>" }
Emit-CommandPicture -pic $el.picture -elemLt $el.loadTransparent -indent $inner
if ($el.representation) {
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# form-compile v1.158 — Compile 1C managed form from JSON or object metadata
# form-compile v1.159 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import copy
@@ -3371,6 +3371,16 @@ GENERIC_SCALARS = [
('ItemTitleHeight', 'itemTitleHeight', 'value'),
# Спец-режим ввода текста (input, моб.: Email/PhoneNumber/...) — листовой enum-скаляр
('SpecialTextInputMode', 'specialTextInputMode', 'value'),
# Ширина пункта (radio/check) / выбор нескольких значений из выпадающего (input)
('ItemWidth', 'itemWidth', 'value'),
('ShowCheckBoxesInDropList', 'showCheckBoxesInDropList', 'bool'),
('MultipleValueDataPath', 'multipleValueDataPath', 'value'),
('MultipleValuePresentDataPath', 'multipleValuePresentDataPath', 'value'),
# Оформление/картинка множественного выбора (input, редко; цвета — текст-контент)
('MultipleValuesTextColor', 'multipleValuesTextColor', 'value'),
('MultipleValuesBackColor', 'multipleValuesBackColor', 'value'),
('MultipleValuePictureShape', 'multipleValuePictureShape', 'value'),
('MultipleValuePictureDataPath', 'multipleValuePictureDataPath', 'value'),
]
@@ -4747,6 +4757,10 @@ def emit_popup(lines, el, name, eid, indent):
emit_title(lines, el, name, inner, auto=True)
emit_common_flags(lines, el, inner)
# Источник команд попапа (после Title/ToolTip, перед компаньоном) — как у ButtonGroup/CommandBar
if el.get('commandSource'):
lines.append(f'{inner}<CommandSource>{el["commandSource"]}</CommandSource>')
emit_command_picture(lines, el.get('picture'), el.get('loadTransparent'), inner)
if el.get('representation'):
@@ -1,4 +1,4 @@
# form-decompile v0.133 — Decompile 1C managed Form.xml to JSON DSL (draft)
# form-decompile v0.134 — Decompile 1C managed Form.xml to JSON DSL (draft)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
param(
@@ -1611,6 +1611,16 @@ $GENERIC_SCALARS = @(
@{ Tag='ItemTitleHeight'; Key='itemTitleHeight'; Kind='value' }
# Спец-режим ввода текста (input, моб.: Email/PhoneNumber/...) — листовой enum-скаляр
@{ Tag='SpecialTextInputMode'; Key='specialTextInputMode'; Kind='value' }
# Ширина пункта (radio/check) / выбор нескольких значений из выпадающего (input)
@{ Tag='ItemWidth'; Key='itemWidth'; Kind='value' }
@{ Tag='ShowCheckBoxesInDropList'; Key='showCheckBoxesInDropList'; Kind='bool' }
@{ Tag='MultipleValueDataPath'; Key='multipleValueDataPath'; Kind='value' }
@{ Tag='MultipleValuePresentDataPath'; Key='multipleValuePresentDataPath'; Kind='value' }
# Оформление/картинка множественного выбора (input, редко; цвета — текст-контент)
@{ Tag='MultipleValuesTextColor'; Key='multipleValuesTextColor'; Kind='value' }
@{ Tag='MultipleValuesBackColor'; Key='multipleValuesBackColor'; Kind='value' }
@{ Tag='MultipleValuePictureShape'; Key='multipleValuePictureShape'; Kind='value' }
@{ Tag='MultipleValuePictureDataPath'; Key='multipleValuePictureDataPath'; Kind='value' }
)
# Захват generic-скаляров. Специфичная обработка (если ключ уже задан) — побеждает.
@@ -2166,6 +2176,9 @@ function Decompile-Element {
Add-CommonProps $obj $node $name
Set-CommandPicture $obj $node
$rep = Get-Child $node 'Representation'; if ($rep) { $obj['representation'] = $rep }
# Источник команд попапа (Form / FormCommandPanelGlobalCommands / Item.X) — как у ButtonGroup/CommandBar
$cs = Get-Child $node 'CommandSource'
if ($cs) { if ($cs -match '^\d+:[0-9a-fA-F]{8}-') { [Console]::Error.WriteLine("form-decompile: CommandSource '$cs' ($name) — ссылка по id, не воспроизводима, опущена") } else { $obj['commandSource'] = $cs } }
$kids = Decompile-Children $node
if ($kids) { $obj['children'] = $kids }
}
+1 -1
View File
@@ -770,7 +770,7 @@ Pages поддерживает `pagesRepresentation`: `None`, `TabsOnTop`, `Tabs
|----------|-----|----------|
| `buttonGroup` | string | Имя элемента |
| `title` | string/object | Заголовок группы |
| `commandSource` | string | Источник команд группы (`<CommandSource>`): `Form`, `FormCommandPanelGlobalCommands`, `Item.<ИмяЭлемента>`. Также у `cmdBar`. Эмитится «как есть» |
| `commandSource` | string | Источник команд группы (`<CommandSource>`): `Form`, `FormCommandPanelGlobalCommands`, `Item.<ИмяЭлемента>`. Также у `cmdBar` и `popup`. Эмитится «как есть» |
| `representation` | string | `Auto`, `Picture`, `Text`, `PictureAndText` |
| `children` | array | Кнопки (`button`) внутри группы |