diff --git a/.claude/skills/form-compile/scripts/form-compile.ps1 b/.claude/skills/form-compile/scripts/form-compile.ps1
index 0e9fa9f3..e17ec49e 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.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 "$innertrue" }
- if ($el.passwordMode -eq $true) { X "$innertrue" }
+ if ($null -ne $el.passwordMode) { X "$inner$(if ($el.passwordMode){'true'}else{'false'})" }
# ChoiceButton — захват «как есть» (платформа эмитит явное значение; ref-поля выводят сама,
# декомпилятор фиксирует факт. значение). Нет ключа → не эмитим (не додумываем по событию).
if ($null -ne $el.choiceButton) { X "$inner$(if ($el.choiceButton){'true'}else{'false'})" }
diff --git a/.claude/skills/form-compile/scripts/form-compile.py b/.claude/skills/form-compile/scripts/form-compile.py
index 9ef203f6..3ed8cf4a 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.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}true')
- if el.get('passwordMode') is True:
- lines.append(f'{inner}true')
+ if el.get('passwordMode') is not None:
+ lines.append(f'{inner}{"true" if el["passwordMode"] else "false"}')
# ChoiceButton — захват «как есть» (платформа эмитит явное значение; ref-поля выводят сама,
# декомпилятор фиксирует факт. значение). Нет ключа → не эмитим (не додумываем по событию).
if el.get('choiceButton') is not None:
diff --git a/.claude/skills/form-decompile/scripts/form-decompile.ps1 b/.claude/skills/form-decompile/scripts/form-decompile.ps1
index 0aeaebbf..38f7e9e7 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.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() }