diff --git a/.claude/skills/meta-compile/scripts/meta-compile.ps1 b/.claude/skills/meta-compile/scripts/meta-compile.ps1 index 26f8d61d1..3cd428e07 100644 --- a/.claude/skills/meta-compile/scripts/meta-compile.ps1 +++ b/.claude/skills/meta-compile/scripts/meta-compile.ps1 @@ -3653,13 +3653,14 @@ function Emit-ChartOfCharacteristicTypesProperties { X "$i" $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. Обычно нужен конкретный тип или ОпределяемыйТип.<Имя>.") } } diff --git a/.claude/skills/meta-compile/scripts/meta-compile.py b/.claude/skills/meta-compile/scripts/meta-compile.py index 8fda99dfc..5e5561a95 100644 --- a/.claude/skills/meta-compile/scripts/meta-compile.py +++ b/.claude/skills/meta-compile/scripts/meta-compile.py @@ -3741,13 +3741,14 @@ def emit_chart_of_characteristic_types_properties(indent): X(f'{i}') 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) diff --git a/.claude/skills/meta-validate/scripts/meta-validate.ps1 b/.claude/skills/meta-validate/scripts/meta-validate.ps1 index 45712d662..9784d7d44 100644 --- a/.claude/skills/meta-validate/scripts/meta-validate.ps1 +++ b/.claude/skills/meta-validate/scripts/meta-validate.ps1 @@ -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' Конфигуратор не предлагает (в дереве выбора это папка без флажка); ЛюбаяСсылка на выгрузке вернётся как ЛюбаяСсылкаИБ" } diff --git a/.claude/skills/meta-validate/scripts/meta-validate.py b/.claude/skills/meta-validate/scripts/meta-validate.py index 412ac4dd9..5d4079d9a 100644 --- a/.claude/skills/meta-validate/scripts/meta-validate.py +++ b/.claude/skills/meta-validate/scripts/meta-validate.py @@ -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): diff --git a/docs/meta-dsl-spec.md b/docs/meta-dsl-spec.md index cb2f248b8..786756aac 100644 --- a/docs/meta-dsl-spec.md +++ b/docs/meta-dsl-spec.md @@ -149,7 +149,7 @@ JSON DSL для описания объектов метаданных конф | Контейнер | Что можно | Чем отвечает платформа | |-----------|-----------|------------------------| | `DefinedType` (состав) | только конкретные типы | «Недопустимый тип» и файл не грузится — на `AnyRef`, голый `CatalogRef`, `Characteristic.Xxx` и вложенный `DefinedType.Xxx`; контрольный `CatalogRef.Xxx` принят | -| ПВХ (`Type`/тип значения) | `DefinedType.Xxx`, `Characteristic.Xxx` | голый метатип и `AnyRef` тоже грузятся, но Конфигуратор их не предлагает (в дереве выбора это папки без флажка), а `AnyRef` возвращается с выгрузки как `AnyIBRef` | +| ПВХ (`Type`/тип значения) | из множеств — только `DefinedType.Xxx` | остальное тоже грузится, но Конфигуратор не предлагает: голого метатипа и `AnyRef` в дереве выбора нет вовсе, `Characteristic.Xxx` — тоже (тип значения характеристики не может быть значением характеристики). `AnyRef` возвращается с выгрузки как `AnyIBRef`. В корпусе erp+acc ни один из 24 ПВХ множеств в типе значения не использует | | любой составной тип | `DefinedType.Xxx` только ЕДИНСТВЕННЫМ | одним из составного Конфигуратор выбрать не даёт, но загрузчик принимает: в корпусе erp+acc 6500 единственных против 1 составного, и этот один — в типовой ERP (`Документ.НачислениеИСписаниеБонусныхБаллов.Баллы`) | Отсюда разная строгость проверок: состав определяемого типа — ошибка, остальные два — предупреждение. diff --git a/tests/skills/cases/meta-compile/snapshots/warn-cct-characteristic/ChartsOfCharacteristicTypes/Виды2.xml b/tests/skills/cases/meta-compile/snapshots/warn-cct-characteristic/ChartsOfCharacteristicTypes/Виды2.xml new file mode 100644 index 000000000..cb42788f7 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/warn-cct-characteristic/ChartsOfCharacteristicTypes/Виды2.xml @@ -0,0 +1,94 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + + Виды2 + + + ru + Виды2 + + + + true + false + + + cfg:CatalogRef.Товары + cfg:Characteristic.Прочие + + false + true + 9 + Variable + 100 + WholeCharacteristicKind + true + true + AsDescription + + Auto + InDialog + false + BothWays + + ChartOfCharacteristicTypes.Виды2.StandardAttribute.Description + ChartOfCharacteristicTypes.Виды2.StandardAttribute.Code + + DontUse + Begin + Directly + DontUse + Auto + + + + + + + + + + + + + Managed + Use + + + + + + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/warn-cct-characteristic/ChartsOfCharacteristicTypes/Виды2/Ext/ObjectModule.bsl b/tests/skills/cases/meta-compile/snapshots/warn-cct-characteristic/ChartsOfCharacteristicTypes/Виды2/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/meta-compile/snapshots/warn-cct-characteristic/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/warn-cct-characteristic/Configuration.xml new file mode 100644 index 000000000..daa66f6a2 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/warn-cct-characteristic/Configuration.xml @@ -0,0 +1,252 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Виды2 + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/warn-cct-characteristic/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-compile/snapshots/warn-cct-characteristic/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/warn-cct-characteristic/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/warn-cct-characteristic/Languages/Русский.xml b/tests/skills/cases/meta-compile/snapshots/warn-cct-characteristic/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/warn-cct-characteristic/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/warn-cct-characteristic.json b/tests/skills/cases/meta-compile/warn-cct-characteristic.json new file mode 100644 index 000000000..30538e952 --- /dev/null +++ b/tests/skills/cases/meta-compile/warn-cct-characteristic.json @@ -0,0 +1,16 @@ +{ + "name": "Предупреждение: характеристика в типе значения ПВХ — Конфигуратор её не предлагает", + "input": { + "type": "ChartOfCharacteristicTypes", + "name": "Виды2", + "valueTypes": [ + "CatalogRef.Товары", + "Characteristic.Прочие" + ] + }, + "expect": { + "stderrContains": [ + "тип значения 'Characteristic.Прочие' Конфигуратор не предлагает" + ] + } +}