diff --git a/.claude/skills/form-compile/scripts/form-compile.ps1 b/.claude/skills/form-compile/scripts/form-compile.ps1
index de2bb0f1..2f6141ff 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.99 — Compile 1C managed form from JSON or object metadata
+# form-compile v1.100 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[string]$JsonPath,
@@ -4471,9 +4471,15 @@ function Parse-DLParamShorthand {
if ($s -match '@valueList') { $result.valueListAllowed = $true; $s = $s -replace '\s*@valueList', '' }
if ($s -match '@hidden') { $result.hidden = $true; $s = $s -replace '\s*@hidden', '' }
if ($s -match '\[([^\]]*)\]') { $result.title = $Matches[1].Trim(); $s = ($s -replace '\s*\[[^\]]*\]\s*', ' ').Trim() }
- if ($s -match '^([^:]+):\s*(\S+)(\s*=\s*(.*))?$') {
+ # Тип может быть СОСТАВНЫМ (A | B | C — с пробелами); значение — после '=' (тип '=' не содержит).
+ if ($s -match '^([^:]+):\s*([^=]+?)(\s*=\s*(.*))?$') {
$result.name = $Matches[1].Trim()
- $result.type = Resolve-TypeStr ($Matches[2].Trim())
+ $typeRaw = $Matches[2].Trim()
+ if ($typeRaw -match '[|+]') {
+ $result.type = (($typeRaw -split '\s*[|+]\s*') | ForEach-Object { Resolve-TypeStr ($_.Trim()) }) -join ' | '
+ } else {
+ $result.type = Resolve-TypeStr $typeRaw
+ }
if ($Matches[4]) {
$rhs = $Matches[4].Trim()
$items = Split-DLValueListCsv $rhs
diff --git a/.claude/skills/form-compile/scripts/form-compile.py b/.claude/skills/form-compile/scripts/form-compile.py
index 14bb19df..f9ba8b66 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.99 — Compile 1C managed form from JSON or object metadata
+# form-compile v1.100 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import copy
@@ -4160,10 +4160,15 @@ def parse_dl_param_shorthand(s):
if m:
result['title'] = m.group(1).strip()
s = re.sub(r'\s*\[[^\]]*\]\s*', ' ', s).strip()
- m = re.match(r'^([^:]+):\s*(\S+)(\s*=\s*(.*))?$', s)
+ # Тип может быть СОСТАВНЫМ (A | B | C — с пробелами); значение — после '=' (тип '=' не содержит).
+ m = re.match(r'^([^:]+):\s*([^=]+?)(\s*=\s*(.*))?$', s)
if m:
result['name'] = m.group(1).strip()
- result['type'] = resolve_type_str(m.group(2).strip())
+ type_raw = m.group(2).strip()
+ if re.search(r'[|+]', type_raw):
+ result['type'] = ' | '.join(resolve_type_str(p.strip()) for p in re.split(r'\s*[|+]\s*', type_raw))
+ else:
+ result['type'] = resolve_type_str(type_raw)
if m.group(4):
rhs = m.group(4).strip()
items = split_dl_valuelist_csv(rhs)
diff --git a/tests/skills/cases/form-compile/dynamic-list-parameters.json b/tests/skills/cases/form-compile/dynamic-list-parameters.json
index 538f5b5e..f8415a66 100644
--- a/tests/skills/cases/form-compile/dynamic-list-parameters.json
+++ b/tests/skills/cases/form-compile/dynamic-list-parameters.json
@@ -22,6 +22,7 @@
"parameters": [
"Артикул",
"Маска: string = %",
+ "Получатель: DocumentRef | CatalogRef",
{ "name": "ВидЦен", "valueListAllowed": true },
{ "name": "Период", "type": "dateTime", "useRestriction": false },
{
diff --git a/tests/skills/cases/form-compile/snapshots/dynamic-list-parameters/Catalogs/Товары/Forms/ФормаСписка/Ext/Form.xml b/tests/skills/cases/form-compile/snapshots/dynamic-list-parameters/Catalogs/Товары/Forms/ФормаСписка/Ext/Form.xml
index dc375f64..778fdda3 100644
--- a/tests/skills/cases/form-compile/snapshots/dynamic-list-parameters/Catalogs/Товары/Forms/ФормаСписка/Ext/Form.xml
+++ b/tests/skills/cases/form-compile/snapshots/dynamic-list-parameters/Catalogs/Товары/Forms/ФормаСписка/Ext/Form.xml
@@ -124,6 +124,21 @@
%
true
+
+ Получатель
+
+
+ ru
+ Получатель
+
+
+
+ cfg:DocumentRef
+ cfg:CatalogRef
+
+
+ true
+
ВидЦен