fix(meta-compile,meta-validate): в типе значения ПВХ допустим только определяемый тип

Условие было шире реальности: предупреждение пропускало и Characteristic.X.
В дереве выбора типа значения ПВХ характеристики нет вовсе — тип значения
характеристики не может быть значением характеристики. Единственное множество,
которое Конфигуратор там предлагает, — ОпределяемыйТип.

Уровень прежний: платформа такую конфигурацию грузит (проверено загрузкой в
базу), поэтому предупреждение, а не отказ. В корпусе erp+acc ни один из 24 ПВХ
множеств в типе значения вообще не использует.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-09-20 19:48:06 +03:00
co-authored by Claude Opus 5
parent 24b1aa9ee1
commit 0db3656c9c
11 changed files with 409 additions and 11 deletions
@@ -3653,13 +3653,14 @@ function Emit-ChartOfCharacteristicTypesProperties {
X "$i<Type>"
$mark = $script:xml.Length
Emit-TypeContent "$i`t" "$vt"
# Определяемый тип и характеристику Конфигуратор в типе значения ПВХ предлагает, а голый
# метатип (СправочникСсылка/ДокументСсылка/…) и ЛюбаяСсылка — нет: в дереве выбора это
# папки без флажка. Загрузку платформа пропускает, но ЛюбаяСсылка молча превращается в
# В типе значения ПВХ Конфигуратор предлагает единственное множество — ОпределяемыйТип.
# Голого метатипа (СправочникСсылка/ДокументСсылка/…) и ЛюбойСсылки в дереве выбора нет
# вовсе, Характеристики — тоже (тип значения характеристики не может быть значением
# характеристики). Загрузку платформа пропускает, но ЛюбаяСсылка молча превращается в
# ЛюбаяСсылкуИБ на выгрузке. Предупреждаем: не ошибка, но руками так не собрать.
Warn-DefinedTypeInComposite $mark
foreach ($ts in @(Get-EmittedTypeSets $mark)) {
if ($ts -notmatch '^(DefinedType|Characteristic)\.') {
if ($ts -notmatch '^DefinedType\.') {
[Console]::Error.WriteLine("WARNING: План видов характеристик '$objName': тип значения '$ts' Конфигуратор не предлагает (в дереве выбора это папка без флажка). Платформа загрузит, но AnyRef вернётся как AnyIBRef. Обычно нужен конкретный тип или ОпределяемыйТип.<Имя>.")
}
}
@@ -3741,13 +3741,14 @@ def emit_chart_of_characteristic_types_properties(indent):
X(f'{i}<Type>')
mark = len(lines)
emit_type_content(f'{i}\t', str(vt))
# Определяемый тип и характеристику Конфигуратор в типе значения ПВХ предлагает, а голый
# метатип (СправочникСсылка/ДокументСсылка/…) и ЛюбаяСсылка — нет: в дереве выбора это
# папки без флажка. Загрузку платформа пропускает, но ЛюбаяСсылка молча превращается в
# В типе значения ПВХ Конфигуратор предлагает единственное множество — ОпределяемыйТип.
# Голого метатипа (СправочникСсылка/ДокументСсылка/…) и ЛюбойСсылки в дереве выбора нет
# вовсе, Характеристики — тоже (тип значения характеристики не может быть значением
# характеристики). Загрузку платформа пропускает, но ЛюбаяСсылка молча превращается в
# ЛюбаяСсылкуИБ на выгрузке. Предупреждаем: не ошибка, но руками так не собрать.
warn_defined_type_in_composite(mark)
for ts in get_emitted_type_sets(mark):
if not re.match(r'^(DefinedType|Characteristic)[.]', ts):
if not re.match(r'^DefinedType[.]', ts):
print(f"WARNING: План видов характеристик '{obj_name}': тип значения '{ts}' Конфигуратор не предлагает "
"(в дереве выбора это папка без флажка). Платформа загрузит, но AnyRef вернётся как AnyIBRef. "
"Обычно нужен конкретный тип или ОпределяемыйТип.<Имя>.", file=sys.stderr)
@@ -1752,7 +1752,7 @@ foreach ($tb in $typeBlocks23) {
Report-Error "23. Определяемый тип '$objName': в составе тип-множество '$raw' — платформа не загрузит такой файл («Недопустимый тип»). Состав определяемого типа — только конкретные типы"
continue
}
if ($ownerKind -eq "ChartOfCharacteristicTypes" -and $raw -notmatch '^(DefinedType|Characteristic)\.') {
if ($ownerKind -eq "ChartOfCharacteristicTypes" -and $raw -notmatch '^DefinedType\.') {
$dtSetsBad = $true
Report-Warn "23. План видов характеристик '$objName': тип значения '$raw' Конфигуратор не предлагает (в дереве выбора это папка без флажка); ЛюбаяСсылка на выгрузке вернётся как ЛюбаяСсылкаИБ"
}
@@ -1693,7 +1693,7 @@ for tb in root.xpath("//md:Type | //md:ValueType", namespaces=NS):
dt_sets_bad = True
report_error(f"23. Определяемый тип '{obj_name}': в составе тип-множество '{raw}' — платформа не загрузит такой файл («Недопустимый тип»). Состав определяемого типа — только конкретные типы")
continue
if owner_kind == "ChartOfCharacteristicTypes" and not re.match(r'^(DefinedType|Characteristic)[.]', raw):
if owner_kind == "ChartOfCharacteristicTypes" and not re.match(r'^DefinedType[.]', raw):
dt_sets_bad = True
report_warn(f"23. План видов характеристик '{obj_name}': тип значения '{raw}' Конфигуратор не предлагает (в дереве выбора это папка без флажка); ЛюбаяСсылка на выгрузке вернётся как ЛюбаяСсылкаИБ")
if members > 1 and re.match(r'^DefinedType[.]', raw):