diff --git a/.claude/skills/form-compile/scripts/form-compile.ps1 b/.claude/skills/form-compile/scripts/form-compile.ps1
index 66231d88..b1eb6b6c 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.125 — Compile 1C managed form from JSON or object metadata
+# form-compile v1.126 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[string]$JsonPath,
@@ -3026,8 +3026,8 @@ $script:genericScalars = @(
@{ Tag='Shortcut'; Key='shortcut'; Kind='value' }
# Батч простых скаляров (input/radio/group/picDecoration/button): режим выбора незаполненного,
# равная ширина колонок, выравнивание детей, масштаб/зум картинки, форма/положение картинки кнопки.
- # (Table HeaderHeight/FooterHeight/CurrentRowUse — НЕ здесь: строгий Table-XSD требует точной
- # позиции, generic-позиция ломает загрузку; отдельная задача в Emit-Table.)
+ # (Table HeaderHeight/FooterHeight/CurrentRowUse — НЕ здесь, а в Emit-Table: pass-through,
+ # 1С толерантна к порядку детей Table — в корпусе те же теги встречаются в разных позициях.)
@{ Tag='IncompleteChoiceMode'; Key='incompleteChoiceMode'; Kind='value' }
@{ Tag='EqualColumnsWidth'; Key='equalColumnsWidth'; Kind='bool' }
@{ Tag='ChildrenAlign'; Key='childrenAlign'; Kind='value' }
@@ -4305,6 +4305,9 @@ function Emit-Table {
if ($el.multipleChoice -eq $true) { X "$innertrue" }
if ($el.searchOnInput) { X "$inner$($el.searchOnInput)" }
if ($null -ne $el.markIncomplete) { X "$inner$(if ($el.markIncomplete){'true'}else{'false'})" }
+ # Высота шапки/подвала в строках (pass-through; 1С толерантна к порядку детей Table)
+ if ($null -ne $el.headerHeight) { X "$inner$($el.headerHeight)" }
+ if ($null -ne $el.footerHeight) { X "$inner$($el.footerHeight)" }
if ($el.useAlternationRowColor -eq $true) { X "$innertrue" }
if ($el.selectionMode) { X "$inner$($el.selectionMode)" }
if ($el.rowSelectionMode) { X "$inner$($el.rowSelectionMode)" }
@@ -4315,6 +4318,8 @@ function Emit-Table {
if ($el.rowPictureDataPath) { X "$inner$($el.rowPictureDataPath)" }
# RowsPicture — та же конвенция, что ValuesPicture (дефолт LoadTransparent=false; abs/TransparentPixel)
Emit-PictureRef -val $el.rowsPicture -picTag 'RowsPicture' -indent $inner
+ # Использование текущей строки таблицы (pass-through; в корпусе соседствует с блоком дин-списка)
+ if ($el.currentRowUse) { X "$inner$($el.currentRowUse)" }
# Блок свойств дин-список-таблицы (помечена эвристикой 11b.4)
if ($el.PSObject.Properties["_dynList"] -and $el._dynList) { Emit-DynListTableBlock -el $el -indent $inner }
if ($el.viewStatusLocation) { X "$inner$($el.viewStatusLocation)" }
diff --git a/.claude/skills/form-compile/scripts/form-compile.py b/.claude/skills/form-compile/scripts/form-compile.py
index 84322f25..a2ea811b 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.125 — Compile 1C managed form from JSON or object metadata
+# form-compile v1.126 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import copy
@@ -4029,6 +4029,11 @@ def emit_table(lines, el, name, eid, indent):
lines.append(f'{inner}{el["searchOnInput"]}')
if el.get('markIncomplete') is not None:
lines.append(f'{inner}{"true" if el["markIncomplete"] else "false"}')
+ # Высота шапки/подвала в строках (pass-through; 1С толерантна к порядку детей Table)
+ if el.get('headerHeight') is not None:
+ lines.append(f'{inner}{el["headerHeight"]}')
+ if el.get('footerHeight') is not None:
+ lines.append(f'{inner}{el["footerHeight"]}')
if el.get('useAlternationRowColor') is True:
lines.append(f'{inner}true')
if el.get('selectionMode'):
@@ -4047,6 +4052,9 @@ def emit_table(lines, el, name, eid, indent):
lines.append(f'{inner}{el["rowPictureDataPath"]}')
# RowsPicture — та же конвенция, что ValuesPicture (дефолт LoadTransparent=false; abs/TransparentPixel)
emit_picture_ref(lines, el.get('rowsPicture'), 'RowsPicture', inner)
+ # Использование текущей строки таблицы (pass-through; в корпусе соседствует с блоком дин-списка)
+ if el.get('currentRowUse'):
+ lines.append(f'{inner}{el["currentRowUse"]}')
# Блок свойств дин-список-таблицы (помечена эвристикой)
if el.get('_dynList'):
emit_dynlist_table_block(lines, el, inner)
diff --git a/.claude/skills/form-decompile/scripts/form-decompile.ps1 b/.claude/skills/form-decompile/scripts/form-decompile.ps1
index aa7cbe3f..ba073368 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.99 — Decompile 1C managed Form.xml to JSON DSL (draft)
+# form-decompile v1.00 — Decompile 1C managed Form.xml to JSON DSL (draft)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
param(
@@ -1761,6 +1761,11 @@ function Decompile-Element {
if ((Get-Child $node 'Footer') -eq 'true') { $obj['footer'] = $true }
# Высота в строках — отдельный ключ heightInTableRows (≠ height = , его ловит Add-Layout)
$htr = Get-Child $node 'HeightInTableRows'; if ($htr) { $obj['heightInTableRows'] = [int]$htr }
+ # Высота шапки/подвала таблицы в строках (pass-through; компилятор эмитит в Emit-Table)
+ $hh = Get-Child $node 'HeaderHeight'; if ($null -ne $hh) { $obj['headerHeight'] = [int]$hh }
+ $fh = Get-Child $node 'FooterHeight'; if ($null -ne $fh) { $obj['footerHeight'] = [int]$fh }
+ # Использование текущей строки (Table-уровень; ≠ command-level CurrentRowUse) — pass-through
+ $cru = Get-Child $node 'CurrentRowUse'; if ($cru) { $obj['currentRowUse'] = $cru }
# CommandBarLocation: для дин-список-таблицы компилятор авто-инжектит "None" → инвертируем
# (нет тега → суппресс-маркер ""; "None" → опускаем = авто-дефолт; иначе → захват).
$cbl = Get-Child $node 'CommandBarLocation'
@@ -2187,7 +2192,7 @@ $titleNode = $root.SelectSingleNode("lf:Title", $ns)
if ($titleNode) { $t = Get-LangText $titleNode; if ($null -ne $t) { $dsl['title'] = $t } }
# properties (прямые скаляры под