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 + ВидЦен