mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-30 08:26:55 +03:00
feat(form-compile): роль по GUID в xr-флаге — без префикса Role. (заимствованные/расширение)
Роль в xr-флаге (userVisible/view/edit/use, объектная форма {common,roles}) может
ссылаться по GUID (<xr:Value name="<guid>"> без префикса Role. — заимствованная роль
или расширение), а не по имени. Emit-XrFlag всегда добавлял Role. → Role.<guid>
(форма Сотрудники/ВыплатыУчётЗатрат: 4 ADDED Role.GUID + 4 LOST). Фикс: ключ-роль,
совпадающий с GUID-паттерном, эмитится как есть (без Role.). Декомпилятор GUID и так
сохранял верно (нет префикса для снятия). Зеркало py.
Форма Сотрудники → match. Кейс attributes-types (+edit с ролью по GUID) сертифицирован
в 1С (платформа принимает неизвестную GUID-роль). Регресс 43/43 (ps1+py).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
2ab1b5bc14
commit
bdd38691aa
@@ -1,4 +1,4 @@
|
||||
# form-compile v1.122 — Compile 1C managed form from JSON or object metadata
|
||||
# form-compile v1.123 — Compile 1C managed form from JSON or object metadata
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[string]$JsonPath,
|
||||
@@ -2824,9 +2824,10 @@ function Emit-XrFlag {
|
||||
X "$indent`t<xr:Common>$(if ($common){'true'}else{'false'})</xr:Common>"
|
||||
if ($val.roles) {
|
||||
foreach ($r in $val.roles.PSObject.Properties) {
|
||||
# Forgiving: принимаем имя без префикса, с "Role." или кириллическим "Роль." → нормализуем в "Role."
|
||||
# Forgiving: принимаем имя без префикса, с "Role." или кириллическим "Роль." → нормализуем в "Role.".
|
||||
# Роль по GUID (заимствованная/расширение — name="<guid>" без префикса) эмитим как есть.
|
||||
$rname = "$($r.Name)" -replace '^(Role|Роль)\.', ''
|
||||
$rname = "Role.$rname"
|
||||
if ($rname -notmatch '^[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}$') { $rname = "Role.$rname" }
|
||||
$rval = if ([bool]$r.Value) { 'true' } else { 'false' }
|
||||
X "$indent`t<xr:Value name=`"$rname`">$rval</xr:Value>"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# form-compile v1.122 — Compile 1C managed form from JSON or object metadata
|
||||
# form-compile v1.123 — Compile 1C managed form from JSON or object metadata
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
import argparse
|
||||
import copy
|
||||
@@ -2572,8 +2572,11 @@ def emit_xr_flag(lines, tag, val, indent):
|
||||
roles = val.get('roles')
|
||||
if roles:
|
||||
for rname, rval in roles.items():
|
||||
# Forgiving: имя без префикса, с "Role." или кириллическим "Роль." → нормализуем в "Role."
|
||||
rn = "Role." + re.sub(r'^(Role|Роль)\.', '', rname)
|
||||
# Forgiving: имя без префикса, с "Role." или кириллическим "Роль." → нормализуем в "Role.".
|
||||
# Роль по GUID (заимствованная/расширение — name="<guid>" без префикса) эмитим как есть.
|
||||
rn = re.sub(r'^(Role|Роль)\.', '', rname)
|
||||
if not re.match(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}$', rn):
|
||||
rn = "Role." + rn
|
||||
lines.append(f"{indent}\t<xr:Value name=\"{rn}\">{'true' if rval else 'false'}</xr:Value>")
|
||||
lines.append(f"{indent}</{tag}>")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user