feat(form-decompile,form-compile): AutoShowOpen/ClearButtonMode (input) + EnableDrag на PictureDecoration

(1) AutoShowOpenButtonMode (input, enum Auto/Always/FilledOnly, 14) +
AutoShowClearButtonMode (3) — листовые скаляры → GENERIC_SCALARS (обе стороны + py).

(2) PictureDecoration>EnableDrag (7) — декомпилятор ловил generic-ом (Add-CommonProps),
но EnableDrag эмитился ТОЛЬКО в Emit-Table/SpreadSheet (Emit-Layout его не выводит) →
PictureDecoration терял. Добавлен явный emit в Emit-PictureDecoration (после Emit-Layout).
Generic-перенос enableDrag в Emit-Layout отклонён: сдвигает позицию в сертифицированных
Table/SpreadSheet-снэпшотах (EnableDrag может быть XDTO-позиционно-чувствителен, как
HeaderHeight/CurrentRowUse) — точечный фикс безопаснее.

Выборка 22 формы: match 19 (целевые AutoShow*/PictureDecoration>EnableDrag закрыты;
остаток 3 — SpellCheckingOnTextInput + value). ps1==py байт-в-байт. Регресс 43/43.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-06-13 15:22:10 +03:00
parent 90d2649a5f
commit 03720d93ed
3 changed files with 17 additions and 3 deletions
@@ -1,4 +1,4 @@
# form-compile v1.160 — Compile 1C managed form from JSON or object metadata
# form-compile v1.161 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[string]$JsonPath,
@@ -3260,6 +3260,9 @@ $script:genericScalars = @(
@{ Tag='ShowCheckBoxesInDropList'; Key='showCheckBoxesInDropList'; Kind='bool' }
@{ Tag='MultipleValueDataPath'; Key='multipleValueDataPath'; Kind='value' }
@{ Tag='MultipleValuePresentDataPath'; Key='multipleValuePresentDataPath'; Kind='value' }
# Режим авто-показа кнопок открытия/очистки (input, enum Auto/Always/FilledOnly/…)
@{ Tag='AutoShowOpenButtonMode'; Key='autoShowOpenButtonMode'; Kind='value' }
@{ Tag='AutoShowClearButtonMode'; Key='autoShowClearButtonMode'; Kind='value' }
# Оформление/картинка множественного выбора (input, редко; цвета — текст-контент, не атрибуты)
@{ Tag='MultipleValuesTextColor'; Key='multipleValuesTextColor'; Kind='value' }
@{ Tag='MultipleValuesBackColor'; Key='multipleValuesBackColor'; Kind='value' }
@@ -4834,6 +4837,8 @@ function Emit-PictureDecoration {
if ($el.hyperlink -eq $true) { X "$inner<Hyperlink>true</Hyperlink>" }
Emit-Layout -el $el -indent $inner
# EnableDrag — фактическое значение (декорация-картинка перетаскиваема; декомпилятор ловит generic-ом)
if ($null -ne $el.enableDrag) { X "$inner<EnableDrag>$(if ($el.enableDrag){'true'}else{'false'})</EnableDrag>" }
# Оформление (цвета/шрифт/граница) — профиль декорации (1С толерантна к порядку appearance)
Emit-Appearance -el $el -indent $inner -profile 'decoration'
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# form-compile v1.160 — Compile 1C managed form from JSON or object metadata
# form-compile v1.161 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import copy
@@ -3377,6 +3377,9 @@ GENERIC_SCALARS = [
('ShowCheckBoxesInDropList', 'showCheckBoxesInDropList', 'bool'),
('MultipleValueDataPath', 'multipleValueDataPath', 'value'),
('MultipleValuePresentDataPath', 'multipleValuePresentDataPath', 'value'),
# Режим авто-показа кнопок открытия/очистки (input, enum)
('AutoShowOpenButtonMode', 'autoShowOpenButtonMode', 'value'),
('AutoShowClearButtonMode', 'autoShowClearButtonMode', 'value'),
# Оформление/картинка множественного выбора (input, редко; цвета — текст-контент)
('MultipleValuesTextColor', 'multipleValuesTextColor', 'value'),
('MultipleValuesBackColor', 'multipleValuesBackColor', 'value'),
@@ -4562,6 +4565,9 @@ def emit_picture_decoration(lines, el, name, eid, indent):
if el.get('hyperlink') is True:
lines.append(f'{inner}<Hyperlink>true</Hyperlink>')
emit_layout(lines, el, inner)
# EnableDrag — фактическое значение (декорация-картинка перетаскиваема; декомпилятор ловит generic-ом)
if el.get('enableDrag') is not None:
lines.append(f'{inner}<EnableDrag>{"true" if el["enableDrag"] else "false"}</EnableDrag>')
# Оформление (цвета/шрифт/граница) — профиль декорации (1С толерантна к порядку appearance)
emit_appearance(lines, el, inner, 'decoration')
@@ -1,4 +1,4 @@
# form-decompile v0.134 — Decompile 1C managed Form.xml to JSON DSL (draft)
# form-decompile v0.135 — Decompile 1C managed Form.xml to JSON DSL (draft)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
param(
@@ -1616,6 +1616,9 @@ $GENERIC_SCALARS = @(
@{ Tag='ShowCheckBoxesInDropList'; Key='showCheckBoxesInDropList'; Kind='bool' }
@{ Tag='MultipleValueDataPath'; Key='multipleValueDataPath'; Kind='value' }
@{ Tag='MultipleValuePresentDataPath'; Key='multipleValuePresentDataPath'; Kind='value' }
# Режим авто-показа кнопок открытия/очистки (input, enum)
@{ Tag='AutoShowOpenButtonMode'; Key='autoShowOpenButtonMode'; Kind='value' }
@{ Tag='AutoShowClearButtonMode'; Key='autoShowClearButtonMode'; Kind='value' }
# Оформление/картинка множественного выбора (input, редко; цвета — текст-контент)
@{ Tag='MultipleValuesTextColor'; Key='multipleValuesTextColor'; Kind='value' }
@{ Tag='MultipleValuesBackColor'; Key='multipleValuesBackColor'; Kind='value' }