diff --git a/.claude/skills/form-compile/scripts/form-compile.ps1 b/.claude/skills/form-compile/scripts/form-compile.ps1
index 9e45a27e..c2940ad1 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.167 — Compile 1C managed form from JSON or object metadata
+# form-compile v1.168 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[string]$JsonPath,
@@ -3269,6 +3269,12 @@ $script:genericScalars = @(
@{ Tag='MultipleValuesBackColor'; Key='multipleValuesBackColor'; Kind='value' }
@{ Tag='MultipleValuePictureShape'; Key='multipleValuePictureShape'; Kind='value' }
@{ Tag='MultipleValuePictureDataPath'; Key='multipleValuePictureDataPath'; Kind='value' }
+ # Хвост листовых скаляров (по 1 в корпусе): автокоррекция ввода (input) / уникальность команды
+ # (button) / допуск пустого множ. значения (input) / поведение при гориз. сжатии (table)
+ @{ Tag='AutoCorrectionOnTextInput'; Key='autoCorrectionOnTextInput'; Kind='value' }
+ @{ Tag='CommandUniqueness'; Key='commandUniqueness'; Kind='bool' }
+ @{ Tag='AllowInputEmptyMultipleValues';Key='allowInputEmptyMultipleValues';Kind='bool' }
+ @{ Tag='BehaviorOnHorizontalCompression'; Key='behaviorOnHorizontalCompression'; Kind='value' }
)
function Emit-GenericScalars {
@@ -3958,6 +3964,9 @@ function Emit-Check {
Emit-Layout -el $el -indent $inner
if ($null -ne $el.warningOnEdit) { Emit-MLText -tag "WarningOnEdit" -text $el.warningOnEdit -indent $inner }
+ # FooterDataPath / FooterText — общие cell-свойства колонки (как у input/labelField)
+ if ($el.footerDataPath) { X "$inner$(Esc-Xml "$($el.footerDataPath)")" }
+ if ($null -ne $el.footerText) { Emit-MLText -tag "FooterText" -text $el.footerText -indent $inner }
# Формат / формат редактирования (LocalStringType — строка или {ru,en})
if ($el.format) { Emit-MLText -tag "Format" -text $el.format -indent $inner }
@@ -5014,7 +5023,12 @@ function Emit-CommandBar {
if ($el.autofill -eq $true) { X "$innertrue" }
- $hl = Get-HLocation $el; if ($hl) { X "$inner$hl" }
+ # CommandBar хранит HorizontalLocation фактически (включая Auto — декомпилятор ловит только при наличии);
+ # ≠ дополнениям, где Auto = умолчание-скип (Get-HLocation).
+ if ($el.horizontalLocation) {
+ $hlv = switch ("$($el.horizontalLocation)".ToLower()) { 'auto' {'Auto'} 'left' {'Left'} 'right' {'Right'} 'center' {'Center'} default {"$($el.horizontalLocation)"} }
+ X "$inner$hlv"
+ }
Emit-CommonFlags -el $el -indent $inner
Emit-Layout -el $el -indent $inner
Emit-Companion -tag "ExtendedTooltip" -name "${name}РасширеннаяПодсказка" -indent $inner -content $el.extendedTooltip
diff --git a/.claude/skills/form-compile/scripts/form-compile.py b/.claude/skills/form-compile/scripts/form-compile.py
index 98a3ae2c..288bec2d 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.167 — Compile 1C managed form from JSON or object metadata
+# form-compile v1.168 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import copy
@@ -3387,6 +3387,11 @@ GENERIC_SCALARS = [
('MultipleValuesBackColor', 'multipleValuesBackColor', 'value'),
('MultipleValuePictureShape', 'multipleValuePictureShape', 'value'),
('MultipleValuePictureDataPath', 'multipleValuePictureDataPath', 'value'),
+ # Хвост листовых скаляров (по 1): автокоррекция / уникальность команды / пустое множ.значение / гориз.сжатие
+ ('AutoCorrectionOnTextInput', 'autoCorrectionOnTextInput', 'value'),
+ ('CommandUniqueness', 'commandUniqueness', 'bool'),
+ ('AllowInputEmptyMultipleValues', 'allowInputEmptyMultipleValues', 'bool'),
+ ('BehaviorOnHorizontalCompression', 'behaviorOnHorizontalCompression', 'value'),
]
@@ -4063,6 +4068,11 @@ def emit_check(lines, el, name, eid, indent):
if el.get('warningOnEdit') is not None:
emit_mltext(lines, inner, 'WarningOnEdit', el['warningOnEdit'])
+ # FooterDataPath / FooterText — общие cell-свойства колонки (как у input/labelField)
+ if el.get('footerDataPath'):
+ lines.append(f'{inner}{esc_xml(str(el["footerDataPath"]))}')
+ if el.get('footerText') is not None:
+ emit_mltext(lines, inner, 'FooterText', el['footerText'])
# Формат / формат редактирования (LocalStringType — строка или {ru,en})
if el.get('format'):
@@ -4748,9 +4758,10 @@ def emit_command_bar(lines, el, name, eid, indent):
if el.get('autofill') is True:
lines.append(f'{inner}true')
- _hl = get_hlocation(el)
- if _hl:
- lines.append(f'{inner}{_hl}')
+ # CommandBar хранит HorizontalLocation фактически (включая Auto); ≠ дополнениям (Auto=скип)
+ if el.get('horizontalLocation'):
+ _hlv = {'auto': 'Auto', 'left': 'Left', 'right': 'Right', 'center': 'Center'}.get(str(el['horizontalLocation']).lower(), str(el['horizontalLocation']))
+ lines.append(f'{inner}{_hlv}')
emit_common_flags(lines, el, inner)
emit_layout(lines, el, inner)
diff --git a/.claude/skills/form-decompile/scripts/form-decompile.ps1 b/.claude/skills/form-decompile/scripts/form-decompile.ps1
index e5f504f9..3e6cc6c8 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.144 — Decompile 1C managed Form.xml to JSON DSL (draft)
+# form-decompile v0.145 — Decompile 1C managed Form.xml to JSON DSL (draft)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
param(
@@ -1638,6 +1638,11 @@ $GENERIC_SCALARS = @(
@{ Tag='MultipleValuesBackColor'; Key='multipleValuesBackColor'; Kind='value' }
@{ Tag='MultipleValuePictureShape'; Key='multipleValuePictureShape'; Kind='value' }
@{ Tag='MultipleValuePictureDataPath'; Key='multipleValuePictureDataPath'; Kind='value' }
+ # Хвост листовых скаляров (по 1): автокоррекция / уникальность команды / пустое множ.значение / гориз.сжатие
+ @{ Tag='AutoCorrectionOnTextInput'; Key='autoCorrectionOnTextInput'; Kind='value' }
+ @{ Tag='CommandUniqueness'; Key='commandUniqueness'; Kind='bool' }
+ @{ Tag='AllowInputEmptyMultipleValues'; Key='allowInputEmptyMultipleValues'; Kind='bool' }
+ @{ Tag='BehaviorOnHorizontalCompression'; Key='behaviorOnHorizontalCompression'; Kind='value' }
)
# Захват generic-скаляров. Специфичная обработка (если ключ уже задан) — побеждает.
@@ -1969,6 +1974,9 @@ function Decompile-Element {
elseif ($cbt -ne 'Auto') { $obj['checkBoxType'] = $cbt.Substring(0,1).ToLower() + $cbt.Substring(1) }
Add-TitleLocation $obj $node 'Right'
$woe = $node.SelectSingleNode("lf:WarningOnEdit", $ns); if ($woe) { $t = Get-LangTextWS $woe; if ($null -ne $t) { $obj['warningOnEdit'] = $t } }
+ # FooterDataPath / FooterText — общие cell-свойства колонки (как у input/labelField)
+ $fdp = Get-Child $node 'FooterDataPath'; if ($fdp) { $obj['footerDataPath'] = $fdp }
+ $ftxt = $node.SelectSingleNode("lf:FooterText", $ns); if ($ftxt) { $t = Get-LangTextWS $ftxt; if ($null -ne $t) { $obj['footerText'] = $t } }
Add-FormatProps $obj $node
}
'RadioButtonField' {
@@ -2513,7 +2521,7 @@ $titleNode = $root.SelectSingleNode("lf:Title", $ns)
if ($titleNode) { $t = Get-LangText $titleNode; if ($null -ne $t) { $dsl['title'] = $t } }
# properties (прямые скаляры под