mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-21 17:55:53 +03:00
feat(meta-compile,meta-validate): проверки на тип-множество там, где его не принимают
Запрет неочевидный, а отказ платформы приходит поздно и одной строкой из Конфигуратора. Три уровня строгости, все замерены загрузкой в базу на 8.3.24.1691, а не выведены из документации: - ОШИБКА — множество в составе определяемого типа. Платформа отвергает файл целиком («ОпределяемыйТип.<Имя> - Недопустимый тип»); проверено на ОпределяемыйТип, Характеристика, ЛюбаяСсылка и голых ссылках, контрольный вариант с обычным CatalogRef.<Имя> принят. Отсюда и ноль таких узлов в корпусе — это запрет, а не совпадение. - ПРЕДУПРЕЖДЕНИЕ — голый метатип в типе значения ПВХ. Загрузка проходит, но Конфигуратор такой тип не предлагает: в дереве выбора СправочникСсылка и ДокументСсылка — папки без флажка, а ЛюбаяСсылки там нет вовсе. Плюс AnyRef раундтрипом возвращается как AnyIBRef, то есть молча меняется. - ПРЕДУПРЕЖДЕНИЕ — определяемый тип одним из составного. Конфигуратор даёт выбрать его только единственным, но отказывать нельзя: в корпусе erp+acc 6500 единственных против 1 составного, и этот один лежит в типовой ERP (Документ.НачислениеИСписаниеБонусныхБаллов.Баллы — два определяемых типа подряд). Навык не вправе отказаться собрать то, что поставляет 1С. В meta-compile состав множеств берётся опросом самого эмиттера, а не второй копией его регулярок: список видов живёт в Emit-TypeContent, и копия разъехалась бы с ним молча. Развёртка по 3428 объектам ERP: ровно 2 срабатывания, оба на том самом реальном составном реквизите. Ложных нет. Предупреждения пишутся прямо в stderr, а не через Write-Warning: в PS 5.1 тот уходит не в тот поток (конвенция из cf-init), и до проверки они не доезжали. Оба кейса-предупреждения проверены платформой — она эти конфигурации грузит, что и подтверждает выбор «предупреждение, а не отказ». Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
079a177cf4
commit
1481e58bfc
@@ -144,10 +144,15 @@ JSON DSL для описания объектов метаданных конф
|
||||
Прочие менеджеры (`CatalogManager`, `DocumentManager`, …) множеством НЕ являются: голый менеджер
|
||||
пишется обычным `v8:Type`.
|
||||
|
||||
Внутри `DefinedType` тип-множество **запрещено**: платформа отвечает «Недопустимый тип» и на
|
||||
`AnyRef`, и на голый `CatalogRef`, и на `Characteristic.Xxx`, и на вложенный `DefinedType.Xxx`
|
||||
(замерено на 8.3.24.1691 загрузкой в базу; контрольный вариант с обычным `CatalogRef.Xxx` принят).
|
||||
Состав определяемого типа — только конкретные типы.
|
||||
**Где множество принимают.** Три уровня, все замерены на 8.3.24.1691 загрузкой в базу:
|
||||
|
||||
| Контейнер | Что можно | Чем отвечает платформа |
|
||||
|-----------|-----------|------------------------|
|
||||
| `DefinedType` (состав) | только конкретные типы | «Недопустимый тип» и файл не грузится — на `AnyRef`, голый `CatalogRef`, `Characteristic.Xxx` и вложенный `DefinedType.Xxx`; контрольный `CatalogRef.Xxx` принят |
|
||||
| ПВХ (`Type`/тип значения) | `DefinedType.Xxx`, `Characteristic.Xxx` | голый метатип и `AnyRef` тоже грузятся, но Конфигуратор их не предлагает (в дереве выбора это папки без флажка), а `AnyRef` возвращается с выгрузки как `AnyIBRef` |
|
||||
| любой составной тип | `DefinedType.Xxx` только ЕДИНСТВЕННЫМ | одним из составного Конфигуратор выбрать не даёт, но загрузчик принимает: в корпусе erp+acc 6500 единственных против 1 составного, и этот один — в типовой ERP (`Документ.НачислениеИСписаниеБонусныхБаллов.Баллы`) |
|
||||
|
||||
Отсюда разная строгость проверок: состав определяемого типа — ошибка, остальные два — предупреждение.
|
||||
|
||||
Вывод `meta-info` печатает голое множество с суффиксом «(все)» (`ДокументОбъект (все)`) — отличать
|
||||
«все» от «один» по наличию точки посреди длинного имени ненадёжно. Суффикс принимается и на входе
|
||||
|
||||
Reference in New Issue
Block a user