mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-05 17:50:53 +03:00
fix(meta-compile,meta-decompile): полиморфный DataPathField и экранирование кавычек в тексте
Первый полный прогон по всем поддерживаемым типам трёх конфигураций (41366 объектов) вскрыл два дефекта, живущих только в корпусе 2.17. DataPathField в блоке характеристик полиморфно: обычно -1 («не задано»), но в 8 случаях содержит путь к полю. Обе стороны жёстко приводили значение к [int], из-за чего декомпиляция всего объекта падала — 8 документов БП не разбирались вовсе. Теперь число остаётся числом, а путь проходит через Expand-CharField/Shorten-CharField, как соседние путевые поля. Текст элемента экранировался атрибутной функцией: кавычка превращалась в ", тогда как платформа держит её в тексте как есть (наименование «Транспортные средства, зарегистрированные в системе "Платон"» в ERP). В компиляторе для этого давно есть Esc-XmlText/esc_xml_text — переведены все 128 мест эмиссии текста в обоих портах. Замена строго ослабляющая: атрибуты не затронуты, экранирование & < > сохранено. Проверка: три документа БП с путевым DataPathField 3/3, сюита meta-compile 76/76 на обоих портах. Полный прогон корпуса идёт частями. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
b174ca659d
commit
6963df6b99
@@ -1,4 +1,4 @@
|
||||
# meta-decompile v0.61 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
||||
# meta-decompile v0.62 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
#
|
||||
# Поддержаны: Catalog, ExchangePlan, ChartOfCharacteristicTypes, ChartOfAccounts, ChartOfCalculationTypes, Document,
|
||||
@@ -1029,7 +1029,13 @@ if ($charsNode) {
|
||||
filterField = Shorten-CharField (& $gt 'TypesFilterField' $ct) $tFrom
|
||||
filterValue = if ($tfvNil -eq 'true') { $null } else { Convert-ChScalarNode $tfvNode }
|
||||
}
|
||||
$dpf = & $giv 'DataPathField' $ct; if ($dpf -ne -1) { $types['dataPathField'] = $dpf }
|
||||
# DataPathField полиморфно: обычно -1, но встречается ПУТЬ к полю (8 случаев на корпус).
|
||||
# Жёсткое [int] на нём роняло декомпиляцию всего объекта.
|
||||
$dpfN = $ct.SelectSingleNode('xr:DataPathField', $nsm)
|
||||
$dpfT = if ($dpfN) { $dpfN.InnerText } else { '' }
|
||||
if ($dpfT -ne '' -and $dpfT -cne '-1') {
|
||||
$types['dataPathField'] = if ($dpfT -match '^-?\d+$') { [int]$dpfT } else { Shorten-CharField $dpfT $tFrom }
|
||||
}
|
||||
$mvu = & $giv 'MultipleValuesUseField' $ct; if ($mvu -ne -1) { $types['multipleValuesUseField'] = $mvu }
|
||||
$values = [ordered]@{
|
||||
from = $vFrom
|
||||
|
||||
Reference in New Issue
Block a user