From e1fb40189cf10f9a9f6493a50d14bf8e966b1aca Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sat, 13 Jun 2026 14:57:00 +0300 Subject: [PATCH] =?UTF-8?q?feat(form-decompile,form-compile):=20Popup>Comm?= =?UTF-8?q?andSource=20+=20InputField=20multiple-value/itemWidth=20=D1=81?= =?UTF-8?q?=D0=BA=D0=B0=D0=BB=D1=8F=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (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) --- .../skills/form-compile/scripts/form-compile.ps1 | 15 ++++++++++++++- .../skills/form-compile/scripts/form-compile.py | 16 +++++++++++++++- .../form-decompile/scripts/form-decompile.ps1 | 15 ++++++++++++++- docs/form-dsl-spec.md | 2 +- 4 files changed, 44 insertions(+), 4 deletions(-) diff --git a/.claude/skills/form-compile/scripts/form-compile.ps1 b/.claude/skills/form-compile/scripts/form-compile.ps1 index 8df7df3b..fa3a8097 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.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$($el.commandSource)" } + Emit-CommandPicture -pic $el.picture -elemLt $el.loadTransparent -indent $inner if ($el.representation) { diff --git a/.claude/skills/form-compile/scripts/form-compile.py b/.claude/skills/form-compile/scripts/form-compile.py index 6a5033d2..61ef25da 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.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}{el["commandSource"]}') + emit_command_picture(lines, el.get('picture'), el.get('loadTransparent'), inner) if el.get('representation'): diff --git a/.claude/skills/form-decompile/scripts/form-decompile.ps1 b/.claude/skills/form-decompile/scripts/form-decompile.ps1 index b3df467c..13cb4f0e 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.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 } } diff --git a/docs/form-dsl-spec.md b/docs/form-dsl-spec.md index 3f05232d..0e97014c 100644 --- a/docs/form-dsl-spec.md +++ b/docs/form-dsl-spec.md @@ -770,7 +770,7 @@ Pages поддерживает `pagesRepresentation`: `None`, `TabsOnTop`, `Tabs |----------|-----|----------| | `buttonGroup` | string | Имя элемента | | `title` | string/object | Заголовок группы | -| `commandSource` | string | Источник команд группы (``): `Form`, `FormCommandPanelGlobalCommands`, `Item.<ИмяЭлемента>`. Также у `cmdBar`. Эмитится «как есть» | +| `commandSource` | string | Источник команд группы (``): `Form`, `FormCommandPanelGlobalCommands`, `Item.<ИмяЭлемента>`. Также у `cmdBar` и `popup`. Эмитится «как есть» | | `representation` | string | `Auto`, `Picture`, `Text`, `PictureAndText` | | `children` | array | Кнопки (`button`) внутри группы |