mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-05 11:10:20 +03:00
fix(form-edit,meta-edit,mxl-compile,role-compile,subsystem-*): кавычки в тексте не экранируем
Правило платформы единое и подтверждено дважды. По корпусу трёх конфигураций: 92142 сырых кавычки в тексте элементов и НИ ОДНОЙ "; в условиях RLS — 16334 сырых против нуля экранированных (при этом & платформа пишет, то есть амперсанд экранируется, а кавычка нет). Загрузка на стенде: оба варианта принимаются, но выгружает платформа сырую кавычку — то есть " не ошибка, а лишний шум в роундтрипе. Решение было принято раньше в form-compile (там оно и записано комментарием) и в skd-compile/skd-edit, но шесть навыков из него выпали. Приведены к общему виду: где Esc-Xml использовался только для текста — функция стала текстовой; в meta-edit, где она нужна и для атрибута, текстовые места переведены на существующий Esc-XmlText. Атрибуты нигде не затронуты: там экранирование кавычек обязательно. Дрейф эталонов — три строки, все условия RLS; role-info и role-validate строят фикстуры прогоном role-compile (кросс-навыковый пересъём). Проверка: полная сюита 630/630 на PowerShell и 627+3 skipped на python; 1С-сертификация role-compile 9/9, subsystem-compile 9/9, subsystem-edit 6/6, form-edit 6/6, meta-edit 16/16. В mxl-compile кейс guard-allow-external падает и до правки — не связан. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
6963df6b99
commit
919d49fe14
@@ -1,4 +1,4 @@
|
||||
# meta-compile v1.74 — Compile 1C metadata object from JSON
|
||||
# meta-compile v1.75 — Compile 1C metadata object from JSON
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[Parameter(Mandatory)]
|
||||
@@ -1785,7 +1785,10 @@ function Emit-Characteristics {
|
||||
if ([string]::IsNullOrEmpty($tfvN.Text)) { X "$indent`t`t`t<xr:TypesFilterValue xsi:type=`"$($tfvN.XsiType)`"/>" }
|
||||
else { X "$indent`t`t`t<xr:TypesFilterValue xsi:type=`"$($tfvN.XsiType)`">$(Esc-XmlText $tfvN.Text)</xr:TypesFilterValue>" }
|
||||
}
|
||||
X "$indent`t`t`t<xr:DataPathField>$(Esc-XmlText (Expand-CharField "$dpf" $tFrom))</xr:DataPathField>"
|
||||
# Числовое значение (обычно -1 или 0) — как есть; разворачивать через Expand-CharField нельзя,
|
||||
# оно примет "0" за короткое имя поля и выдаст "<from>.Attribute.0".
|
||||
$dpfOut = if ("$dpf" -match '^-?\d+$') { "$dpf" } else { Esc-XmlText (Expand-CharField "$dpf" $tFrom) }
|
||||
X "$indent`t`t`t<xr:DataPathField>$dpfOut</xr:DataPathField>"
|
||||
X "$indent`t`t`t<xr:MultipleValuesUseField>$mvu</xr:MultipleValuesUseField>"
|
||||
X "$indent`t`t</xr:CharacteristicTypes>"
|
||||
X "$indent`t`t<xr:CharacteristicValues from=`"$(Esc-Xml $vFrom)`">"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# meta-compile v1.74 — Compile 1C metadata object from JSON
|
||||
# meta-compile v1.75 — Compile 1C metadata object from JSON
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
|
||||
import argparse
|
||||
@@ -1822,10 +1822,14 @@ def resolve_char_std_en(name):
|
||||
return None
|
||||
|
||||
def char_int_field(obj, names):
|
||||
"""Поле-флаг Characteristics — дефолт -1. ПОЛИМОРФНО: обычно число, но DataPathField в
|
||||
некоторых конфигурациях содержит ПУТЬ к полю — тогда возвращаем строку как есть."""
|
||||
v = ch_el_prop(obj, names)
|
||||
if v is None or str(v) == '':
|
||||
return -1
|
||||
return int(v)
|
||||
if re.fullmatch(r'-?\d+', str(v)):
|
||||
return int(v)
|
||||
return str(v)
|
||||
|
||||
def expand_char_field(field, from_):
|
||||
s = str(field or '')
|
||||
@@ -1875,7 +1879,10 @@ def emit_characteristics(indent, chars):
|
||||
X(f'{indent}\t\t\t<xr:TypesFilterValue xsi:type="{tfv_xt}"/>')
|
||||
else:
|
||||
X(f'{indent}\t\t\t<xr:TypesFilterValue xsi:type="{tfv_xt}">{esc_xml_text(tfv_tx)}</xr:TypesFilterValue>')
|
||||
X(f'{indent}\t\t\t<xr:DataPathField>{dpf}</xr:DataPathField>')
|
||||
# Числовое значение (обычно -1 или 0) — как есть; expand_char_field примет "0" за короткое
|
||||
# имя поля и выдаст "<from>.Attribute.0".
|
||||
dpf_out = str(dpf) if re.fullmatch(r'-?\d+', str(dpf)) else esc_xml_text(expand_char_field(str(dpf), t_from))
|
||||
X(f'{indent}\t\t\t<xr:DataPathField>{dpf_out}</xr:DataPathField>')
|
||||
X(f'{indent}\t\t\t<xr:MultipleValuesUseField>{mvu}</xr:MultipleValuesUseField>')
|
||||
X(f'{indent}\t\t</xr:CharacteristicTypes>')
|
||||
X(f'{indent}\t\t<xr:CharacteristicValues from="{esc_xml(v_from)}">')
|
||||
|
||||
Reference in New Issue
Block a user