diff --git a/.claude/skills/meta-info/scripts/meta-info.ps1 b/.claude/skills/meta-info/scripts/meta-info.ps1
index 7628e8b2a..874372c47 100644
--- a/.claude/skills/meta-info/scripts/meta-info.ps1
+++ b/.claude/skills/meta-info/scripts/meta-info.ps1
@@ -1158,9 +1158,11 @@ if (-not $drillDone) {
if ($mdType -eq "DefinedType") {
$typeNode2 = $props.SelectSingleNode("md:Type", $ns)
if ($typeNode2) {
- # Оба узла, одним XPath и в порядке документа: v8:TypeSet внутри определяемого
- # типа платформа допускает, а чтение только v8:Type МОЛЧА теряло его — счётчик
- # «Типы (N)» врал.
+ # Оба узла, одним XPath и в порядке документа. v8:TypeSet внутри определяемого
+ # типа платформа НЕ принимает («Недопустимый тип», замерено на 8.3.24.1691 для
+ # AnyRef, голого CatalogRef, Characteristic.X и вложенного DefinedType.X),
+ # поэтому в выгрузке его не бывает — но в рукотворном файле бывает, и тогда
+ # чтение только v8:Type МОЛЧА теряло узел, а счётчик «Типы (N)» врал.
$types = @()
foreach ($t in $typeNode2.SelectNodes("v8:Type|v8:TypeSet", $ns)) {
if ($t.get_LocalName() -eq 'TypeSet') { $types += Format-SingleTypeSet $t.InnerText }
@@ -1360,9 +1362,11 @@ if (-not $drillDone) {
if ($mdType -eq "DefinedType") {
$typeNode2 = $props.SelectSingleNode("md:Type", $ns)
if ($typeNode2) {
- # Оба узла, одним XPath и в порядке документа: v8:TypeSet внутри определяемого
- # типа платформа допускает, а чтение только v8:Type МОЛЧА теряло его — счётчик
- # «Типы (N)» врал.
+ # Оба узла, одним XPath и в порядке документа. v8:TypeSet внутри определяемого
+ # типа платформа НЕ принимает («Недопустимый тип», замерено на 8.3.24.1691 для
+ # AnyRef, голого CatalogRef, Characteristic.X и вложенного DefinedType.X),
+ # поэтому в выгрузке его не бывает — но в рукотворном файле бывает, и тогда
+ # чтение только v8:Type МОЛЧА теряло узел, а счётчик «Типы (N)» врал.
$types = @()
foreach ($t in $typeNode2.SelectNodes("v8:Type|v8:TypeSet", $ns)) {
if ($t.get_LocalName() -eq 'TypeSet') { $types += Format-SingleTypeSet $t.InnerText }
diff --git a/.claude/skills/meta-info/scripts/meta-info.py b/.claude/skills/meta-info/scripts/meta-info.py
index 7d0dfb9de..00ea08aa9 100644
--- a/.claude/skills/meta-info/scripts/meta-info.py
+++ b/.claude/skills/meta-info/scripts/meta-info.py
@@ -1216,9 +1216,11 @@ if not drill_done:
if md_type == "DefinedType":
type_node2 = find(props, "md:Type")
if type_node2 is not None:
- # Оба узла, одним XPath и в порядке документа: v8:TypeSet внутри определяемого
- # типа платформа допускает, а чтение только v8:Type МОЛЧА теряло его — счётчик
- # «Типы (N)» врал.
+ # Оба узла, одним XPath и в порядке документа. v8:TypeSet внутри определяемого
+ # типа платформа НЕ принимает («Недопустимый тип», замерено на 8.3.24.1691 для
+ # AnyRef, голого CatalogRef, Characteristic.X и вложенного DefinedType.X),
+ # поэтому в выгрузке его не бывает — но в рукотворном файле бывает, и тогда
+ # чтение только v8:Type МОЛЧА теряло узел, а счётчик «Типы (N)» врал.
types = []
for t in find_all(type_node2, "v8:Type|v8:TypeSet"):
if local_name(t) == "TypeSet":
@@ -1396,9 +1398,11 @@ if not drill_done:
if md_type == "DefinedType":
type_node2 = find(props, "md:Type")
if type_node2 is not None:
- # Оба узла, одним XPath и в порядке документа: v8:TypeSet внутри определяемого
- # типа платформа допускает, а чтение только v8:Type МОЛЧА теряло его — счётчик
- # «Типы (N)» врал.
+ # Оба узла, одним XPath и в порядке документа. v8:TypeSet внутри определяемого
+ # типа платформа НЕ принимает («Недопустимый тип», замерено на 8.3.24.1691 для
+ # AnyRef, голого CatalogRef, Characteristic.X и вложенного DefinedType.X),
+ # поэтому в выгрузке его не бывает — но в рукотворном файле бывает, и тогда
+ # чтение только v8:Type МОЛЧА теряло узел, а счётчик «Типы (N)» врал.
types = []
for t in find_all(type_node2, "v8:Type|v8:TypeSet"):
if local_name(t) == "TypeSet":
diff --git a/docs/meta-dsl-spec.md b/docs/meta-dsl-spec.md
index 7fc4bc892..53d11d38a 100644
--- a/docs/meta-dsl-spec.md
+++ b/docs/meta-dsl-spec.md
@@ -144,6 +144,11 @@ JSON DSL для описания объектов метаданных конф
Прочие менеджеры (`CatalogManager`, `DocumentManager`, …) множеством НЕ являются: голый менеджер
пишется обычным `v8:Type`.
+Внутри `DefinedType` тип-множество **запрещено**: платформа отвечает «Недопустимый тип» и на
+`AnyRef`, и на голый `CatalogRef`, и на `Characteristic.Xxx`, и на вложенный `DefinedType.Xxx`
+(замерено на 8.3.24.1691 загрузкой в базу; контрольный вариант с обычным `CatalogRef.Xxx` принят).
+Состав определяемого типа — только конкретные типы.
+
Вывод `meta-info` печатает голое множество с суффиксом «(все)» (`ДокументОбъект (все)`) — отличать
«все» от «один» по наличию точки посреди длинного имени ненадёжно. Суффикс принимается и на входе
`meta-compile`, так что строку из вывода можно подать обратно.
diff --git a/tests/skills/cases/meta-info/defined-type-with-typeset.json b/tests/skills/cases/meta-info/defined-type-with-typeset.json
index 9afbb7d27..f42a268fc 100644
--- a/tests/skills/cases/meta-info/defined-type-with-typeset.json
+++ b/tests/skills/cases/meta-info/defined-type-with-typeset.json
@@ -1,34 +1,6 @@
{
- "name": "Определяемый тип содержит множество: счётчик «Типы (N)» его не теряет",
- "setup": "empty-config",
- "preRun": [
- {
- "script": "meta-compile/scripts/meta-compile",
- "input": {
- "type": "Catalog",
- "name": "Товары"
- },
- "args": {
- "-JsonPath": "{inputFile}",
- "-OutputDir": "{workDir}"
- }
- },
- {
- "script": "meta-compile/scripts/meta-compile",
- "input": {
- "type": "DefinedType",
- "name": "Любой",
- "valueTypes": [
- "CatalogRef.Товары",
- "AnyRef"
- ]
- },
- "args": {
- "-JsonPath": "{inputFile}",
- "-OutputDir": "{workDir}"
- }
- }
- ],
+ "name": "Множество внутри определяемого типа: счётчик «Типы (N)» его не теряет",
+ "setup": "fixture:defined-type-with-typeset",
"params": {
"objectPath": "DefinedTypes/Любой.xml"
},
@@ -36,6 +8,7 @@
"-Mode",
"full"
],
+ "skipPlatformVerify": "v8:TypeSet внутри определяемого типа платформа не принимает — «ОпределяемыйТип.Любой - Недопустимый тип», замерено на 8.3.24.1691 для AnyRef, голого CatalogRef, Characteristic.X и вложенного DefinedType.X. Фикстура собрана вручную именно поэтому: проверяем, что читалка не теряет узел молча, а такой файл бывает только рукотворным",
"expect": {
"stdoutContains": [
"Типы (2):",
diff --git a/tests/skills/cases/meta-info/fixtures/defined-type-with-typeset/Catalogs/Товары.xml b/tests/skills/cases/meta-info/fixtures/defined-type-with-typeset/Catalogs/Товары.xml
new file mode 100644
index 000000000..f91b89a4c
--- /dev/null
+++ b/tests/skills/cases/meta-info/fixtures/defined-type-with-typeset/Catalogs/Товары.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+ 677f6f96-b0d6-40b5-814d-a1ef5723abf5
+ e02f40d7-47e9-472d-b15a-fe29ee5e95ad
+
+
+ 5ea2b1a1-b009-486c-876b-fe29bca59391
+ 077bb116-6bba-4e15-85c7-a2b2b4a6cc66
+
+
+ 9f33c2b0-aaad-4ed9-bb92-ca0824bc207d
+ e33c9910-db82-4beb-a145-c29555c3ea1e
+
+
+ 06b2befe-8966-4ab1-a544-d84b7be92bb2
+ 24304c64-5db9-4199-b66a-65df1d850986
+
+
+ 65fd9c64-5d98-47c3-b978-43055bde20a7
+ ac4f96ba-01a8-4c31-bd1e-46b7be3257a7
+
+
+
+ Товары
+
+
+ ru
+ Товары
+
+
+
+ false
+ HierarchyFoldersAndItems
+ false
+ 2
+ true
+ true
+
+ ToItems
+ 9
+ 25
+ String
+ Variable
+ WholeCatalog
+ false
+ true
+ AsDescription
+
+ Auto
+ InDialog
+ false
+ BothWays
+
+ Catalog.Товары.StandardAttribute.Description
+ Catalog.Товары.StandardAttribute.Code
+
+ Begin
+ DontUse
+ Directly
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+ Managed
+ Use
+
+
+
+
+
+ Use
+ Auto
+ DontUse
+ false
+ false
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/fixtures/defined-type-with-typeset/Catalogs/Товары/Ext/ObjectModule.bsl b/tests/skills/cases/meta-info/fixtures/defined-type-with-typeset/Catalogs/Товары/Ext/ObjectModule.bsl
new file mode 100644
index 000000000..5f282702b
--- /dev/null
+++ b/tests/skills/cases/meta-info/fixtures/defined-type-with-typeset/Catalogs/Товары/Ext/ObjectModule.bsl
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/fixtures/defined-type-with-typeset/Configuration.xml b/tests/skills/cases/meta-info/fixtures/defined-type-with-typeset/Configuration.xml
new file mode 100644
index 000000000..aca84382f
--- /dev/null
+++ b/tests/skills/cases/meta-info/fixtures/defined-type-with-typeset/Configuration.xml
@@ -0,0 +1,253 @@
+
+
+
+
+
+ 9cd510cd-abfc-11d4-9434-004095e12fc7
+ df5deb8c-c936-4ab2-aea5-52290178a868
+
+
+ 9fcd25a0-4822-11d4-9414-008048da11f9
+ b942f0b8-d8dd-41a8-b339-d3a8a211196a
+
+
+ e3687481-0a87-462c-a166-9f34594f9bba
+ caa34d25-45b8-41d5-8216-abd12c24cddd
+
+
+ 9de14907-ec23-4a07-96f0-85521cb6b53b
+ 3e2b4d5d-793b-4fba-9e51-673a0a110d33
+
+
+ 51f2d5d8-ea4d-4064-8892-82951750031e
+ 50b65b4a-308a-4405-9482-4e271eb466bf
+
+
+ e68182ea-4237-4383-967f-90c1e3370bc7
+ 806f69f6-4814-4ccb-a124-e0fe3c270ff2
+
+
+ fb282519-d103-4dd3-bc12-cb271d631dfc
+ 9defdf9f-be5f-45da-8981-11ff35a03e93
+
+
+
+ Проба
+
+
+ ru
+ Проба
+
+
+
+
+ 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
+
+
+
+ Русский
+ Любой
+ Товары
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/fixtures/defined-type-with-typeset/DefinedTypes/Любой.xml b/tests/skills/cases/meta-info/fixtures/defined-type-with-typeset/DefinedTypes/Любой.xml
new file mode 100644
index 000000000..65ab3724e
--- /dev/null
+++ b/tests/skills/cases/meta-info/fixtures/defined-type-with-typeset/DefinedTypes/Любой.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+ a3bcdf82-b899-42d6-92d8-cf63de3a1814
+ 80aef29e-e24c-405c-9ba4-cbdb4f5dae1e
+
+
+
+ Любой
+
+
+ ru
+ Любой
+
+
+
+
+ cfg:CatalogRef.Товары
+ cfg:AnyRef
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/fixtures/defined-type-with-typeset/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-info/fixtures/defined-type-with-typeset/Ext/ClientApplicationInterface.xml
new file mode 100644
index 000000000..41fcbc740
--- /dev/null
+++ b/tests/skills/cases/meta-info/fixtures/defined-type-with-typeset/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ cbab57f2-a0f3-4f0a-89ea-4cb19570ab75
+
+
+
+
+ b553047f-c9aa-4157-978d-448ecad24248
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/fixtures/defined-type-with-typeset/Languages/Русский.xml b/tests/skills/cases/meta-info/fixtures/defined-type-with-typeset/Languages/Русский.xml
new file mode 100644
index 000000000..c6c4274a2
--- /dev/null
+++ b/tests/skills/cases/meta-info/fixtures/defined-type-with-typeset/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/defined-type-with-typeset/Configuration.xml b/tests/skills/cases/meta-info/snapshots/defined-type-with-typeset/Configuration.xml
index 0cf184f47..226b8d2fb 100644
--- a/tests/skills/cases/meta-info/snapshots/defined-type-with-typeset/Configuration.xml
+++ b/tests/skills/cases/meta-info/snapshots/defined-type-with-typeset/Configuration.xml
@@ -32,11 +32,11 @@
- TestConfig
+ Проба
ru
- TestConfig
+ Проба