fix(form-compile): GUID.GUID значение → xr:DesignTimeRef (Normalize-ChoiceValue)

Значение параметра выбора (choiceParameters app:value) вида "GUID.GUID" (raw-ссылка по
метаданным.значение, оба GUID) эмитилось как xs:string: Normalize-ChoiceValue не
распознавал raw-GUID-ссылку → xs:string. Тот же класс, что choiceList DesignTimeRef-GUID
(commit 2d326c99), но другой потребитель.

Универсальный фикс: ветка GUID.GUID → xr:DesignTimeRef в Normalize-ChoiceValue (всегда
ссылка, не строка; named-ссылки Enum.X.Y детектятся ниже). Закрывает choiceParameters
и любой др. потребитель Normalize-ChoiceValue; choiceList не затронут (там явный
valueType побеждает Normalize). Зеркало py.

Форма НастройкиПрямыхВыплатФСС/ФормаЗаписи → match. ps1==py байт-в-байт. Регресс 43/43.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-06-13 17:31:56 +03:00
parent b5e8e1df7a
commit 9ec5857e22
2 changed files with 12 additions and 2 deletions
@@ -1,4 +1,4 @@
# form-compile v1.168 — Compile 1C managed form from JSON or object metadata
# form-compile v1.169 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[string]$JsonPath,
@@ -4044,6 +4044,12 @@ function Normalize-ChoiceValue {
return @{ XsiType = "xs:dateTime"; Text = $s }
}
# Raw-ссылка по GUID (метаданные.значение, оба GUID): "GUID.GUID" → xr:DesignTimeRef
# (всегда ссылка, не строка; named-ссылки Enum.X.Y детектятся ниже).
if ($s -match '^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\.[0-9a-fA-F]{8}-[0-9a-fA-F-]+$') {
return @{ XsiType = "xr:DesignTimeRef"; Text = $s }
}
# Try to detect typed reference path: "<Root>.<Type>[.<Member>.<Value>]"
$parts = $s -split '\.'
if ($parts.Count -ge 2) {
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# form-compile v1.168 — Compile 1C managed form from JSON or object metadata
# form-compile v1.169 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import copy
@@ -2247,6 +2247,10 @@ def normalize_choice_value(value):
if re.fullmatch(r'\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}', s):
return {"xsi_type": "xs:dateTime", "text": s}
# Raw-ссылка по GUID (метаданные.значение) "GUID.GUID" → xr:DesignTimeRef (всегда ссылка, не строка)
if re.fullmatch(r'[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\.[0-9a-fA-F]{8}-[0-9a-fA-F-]+', s):
return {"xsi_type": "xr:DesignTimeRef", "text": s}
parts = s.split(".")
if len(parts) >= 2:
root = parts[0]