diff --git a/.claude/skills/form-compile/scripts/form-compile.ps1 b/.claude/skills/form-compile/scripts/form-compile.ps1
index 037df42d..9a1d3882 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.165 — Compile 1C managed form from JSON or object metadata
+# form-compile v1.166 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[string]$JsonPath,
@@ -5230,6 +5230,7 @@ function Emit-DLValue {
if ($type -match '^(date|dateTime|time)') { X "$indent$(Esc-Xml $valStr)" }
elseif ($type -eq "boolean") { X "$indent$(Esc-Xml $valStr)" }
elseif ($type -eq 'v8:Type') { $nsAttr = Get-ValueTypeNsAttr -valueType 'v8:Type' -value $valStr; X "$indent$(Esc-Xml $valStr)" }
+ elseif ($type -match '^ent:') { X "$indent$(Esc-Xml $valStr)" } # системное перечисление (ent:X) — value несёт тот же xsi:type
elseif ($type -match '^decimal') { X "$indent$(Esc-Xml $valStr)" }
elseif ($type -match '^string') { X "$indent$(Esc-Xml $valStr)" }
elseif ($type -match '^(CatalogRef|DocumentRef|EnumRef|ChartOfAccountsRef|ChartOfCharacteristicTypesRef|ChartOfCalculationTypesRef|BusinessProcessRef|TaskRef|ExchangePlanRef)\.') { X "$indent$(Esc-Xml $valStr)" }
@@ -5794,6 +5795,7 @@ function Emit-Attributes {
'itemsViewMode' { X "$lsiNormal" }
'itemsUserSettingID' { X "$lsi$($script:CANON_ITEMS_ID)" }
'itemsUserSettingPresentation' { Emit-USPresentation -val $pv -tag "dcsset:itemsUserSettingPresentation" -indent $lsi }
+ 'dataParameters' { Emit-DataParameters -items $st.dataParameters -indent $lsi }
'structure' { Emit-ListGrouping (Get-ListGroupingValue $st) $lsi }
}
}
diff --git a/.claude/skills/form-compile/scripts/form-compile.py b/.claude/skills/form-compile/scripts/form-compile.py
index 0dd9a9d0..321a3ea2 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.165 — Compile 1C managed form from JSON or object metadata
+# form-compile v1.166 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import copy
@@ -4973,6 +4973,9 @@ def emit_dl_value(lines, type_str, val, indent, value_list_allowed=False):
elif t == 'v8:Type':
ns_attr = _value_type_ns_attr('v8:Type', val_str)
lines.append(f'{indent}{esc_xml(val_str)}')
+ elif re.match(r'^ent:', t):
+ # системное перечисление (ent:X) — value несёт тот же xsi:type
+ lines.append(f'{indent}{esc_xml(val_str)}')
elif re.match(r'^decimal', t):
lines.append(f'{indent}{esc_xml(val_str)}')
elif re.match(r'^string', t):
@@ -5572,6 +5575,8 @@ def emit_attributes(lines, attrs, indent, conditional_appearance=None):
lines.append(f'{lsi}{CANON_ITEMS_ID}')
elif tag == 'itemsUserSettingPresentation':
emit_us_presentation(lines, lsi, 'dcsset:itemsUserSettingPresentation', pv)
+ elif tag == 'dataParameters':
+ emit_data_parameters(lines, s.get('dataParameters'), lsi)
elif tag == 'structure':
emit_list_grouping(lines, get_list_grouping_value(s), lsi)
else:
diff --git a/.claude/skills/form-decompile/scripts/form-decompile.ps1 b/.claude/skills/form-decompile/scripts/form-decompile.ps1
index 27495365..0e5faca3 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.141 — Decompile 1C managed Form.xml to JSON DSL (draft)
+# form-decompile v0.142 — Decompile 1C managed Form.xml to JSON DSL (draft)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
param(
@@ -145,8 +145,9 @@ function Get-ListSettingsShape {
} elseif ($tag -eq 'itemsViewMode') { $shape['itemsViewMode'] = $true }
elseif ($tag -eq 'itemsUserSettingID') { $shape['itemsUserSettingID'] = $true }
elseif ($tag -eq 'itemsUserSettingPresentation') { $shape['itemsUserSettingPresentation'] = Get-PresByType $child } # items-уровневая подпись (форма по xsi:type)
+ elseif ($tag -eq 'dataParameters') { $shape['dataParameters'] = $true } # значения параметров запроса (контент в settings.dataParameters)
elseif ($tag -eq 'item') { if ($hasGrouping) { $shape['structure'] = $true } else { return $null } }
- else { return $null } # dataParameters/… → канон-fallback
+ else { return $null } # неизвестный top-level → канон-fallback
}
# Полный каноничный скелет → опускаем (компилятор регенерит)
if ($shape.Count -eq 5 -and $shape['filter'] -eq 'vu' -and $shape['order'] -eq 'vu' -and `
@@ -1485,11 +1486,17 @@ function Build-DLParameter {
# value — опускаем nil (дефолт), КРОМЕ valueListAllowed+nil: платформа пишет
# не всегда (корпус 27 с / 47 без), а компилятор при valueListAllowed по умолчанию его НЕ эмитит →
# явный маркер value:null, чтобы реэмитить nil. (Различается через Has-DLProp в компиляторе.)
- $vNode = $pNode.SelectSingleNode("dcssch:value", $ns)
- if ($vNode -and ($vNode.GetAttribute("nil", $NS_XSI) -ne 'true')) {
- $o['value'] = Convert-TypedValue -raw $vNode.InnerText -xsiType ($vNode.GetAttribute("type", $NS_XSI))
- } elseif ($vNode -and ((Get-Child $pNode 'valueListAllowed') -eq 'true')) {
- $o['value'] = $null
+ $vNodes = @($pNode.SelectNodes("dcssch:value", $ns))
+ if ($vNodes.Count -gt 1) {
+ # valueListAllowed: список значений — захватываем ВСЕ массивом
+ $o['value'] = @($vNodes | ForEach-Object { Convert-TypedValue -raw $_.InnerText -xsiType ($_.GetAttribute("type", $NS_XSI)) })
+ } elseif ($vNodes.Count -eq 1) {
+ $vNode = $vNodes[0]
+ if ($vNode.GetAttribute("nil", $NS_XSI) -ne 'true') {
+ $o['value'] = Convert-TypedValue -raw $vNode.InnerText -xsiType ($vNode.GetAttribute("type", $NS_XSI))
+ } elseif ((Get-Child $pNode 'valueListAllowed') -eq 'true') {
+ $o['value'] = $null
+ }
}
# useRestriction — опускаем true (дефолт), фиксируем false
if ((Get-Child $pNode 'useRestriction') -eq 'false') { $o['useRestriction'] = $false }