diff --git a/.claude/skills/meta-info/SKILL.md b/.claude/skills/meta-info/SKILL.md
index 7b15ef8d..c26bb40c 100644
--- a/.claude/skills/meta-info/SKILL.md
+++ b/.claude/skills/meta-info/SKILL.md
@@ -34,7 +34,9 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/meta-info.ps1" -Obj
| `brief` | Всё одной-двумя строками: имена полей, счётчики |
| `full` | Всё раскрыто: колонки ТЧ, список источников подписки, движения, формы |
-`-Name` — drill-down: раскрыть конкретный элемент объекта (ТЧ, реквизит, шаблон URL, операцию веб-сервиса).
+`-Name` — drill-down: раскрыть конкретный элемент объекта (ТЧ, реквизит, стандартный реквизит,
+шаблон URL, операцию веб-сервиса). Составной тип в сводке свёрнут в счётчик — полный список
+типов даёт drill-down: `-Name ТипЗначения` у ПВХ, `-Name Владелец` у подчинённого справочника.
## Поддерживаемые типы (23)
diff --git a/.claude/skills/meta-info/scripts/meta-info.ps1 b/.claude/skills/meta-info/scripts/meta-info.ps1
index 5944acae..a154ae03 100644
--- a/.claude/skills/meta-info/scripts/meta-info.ps1
+++ b/.claude/skills/meta-info/scripts/meta-info.ps1
@@ -1,4 +1,4 @@
-# meta-info v1.6 — Compact summary of 1C metadata object
+# meta-info v1.7 — Compact summary of 1C metadata object
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[Parameter(Mandatory=$true)][Alias('Path')][string]$ObjectPath,
@@ -296,6 +296,202 @@ function Format-Flags($propsNode, [bool]$isDimension = $false) {
return " [$($flags -join ', ')]"
}
+# Ссылка на объект метаданных (`Catalog.Валюты` в Owners и подобных) — не тип значения,
+# но в выводе показываем именно тип, который присваивается: СправочникСсылка.Валюты.
+function Format-MDObjectRef([string]$raw) {
+ if ($raw -match '^(\w+)\.(.+)$') {
+ $key = "$($Matches[1])Ref"
+ if ($refTypeMap.ContainsKey($key)) { return "$($refTypeMap[$key]).$($Matches[2])" }
+ }
+ return $raw
+}
+
+# --- Стандартные реквизиты ---
+
+# Сколько типов состава печатать списком, прежде чем свернуть в счётчик. По корпусу
+# acc/erp/ut/unf состав ПВХ доходит до 151 типа, при этом 20 из 42 ПВХ укладываются в 5.
+$script:composedTypeThreshold = 5
+
+# Имена полей, состав которых свернули в счётчик, — по ним в конце вывода печатается
+# единственная подсказка, чем состав развернуть.
+$script:collapsedNames = @()
+
+# Блок StandardAttributes в XML опционален: платформа материализует его только когда хотя бы
+# один стандартный реквизит кастомизирован (docs/meta-dsl-spec.md §7.1.1). Когда блока нет,
+# действуют платформенные дефолты — профиль ниже совпадает с $stdAttrProfile в meta-compile
+# (выведен из корпуса acc+erp). Правки держать синхронными, иначе навыки разъедутся молча.
+$stdAttrRequiredDefault = @{
+ "Catalog" = @{ "Owner" = $true; "Description" = $true }
+ "Document" = @{ "Date" = $true }
+ "ExchangePlan" = @{ "Description" = $true; "Code" = $true }
+ "ChartOfAccounts" = @{ "Description" = $true; "Code" = $true }
+ "ChartOfCharacteristicTypes" = @{ "Description" = $true }
+ "ChartOfCalculationTypes" = @{ "Description" = $true }
+}
+
+function Test-StdAttrRequired($propsNode, [string]$attrName, [string]$objType) {
+ $fc = $propsNode.SelectSingleNode("md:StandardAttributes/xr:StandardAttribute[@name='$attrName']/xr:FillChecking", $ns)
+ if ($fc) { return ($fc.InnerText -eq "ShowError") }
+ if ($stdAttrRequiredDefault.ContainsKey($objType) -and $stdAttrRequiredDefault[$objType].ContainsKey($attrName)) {
+ return $stdAttrRequiredDefault[$objType][$attrName]
+ }
+ return $false
+}
+
+function New-StdAttr([string]$name, [string]$type, $flags) {
+ $f = @($flags | Where-Object { $_ })
+ $flagStr = if ($f.Count -gt 0) { " [$($f -join ', ')]" } else { "" }
+ return @{ Name = $name; Type = $type; Flags = $flagStr }
+}
+
+# Стандартные реквизиты, наличие и характеристики которых задаются настройками объекта, —
+# их нельзя вывести из остального вывода, поэтому они попадают и в overview. Ссылка,
+# ПометкаУдаления, Родитель и прочее следуют из типа объекта и строки «Иерархический» —
+# они только в full (см. Get-StandardAttributesFull).
+function Get-StandardAttributes($propsNode, [string]$objType, [string]$mode) {
+ $result = @()
+
+ # Владелец — только у подчинённого справочника; состав типов ниоткуда не выводится
+ if ($objType -eq "Catalog") {
+ $ownersNode = $propsNode.SelectSingleNode("md:Owners", $ns)
+ $ownerTypes = @()
+ if ($ownersNode) {
+ foreach ($it in $ownersNode.SelectNodes("xr:Item", $ns)) {
+ $ownerTypes += Format-MDObjectRef $it.InnerText
+ }
+ }
+ if ($ownerTypes.Count -gt 0) {
+ $req = if (Test-StdAttrRequired $propsNode "Owner" $objType) { "обязательный" } else { $null }
+ $result += New-StdAttr "Владелец" ($ownerTypes -join ", ") @($req)
+ }
+ }
+
+ # ТипЗначения ПВХ — до полутора сотен типов, полный список раздул бы сводку в обоих
+ # режимах, поэтому сворачиваем в счётчик. Состав смотреть через -Name ТипЗначения.
+ if ($objType -eq "ChartOfCharacteristicTypes") {
+ $vt = $propsNode.SelectSingleNode("md:Type", $ns)
+ if ($vt) {
+ $cnt = $vt.SelectNodes("v8:Type", $ns).Count + $vt.SelectNodes("v8:TypeSet", $ns).Count
+ $typeStr = if ($cnt -gt $script:composedTypeThreshold) {
+ $script:collapsedNames += "ТипЗначения"
+ "Составной ($cnt)"
+ } else { Format-Type $vt }
+ if ($typeStr) { $result += New-StdAttr "ТипЗначения" $typeStr @() }
+ }
+ }
+
+ # Дата — есть всегда, ценна флагом обязательности
+ if ($objType -in @("Document", "BusinessProcess", "Task")) {
+ $req = if (Test-StdAttrRequired $propsNode "Date" $objType) { "обязательный" } else { $null }
+ $result += New-StdAttr "Дата" "Дата" @($req)
+ }
+
+ # Номер — тип и длина задаются объектом, при NumberLength=0 номера нет
+ if ($objType -in @("Document", "BusinessProcess", "Task")) {
+ $numLen = $propsNode.SelectSingleNode("md:NumberLength", $ns)
+ if ($numLen -and [int]$numLen.InnerText -gt 0) {
+ $numType = $propsNode.SelectSingleNode("md:NumberType", $ns)
+ $ntRu = if ($numType -and $numType.InnerText -eq "Number") { "Число" } else { "Строка" }
+ $flags = @()
+ if (Test-StdAttrRequired $propsNode "Number" $objType) { $flags += "обязательный" }
+ $numPer = $propsNode.SelectSingleNode("md:NumberPeriodicity", $ns)
+ if ($numPer -and $numberPeriodMap.ContainsKey($numPer.InnerText)) { $flags += $numberPeriodMap[$numPer.InnerText] }
+ $numAllowed = $propsNode.SelectSingleNode("md:NumberAllowedLength", $ns)
+ if ($numAllowed -and $numAllowed.InnerText -eq "Fixed") { $flags += "фикс. длина" }
+ $autoNum = $propsNode.SelectSingleNode("md:Autonumbering", $ns)
+ if ($autoNum -and $autoNum.InnerText -eq "true") { $flags += "авто" }
+ $result += New-StdAttr "Номер" "$ntRu($($numLen.InnerText))" $flags
+ }
+ }
+
+ # Код — при CodeLength=0 кода у объекта нет вовсе, строку не печатаем
+ $codeLen = $propsNode.SelectSingleNode("md:CodeLength", $ns)
+ if ($codeLen -and [int]$codeLen.InnerText -gt 0) {
+ $codeType = $propsNode.SelectSingleNode("md:CodeType", $ns)
+ $ctRu = if ($codeType -and $codeType.InnerText -eq "Number") { "Число" } else { "Строка" }
+ $flags = @()
+ if (Test-StdAttrRequired $propsNode "Code" $objType) { $flags += "обязательный" }
+ $codeAllowed = $propsNode.SelectSingleNode("md:CodeAllowedLength", $ns)
+ if ($codeAllowed -and $codeAllowed.InnerText -eq "Fixed") { $flags += "фикс. длина" }
+ $result += New-StdAttr "Код" "$ctRu($($codeLen.InnerText))" $flags
+ }
+
+ # Наименование — при DescriptionLength=0 наименования нет
+ $descLen = $propsNode.SelectSingleNode("md:DescriptionLength", $ns)
+ if ($descLen -and [int]$descLen.InnerText -gt 0) {
+ $req = if (Test-StdAttrRequired $propsNode "Description" $objType) { "обязательный" } else { $null }
+ $result += New-StdAttr "Наименование" "Строка($($descLen.InnerText))" @($req)
+ }
+
+ return $result
+}
+
+# Остальные стандартные реквизиты — предсказуемы по типу объекта, но в full полезны
+# как перечень доступных полей для запроса.
+function Get-StandardAttributesFull($propsNode, [string]$objType, [string]$objName) {
+ $selfRef = switch ($objType) {
+ "Catalog" { "СправочникСсылка.$objName" }
+ "ChartOfCharacteristicTypes" { "ПВХСсылка.$objName" }
+ "ChartOfAccounts" { "ПланСчетовСсылка.$objName" }
+ "ChartOfCalculationTypes" { "ПВРСсылка.$objName" }
+ "ExchangePlan" { "ПланОбменаСсылка.$objName" }
+ "Document" { "ДокументСсылка.$objName" }
+ "BusinessProcess" { "БизнесПроцессСсылка.$objName" }
+ "Task" { "ЗадачаСсылка.$objName" }
+ default { "" }
+ }
+ $result = @()
+ if ($selfRef) { $result += New-StdAttr "Ссылка" $selfRef @() }
+ $result += New-StdAttr "ПометкаУдаления" "Булево" @()
+
+ # Родитель и ЭтоГруппа существуют только у иерархических объектов
+ $hier = $propsNode.SelectSingleNode("md:Hierarchical", $ns)
+ $isHier = ($hier -and $hier.InnerText -eq "true") -or $objType -eq "ChartOfAccounts"
+ if ($isHier -and $selfRef) {
+ $result += New-StdAttr "Родитель" $selfRef @()
+ $ht = $propsNode.SelectSingleNode("md:HierarchyType", $ns)
+ if ($objType -eq "Catalog" -and (-not $ht -or $ht.InnerText -eq "HierarchyFoldersAndItems")) {
+ $result += New-StdAttr "ЭтоГруппа" "Булево" @()
+ }
+ }
+
+ switch ($objType) {
+ "Document" {
+ $result += New-StdAttr "Проведен" "Булево" @()
+ }
+ "ExchangePlan" {
+ $result += New-StdAttr "ЭтотУзел" "Булево" @()
+ $result += New-StdAttr "НомерОтправленного" "Число" @()
+ $result += New-StdAttr "НомерПринятого" "Число" @()
+ }
+ "BusinessProcess" {
+ $result += New-StdAttr "Стартован" "Булево" @()
+ $result += New-StdAttr "Завершен" "Булево" @()
+ $result += New-StdAttr "ВедущаяЗадача" "ЗадачаСсылка" @()
+ }
+ "Task" {
+ $result += New-StdAttr "Выполнена" "Булево" @()
+ $result += New-StdAttr "БизнесПроцесс" "БизнесПроцессСсылка" @()
+ $result += New-StdAttr "ТочкаМаршрута" "БизнесПроцессТочкаМаршрутаСсылка" @()
+ }
+ "ChartOfAccounts" {
+ $result += New-StdAttr "Вид" "ВидСчета" @()
+ $result += New-StdAttr "Забалансовый" "Булево" @()
+ $result += New-StdAttr "Порядок" "Число" @()
+ }
+ "ChartOfCalculationTypes" {
+ $result += New-StdAttr "ПериодДействияБазовый" "Булево" @()
+ }
+ }
+
+ # Предопределённые данные есть у всех перечисленных типов, кроме документов и задач
+ if ($objType -in @("Catalog", "ChartOfCharacteristicTypes", "ChartOfAccounts", "ChartOfCalculationTypes")) {
+ $result += New-StdAttr "Предопределенный" "Булево" @()
+ $result += New-StdAttr "ИмяПредопределенныхДанных" "Строка" @()
+ }
+ return $result
+}
+
function Get-Attributes($parentNode, [string]$childTag = "Attribute", [bool]$isDimension = $false) {
$result = @()
foreach ($attr in $parentNode.SelectNodes("md:$childTag", $ns)) {
@@ -662,6 +858,43 @@ if ($Name -and $childObjs) {
}
}
+ # Не нашли среди дочерних объектов — пробуем стандартные реквизиты ниже
+}
+
+# Drill-down по стандартному реквизиту — единственный способ увидеть состав типов целиком,
+# когда в сводке он свёрнут в счётчик. Живёт в Properties, а не в ChildObjects, поэтому идёт
+# отдельной веткой и работает даже у объектов без ChildObjects.
+if ($Name -and -not $drillDone) {
+ $stdAll = @(Get-StandardAttributes $props $mdType "full") + @(Get-StandardAttributesFull $props $mdType $objName)
+ foreach ($s in $stdAll) {
+ if ($s.Name -ne $Name) { continue }
+ Out "Стандартный реквизит: $($s.Name)"
+
+ # Состав типов разворачиваем списком: ради этого drill-down и нужен
+ $typeSrc = $null
+ if ($Name -eq "ТипЗначения") { $typeSrc = $props.SelectSingleNode("md:Type", $ns) }
+ $typeList = @()
+ if ($typeSrc) {
+ foreach ($t in $typeSrc.SelectNodes("v8:Type", $ns)) { $typeList += Format-SingleType $t.InnerText $typeSrc }
+ foreach ($t in $typeSrc.SelectNodes("v8:TypeSet", $ns)) { $typeList += Format-SingleTypeSet $t.InnerText }
+ } elseif ($Name -eq "Владелец") {
+ $ownersNode = $props.SelectSingleNode("md:Owners", $ns)
+ if ($ownersNode) {
+ foreach ($it in $ownersNode.SelectNodes("xr:Item", $ns)) { $typeList += Format-MDObjectRef $it.InnerText }
+ }
+ }
+
+ if ($typeList.Count -gt 0) {
+ Out " Типы ($($typeList.Count)):"
+ foreach ($t in $typeList) { Out " $t" }
+ } else {
+ Out " Тип: $($s.Type)"
+ }
+ $flagText = $s.Flags.Trim()
+ if ($flagText) { Out " Свойства: $($flagText.Trim('[', ']'))" }
+ $drillDone = $true
+ break
+ }
if (-not $drillDone) {
Write-Host "[ERROR] '$Name' not found in $objName"
exit 1
@@ -692,6 +925,20 @@ if (-not $drillDone) {
# --- Mode: brief ---
if ($Mode -eq "brief") {
+ # Подчинённость — единственный факт структуры, который из brief не выводится никак,
+ # а без него код записи элемента падает. Про обязательность здесь намеренно молчим:
+ # обязательными бывают и обычные реквизиты, а их brief не разбирает.
+ if ($mdType -eq "Catalog") {
+ $ownersNode = $props.SelectSingleNode("md:Owners", $ns)
+ $ownerNames = @()
+ if ($ownersNode) {
+ foreach ($it in $ownersNode.SelectNodes("xr:Item", $ns)) {
+ $ownerNames += ($it.InnerText -replace '^\w+\.', '')
+ }
+ }
+ if ($ownerNames.Count -gt 0) { Out "Подчинён: $($ownerNames -join ', ')" }
+ }
+
# Attributes
$attrs = @()
if ($childObjs) { $attrs = @(Get-Attributes $childObjs) }
@@ -840,23 +1087,10 @@ if (-not $drillDone) {
# Document-specific header properties
if ($mdType -eq "Document") {
- $numType = $props.SelectSingleNode("md:NumberType", $ns)
- $numLen = $props.SelectSingleNode("md:NumberLength", $ns)
- $numPer = $props.SelectSingleNode("md:NumberPeriodicity", $ns)
- $autoNum = $props.SelectSingleNode("md:Autonumbering", $ns)
$posting = $props.SelectSingleNode("md:Posting", $ns)
$parts = @()
- if ($numType -and $numLen) {
- $nt = if ($numType.InnerText -eq "String") { "Строка" } else { "Число" }
- $piece = "Номер: $nt($($numLen.InnerText))"
- if ($numPer) {
- $perRu = if ($numberPeriodMap.ContainsKey($numPer.InnerText)) { $numberPeriodMap[$numPer.InnerText] } else { $numPer.InnerText }
- $piece += ", $perRu"
- }
- if ($autoNum -and $autoNum.InnerText -eq "true") { $piece += ", авто" }
- $parts += $piece
- }
+ # Номер уехал в блок стандартных реквизитов — здесь остаются свойства объекта
if ($posting) {
$parts += "Проведение: $(if ($posting.InnerText -eq 'Allow') { 'да' } else { 'нет' })"
}
@@ -879,10 +1113,17 @@ if (-not $drillDone) {
}
$parts += "Иерархический: $htText"
}
- $codeLen = $props.SelectSingleNode("md:CodeLength", $ns)
- $descLen = $props.SelectSingleNode("md:DescriptionLength", $ns)
- if ($codeLen -and [int]$codeLen.InnerText -gt 0) { $parts += "Код($($codeLen.InnerText))" }
- if ($descLen -and [int]$descLen.InnerText -gt 0) { $parts += "Наименование($($descLen.InnerText))" }
+ # Код и Наименование уехали в блок стандартных реквизитов — здесь только свойства объекта.
+ # Подчинение печатаем лишь когда оно отличается от дефолта ToItems.
+ $sub = $props.SelectSingleNode("md:SubordinationUse", $ns)
+ if ($sub -and $sub.InnerText -ne "ToItems") {
+ $subRu = switch ($sub.InnerText) {
+ "ToFolders" { "группам" }
+ "ToFoldersAndItems" { "группам и элементам" }
+ default { $sub.InnerText }
+ }
+ $parts += "Подчинение: $subRu"
+ }
if ($parts.Count -gt 0) { Out ($parts -join " | ") }
}
@@ -1071,6 +1312,16 @@ if (-not $drillDone) {
}
}
+ # --- Standard attributes ---
+ $stdAttrs = @(Get-StandardAttributes $props $mdType $Mode)
+ if ($Mode -eq "full") { $stdAttrs += @(Get-StandardAttributesFull $props $mdType $objName) }
+ if ($stdAttrs.Count -gt 0) {
+ Out ""
+ Out "Стандартные реквизиты:"
+ $ml = Get-MaxNameLen $stdAttrs
+ foreach ($s in $stdAttrs) { Out (Format-AttrLine $s $ml) }
+ }
+
# --- Dimensions (registers) ---
if ($mdType -match "Register$" -and $childObjs) {
$dims = @(Get-Attributes $childObjs "Dimension" $true)
@@ -1189,6 +1440,13 @@ if (-not $drillDone) {
}
}
}
+
+ # Единственная подсказка на весь вывод — чем развернуть свёрнутый в счётчик состав
+ if ($script:collapsedNames.Count -gt 0) {
+ $hints = ($script:collapsedNames | ForEach-Object { "-Name $_" }) -join ", "
+ Out ""
+ Out "Полный состав типов: $hints"
+ }
}
# --- Pagination and output ---
diff --git a/.claude/skills/meta-info/scripts/meta-info.py b/.claude/skills/meta-info/scripts/meta-info.py
index 47391aa5..f84a5404 100644
--- a/.claude/skills/meta-info/scripts/meta-info.py
+++ b/.claude/skills/meta-info/scripts/meta-info.py
@@ -1,4 +1,4 @@
-# meta-info v1.6 — Compact summary of 1C metadata object (Python port)
+# meta-info v1.7 — Compact summary of 1C metadata object (Python port)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import os
@@ -356,6 +356,190 @@ def format_flags(a_props, is_dimension=False):
return f" [{', '.join(flags)}]"
+# Ссылка на объект метаданных (`Catalog.Валюты` в Owners и подобных) — не тип значения,
+# но в выводе показываем именно тип, который присваивается: СправочникСсылка.Валюты.
+def format_md_object_ref(raw):
+ m = re.match(r'^(\w+)\.(.+)$', raw)
+ if m:
+ key = f"{m.group(1)}Ref"
+ if key in ref_type_map:
+ return f"{ref_type_map[key]}.{m.group(2)}"
+ return raw
+
+
+# ── Стандартные реквизиты ────────────────────────────────────
+
+# Сколько типов состава печатать списком, прежде чем свернуть в счётчик. По корпусу
+# acc/erp/ut/unf состав ПВХ доходит до 151 типа, при этом 20 из 42 ПВХ укладываются в 5.
+COMPOSED_TYPE_THRESHOLD = 5
+
+# Имена полей, состав которых свернули в счётчик, — по ним в конце вывода печатается
+# единственная подсказка, чем состав развернуть.
+collapsed_names = []
+
+# Блок StandardAttributes в XML опционален: платформа материализует его только когда хотя бы
+# один стандартный реквизит кастомизирован (docs/meta-dsl-spec.md §7.1.1). Когда блока нет,
+# действуют платформенные дефолты — профиль ниже совпадает с $stdAttrProfile в meta-compile
+# (выведен из корпуса acc+erp). Правки держать синхронными, иначе навыки разъедутся молча.
+std_attr_required_default = {
+ "Catalog": {"Owner": True, "Description": True},
+ "Document": {"Date": True},
+ "ExchangePlan": {"Description": True, "Code": True},
+ "ChartOfAccounts": {"Description": True, "Code": True},
+ "ChartOfCharacteristicTypes": {"Description": True},
+ "ChartOfCalculationTypes": {"Description": True},
+}
+
+
+def test_std_attr_required(props_node, attr_name, obj_type):
+ fc = find(props_node, f"md:StandardAttributes/xr:StandardAttribute[@name='{attr_name}']/xr:FillChecking")
+ if fc is not None:
+ return inner_text(fc) == "ShowError"
+ return std_attr_required_default.get(obj_type, {}).get(attr_name, False)
+
+
+def new_std_attr(name, type_str, flags):
+ f = [x for x in flags if x]
+ flag_str = f" [{', '.join(f)}]" if f else ""
+ return {"Name": name, "Type": type_str, "Flags": flag_str}
+
+
+# Стандартные реквизиты, наличие и характеристики которых задаются настройками объекта, —
+# их нельзя вывести из остального вывода, поэтому они попадают и в overview. Ссылка,
+# ПометкаУдаления, Родитель и прочее следуют из типа объекта и строки «Иерархический» —
+# они только в full (см. get_standard_attributes_full).
+def get_standard_attributes(props_node, obj_type, mode_name):
+ result = []
+
+ # Владелец — только у подчинённого справочника; состав типов ниоткуда не выводится
+ if obj_type == "Catalog":
+ owners_node = find(props_node, "md:Owners")
+ owner_types = []
+ if owners_node is not None:
+ for it in find_all(owners_node, "xr:Item"):
+ owner_types.append(format_md_object_ref(inner_text(it)))
+ if owner_types:
+ req = "обязательный" if test_std_attr_required(props_node, "Owner", obj_type) else None
+ result.append(new_std_attr("Владелец", ", ".join(owner_types), [req]))
+
+ # ТипЗначения ПВХ — до полутора сотен типов, полный список раздул бы сводку в обоих
+ # режимах, поэтому сворачиваем в счётчик. Состав смотреть через -Name ТипЗначения.
+ if obj_type == "ChartOfCharacteristicTypes":
+ vt = find(props_node, "md:Type")
+ if vt is not None:
+ cnt = len(find_all(vt, "v8:Type")) + len(find_all(vt, "v8:TypeSet"))
+ if cnt > COMPOSED_TYPE_THRESHOLD:
+ type_str = f"Составной ({cnt})"
+ collapsed_names.append("ТипЗначения")
+ else:
+ type_str = format_type(vt)
+ if type_str:
+ result.append(new_std_attr("ТипЗначения", type_str, []))
+
+ # Дата — есть всегда, ценна флагом обязательности
+ if obj_type in ("Document", "BusinessProcess", "Task"):
+ req = "обязательный" if test_std_attr_required(props_node, "Date", obj_type) else None
+ result.append(new_std_attr("Дата", "Дата", [req]))
+
+ # Номер — тип и длина задаются объектом, при NumberLength=0 номера нет
+ if obj_type in ("Document", "BusinessProcess", "Task"):
+ num_len = find(props_node, "md:NumberLength")
+ if num_len is not None and inner_text(num_len).isdigit() and int(inner_text(num_len)) > 0:
+ num_type = find(props_node, "md:NumberType")
+ nt_ru = "Число" if num_type is not None and inner_text(num_type) == "Number" else "Строка"
+ flags = []
+ if test_std_attr_required(props_node, "Number", obj_type):
+ flags.append("обязательный")
+ num_per = find(props_node, "md:NumberPeriodicity")
+ if num_per is not None and inner_text(num_per) in number_period_map:
+ flags.append(number_period_map[inner_text(num_per)])
+ num_allowed = find(props_node, "md:NumberAllowedLength")
+ if num_allowed is not None and inner_text(num_allowed) == "Fixed":
+ flags.append("фикс. длина")
+ auto_num = find(props_node, "md:Autonumbering")
+ if auto_num is not None and inner_text(auto_num) == "true":
+ flags.append("авто")
+ result.append(new_std_attr("Номер", f"{nt_ru}({inner_text(num_len)})", flags))
+
+ # Код — при CodeLength=0 кода у объекта нет вовсе, строку не печатаем
+ code_len = find(props_node, "md:CodeLength")
+ if code_len is not None and inner_text(code_len).isdigit() and int(inner_text(code_len)) > 0:
+ code_type = find(props_node, "md:CodeType")
+ ct_ru = "Число" if code_type is not None and inner_text(code_type) == "Number" else "Строка"
+ flags = []
+ if test_std_attr_required(props_node, "Code", obj_type):
+ flags.append("обязательный")
+ code_allowed = find(props_node, "md:CodeAllowedLength")
+ if code_allowed is not None and inner_text(code_allowed) == "Fixed":
+ flags.append("фикс. длина")
+ result.append(new_std_attr("Код", f"{ct_ru}({inner_text(code_len)})", flags))
+
+ # Наименование — при DescriptionLength=0 наименования нет
+ desc_len = find(props_node, "md:DescriptionLength")
+ if desc_len is not None and inner_text(desc_len).isdigit() and int(inner_text(desc_len)) > 0:
+ req = "обязательный" if test_std_attr_required(props_node, "Description", obj_type) else None
+ result.append(new_std_attr("Наименование", f"Строка({inner_text(desc_len)})", [req]))
+
+ return result
+
+
+# Остальные стандартные реквизиты — предсказуемы по типу объекта, но в full полезны
+# как перечень доступных полей для запроса.
+def get_standard_attributes_full(props_node, obj_type, obj_name):
+ self_ref_map = {
+ "Catalog": "СправочникСсылка",
+ "ChartOfCharacteristicTypes": "ПВХСсылка",
+ "ChartOfAccounts": "ПланСчетовСсылка",
+ "ChartOfCalculationTypes": "ПВРСсылка",
+ "ExchangePlan": "ПланОбменаСсылка",
+ "Document": "ДокументСсылка",
+ "BusinessProcess": "БизнесПроцессСсылка",
+ "Task": "ЗадачаСсылка",
+ }
+ self_ref = f"{self_ref_map[obj_type]}.{obj_name}" if obj_type in self_ref_map else ""
+
+ result = []
+ if self_ref:
+ result.append(new_std_attr("Ссылка", self_ref, []))
+ result.append(new_std_attr("ПометкаУдаления", "Булево", []))
+
+ # Родитель и ЭтоГруппа существуют только у иерархических объектов
+ hier = find(props_node, "md:Hierarchical")
+ is_hier = (hier is not None and inner_text(hier) == "true") or obj_type == "ChartOfAccounts"
+ if is_hier and self_ref:
+ result.append(new_std_attr("Родитель", self_ref, []))
+ ht = find(props_node, "md:HierarchyType")
+ if obj_type == "Catalog" and (ht is None or inner_text(ht) == "HierarchyFoldersAndItems"):
+ result.append(new_std_attr("ЭтоГруппа", "Булево", []))
+
+ if obj_type == "Document":
+ result.append(new_std_attr("Проведен", "Булево", []))
+ elif obj_type == "ExchangePlan":
+ result.append(new_std_attr("ЭтотУзел", "Булево", []))
+ result.append(new_std_attr("НомерОтправленного", "Число", []))
+ result.append(new_std_attr("НомерПринятого", "Число", []))
+ elif obj_type == "BusinessProcess":
+ result.append(new_std_attr("Стартован", "Булево", []))
+ result.append(new_std_attr("Завершен", "Булево", []))
+ result.append(new_std_attr("ВедущаяЗадача", "ЗадачаСсылка", []))
+ elif obj_type == "Task":
+ result.append(new_std_attr("Выполнена", "Булево", []))
+ result.append(new_std_attr("БизнесПроцесс", "БизнесПроцессСсылка", []))
+ result.append(new_std_attr("ТочкаМаршрута", "БизнесПроцессТочкаМаршрутаСсылка", []))
+ elif obj_type == "ChartOfAccounts":
+ result.append(new_std_attr("Вид", "ВидСчета", []))
+ result.append(new_std_attr("Забалансовый", "Булево", []))
+ result.append(new_std_attr("Порядок", "Число", []))
+ elif obj_type == "ChartOfCalculationTypes":
+ result.append(new_std_attr("ПериодДействияБазовый", "Булево", []))
+
+ # Предопределённые данные есть у всех перечисленных типов, кроме документов и задач
+ if obj_type in ("Catalog", "ChartOfCharacteristicTypes", "ChartOfAccounts", "ChartOfCalculationTypes"):
+ result.append(new_std_attr("Предопределенный", "Булево", []))
+ result.append(new_std_attr("ИмяПредопределенныхДанных", "Строка", []))
+ return result
+
+
def get_attributes(parent_node, child_tag="Attribute", is_dimension=False):
result = []
for attr in find_all(parent_node, f"md:{child_tag}"):
@@ -723,6 +907,44 @@ if drill_name and child_objs is not None:
drill_done = True
break
+ # Не нашли среди дочерних объектов — пробуем стандартные реквизиты ниже
+
+# Drill-down по стандартному реквизиту — единственный способ увидеть состав типов целиком,
+# когда в сводке он свёрнут в счётчик. Живёт в Properties, а не в ChildObjects, поэтому идёт
+# отдельной веткой и работает даже у объектов без ChildObjects.
+if drill_name and not drill_done:
+ std_all = get_standard_attributes(props, md_type, "full") + get_standard_attributes_full(props, md_type, obj_name)
+ for s in std_all:
+ if s["Name"] != drill_name:
+ continue
+ out(f"Стандартный реквизит: {s['Name']}")
+
+ # Состав типов разворачиваем списком: ради этого drill-down и нужен
+ type_list = []
+ type_src = find(props, "md:Type") if drill_name == "ТипЗначения" else None
+ if type_src is not None:
+ for t in find_all(type_src, "v8:Type"):
+ type_list.append(format_single_type(inner_text(t), type_src))
+ for t in find_all(type_src, "v8:TypeSet"):
+ type_list.append(format_single_type_set(inner_text(t)))
+ elif drill_name == "Владелец":
+ owners_node = find(props, "md:Owners")
+ if owners_node is not None:
+ for it in find_all(owners_node, "xr:Item"):
+ type_list.append(format_md_object_ref(inner_text(it)))
+
+ if type_list:
+ out(f" Типы ({len(type_list)}):")
+ for t in type_list:
+ out(f" {t}")
+ else:
+ out(f" Тип: {s['Type']}")
+ flag_text = s["Flags"].strip()
+ if flag_text:
+ out(f" Свойства: {flag_text.strip('[]')}")
+ drill_done = True
+ break
+
if not drill_done:
print(f"[ERROR] '{drill_name}' not found in {obj_name}")
sys.exit(1)
@@ -754,6 +976,18 @@ if not drill_done:
out(f"Расширенное представление списка: {ext_list_presentation}")
if mode == "brief":
+ # Подчинённость — единственный факт структуры, который из brief не выводится никак,
+ # а без него код записи элемента падает. Про обязательность здесь намеренно молчим:
+ # обязательными бывают и обычные реквизиты, а их brief не разбирает.
+ if md_type == "Catalog":
+ owners_node = find(props, "md:Owners")
+ owner_names = []
+ if owners_node is not None:
+ for it in find_all(owners_node, "xr:Item"):
+ owner_names.append(re.sub(r'^\w+\.', '', inner_text(it)))
+ if owner_names:
+ out(f"Подчинён: {', '.join(owner_names)}")
+
# Attributes
attrs = get_attributes(child_objs) if child_objs is not None else []
if attrs:
@@ -883,21 +1117,9 @@ if not drill_done:
# Document-specific header
if md_type == "Document":
- num_type = find(props, "md:NumberType")
- num_len = find(props, "md:NumberLength")
- num_per = find(props, "md:NumberPeriodicity")
- auto_num = find(props, "md:Autonumbering")
posting = find(props, "md:Posting")
parts = []
- if num_type is not None and num_len is not None:
- nt = "Строка" if inner_text(num_type) == "String" else "Число"
- piece = f"Номер: {nt}({inner_text(num_len)})"
- if num_per is not None:
- per_ru = number_period_map.get(inner_text(num_per), inner_text(num_per))
- piece += f", {per_ru}"
- if auto_num is not None and inner_text(auto_num) == "true":
- piece += ", авто"
- parts.append(piece)
+ # Номер уехал в блок стандартных реквизитов — здесь остаются свойства объекта
if posting is not None:
parts.append(f"Проведение: {'да' if inner_text(posting) == 'Allow' else 'нет'}")
if parts:
@@ -917,12 +1139,13 @@ if not drill_done:
else:
ht_text += ", без ограничения уровней"
parts.append(f"Иерархический: {ht_text}")
- code_len = find(props, "md:CodeLength")
- desc_len = find(props, "md:DescriptionLength")
- if code_len is not None and inner_text(code_len).isdigit() and int(inner_text(code_len)) > 0:
- parts.append(f"Код({inner_text(code_len)})")
- if desc_len is not None and inner_text(desc_len).isdigit() and int(inner_text(desc_len)) > 0:
- parts.append(f"Наименование({inner_text(desc_len)})")
+ # Код и Наименование уехали в блок стандартных реквизитов — здесь только свойства объекта.
+ # Подчинение печатаем лишь когда оно отличается от дефолта ToItems.
+ sub = find(props, "md:SubordinationUse")
+ if sub is not None and inner_text(sub) != "ToItems":
+ sub_ru = {"ToFolders": "группам", "ToFoldersAndItems": "группам и элементам"}.get(
+ inner_text(sub), inner_text(sub))
+ parts.append(f"Подчинение: {sub_ru}")
if parts:
out(" | ".join(parts))
@@ -1085,6 +1308,17 @@ if not drill_done:
syn_text = f'"{v["Synonym"]}"' if v["Synonym"] and v["Synonym"] != v["Name"] else ""
out(f" {padded} {syn_text}")
+ # Standard attributes
+ std_attrs = get_standard_attributes(props, md_type, mode)
+ if mode == "full":
+ std_attrs += get_standard_attributes_full(props, md_type, obj_name)
+ if std_attrs:
+ out("")
+ out("Стандартные реквизиты:")
+ ml = get_max_name_len(std_attrs)
+ for s in std_attrs:
+ out(format_attr_line(s, ml))
+
# Dimensions (registers)
if md_type.endswith("Register") and child_objs is not None:
dims = get_attributes(child_objs, "Dimension", True)
@@ -1192,6 +1426,12 @@ if not drill_done:
if commands:
out(f"Команды: {', '.join(commands)}")
+ # Единственная подсказка на весь вывод — чем развернуть свёрнутый в счётчик состав
+ if collapsed_names:
+ hints = ", ".join(f"-Name {n}" for n in collapsed_names)
+ out("")
+ out(f"Полный состав типов: {hints}")
+
# ── Pagination and output ────────────────────────────────────
total_lines = len(lines)
diff --git a/tests/skills/cases/meta-info/catalog-numeric-code.json b/tests/skills/cases/meta-info/catalog-numeric-code.json
new file mode 100644
index 00000000..cee40964
--- /dev/null
+++ b/tests/skills/cases/meta-info/catalog-numeric-code.json
@@ -0,0 +1,22 @@
+{
+ "name": "Числовой код и отсутствующее наименование",
+ "setup": "empty-config",
+ "preRun": [
+ {
+ "script": "meta-compile/scripts/meta-compile",
+ "input": {
+ "type": "Catalog",
+ "name": "ВерсииРасширений",
+ "codeType": "Number",
+ "codeLength": 9,
+ "descriptionLength": 0
+ },
+ "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
+ }
+ ],
+ "params": { "objectPath": "Catalogs/ВерсииРасширений" },
+ "expect": {
+ "stdoutContains": ["Стандартные реквизиты:", "Код", "Число(9)"],
+ "stdoutNotContains": ["Наименование", "Владелец", "Строка(9)"]
+ }
+}
diff --git a/tests/skills/cases/meta-info/catalog-subordinate-brief.json b/tests/skills/cases/meta-info/catalog-subordinate-brief.json
new file mode 100644
index 00000000..80f23c9d
--- /dev/null
+++ b/tests/skills/cases/meta-info/catalog-subordinate-brief.json
@@ -0,0 +1,26 @@
+{
+ "name": "brief подчинённого справочника сообщает о подчинённости",
+ "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": "Catalog",
+ "name": "БанковскиеСчета",
+ "owners": ["Catalog.Контрагенты"]
+ },
+ "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
+ }
+ ],
+ "params": { "objectPath": "Catalogs/БанковскиеСчета" },
+ "args_extra": ["-Mode", "brief"],
+ "expect": {
+ "stdoutContains": ["Подчинён: Контрагенты"],
+ "stdoutNotContains": ["Стандартные реквизиты:", "обязательный"]
+ }
+}
diff --git a/tests/skills/cases/meta-info/catalog-subordinate.json b/tests/skills/cases/meta-info/catalog-subordinate.json
new file mode 100644
index 00000000..53fac1b0
--- /dev/null
+++ b/tests/skills/cases/meta-info/catalog-subordinate.json
@@ -0,0 +1,40 @@
+{
+ "name": "Подчинённый справочник — владелец и его обязательность",
+ "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": "Catalog",
+ "name": "БанковскиеСчета",
+ "owners": ["Catalog.Контрагенты"],
+ "subordinationUse": "ToFoldersAndItems",
+ "codeLength": 9,
+ "descriptionLength": 100
+ },
+ "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
+ }
+ ],
+ "params": { "objectPath": "Catalogs/БанковскиеСчета" },
+ "expect": {
+ "stdoutContains": [
+ "Стандартные реквизиты:",
+ "Владелец",
+ "СправочникСсылка.Контрагенты",
+ "обязательный",
+ "Подчинение: группам и элементам",
+ "Код",
+ "Строка(9)",
+ "Наименование",
+ "Строка(100)"
+ ]
+ }
+}
diff --git a/tests/skills/cases/meta-info/document-standard-attrs.json b/tests/skills/cases/meta-info/document-standard-attrs.json
new file mode 100644
index 00000000..1a444532
--- /dev/null
+++ b/tests/skills/cases/meta-info/document-standard-attrs.json
@@ -0,0 +1,31 @@
+{
+ "name": "Документ — Дата и Номер в блоке, а не в шапке",
+ "setup": "empty-config",
+ "preRun": [
+ {
+ "script": "meta-compile/scripts/meta-compile",
+ "input": {
+ "type": "Document",
+ "name": "АвансовыйОтчет",
+ "numberType": "String",
+ "numberLength": 11,
+ "numberPeriodicity": "Year",
+ "autonumbering": true
+ },
+ "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
+ }
+ ],
+ "params": { "objectPath": "Documents/АвансовыйОтчет" },
+ "expect": {
+ "stdoutContains": [
+ "Стандартные реквизиты:",
+ "Дата",
+ "обязательный",
+ "Номер",
+ "Строка(11)",
+ "по году",
+ "авто"
+ ],
+ "stdoutNotContains": ["Номер: Строка(11)"]
+ }
+}
diff --git a/tests/skills/cases/meta-info/drilldown-owner.json b/tests/skills/cases/meta-info/drilldown-owner.json
new file mode 100644
index 00000000..95d9017f
--- /dev/null
+++ b/tests/skills/cases/meta-info/drilldown-owner.json
@@ -0,0 +1,37 @@
+{
+ "name": "Drill-down по стандартному реквизиту Владелец",
+ "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": "Catalog", "name": "Организации" },
+ "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
+ },
+ {
+ "script": "meta-compile/scripts/meta-compile",
+ "input": {
+ "type": "Catalog",
+ "name": "БанковскиеСчета",
+ "owners": ["Catalog.Контрагенты", "Catalog.Организации"]
+ },
+ "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
+ }
+ ],
+ "params": { "objectPath": "Catalogs/БанковскиеСчета" },
+ "args_extra": ["-Name", "Владелец"],
+ "expect": {
+ "stdoutContains": [
+ "Стандартный реквизит: Владелец",
+ "Типы (2):",
+ "СправочникСсылка.Контрагенты",
+ "СправочникСсылка.Организации",
+ "Свойства: обязательный"
+ ],
+ "stdoutNotContains": ["Реквизиты ("]
+ }
+}
diff --git a/tests/skills/cases/meta-info/real-acc-cct-value-type.json b/tests/skills/cases/meta-info/real-acc-cct-value-type.json
new file mode 100644
index 00000000..eba011cf
--- /dev/null
+++ b/tests/skills/cases/meta-info/real-acc-cct-value-type.json
@@ -0,0 +1,14 @@
+{
+ "name": "ПВХ — составной ТипЗначения сворачивается в счётчик",
+ "setup": "external:C:/WS/tasks/cfsrc/acc_8.3.24",
+ "params": { "objectPath": "ChartsOfCharacteristicTypes/ВидыСубконтоХозрасчетные" },
+ "expect": {
+ "stdoutContains": [
+ "Стандартные реквизиты:",
+ "ТипЗначения",
+ "Составной (110)",
+ "Полный состав типов: -Name ТипЗначения"
+ ],
+ "stdoutNotContains": ["cfg:"]
+ }
+}
diff --git a/tests/skills/cases/meta-info/snapshots/catalog-numeric-code/Catalogs/ВерсииРасширений.xml b/tests/skills/cases/meta-info/snapshots/catalog-numeric-code/Catalogs/ВерсииРасширений.xml
new file mode 100644
index 00000000..df679795
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/catalog-numeric-code/Catalogs/ВерсииРасширений.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+ UUID-008
+ UUID-009
+
+
+ UUID-010
+ UUID-011
+
+
+
+ ВерсииРасширений
+
+
+ ru
+ Версии расширений
+
+
+
+ false
+ HierarchyFoldersAndItems
+ false
+ 2
+ true
+ true
+
+ ToItems
+ 9
+ 0
+ Number
+ Variable
+ WholeCatalog
+ false
+ true
+ AsDescription
+
+ Auto
+ InDialog
+ false
+ BothWays
+
+ Catalog.ВерсииРасширений.StandardAttribute.Code
+
+ Begin
+ DontUse
+ Directly
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+ Managed
+ Use
+
+
+
+
+
+ Use
+ Auto
+ DontUse
+ false
+ false
+
+
+
+
diff --git a/tests/skills/cases/meta-info/snapshots/catalog-numeric-code/Catalogs/ВерсииРасширений/Ext/ObjectModule.bsl b/tests/skills/cases/meta-info/snapshots/catalog-numeric-code/Catalogs/ВерсииРасширений/Ext/ObjectModule.bsl
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/skills/cases/meta-info/snapshots/catalog-numeric-code/Configuration.xml b/tests/skills/cases/meta-info/snapshots/catalog-numeric-code/Configuration.xml
new file mode 100644
index 00000000..39e74a82
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/catalog-numeric-code/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
+
+
+
+ Русский
+ ВерсииРасширений
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/catalog-numeric-code/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-info/snapshots/catalog-numeric-code/Ext/ClientApplicationInterface.xml
new file mode 100644
index 00000000..3c1161b2
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/catalog-numeric-code/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ UUID-002
+
+
+
+
+ UUID-004
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/catalog-numeric-code/Languages/Русский.xml b/tests/skills/cases/meta-info/snapshots/catalog-numeric-code/Languages/Русский.xml
new file mode 100644
index 00000000..37c60d78
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/catalog-numeric-code/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/catalog-subordinate-brief/Catalogs/БанковскиеСчета.xml b/tests/skills/cases/meta-info/snapshots/catalog-subordinate-brief/Catalogs/БанковскиеСчета.xml
new file mode 100644
index 00000000..ea22a0ef
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/catalog-subordinate-brief/Catalogs/БанковскиеСчета.xml
@@ -0,0 +1,93 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+ UUID-008
+ UUID-009
+
+
+ UUID-010
+ UUID-011
+
+
+
+ БанковскиеСчета
+
+
+ ru
+ Банковские счета
+
+
+
+ false
+ HierarchyFoldersAndItems
+ false
+ 2
+ true
+ true
+
+ Catalog.Контрагенты
+
+ 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
+
+
+
+
diff --git a/tests/skills/cases/meta-info/snapshots/catalog-subordinate-brief/Catalogs/БанковскиеСчета/Ext/ObjectModule.bsl b/tests/skills/cases/meta-info/snapshots/catalog-subordinate-brief/Catalogs/БанковскиеСчета/Ext/ObjectModule.bsl
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/skills/cases/meta-info/snapshots/catalog-subordinate-brief/Catalogs/Контрагенты.xml b/tests/skills/cases/meta-info/snapshots/catalog-subordinate-brief/Catalogs/Контрагенты.xml
new file mode 100644
index 00000000..3c42df5f
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/catalog-subordinate-brief/Catalogs/Контрагенты.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+ UUID-008
+ UUID-009
+
+
+ UUID-010
+ UUID-011
+
+
+
+ Контрагенты
+
+
+ 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
+
+
+
+
diff --git a/tests/skills/cases/meta-info/snapshots/catalog-subordinate-brief/Catalogs/Контрагенты/Ext/ObjectModule.bsl b/tests/skills/cases/meta-info/snapshots/catalog-subordinate-brief/Catalogs/Контрагенты/Ext/ObjectModule.bsl
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/skills/cases/meta-info/snapshots/catalog-subordinate-brief/Configuration.xml b/tests/skills/cases/meta-info/snapshots/catalog-subordinate-brief/Configuration.xml
new file mode 100644
index 00000000..3093dee4
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/catalog-subordinate-brief/Configuration.xml
@@ -0,0 +1,253 @@
+
+
+
+
+
+ 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
+
+
+
+ Русский
+ Контрагенты
+ БанковскиеСчета
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/catalog-subordinate-brief/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-info/snapshots/catalog-subordinate-brief/Ext/ClientApplicationInterface.xml
new file mode 100644
index 00000000..3c1161b2
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/catalog-subordinate-brief/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ UUID-002
+
+
+
+
+ UUID-004
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/catalog-subordinate-brief/Languages/Русский.xml b/tests/skills/cases/meta-info/snapshots/catalog-subordinate-brief/Languages/Русский.xml
new file mode 100644
index 00000000..37c60d78
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/catalog-subordinate-brief/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/catalog-subordinate/Catalogs/БанковскиеСчета.xml b/tests/skills/cases/meta-info/snapshots/catalog-subordinate/Catalogs/БанковскиеСчета.xml
new file mode 100644
index 00000000..e5abfce4
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/catalog-subordinate/Catalogs/БанковскиеСчета.xml
@@ -0,0 +1,93 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+ UUID-008
+ UUID-009
+
+
+ UUID-010
+ UUID-011
+
+
+
+ БанковскиеСчета
+
+
+ ru
+ Банковские счета
+
+
+
+ false
+ HierarchyFoldersAndItems
+ false
+ 2
+ true
+ true
+
+ Catalog.Контрагенты
+
+ ToFoldersAndItems
+ 9
+ 100
+ 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
+
+
+
+
diff --git a/tests/skills/cases/meta-info/snapshots/catalog-subordinate/Catalogs/БанковскиеСчета/Ext/ObjectModule.bsl b/tests/skills/cases/meta-info/snapshots/catalog-subordinate/Catalogs/БанковскиеСчета/Ext/ObjectModule.bsl
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/skills/cases/meta-info/snapshots/catalog-subordinate/Catalogs/Контрагенты.xml b/tests/skills/cases/meta-info/snapshots/catalog-subordinate/Catalogs/Контрагенты.xml
new file mode 100644
index 00000000..3c42df5f
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/catalog-subordinate/Catalogs/Контрагенты.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+ UUID-008
+ UUID-009
+
+
+ UUID-010
+ UUID-011
+
+
+
+ Контрагенты
+
+
+ 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
+
+
+
+
diff --git a/tests/skills/cases/meta-info/snapshots/catalog-subordinate/Catalogs/Контрагенты/Ext/ObjectModule.bsl b/tests/skills/cases/meta-info/snapshots/catalog-subordinate/Catalogs/Контрагенты/Ext/ObjectModule.bsl
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/skills/cases/meta-info/snapshots/catalog-subordinate/Configuration.xml b/tests/skills/cases/meta-info/snapshots/catalog-subordinate/Configuration.xml
new file mode 100644
index 00000000..3093dee4
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/catalog-subordinate/Configuration.xml
@@ -0,0 +1,253 @@
+
+
+
+
+
+ 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
+
+
+
+ Русский
+ Контрагенты
+ БанковскиеСчета
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/catalog-subordinate/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-info/snapshots/catalog-subordinate/Ext/ClientApplicationInterface.xml
new file mode 100644
index 00000000..3c1161b2
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/catalog-subordinate/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ UUID-002
+
+
+
+
+ UUID-004
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/catalog-subordinate/Languages/Русский.xml b/tests/skills/cases/meta-info/snapshots/catalog-subordinate/Languages/Русский.xml
new file mode 100644
index 00000000..37c60d78
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/catalog-subordinate/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/document-standard-attrs/Configuration.xml b/tests/skills/cases/meta-info/snapshots/document-standard-attrs/Configuration.xml
new file mode 100644
index 00000000..e63c3b0e
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/document-standard-attrs/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
+
+
+
+ Русский
+ АвансовыйОтчет
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/document-standard-attrs/Documents/АвансовыйОтчет.xml b/tests/skills/cases/meta-info/snapshots/document-standard-attrs/Documents/АвансовыйОтчет.xml
new file mode 100644
index 00000000..24ad20bd
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/document-standard-attrs/Documents/АвансовыйОтчет.xml
@@ -0,0 +1,82 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+ UUID-008
+ UUID-009
+
+
+ UUID-010
+ UUID-011
+
+
+
+ АвансовыйОтчет
+
+
+ ru
+ Авансовый отчет
+
+
+
+ true
+
+ String
+ 11
+ Variable
+ Year
+ true
+ true
+
+
+
+ Document.АвансовыйОтчет.StandardAttribute.Number
+
+ Use
+ Begin
+ DontUse
+ Directly
+
+
+
+
+
+
+ Allow
+ Deny
+ AutoDelete
+ WriteSelected
+ AutoFill
+
+ true
+ true
+ false
+
+ Managed
+ Use
+
+
+
+
+
+ Auto
+ DontUse
+ false
+ false
+
+
+
+
diff --git a/tests/skills/cases/meta-info/snapshots/document-standard-attrs/Documents/АвансовыйОтчет/Ext/ObjectModule.bsl b/tests/skills/cases/meta-info/snapshots/document-standard-attrs/Documents/АвансовыйОтчет/Ext/ObjectModule.bsl
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/skills/cases/meta-info/snapshots/document-standard-attrs/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-info/snapshots/document-standard-attrs/Ext/ClientApplicationInterface.xml
new file mode 100644
index 00000000..3c1161b2
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/document-standard-attrs/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ UUID-002
+
+
+
+
+ UUID-004
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/document-standard-attrs/Languages/Русский.xml b/tests/skills/cases/meta-info/snapshots/document-standard-attrs/Languages/Русский.xml
new file mode 100644
index 00000000..37c60d78
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/document-standard-attrs/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/drilldown-owner/Catalogs/БанковскиеСчета.xml b/tests/skills/cases/meta-info/snapshots/drilldown-owner/Catalogs/БанковскиеСчета.xml
new file mode 100644
index 00000000..72be27cc
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/drilldown-owner/Catalogs/БанковскиеСчета.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
+
+
+
+ БанковскиеСчета
+
+
+ ru
+ Банковские счета
+
+
+
+ false
+ HierarchyFoldersAndItems
+ false
+ 2
+ true
+ true
+
+ Catalog.Контрагенты
+ Catalog.Организации
+
+ 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
+
+
+
+
diff --git a/tests/skills/cases/meta-info/snapshots/drilldown-owner/Catalogs/БанковскиеСчета/Ext/ObjectModule.bsl b/tests/skills/cases/meta-info/snapshots/drilldown-owner/Catalogs/БанковскиеСчета/Ext/ObjectModule.bsl
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/skills/cases/meta-info/snapshots/drilldown-owner/Catalogs/Контрагенты.xml b/tests/skills/cases/meta-info/snapshots/drilldown-owner/Catalogs/Контрагенты.xml
new file mode 100644
index 00000000..3c42df5f
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/drilldown-owner/Catalogs/Контрагенты.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+ UUID-008
+ UUID-009
+
+
+ UUID-010
+ UUID-011
+
+
+
+ Контрагенты
+
+
+ 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
+
+
+
+
diff --git a/tests/skills/cases/meta-info/snapshots/drilldown-owner/Catalogs/Контрагенты/Ext/ObjectModule.bsl b/tests/skills/cases/meta-info/snapshots/drilldown-owner/Catalogs/Контрагенты/Ext/ObjectModule.bsl
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/skills/cases/meta-info/snapshots/drilldown-owner/Catalogs/Организации.xml b/tests/skills/cases/meta-info/snapshots/drilldown-owner/Catalogs/Организации.xml
new file mode 100644
index 00000000..8f50ee35
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/drilldown-owner/Catalogs/Организации.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+ UUID-008
+ UUID-009
+
+
+ UUID-010
+ UUID-011
+
+
+
+ Организации
+
+
+ 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
+
+
+
+
diff --git a/tests/skills/cases/meta-info/snapshots/drilldown-owner/Catalogs/Организации/Ext/ObjectModule.bsl b/tests/skills/cases/meta-info/snapshots/drilldown-owner/Catalogs/Организации/Ext/ObjectModule.bsl
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/skills/cases/meta-info/snapshots/drilldown-owner/Configuration.xml b/tests/skills/cases/meta-info/snapshots/drilldown-owner/Configuration.xml
new file mode 100644
index 00000000..79714163
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/drilldown-owner/Configuration.xml
@@ -0,0 +1,254 @@
+
+
+
+
+
+ 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
+
+
+
+ Русский
+ Контрагенты
+ Организации
+ БанковскиеСчета
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/drilldown-owner/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-info/snapshots/drilldown-owner/Ext/ClientApplicationInterface.xml
new file mode 100644
index 00000000..3c1161b2
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/drilldown-owner/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ UUID-002
+
+
+
+
+ UUID-004
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/drilldown-owner/Languages/Русский.xml b/tests/skills/cases/meta-info/snapshots/drilldown-owner/Languages/Русский.xml
new file mode 100644
index 00000000..37c60d78
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/drilldown-owner/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file