diff --git a/.claude/skills/meta-validate/scripts/meta-validate.ps1 b/.claude/skills/meta-validate/scripts/meta-validate.ps1
index 7d86b8967..13b607b62 100644
--- a/.claude/skills/meta-validate/scripts/meta-validate.ps1
+++ b/.claude/skills/meta-validate/scripts/meta-validate.ps1
@@ -1,4 +1,4 @@
-# meta-validate v1.22 — Validate 1C metadata object structure
+# meta-validate v1.23 — Validate 1C metadata object structure
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
@@ -187,6 +187,7 @@ $validTypes = @(
$structuralOnlyTypes = @(
"Subsystem","Role","CommonForm","CommonCommand","CommandGroup","CommonAttribute",
"CommonTemplate","CommonPicture","SessionParameter","SettingsStorage","FilterCriterion",
+ "IntegrationService","Bot",
"FunctionalOption","FunctionalOptionsParameter","Language","Style","StyleItem",
"WSReference","XDTOPackage","DocumentNumerator","Sequence"
)
@@ -230,7 +231,7 @@ $standardAttributesByType = @{
"ChartOfCalculationTypes" = @("PredefinedDataName","Predefined","Ref","DeletionMark","Description","Code","ActionPeriodIsBasic")
"BusinessProcess" = @("Ref","DeletionMark","Date","Number","Started","Completed","HeadTask")
"Task" = @("Ref","DeletionMark","Date","Number","Executed","Description","RoutePoint","BusinessProcess")
- "ExchangePlan" = @("Ref","DeletionMark","Code","Description","ThisNode","SentNo","ReceivedNo")
+ "ExchangePlan" = @("Ref","DeletionMark","Code","Description","ThisNode","SentNo","ReceivedNo","ExchangeDate")
"DocumentJournal" = @("Type","Ref","Date","Posted","DeletionMark","Number")
}
@@ -240,6 +241,8 @@ $standardAttributesByType = @{
$stdAttrConditionalNames = @{
"AccountingRegister" = @("PeriodAdjustment","RecordType")
"AccumulationRegister" = @("RecordType")
+ # ExchangeDate — легаси-реквизит, объявлен лишь у части планов обмена: допустим, но не обязателен.
+ "ExchangePlan" = @("ExchangeDate")
}
# Types that have StandardAttributes block
@@ -738,16 +741,14 @@ function Check-ChildElement {
}
if ($requireType) {
+ # Пустой — это тип «Произвольный», штатная конструкция: в типовых так описаны
+ # служебные реквизиты обработок, платформа принимает и сохраняет её без изменений
+ # (проверено round-trip). Ошибкой здесь был бы отказ там, где платформа не отказывает.
$typeEl = $elProps.SelectSingleNode("md:Type", $ns)
if (-not $typeEl) {
- Report-Error "7. $kind '$nameVal' missing Type block"
- return $false
- }
- $v8Types = $typeEl.SelectNodes("v8:Type", $ns)
- $v8TypeSets = $typeEl.SelectNodes("v8:TypeSet", $ns)
- if ($v8Types.Count -eq 0 -and $v8TypeSets.Count -eq 0) {
- Report-Error "7. $kind '$nameVal' Type block has no v8:Type or v8:TypeSet"
- return $false
+ # Блока Type нет вовсе: загрузка проходит, но платформа молча подставляет тип нового
+ # реквизита — Строка(10). Загрузку это не рвёт, а замысел теряет, отсюда WARN.
+ Report-Warn "7. $kind '$nameVal' — блок Type не задан; при загрузке платформа подставит Строка(10)"
}
}
@@ -1009,7 +1010,12 @@ if ($propsNode) {
# HierarchyType set but Hierarchical = false
$hierarchical = $propsNode.SelectSingleNode("md:Hierarchical", $ns)
$hierarchyType = $propsNode.SelectSingleNode("md:HierarchyType", $ns)
- if ($hierarchical -and $hierarchyType -and $hierarchical.InnerText -eq "false" -and $hierarchyType.InnerText) {
+ # HierarchyType платформа пишет всегда, независимо от Hierarchical, и при выключенной иерархии
+ # просто его игнорирует (проверено: значение переживает round-trip). Дефолтное значение поэтому
+ # ни о чём не говорит — предупреждаем только о явно заданном другом типе иерархии: это похоже
+ # на "тип иерархии выбрали, а саму иерархию включить забыли".
+ if ($hierarchical -and $hierarchyType -and $hierarchical.InnerText -eq "false" -and
+ $hierarchyType.InnerText -and $hierarchyType.InnerText -ne "HierarchyFoldersAndItems") {
Report-Warn "10. HierarchyType='$($hierarchyType.InnerText)' but Hierarchical=false"
$check10Issues++
}
@@ -1042,13 +1048,17 @@ if ($propsNode) {
# Empty Source
$source = $propsNode.SelectSingleNode("md:Source", $ns)
+ # Источник задают и наборами типов (cfg:CatalogObject) — в типовых
+ # так описана каждая четвёртая подписка. Реально пустой источник платформа отвергает:
+ # «ПодпискаНаСобытие.X - Источник событий должен быть задан», поэтому это ошибка.
$hasSource = $false
if ($source) {
$sourceTypes = $source.SelectNodes("v8:Type", $ns)
- if ($sourceTypes.Count -gt 0) { $hasSource = $true }
+ $sourceTypeSets = $source.SelectNodes("v8:TypeSet", $ns)
+ if ($sourceTypes.Count -gt 0 -or $sourceTypeSets.Count -gt 0) { $hasSource = $true }
}
if (-not $hasSource) {
- Report-Warn "10. EventSubscription: no Source types specified"
+ Report-Error "10. EventSubscription: источник событий не задан — платформа отвергнет загрузку"
$check10Issues++
}
}
@@ -1110,13 +1120,17 @@ if ($propsNode) {
# DocumentJournal: RegisteredDocuments should not be empty
if ($mdType -eq "DocumentJournal") {
$regDocs = $propsNode.SelectSingleNode("md:RegisteredDocuments", $ns)
+ # Регистрируемые документы платформа перечисляет как ,
+ # так же их пишет meta-compile; форма с сохранена на случай иных выгрузок.
+ # Пустой состав платформа отвергает: «Для журнала не заданы регистрируемые документы».
$hasRegDocs = $false
if ($regDocs) {
$items = $regDocs.SelectNodes("v8:Type", $ns)
- if ($items.Count -gt 0) { $hasRegDocs = $true }
+ $refItems = $regDocs.SelectNodes("xr:Item", $ns)
+ if ($items.Count -gt 0 -or $refItems.Count -gt 0) { $hasRegDocs = $true }
}
if (-not $hasRegDocs) {
- Report-Warn "10. DocumentJournal: no RegisteredDocuments specified"
+ Report-Error "10. DocumentJournal: регистрируемые документы не заданы — платформа отвергнет загрузку"
$check10Issues++
}
}
@@ -1373,11 +1387,17 @@ if ($propsNode -and $mdType -in @("EventSubscription","ScheduledJob") -and $scri
if (Test-Path $bslPath) {
$bslContent = [System.IO.File]::ReadAllText($bslPath, [System.Text.Encoding]::UTF8)
# Match: Procedure/Function ProcName(...) Export or Процедура/Функция ProcName(...) Экспорт
- $exportPattern = "(?mi)^[\s]*(Procedure|Function|Процедура|Функция)\s+$([regex]::Escape($procName))\s*\(.*\)\s+(Export|Экспорт)"
+ # Список параметров переносится на следующие строки, и Экспорт оказывается не на
+ # строке с именем — в типовых так объявлена каждая обработчик-процедура с длинной
+ # сигнатурой. Отсюда (?s) для содержимого скобок и \s (а не пробел) перед Экспорт.
+ $exportPattern = "(?smi)^[ ]*(Procedure|Function|Процедура|Функция)[ ]+$([regex]::Escape($procName))[ ]*\([^)]*\)\s+(Export|Экспорт)"
if (-not [regex]::IsMatch($bslContent, $exportPattern)) {
Report-Warn "13. ${mdType}.${propLabel}: procedure '$procName' not found as exported in CommonModule '$cmName'"
$check13Ok = $false
}
+ } elseif (Test-Path ([System.IO.Path]::ChangeExtension($bslPath, "bin"))) {
+ # Модуль поставщика выгружен в двоичном виде (Module.bin) — текста нет by design,
+ # проверять нечего. Предупреждать здесь значило бы шуметь о норме.
} else {
Report-Warn "13. ${mdType}.${propLabel}: BSL file not found ($bslPath), cannot verify procedure"
}
diff --git a/.claude/skills/meta-validate/scripts/meta-validate.py b/.claude/skills/meta-validate/scripts/meta-validate.py
index 0f86ee27f..83098600e 100644
--- a/.claude/skills/meta-validate/scripts/meta-validate.py
+++ b/.claude/skills/meta-validate/scripts/meta-validate.py
@@ -1,4 +1,4 @@
-# meta-validate v1.22 — Validate 1C metadata object structure (Python port)
+# meta-validate v1.23 — Validate 1C metadata object structure (Python port)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import os
@@ -210,6 +210,7 @@ valid_types = (
structural_only_types = (
"Subsystem", "Role", "CommonForm", "CommonCommand", "CommandGroup", "CommonAttribute",
"CommonTemplate", "CommonPicture", "SessionParameter", "SettingsStorage", "FilterCriterion",
+ "IntegrationService", "Bot",
"FunctionalOption", "FunctionalOptionsParameter", "Language", "Style", "StyleItem",
"WSReference", "XDTOPackage", "DocumentNumerator", "Sequence",
)
@@ -253,7 +254,7 @@ standard_attributes_by_type = {
"ChartOfCalculationTypes": ["PredefinedDataName", "Predefined", "Ref", "DeletionMark", "Description", "Code", "ActionPeriodIsBasic"],
"BusinessProcess": ["Ref", "DeletionMark", "Date", "Number", "Started", "Completed", "HeadTask"],
"Task": ["Ref", "DeletionMark", "Date", "Number", "Executed", "Description", "RoutePoint", "BusinessProcess"],
- "ExchangePlan": ["Ref", "DeletionMark", "Code", "Description", "ThisNode", "SentNo", "ReceivedNo"],
+ "ExchangePlan": ["Ref", "DeletionMark", "Code", "Description", "ThisNode", "SentNo", "ReceivedNo", "ExchangeDate"],
"DocumentJournal": ["Type", "Ref", "Date", "Posted", "DeletionMark", "Number"],
}
@@ -263,6 +264,8 @@ standard_attributes_by_type = {
std_attr_conditional_names = {
"AccountingRegister": ("PeriodAdjustment", "RecordType"),
"AccumulationRegister": ("RecordType",),
+ # ExchangeDate — легаси-реквизит, объявлен лишь у части планов обмена: допустим, но не обязателен.
+ "ExchangePlan": ("ExchangeDate",),
}
# Types that have StandardAttributes block
@@ -732,14 +735,13 @@ def check_child_element(node, kind, require_type):
if require_type:
type_el = find(el_props, "md:Type")
+ # Пустой — это тип «Произвольный», штатная конструкция: в типовых так описаны
+ # служебные реквизиты обработок, платформа принимает и сохраняет её без изменений
+ # (проверено round-trip). Ошибкой здесь был бы отказ там, где платформа не отказывает.
if type_el is None:
- report_error(f"7. {kind} '{name_val}' missing Type block")
- return False
- v8_types = find_all(type_el, "v8:Type")
- v8_type_sets = find_all(type_el, "v8:TypeSet")
- if len(v8_types) == 0 and len(v8_type_sets) == 0:
- report_error(f"7. {kind} '{name_val}' Type block has no v8:Type or v8:TypeSet")
- return False
+ # Блока Type нет вовсе: загрузка проходит, но платформа молча подставляет тип нового
+ # реквизита — Строка(10). Загрузку это не рвёт, а замысел теряет, отсюда WARN.
+ report_warn(f"7. {kind} '{name_val}' — блок Type не задан; при загрузке платформа подставит Строка(10)")
return True
@@ -977,8 +979,13 @@ if props_node is not None:
# HierarchyType set but Hierarchical = false
hierarchical = find(props_node, "md:Hierarchical")
hierarchy_type = find(props_node, "md:HierarchyType")
+ # HierarchyType платформа пишет всегда, независимо от Hierarchical, и при выключенной иерархии
+ # просто его игнорирует (проверено: значение переживает round-trip). Дефолтное значение поэтому
+ # ни о чём не говорит — предупреждаем только о явно заданном другом типе иерархии: это похоже
+ # на "тип иерархии выбрали, а саму иерархию включить забыли".
if (hierarchical is not None and hierarchy_type is not None and
- inner_text(hierarchical) == "false" and inner_text(hierarchy_type)):
+ inner_text(hierarchical) == "false" and inner_text(hierarchy_type)
+ and inner_text(hierarchy_type) != "HierarchyFoldersAndItems"):
report_warn(f"10. HierarchyType='{inner_text(hierarchy_type)}' but Hierarchical=false")
check10_issues += 1
@@ -1006,13 +1013,17 @@ if props_node is not None:
# Empty Source
source = find(props_node, "md:Source")
+ # Источник задают и наборами типов (cfg:CatalogObject) — в типовых
+ # так описана каждая четвёртая подписка. Реально пустой источник платформа отвергает:
+ # «ПодпискаНаСобытие.X - Источник событий должен быть задан», поэтому это ошибка.
has_source = False
if source is not None:
source_types = find_all(source, "v8:Type")
- if len(source_types) > 0:
+ source_type_sets = find_all(source, "v8:TypeSet")
+ if len(source_types) > 0 or len(source_type_sets) > 0:
has_source = True
if not has_source:
- report_warn("10. EventSubscription: no Source types specified")
+ report_error("10. EventSubscription: источник событий не задан — платформа отвергнет загрузку")
check10_issues += 1
# ScheduledJob: empty MethodName
@@ -1061,13 +1072,17 @@ if props_node is not None:
# DocumentJournal: RegisteredDocuments should not be empty
if md_type == 'DocumentJournal':
reg_docs = find(props_node, 'md:RegisteredDocuments')
+ # Регистрируемые документы платформа перечисляет как ,
+ # так же их пишет meta-compile; форма с сохранена на случай иных выгрузок.
+ # Пустой состав платформа отвергает: «Для журнала не заданы регистрируемые документы».
has_reg_docs = False
if reg_docs is not None:
items = find_all(reg_docs, 'v8:Type')
- if len(items) > 0:
+ ref_items = find_all(reg_docs, 'xr:Item')
+ if len(items) > 0 or len(ref_items) > 0:
has_reg_docs = True
if not has_reg_docs:
- report_warn('10. DocumentJournal: no RegisteredDocuments specified')
+ report_error('10. DocumentJournal: регистрируемые документы не заданы — платформа отвергнет загрузку')
check10_issues += 1
# ChartOfAccounts: ExtDimensionTypes should be set if MaxExtDimensionCount > 0
@@ -1301,10 +1316,17 @@ if props_node is not None and md_type in ("EventSubscription", "ScheduledJob") a
if os.path.exists(bsl_path):
with open(bsl_path, "r", encoding="utf-8-sig") as f:
bsl_content = f.read()
- export_pattern = rf"(?mi)^\s*(Procedure|Function|Процедура|Функция)\s+{re.escape(proc_name)}\s*\(.*\)\s+(Export|Экспорт)"
+ # Список параметров переносится на следующие строки, и Экспорт оказывается не на
+ # строке с именем — в типовых так объявлена каждая обработчик-процедура с длинной
+ # сигнатурой. Отсюда (?s) для содержимого скобок и \s (а не пробел) перед Экспорт.
+ export_pattern = rf"(?smi)^[ ]*(Procedure|Function|Процедура|Функция)[ ]+{re.escape(proc_name)}[ ]*\([^)]*\)\s+(Export|Экспорт)"
if not re.search(export_pattern, bsl_content):
report_warn(f"13. {md_type}.{prop_label}: procedure '{proc_name}' not found as exported in CommonModule '{cm_name}'")
check13_ok = False
+ elif os.path.exists(os.path.splitext(bsl_path)[0] + ".bin"):
+ # Модуль поставщика выгружен в двоичном виде (Module.bin) — текста нет by design,
+ # проверять нечего. Предупреждать здесь значило бы шуметь о норме.
+ pass
else:
report_warn(f"13. {md_type}.{prop_label}: BSL file not found ({bsl_path}), cannot verify procedure")
diff --git a/tests/skills/cases/meta-validate/error-journal-empty-documents.json b/tests/skills/cases/meta-validate/error-journal-empty-documents.json
new file mode 100644
index 000000000..8abb35b08
--- /dev/null
+++ b/tests/skills/cases/meta-validate/error-journal-empty-documents.json
@@ -0,0 +1,11 @@
+{
+ "name": "Пустой состав журнала — платформа отвергает загрузку (Check 10)",
+ "setup": "fixture:journal-empty-documents",
+ "params": {
+ "objectPath": "DocumentJournals/ТестЖурнал.xml"
+ },
+ "expectError": true,
+ "expect": {
+ "stdoutContains": "регистрируемые документы не заданы"
+ }
+}
diff --git a/tests/skills/cases/meta-validate/error-subscription-empty-source.json b/tests/skills/cases/meta-validate/error-subscription-empty-source.json
new file mode 100644
index 000000000..cf6fffc7c
--- /dev/null
+++ b/tests/skills/cases/meta-validate/error-subscription-empty-source.json
@@ -0,0 +1,11 @@
+{
+ "name": "Пустой источник подписки — платформа отвергает загрузку (Check 10)",
+ "setup": "fixture:subscription-empty-source",
+ "params": {
+ "objectPath": "EventSubscriptions/ТестПодписка.xml"
+ },
+ "expectError": true,
+ "expect": {
+ "stdoutContains": "источник событий не задан"
+ }
+}
diff --git a/tests/skills/cases/meta-validate/fixtures/catalog-empty-type-block/Catalogs/Товары.xml b/tests/skills/cases/meta-validate/fixtures/catalog-empty-type-block/Catalogs/Товары.xml
new file mode 100644
index 000000000..affe5ab94
--- /dev/null
+++ b/tests/skills/cases/meta-validate/fixtures/catalog-empty-type-block/Catalogs/Товары.xml
@@ -0,0 +1,131 @@
+
+
+
+
+
+ 663a8901-0032-4f18-bb1a-ce2174cbece4
+ bb20df17-ebde-4175-9079-c789e3cbd195
+
+
+ 7005f331-5c27-428e-a561-8b0f78595780
+ 39d1fb1b-dfb7-414f-af63-39a637b60657
+
+
+ ead16e67-7005-48d1-83cc-dc0b07edee35
+ 0d389498-9b1a-4b69-80e1-43a73bd2138d
+
+
+ 9c0c6357-31b4-466e-ab3d-7238b5133945
+ 791f1ff6-e378-4777-bfd5-09495fb526e0
+
+
+ cdd35860-4d89-4091-8400-c46e656a66d1
+ e6cb5b8e-44ae-41f5-b9d7-10bfdbf41740
+
+
+
+ Товары
+
+
+ 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
+ Catalog.Товары.Form.ФормаЭлемента
+
+
+
+
+
+
+
+
+
+ false
+
+
+ Managed
+ Use
+
+
+
+
+
+ Use
+ Auto
+ DontUse
+ false
+ false
+
+
+
+
+ Служебный
+
+
+ ru
+ Служебный
+
+
+
+
+ false
+
+
+
+ false
+
+ false
+ false
+
+
+ false
+
+ DontCheck
+ Items
+
+
+ Auto
+ Auto
+
+
+ Auto
+
+ DontIndex
+ Use
+ Use
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-validate/fixtures/catalog-empty-type-block/Configuration.xml b/tests/skills/cases/meta-validate/fixtures/catalog-empty-type-block/Configuration.xml
new file mode 100644
index 000000000..8f2f14efb
--- /dev/null
+++ b/tests/skills/cases/meta-validate/fixtures/catalog-empty-type-block/Configuration.xml
@@ -0,0 +1,253 @@
+
+
+
+
+
+ 9cd510cd-abfc-11d4-9434-004095e12fc7
+ d0bb0360-4e09-4936-8e34-a3dc3851f67e
+
+
+ 9fcd25a0-4822-11d4-9414-008048da11f9
+ d9499468-cbbe-410c-b456-6f4a6ef7e4e7
+
+
+ e3687481-0a87-462c-a166-9f34594f9bba
+ 7378dde3-6113-4bb6-93bf-b57ff8406e1f
+
+
+ 9de14907-ec23-4a07-96f0-85521cb6b53b
+ 7398f41d-8349-4e40-8925-88bf7b3590bd
+
+
+ 51f2d5d8-ea4d-4064-8892-82951750031e
+ 93b8f975-cd8b-4e8c-ac14-ea95b90b19bd
+
+
+ e68182ea-4237-4383-967f-90c1e3370bc7
+ 7688edd2-4e1f-4261-acd8-732c551316eb
+
+
+ fb282519-d103-4dd3-bc12-cb271d631dfc
+ 2202f59a-a576-43d5-9b90-52ad63efe348
+
+
+
+ ValRepro
+
+
+ ru
+ ValRepro
+
+
+
+
+ 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-validate/fixtures/catalog-hierarchy-type-nondefault/Catalogs/Прочие.xml b/tests/skills/cases/meta-validate/fixtures/catalog-hierarchy-type-nondefault/Catalogs/Прочие.xml
new file mode 100644
index 000000000..64ef52afb
--- /dev/null
+++ b/tests/skills/cases/meta-validate/fixtures/catalog-hierarchy-type-nondefault/Catalogs/Прочие.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+ 294c0e5d-9374-4a21-905c-49b95454a80f
+ cb354c13-f425-4008-a6aa-e4fa4a79c3e6
+
+
+ 48858662-da32-4e7b-93cc-2a3c42558ce1
+ e6120e99-ce40-4a65-89c1-78bbf7f6589d
+
+
+ b627793f-7476-4163-9112-ff819772694e
+ d8d4eeab-6991-4101-99aa-9d619904f491
+
+
+ af6b1dc5-4250-4a45-88ff-e96e60c596c2
+ 57cb3f07-9dd3-4c8c-a736-2b58453c2816
+
+
+ f3a5679f-a7a7-4cb8-9373-4b0aeab44925
+ 3a7df5e1-a09c-4380-ba2d-8e69be09a677
+
+
+
+ Прочие
+
+
+ ru
+ Прочие
+
+
+
+ false
+ HierarchyOfItems
+ 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-validate/fixtures/catalog-hierarchy-type-nondefault/Configuration.xml b/tests/skills/cases/meta-validate/fixtures/catalog-hierarchy-type-nondefault/Configuration.xml
new file mode 100644
index 000000000..8f2f14efb
--- /dev/null
+++ b/tests/skills/cases/meta-validate/fixtures/catalog-hierarchy-type-nondefault/Configuration.xml
@@ -0,0 +1,253 @@
+
+
+
+
+
+ 9cd510cd-abfc-11d4-9434-004095e12fc7
+ d0bb0360-4e09-4936-8e34-a3dc3851f67e
+
+
+ 9fcd25a0-4822-11d4-9414-008048da11f9
+ d9499468-cbbe-410c-b456-6f4a6ef7e4e7
+
+
+ e3687481-0a87-462c-a166-9f34594f9bba
+ 7378dde3-6113-4bb6-93bf-b57ff8406e1f
+
+
+ 9de14907-ec23-4a07-96f0-85521cb6b53b
+ 7398f41d-8349-4e40-8925-88bf7b3590bd
+
+
+ 51f2d5d8-ea4d-4064-8892-82951750031e
+ 93b8f975-cd8b-4e8c-ac14-ea95b90b19bd
+
+
+ e68182ea-4237-4383-967f-90c1e3370bc7
+ 7688edd2-4e1f-4261-acd8-732c551316eb
+
+
+ fb282519-d103-4dd3-bc12-cb271d631dfc
+ 2202f59a-a576-43d5-9b90-52ad63efe348
+
+
+
+ ValRepro
+
+
+ ru
+ ValRepro
+
+
+
+
+ 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-validate/fixtures/catalog-no-type-block/Catalogs/Товары.xml b/tests/skills/cases/meta-validate/fixtures/catalog-no-type-block/Catalogs/Товары.xml
new file mode 100644
index 000000000..09ab361c7
--- /dev/null
+++ b/tests/skills/cases/meta-validate/fixtures/catalog-no-type-block/Catalogs/Товары.xml
@@ -0,0 +1,131 @@
+
+
+
+
+
+ 663a8901-0032-4f18-bb1a-ce2174cbece4
+ bb20df17-ebde-4175-9079-c789e3cbd195
+
+
+ 7005f331-5c27-428e-a561-8b0f78595780
+ 39d1fb1b-dfb7-414f-af63-39a637b60657
+
+
+ ead16e67-7005-48d1-83cc-dc0b07edee35
+ 0d389498-9b1a-4b69-80e1-43a73bd2138d
+
+
+ 9c0c6357-31b4-466e-ab3d-7238b5133945
+ 791f1ff6-e378-4777-bfd5-09495fb526e0
+
+
+ cdd35860-4d89-4091-8400-c46e656a66d1
+ e6cb5b8e-44ae-41f5-b9d7-10bfdbf41740
+
+
+
+ Товары
+
+
+ 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
+ Catalog.Товары.Form.ФормаЭлемента
+
+
+
+
+
+
+
+
+
+ false
+
+
+ Managed
+ Use
+
+
+
+
+
+ Use
+ Auto
+ DontUse
+ false
+ false
+
+
+
+
+ БезТипа
+
+
+ ru
+ Без типа
+
+
+
+
+ false
+
+
+
+ false
+
+ false
+ false
+
+
+ false
+
+ DontCheck
+ Items
+
+
+ Auto
+ Auto
+
+
+ Auto
+
+ DontIndex
+ Use
+ Use
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-validate/fixtures/catalog-no-type-block/Configuration.xml b/tests/skills/cases/meta-validate/fixtures/catalog-no-type-block/Configuration.xml
new file mode 100644
index 000000000..8f2f14efb
--- /dev/null
+++ b/tests/skills/cases/meta-validate/fixtures/catalog-no-type-block/Configuration.xml
@@ -0,0 +1,253 @@
+
+
+
+
+
+ 9cd510cd-abfc-11d4-9434-004095e12fc7
+ d0bb0360-4e09-4936-8e34-a3dc3851f67e
+
+
+ 9fcd25a0-4822-11d4-9414-008048da11f9
+ d9499468-cbbe-410c-b456-6f4a6ef7e4e7
+
+
+ e3687481-0a87-462c-a166-9f34594f9bba
+ 7378dde3-6113-4bb6-93bf-b57ff8406e1f
+
+
+ 9de14907-ec23-4a07-96f0-85521cb6b53b
+ 7398f41d-8349-4e40-8925-88bf7b3590bd
+
+
+ 51f2d5d8-ea4d-4064-8892-82951750031e
+ 93b8f975-cd8b-4e8c-ac14-ea95b90b19bd
+
+
+ e68182ea-4237-4383-967f-90c1e3370bc7
+ 7688edd2-4e1f-4261-acd8-732c551316eb
+
+
+ fb282519-d103-4dd3-bc12-cb271d631dfc
+ 2202f59a-a576-43d5-9b90-52ad63efe348
+
+
+
+ ValRepro
+
+
+ ru
+ ValRepro
+
+
+
+
+ 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-validate/fixtures/integration-service/Configuration.xml b/tests/skills/cases/meta-validate/fixtures/integration-service/Configuration.xml
new file mode 100644
index 000000000..8f2f14efb
--- /dev/null
+++ b/tests/skills/cases/meta-validate/fixtures/integration-service/Configuration.xml
@@ -0,0 +1,253 @@
+
+
+
+
+
+ 9cd510cd-abfc-11d4-9434-004095e12fc7
+ d0bb0360-4e09-4936-8e34-a3dc3851f67e
+
+
+ 9fcd25a0-4822-11d4-9414-008048da11f9
+ d9499468-cbbe-410c-b456-6f4a6ef7e4e7
+
+
+ e3687481-0a87-462c-a166-9f34594f9bba
+ 7378dde3-6113-4bb6-93bf-b57ff8406e1f
+
+
+ 9de14907-ec23-4a07-96f0-85521cb6b53b
+ 7398f41d-8349-4e40-8925-88bf7b3590bd
+
+
+ 51f2d5d8-ea4d-4064-8892-82951750031e
+ 93b8f975-cd8b-4e8c-ac14-ea95b90b19bd
+
+
+ e68182ea-4237-4383-967f-90c1e3370bc7
+ 7688edd2-4e1f-4261-acd8-732c551316eb
+
+
+ fb282519-d103-4dd3-bc12-cb271d631dfc
+ 2202f59a-a576-43d5-9b90-52ad63efe348
+
+
+
+ ValRepro
+
+
+ ru
+ ValRepro
+
+
+
+
+ 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-validate/fixtures/integration-service/IntegrationServices/ОбменСообщениями.xml b/tests/skills/cases/meta-validate/fixtures/integration-service/IntegrationServices/ОбменСообщениями.xml
new file mode 100644
index 000000000..d959522fc
--- /dev/null
+++ b/tests/skills/cases/meta-validate/fixtures/integration-service/IntegrationServices/ОбменСообщениями.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+ 5362f1d1-1f56-4a61-a52e-6519a060293e
+ ad884943-3c3a-4073-ab34-ed12a0d67556
+
+
+
+ ОбменСообщениями
+
+
+ ru
+ Обмен сообщениями
+
+
+
+
+
+
+
+
+
+ 71313d47-3c6e-464a-8776-f7eb0626fd6b
+ bb1ff475-725d-46cb-8cbc-9ff08970cccc
+
+
+
+ input_from_SM_normal_priority
+
+
+ e1c::FreshBus::Main::MessageExchange_v2.input_from_SM_normal_priority
+ Receive
+ ОбработатьСообщениеОбычныйПриоритет
+ false
+
+
+
+
+
+ 9d8dc419-a252-467d-a132-abba635ac42d
+ 0f7df7e6-a5a4-4c0a-8a44-b70676ce54a2
+
+
+
+ input_from_SM_high_priority
+
+
+ e1c::FreshBus::Main::MessageExchange_v2.input_from_SM_high_priority
+ Receive
+ ОбработатьСообщениеВысокийПриоритет
+ false
+
+
+
+
+
+ fa26d8bb-bc63-4707-926d-64b8c10cd13d
+ 301c529a-896f-4da6-946e-a28690af5399
+
+
+
+ output_to_SM_high_priority
+
+
+ e1c::FreshBus::Main::MessageExchange_v2.output_to_SM_high_priority
+ Send
+
+ true
+
+
+
+
+
+ 2c5400bc-0503-4bf3-b2db-64d8e12338d1
+ 9ab26516-751f-4ef4-8c9e-716d19bd35a0
+
+
+
+ output_to_SM_normal_priority
+
+
+ e1c::FreshBus::Main::MessageExchange_v2.output_to_SM_normal_priority
+ Send
+
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-validate/fixtures/journal-empty-documents/Configuration.xml b/tests/skills/cases/meta-validate/fixtures/journal-empty-documents/Configuration.xml
new file mode 100644
index 000000000..6e91880aa
--- /dev/null
+++ b/tests/skills/cases/meta-validate/fixtures/journal-empty-documents/Configuration.xml
@@ -0,0 +1,255 @@
+
+
+
+
+
+ 9cd510cd-abfc-11d4-9434-004095e12fc7
+ d0bb0360-4e09-4936-8e34-a3dc3851f67e
+
+
+ 9fcd25a0-4822-11d4-9414-008048da11f9
+ d9499468-cbbe-410c-b456-6f4a6ef7e4e7
+
+
+ e3687481-0a87-462c-a166-9f34594f9bba
+ 7378dde3-6113-4bb6-93bf-b57ff8406e1f
+
+
+ 9de14907-ec23-4a07-96f0-85521cb6b53b
+ 7398f41d-8349-4e40-8925-88bf7b3590bd
+
+
+ 51f2d5d8-ea4d-4064-8892-82951750031e
+ 93b8f975-cd8b-4e8c-ac14-ea95b90b19bd
+
+
+ e68182ea-4237-4383-967f-90c1e3370bc7
+ 7688edd2-4e1f-4261-acd8-732c551316eb
+
+
+ fb282519-d103-4dd3-bc12-cb271d631dfc
+ 2202f59a-a576-43d5-9b90-52ad63efe348
+
+
+
+ ValRepro
+
+
+ ru
+ ValRepro
+
+
+
+
+ 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-validate/fixtures/journal-empty-documents/DocumentJournals/ТестЖурнал.xml b/tests/skills/cases/meta-validate/fixtures/journal-empty-documents/DocumentJournals/ТестЖурнал.xml
new file mode 100644
index 000000000..43765356f
--- /dev/null
+++ b/tests/skills/cases/meta-validate/fixtures/journal-empty-documents/DocumentJournals/ТестЖурнал.xml
@@ -0,0 +1,196 @@
+
+
+
+
+
+ d5e5ef76-6a80-43d8-8e38-50f3817885ca
+ 95209c42-dcf0-4b3d-bff6-0f1b6e0d3fa4
+
+
+ 8d01ac37-7f20-489b-8b6d-8c13f571f1bf
+ d8d9b68d-61f4-46b9-a1ba-a239cfda7ded
+
+
+ cce45fe9-4c30-4224-9743-8ae2e2c3f26c
+ a6bb1cb7-287b-487c-bdb7-7031e9beea24
+
+
+
+ ТестЖурнал
+
+
+ ru
+ Тест журнал
+
+
+
+
+
+ true
+
+ false
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-validate/fixtures/journal-with-documents/Configuration.xml b/tests/skills/cases/meta-validate/fixtures/journal-with-documents/Configuration.xml
new file mode 100644
index 000000000..6e91880aa
--- /dev/null
+++ b/tests/skills/cases/meta-validate/fixtures/journal-with-documents/Configuration.xml
@@ -0,0 +1,255 @@
+
+
+
+
+
+ 9cd510cd-abfc-11d4-9434-004095e12fc7
+ d0bb0360-4e09-4936-8e34-a3dc3851f67e
+
+
+ 9fcd25a0-4822-11d4-9414-008048da11f9
+ d9499468-cbbe-410c-b456-6f4a6ef7e4e7
+
+
+ e3687481-0a87-462c-a166-9f34594f9bba
+ 7378dde3-6113-4bb6-93bf-b57ff8406e1f
+
+
+ 9de14907-ec23-4a07-96f0-85521cb6b53b
+ 7398f41d-8349-4e40-8925-88bf7b3590bd
+
+
+ 51f2d5d8-ea4d-4064-8892-82951750031e
+ 93b8f975-cd8b-4e8c-ac14-ea95b90b19bd
+
+
+ e68182ea-4237-4383-967f-90c1e3370bc7
+ 7688edd2-4e1f-4261-acd8-732c551316eb
+
+
+ fb282519-d103-4dd3-bc12-cb271d631dfc
+ 2202f59a-a576-43d5-9b90-52ad63efe348
+
+
+
+ ValRepro
+
+
+ ru
+ ValRepro
+
+
+
+
+ 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-validate/fixtures/journal-with-documents/DocumentJournals/ТестЖурнал.xml b/tests/skills/cases/meta-validate/fixtures/journal-with-documents/DocumentJournals/ТестЖурнал.xml
new file mode 100644
index 000000000..24cc6032b
--- /dev/null
+++ b/tests/skills/cases/meta-validate/fixtures/journal-with-documents/DocumentJournals/ТестЖурнал.xml
@@ -0,0 +1,198 @@
+
+
+
+
+
+ d5e5ef76-6a80-43d8-8e38-50f3817885ca
+ 95209c42-dcf0-4b3d-bff6-0f1b6e0d3fa4
+
+
+ 8d01ac37-7f20-489b-8b6d-8c13f571f1bf
+ d8d9b68d-61f4-46b9-a1ba-a239cfda7ded
+
+
+ cce45fe9-4c30-4224-9743-8ae2e2c3f26c
+ a6bb1cb7-287b-487c-bdb7-7031e9beea24
+
+
+
+ ТестЖурнал
+
+
+ ru
+ Тест журнал
+
+
+
+
+
+ true
+
+ Document.ТестДок
+
+ false
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-validate/fixtures/subscription-empty-source/CommonModules/ТестМодуль.xml b/tests/skills/cases/meta-validate/fixtures/subscription-empty-source/CommonModules/ТестМодуль.xml
new file mode 100644
index 000000000..b6f499c2c
--- /dev/null
+++ b/tests/skills/cases/meta-validate/fixtures/subscription-empty-source/CommonModules/ТестМодуль.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ ТестМодуль
+
+
+ ru
+ Тест модуль
+
+
+
+ false
+ false
+ true
+ false
+ false
+ false
+ false
+ DontUse
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-validate/fixtures/subscription-empty-source/CommonModules/ТестМодуль/Ext/Module.bsl b/tests/skills/cases/meta-validate/fixtures/subscription-empty-source/CommonModules/ТестМодуль/Ext/Module.bsl
new file mode 100644
index 000000000..cc3221f10
--- /dev/null
+++ b/tests/skills/cases/meta-validate/fixtures/subscription-empty-source/CommonModules/ТестМодуль/Ext/Module.bsl
@@ -0,0 +1,2 @@
+Процедура Обработчик(Источник, Отказ) Экспорт
+КонецПроцедуры
diff --git a/tests/skills/cases/meta-validate/fixtures/subscription-empty-source/Configuration.xml b/tests/skills/cases/meta-validate/fixtures/subscription-empty-source/Configuration.xml
new file mode 100644
index 000000000..67f9b4f57
--- /dev/null
+++ b/tests/skills/cases/meta-validate/fixtures/subscription-empty-source/Configuration.xml
@@ -0,0 +1,255 @@
+
+
+
+
+
+ 9cd510cd-abfc-11d4-9434-004095e12fc7
+ d0bb0360-4e09-4936-8e34-a3dc3851f67e
+
+
+ 9fcd25a0-4822-11d4-9414-008048da11f9
+ d9499468-cbbe-410c-b456-6f4a6ef7e4e7
+
+
+ e3687481-0a87-462c-a166-9f34594f9bba
+ 7378dde3-6113-4bb6-93bf-b57ff8406e1f
+
+
+ 9de14907-ec23-4a07-96f0-85521cb6b53b
+ 7398f41d-8349-4e40-8925-88bf7b3590bd
+
+
+ 51f2d5d8-ea4d-4064-8892-82951750031e
+ 93b8f975-cd8b-4e8c-ac14-ea95b90b19bd
+
+
+ e68182ea-4237-4383-967f-90c1e3370bc7
+ 7688edd2-4e1f-4261-acd8-732c551316eb
+
+
+ fb282519-d103-4dd3-bc12-cb271d631dfc
+ 2202f59a-a576-43d5-9b90-52ad63efe348
+
+
+
+ ValRepro
+
+
+ ru
+ ValRepro
+
+
+
+
+ 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-validate/fixtures/subscription-empty-source/EventSubscriptions/ТестПодписка.xml b/tests/skills/cases/meta-validate/fixtures/subscription-empty-source/EventSubscriptions/ТестПодписка.xml
new file mode 100644
index 000000000..e03f2a924
--- /dev/null
+++ b/tests/skills/cases/meta-validate/fixtures/subscription-empty-source/EventSubscriptions/ТестПодписка.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ ТестПодписка
+
+
+ ru
+ Тест подписка
+
+
+
+
+ BeforeWrite
+ CommonModule.ТестМодуль.Обработчик
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-validate/fixtures/subscription-typeset-source/CommonModules/ТестМодуль.xml b/tests/skills/cases/meta-validate/fixtures/subscription-typeset-source/CommonModules/ТестМодуль.xml
new file mode 100644
index 000000000..b6f499c2c
--- /dev/null
+++ b/tests/skills/cases/meta-validate/fixtures/subscription-typeset-source/CommonModules/ТестМодуль.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ ТестМодуль
+
+
+ ru
+ Тест модуль
+
+
+
+ false
+ false
+ true
+ false
+ false
+ false
+ false
+ DontUse
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-validate/fixtures/subscription-typeset-source/CommonModules/ТестМодуль/Ext/Module.bsl b/tests/skills/cases/meta-validate/fixtures/subscription-typeset-source/CommonModules/ТестМодуль/Ext/Module.bsl
new file mode 100644
index 000000000..cc3221f10
--- /dev/null
+++ b/tests/skills/cases/meta-validate/fixtures/subscription-typeset-source/CommonModules/ТестМодуль/Ext/Module.bsl
@@ -0,0 +1,2 @@
+Процедура Обработчик(Источник, Отказ) Экспорт
+КонецПроцедуры
diff --git a/tests/skills/cases/meta-validate/fixtures/subscription-typeset-source/Configuration.xml b/tests/skills/cases/meta-validate/fixtures/subscription-typeset-source/Configuration.xml
new file mode 100644
index 000000000..67f9b4f57
--- /dev/null
+++ b/tests/skills/cases/meta-validate/fixtures/subscription-typeset-source/Configuration.xml
@@ -0,0 +1,255 @@
+
+
+
+
+
+ 9cd510cd-abfc-11d4-9434-004095e12fc7
+ d0bb0360-4e09-4936-8e34-a3dc3851f67e
+
+
+ 9fcd25a0-4822-11d4-9414-008048da11f9
+ d9499468-cbbe-410c-b456-6f4a6ef7e4e7
+
+
+ e3687481-0a87-462c-a166-9f34594f9bba
+ 7378dde3-6113-4bb6-93bf-b57ff8406e1f
+
+
+ 9de14907-ec23-4a07-96f0-85521cb6b53b
+ 7398f41d-8349-4e40-8925-88bf7b3590bd
+
+
+ 51f2d5d8-ea4d-4064-8892-82951750031e
+ 93b8f975-cd8b-4e8c-ac14-ea95b90b19bd
+
+
+ e68182ea-4237-4383-967f-90c1e3370bc7
+ 7688edd2-4e1f-4261-acd8-732c551316eb
+
+
+ fb282519-d103-4dd3-bc12-cb271d631dfc
+ 2202f59a-a576-43d5-9b90-52ad63efe348
+
+
+
+ ValRepro
+
+
+ ru
+ ValRepro
+
+
+
+
+ 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-validate/fixtures/subscription-typeset-source/EventSubscriptions/ТестПодписка.xml b/tests/skills/cases/meta-validate/fixtures/subscription-typeset-source/EventSubscriptions/ТестПодписка.xml
new file mode 100644
index 000000000..fd0676e88
--- /dev/null
+++ b/tests/skills/cases/meta-validate/fixtures/subscription-typeset-source/EventSubscriptions/ТестПодписка.xml
@@ -0,0 +1,20 @@
+
+
+
+
+ ТестПодписка
+
+
+ ru
+ Тест подписка
+
+
+
+
+ cfg:CatalogObject
+
+ BeforeWrite
+ CommonModule.ТестМодуль.Обработчик
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-validate/valid-empty-type-block.json b/tests/skills/cases/meta-validate/valid-empty-type-block.json
new file mode 100644
index 000000000..47895e976
--- /dev/null
+++ b/tests/skills/cases/meta-validate/valid-empty-type-block.json
@@ -0,0 +1,15 @@
+{
+ "name": "Пустой блок типа — тип «Произвольный», не ошибка (Check 7)",
+ "setup": "fixture:catalog-empty-type-block",
+ "params": {
+ "objectPath": "Catalogs/Товары.xml"
+ },
+ "noSnapshot": "фикстура статична, meta-validate только читает и печатает — эталон зафиксировал бы саму фикстуру; проверяется stdout",
+ "skipPlatformVerify": "фикстура — один объект без каталога форм; полная загрузка такого дерева невозможна",
+ "expect": {
+ "stdoutNotContains": [
+ "[ERROR]",
+ "Type block has no"
+ ]
+ }
+}
diff --git a/tests/skills/cases/meta-validate/valid-integration-service.json b/tests/skills/cases/meta-validate/valid-integration-service.json
new file mode 100644
index 000000000..7306bf39c
--- /dev/null
+++ b/tests/skills/cases/meta-validate/valid-integration-service.json
@@ -0,0 +1,15 @@
+{
+ "name": "Сервис интеграции — известный вид метаданных (Check 1)",
+ "setup": "fixture:integration-service",
+ "params": {
+ "objectPath": "IntegrationServices/ОбменСообщениями.xml"
+ },
+ "noSnapshot": "фикстура статична, meta-validate только читает и печатает — эталон зафиксировал бы саму фикстуру; проверяется stdout",
+ "skipPlatformVerify": "фикстура — один объект из типовой конфигурации без её остальной части; полная загрузка такого дерева невозможна",
+ "expect": {
+ "stdoutNotContains": [
+ "[ERROR]",
+ "Unrecognized metadata type"
+ ]
+ }
+}
diff --git a/tests/skills/cases/meta-validate/valid-journal-with-documents.json b/tests/skills/cases/meta-validate/valid-journal-with-documents.json
new file mode 100644
index 000000000..ffe3aad45
--- /dev/null
+++ b/tests/skills/cases/meta-validate/valid-journal-with-documents.json
@@ -0,0 +1,15 @@
+{
+ "name": "Состав журнала перечислен через xr:Item — не повод для предупреждения (Check 10)",
+ "setup": "fixture:journal-with-documents",
+ "params": {
+ "objectPath": "DocumentJournals/ТестЖурнал.xml"
+ },
+ "noSnapshot": "фикстура статична, meta-validate только читает и печатает — эталон зафиксировал бы саму фикстуру; проверяется stdout",
+ "skipPlatformVerify": "фикстура — журнал без документов, на которые он ссылается; полная загрузка такого дерева невозможна",
+ "expect": {
+ "stdoutNotContains": [
+ "[ERROR]",
+ "регистрируемые документы не заданы"
+ ]
+ }
+}
diff --git a/tests/skills/cases/meta-validate/valid-subscription-typeset-source.json b/tests/skills/cases/meta-validate/valid-subscription-typeset-source.json
new file mode 100644
index 000000000..14dde606f
--- /dev/null
+++ b/tests/skills/cases/meta-validate/valid-subscription-typeset-source.json
@@ -0,0 +1,15 @@
+{
+ "name": "Источник подписки задан набором типов — не повод для предупреждения (Check 10)",
+ "setup": "fixture:subscription-typeset-source",
+ "params": {
+ "objectPath": "EventSubscriptions/ТестПодписка.xml"
+ },
+ "noSnapshot": "фикстура статична, meta-validate только читает и печатает — эталон зафиксировал бы саму фикстуру; проверяется stdout",
+ "skipPlatformVerify": "фикстура — подписка с общим модулем без остальной конфигурации; полная загрузка такого дерева невозможна",
+ "expect": {
+ "stdoutNotContains": [
+ "[ERROR]",
+ "источник событий не задан"
+ ]
+ }
+}
diff --git a/tests/skills/cases/meta-validate/warn-hierarchy-type-nondefault.json b/tests/skills/cases/meta-validate/warn-hierarchy-type-nondefault.json
new file mode 100644
index 000000000..a110108e7
--- /dev/null
+++ b/tests/skills/cases/meta-validate/warn-hierarchy-type-nondefault.json
@@ -0,0 +1,13 @@
+{
+ "name": "Недефолтный тип иерархии при выключенной иерархии — предупреждение (Check 10)",
+ "setup": "fixture:catalog-hierarchy-type-nondefault",
+ "params": {
+ "objectPath": "Catalogs/Прочие.xml"
+ },
+ "noSnapshot": "фикстура статична, meta-validate только читает и печатает — эталон зафиксировал бы саму фикстуру; проверяется stdout",
+ "skipPlatformVerify": "фикстура — один объект без остальной конфигурации; полная загрузка такого дерева невозможна",
+ "expect": {
+ "stdoutContains": "HierarchyType='HierarchyOfItems'",
+ "stdoutNotContains": "[ERROR]"
+ }
+}
diff --git a/tests/skills/cases/meta-validate/warn-no-type-block.json b/tests/skills/cases/meta-validate/warn-no-type-block.json
new file mode 100644
index 000000000..a7e41ba42
--- /dev/null
+++ b/tests/skills/cases/meta-validate/warn-no-type-block.json
@@ -0,0 +1,13 @@
+{
+ "name": "Блок типа отсутствует — платформа подставит Строка(10), это предупреждение (Check 7)",
+ "setup": "fixture:catalog-no-type-block",
+ "params": {
+ "objectPath": "Catalogs/Товары.xml"
+ },
+ "noSnapshot": "фикстура статична, meta-validate только читает и печатает — эталон зафиксировал бы саму фикстуру; проверяется stdout",
+ "skipPlatformVerify": "фикстура — один объект без каталога форм; полная загрузка такого дерева невозможна",
+ "expect": {
+ "stdoutContains": "блок Type не задан",
+ "stdoutNotContains": "[ERROR]"
+ }
+}