fix(meta-compile,meta-validate): «только единственным» касается и характеристики

Правило было уже реальности: Конфигуратор не даёт включить характеристику в
составной тип вместе ни с каким другим типом — в том числе с другой
характеристикой. Предупреждение теперь ловит и DefinedType.X, и
Characteristic.X.

Корпус подтверждает даже чище, чем для определяемого типа: 1741 характеристика
единственным типом и 0 в составных (у определяемого было 6500 против 1).
Уровень прежний — предупреждение: загрузчик такое принимает, проверено
загрузкой в базу.

Голых метатипов это не касается: DocumentRef + CatalogRef — обычный составной
тип, 525 вхождений в поставляемых ERP и БП.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-09-20 19:54:29 +03:00
co-authored by Claude Opus 5
parent 0db3656c9c
commit dd0ad18076
14 changed files with 466 additions and 29 deletions
@@ -1733,8 +1733,8 @@ if ($badGrammar.Count -eq 0 -and $notStorable.Count -eq 0 -and $unknownVocab.Cou
# WARN — голый метатип в типе значения ПВХ: загрузка проходит, но Конфигуратор такой тип не
# предлагает (в дереве выбора это папка без флажка), а ЛюбаяСсылка на выгрузке
# возвращается как ЛюбаяСсылкаИБ;
# WARN — определяемый тип одним из составного: Конфигуратор даёт выбрать его только
# единственным. В корпусе erp+acc 6500 единственных против 1 составного — и этот один
# WARN — определяемый тип или характеристика одним из составного: Конфигуратор даёт
# выбрать их только единственными (характеристику — даже с другой характеристикой). В корпусе erp+acc 6500 единственных против 1 составного — и этот один
# лежит в типовой ERP (Документ.НачислениеИСписаниеБонусныхБаллов.Баллы), поэтому не ошибка.
$typeBlocks23 = @($xmlDoc.SelectNodes("//md:Type | //md:ValueType", $ns))
$dtSetsSeen = 0
@@ -1756,9 +1756,9 @@ foreach ($tb in $typeBlocks23) {
$dtSetsBad = $true
Report-Warn "23. План видов характеристик '$objName': тип значения '$raw' Конфигуратор не предлагает (в дереве выбора это папка без флажка); ЛюбаяСсылка на выгрузке вернётся как ЛюбаяСсылкаИБ"
}
if ($members -gt 1 -and $raw -match '^DefinedType\.') {
if ($members -gt 1 -and $raw -match '^(DefinedType|Characteristic)\.') {
$dtSetsBad = $true
Report-Warn "23. Составной тип содержит определяемый тип '$raw' — Конфигуратор даёт выбрать его только единственным; платформа загрузит"
Report-Warn "23. Составной тип содержит '$raw' — Конфигуратор даёт выбрать определяемый тип и характеристику только единственным; платформа загрузит"
}
}
}