mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-07 20:20:20 +03:00
feat(form-decompile,form-compile): корпусный хвост — 8 generic-скаляров + PasswordMode факт. значение
Из ROOT-секции корпусного прогона 8.3.24 (rt-24): дешёвые широкие generic-скаляры (pass-through, обе стороны + py), не обрабатывались ранее: - ControlRepresentation (свёртка группы, 1464) · ShapeRepresentation (форма кнопки/ попапа, 1023) · AutoAddIncomplete (516) · MarkNegatives (433) · InitialListView (нач. позиция списка, 246) · ChoiceListHeight (143) · ThreeState (флажок, 119) · ScrollOnCompress (прокрутка страницы, 104). PasswordMode на InputField: эмитился только при true → терялись 349/504 явных false в корпусе (ROOT 689). Теперь факт. значение (как на LabelField/markIncomplete); декомпилятор захватывает true/false при наличии тега. Проверка: 15 корпусных форм с этими тегами — 0 расхождений по тегам. Регресс 43/43 (ps1+py). Совокупный ожидаемый impact ~4700 TOTAL. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
dd226697bf
commit
d5d19710cb
@@ -1,4 +1,4 @@
|
||||
# form-compile v1.107 — Compile 1C managed form from JSON or object metadata
|
||||
# form-compile v1.108 — Compile 1C managed form from JSON or object metadata
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[string]$JsonPath,
|
||||
@@ -2960,6 +2960,17 @@ $script:genericScalars = @(
|
||||
@{ Tag='AutoMaxRowsCount'; Key='autoMaxRowsCount'; Kind='bool' }
|
||||
@{ Tag='HeightControlVariant'; Key='heightControlVariant'; Kind='value' }
|
||||
@{ Tag='EditTextUpdate'; Key='editTextUpdate'; Kind='value' }
|
||||
# Корпусный хвост: представление управления свёрткой группы / форма кнопки-попапа /
|
||||
# авто-добавление незаполненной строки / выделение отрицательных / нач. позиция списка /
|
||||
# высота списка выбора / три состояния флажка / прокрутка страницы при сжатии
|
||||
@{ Tag='ControlRepresentation'; Key='controlRepresentation'; Kind='value' }
|
||||
@{ Tag='ShapeRepresentation'; Key='shapeRepresentation'; Kind='value' }
|
||||
@{ Tag='AutoAddIncomplete'; Key='autoAddIncomplete'; Kind='bool' }
|
||||
@{ Tag='MarkNegatives'; Key='markNegatives'; Kind='bool' }
|
||||
@{ Tag='InitialListView'; Key='initialListView'; Kind='value' }
|
||||
@{ Tag='ChoiceListHeight'; Key='choiceListHeight'; Kind='value' }
|
||||
@{ Tag='ThreeState'; Key='threeState'; Kind='bool' }
|
||||
@{ Tag='ScrollOnCompress'; Key='scrollOnCompress'; Kind='bool' }
|
||||
)
|
||||
|
||||
function Emit-GenericScalars {
|
||||
@@ -3533,7 +3544,7 @@ function Emit-Input {
|
||||
}
|
||||
|
||||
if ($el.multiLine -eq $true) { X "$inner<MultiLine>true</MultiLine>" }
|
||||
if ($el.passwordMode -eq $true) { X "$inner<PasswordMode>true</PasswordMode>" }
|
||||
if ($null -ne $el.passwordMode) { X "$inner<PasswordMode>$(if ($el.passwordMode){'true'}else{'false'})</PasswordMode>" }
|
||||
# ChoiceButton — захват «как есть» (платформа эмитит явное значение; ref-поля выводят сама,
|
||||
# декомпилятор фиксирует факт. значение). Нет ключа → не эмитим (не додумываем по событию).
|
||||
if ($null -ne $el.choiceButton) { X "$inner<ChoiceButton>$(if ($el.choiceButton){'true'}else{'false'})</ChoiceButton>" }
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# form-compile v1.107 — Compile 1C managed form from JSON or object metadata
|
||||
# form-compile v1.108 — Compile 1C managed form from JSON or object metadata
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
import argparse
|
||||
import copy
|
||||
@@ -3069,6 +3069,16 @@ GENERIC_SCALARS = [
|
||||
('AutoMaxRowsCount', 'autoMaxRowsCount', 'bool'),
|
||||
('HeightControlVariant', 'heightControlVariant', 'value'),
|
||||
('EditTextUpdate', 'editTextUpdate', 'value'),
|
||||
# Корпусный хвост: свёртка группы / форма попапа / авто-добавление / выделение отрицательных /
|
||||
# нач. позиция списка / высота списка выбора / три состояния / прокрутка страницы при сжатии
|
||||
('ControlRepresentation', 'controlRepresentation', 'value'),
|
||||
('ShapeRepresentation', 'shapeRepresentation', 'value'),
|
||||
('AutoAddIncomplete', 'autoAddIncomplete', 'bool'),
|
||||
('MarkNegatives', 'markNegatives', 'bool'),
|
||||
('InitialListView', 'initialListView', 'value'),
|
||||
('ChoiceListHeight', 'choiceListHeight', 'value'),
|
||||
('ThreeState', 'threeState', 'bool'),
|
||||
('ScrollOnCompress', 'scrollOnCompress', 'bool'),
|
||||
]
|
||||
|
||||
|
||||
@@ -3608,8 +3618,8 @@ def emit_input(lines, el, name, eid, indent):
|
||||
|
||||
if el.get('multiLine') is True:
|
||||
lines.append(f'{inner}<MultiLine>true</MultiLine>')
|
||||
if el.get('passwordMode') is True:
|
||||
lines.append(f'{inner}<PasswordMode>true</PasswordMode>')
|
||||
if el.get('passwordMode') is not None:
|
||||
lines.append(f'{inner}<PasswordMode>{"true" if el["passwordMode"] else "false"}</PasswordMode>')
|
||||
# ChoiceButton — захват «как есть» (платформа эмитит явное значение; ref-поля выводят сама,
|
||||
# декомпилятор фиксирует факт. значение). Нет ключа → не эмитим (не додумываем по событию).
|
||||
if el.get('choiceButton') is not None:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# form-decompile v0.83 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# form-decompile v0.84 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
|
||||
param(
|
||||
@@ -1255,6 +1255,16 @@ $GENERIC_SCALARS = @(
|
||||
@{ Tag='AutoMaxRowsCount'; Key='autoMaxRowsCount'; Kind='bool' }
|
||||
@{ Tag='HeightControlVariant'; Key='heightControlVariant'; Kind='value' }
|
||||
@{ Tag='EditTextUpdate'; Key='editTextUpdate'; Kind='value' }
|
||||
# Корпусный хвост (zеркало компилятора): свёртка группы / форма попапа / авто-добавление /
|
||||
# выделение отрицательных / нач. позиция списка / высота списка выбора / три состояния / прокрутка
|
||||
@{ Tag='ControlRepresentation'; Key='controlRepresentation'; Kind='value' }
|
||||
@{ Tag='ShapeRepresentation'; Key='shapeRepresentation'; Kind='value' }
|
||||
@{ Tag='AutoAddIncomplete'; Key='autoAddIncomplete'; Kind='bool' }
|
||||
@{ Tag='MarkNegatives'; Key='markNegatives'; Kind='bool' }
|
||||
@{ Tag='InitialListView'; Key='initialListView'; Kind='value' }
|
||||
@{ Tag='ChoiceListHeight'; Key='choiceListHeight'; Kind='value' }
|
||||
@{ Tag='ThreeState'; Key='threeState'; Kind='bool' }
|
||||
@{ Tag='ScrollOnCompress'; Key='scrollOnCompress'; Kind='bool' }
|
||||
)
|
||||
|
||||
# Захват generic-скаляров. Специфичная обработка (если ключ уже задан) — побеждает.
|
||||
@@ -1513,7 +1523,8 @@ function Decompile-Element {
|
||||
$dp = Get-Child $node 'DataPath'; if ($dp) { $obj['path'] = $dp }
|
||||
Add-CommonProps $obj $node $name
|
||||
if ((Get-Child $node 'MultiLine') -eq 'true') { $obj['multiLine'] = $true }
|
||||
if ((Get-Child $node 'PasswordMode') -eq 'true') { $obj['passwordMode'] = $true }
|
||||
# PasswordMode: факт. значение (платформа эмитит и false — 349/504 в корпусе; ≠ «if true»)
|
||||
$pmIn = Get-Child $node 'PasswordMode'; if ($null -ne $pmIn) { $obj['passwordMode'] = ($pmIn -eq 'true') }
|
||||
$mi = Get-Child $node 'AutoMarkIncomplete'; if ($null -ne $mi) { $obj['markIncomplete'] = ($mi -eq 'true') }
|
||||
$em = Get-Child $node 'EditMode'; if ($em) { $obj['editMode'] = $em }
|
||||
$tl = Get-Child $node 'TitleLocation'; if ($tl) { $obj['titleLocation'] = $tl.ToLower() }
|
||||
|
||||
Reference in New Issue
Block a user