diff --git a/.claude/skills/meta-info/scripts/meta-info.ps1 b/.claude/skills/meta-info/scripts/meta-info.ps1
index 567a07a08..a1c3c657f 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.11 — Compact summary of 1C metadata object
+# meta-info v1.12 — Compact summary of 1C metadata object
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
@@ -104,6 +104,7 @@ $typeNameMap = @{
"DefinedType"="Определяемый тип"; "CommonModule"="Общий модуль"
"ScheduledJob"="Регламентное задание"; "EventSubscription"="Подписка на событие"
"HTTPService"="HTTP-сервис"; "WebService"="Веб-сервис"
+ "ExternalDataSource"="Внешний источник данных"; "Table"="Таблица внешнего источника"
}
$refTypeMap = @{
@@ -112,6 +113,7 @@ $refTypeMap = @{
"ChartOfCharacteristicTypesRef"="ПВХСсылка"; "ChartOfCalculationTypesRef"="ПВРСсылка"
"ExchangePlanRef"="ПланОбменаСсылка"; "BusinessProcessRef"="БизнесПроцессСсылка"
"TaskRef"="ЗадачаСсылка"
+ "ExternalDataSourceTableRef"="ВнешнийИсточникДанныхТаблицаСсылка"
}
$regTypeMap = @{
@@ -231,6 +233,7 @@ function Format-SingleType([string]$raw, $parentNode) {
}
"v8:ValueStorage" { return "ХранилищеЗначения" }
"v8:UUID" { return "УникальныйИдентификатор" }
+ "xs:base64Binary" { return "ДвоичныеДанные" }
"v8:Null" { return "Null" }
default {
# Normalize d5p1:/dNpN: -> cfg:
@@ -1347,6 +1350,80 @@ if (-not $drillDone) {
}
}
+ # --- Внешний источник данных: таблицы и функции ---
+ if ($mdType -eq "ExternalDataSource") {
+ $dlcm = $props.SelectSingleNode("md:DataLockControlMode", $ns)
+ if ($dlcm) { Out "Блокировка данных: $($dlcm.InnerText)" }
+ if ($childObjs) {
+ $tables = @(Get-SimpleChildren $childObjs "Table")
+ if ($tables.Count -gt 0) {
+ Out ""
+ Out "Таблицы ($($tables.Count)): $($tables -join ', ')"
+ }
+ $fns = @($childObjs.SelectNodes("md:Function", $ns))
+ if ($fns.Count -gt 0) {
+ Out ""
+ Out "Функции ($($fns.Count)):"
+ foreach ($fn in $fns) {
+ $fp = $fn.SelectSingleNode("md:Properties", $ns)
+ $fnName = $fp.SelectSingleNode("md:Name", $ns).InnerText
+ $fnExpr = $fp.SelectSingleNode("md:ExpressionInDataSource", $ns)
+ $fnType = Format-Type $fp.SelectSingleNode("md:Type", $ns)
+ $retNode = $fp.SelectSingleNode("md:ReturnValue", $ns)
+ $ret = if ($retNode -and $retNode.InnerText -eq "false") { "процедура" } else { $fnType }
+ Out " $fnName → $(if ($fnExpr) { $fnExpr.InnerText })$(if ($ret) { " : $ret" })"
+ }
+ }
+ }
+ }
+
+ # --- Таблица внешнего источника: свойства и поля ---
+ if ($mdType -eq "Table") {
+ $g = { param($tag) $n = $props.SelectSingleNode("md:$tag", $ns); if ($n) { $n.InnerText } else { "" } }
+ $short = { param($ref) if ($ref) { ($ref -split '\.')[-1] } else { "" } }
+
+ $head = @()
+ $tableType = & $g "TableType"
+ $head += "Вид: $(if ($tableType -eq 'Expression') { 'выражение' } else { 'таблица' })"
+ $src = if ($tableType -eq "Expression") { & $g "ExpressionInDataSource" } else { & $g "NameInDataSource" }
+ if ($src) { $head += "в источнике: $src" }
+ $head += "данные: $(if ((& $g 'TableDataType') -eq 'ObjectData') { 'объектные' } else { 'необъектные' })"
+ if ((& $g "ReadOnly") -eq "true") { $head += "только чтение" }
+ Out ($head -join " | ")
+
+ $keys = @($props.SelectNodes("md:KeyFields/xr:Field", $ns) | ForEach-Object { & $short $_.InnerText })
+ $refs = @()
+ if ($keys.Count -gt 0) { $refs += "ключ: $($keys -join ', ')" }
+ foreach ($pair in @(@("PresentationField","представление"), @("ParentField","родитель"), @("DataVersionField","версия данных"))) {
+ $v = & $short (& $g $pair[0])
+ if ($v) { $refs += "$($pair[1]): $v" }
+ }
+ $ibs = @($props.SelectNodes("md:InputByString/xr:Field", $ns) | ForEach-Object { & $short $_.InnerText })
+ if ($ibs.Count -gt 0) { $refs += "ввод по строке: $($ibs -join ', ')" }
+ if ($refs.Count -gt 0) { Out ($refs -join " | ") }
+
+ if ($childObjs) {
+ $fields = @(Get-Attributes $childObjs "Field")
+ if ($fields.Count -gt 0) {
+ Out ""
+ Out "Поля ($($fields.Count)):"
+ $ml = Get-MaxNameLen $fields
+ foreach ($f in $fields) {
+ $fp = $f.Props
+ $marks = @()
+ $nids = $fp.SelectSingleNode("md:NameInDataSource", $ns)
+ if ($nids -and $nids.InnerText -and $nids.InnerText -ne $f.Name) { $marks += "→ $($nids.InnerText)" }
+ $ro = $fp.SelectSingleNode("md:ReadOnly", $ns)
+ if ($ro -and $ro.InnerText -eq "true") { $marks += "только чтение" }
+ $an = $fp.SelectSingleNode("md:AllowNull", $ns)
+ if ($an -and $an.InnerText -eq "true") { $marks += "NULL" }
+ $tail = if ($marks.Count -gt 0) { " [$($marks -join ', ')]" } else { "" }
+ Out (" $($f.Name.PadRight($ml)) $($f.Type)$tail")
+ }
+ }
+ }
+ }
+
# --- Attributes ---
if ($childObjs -and $mdType -ne "Enum") {
$attrs = @(Get-Attributes $childObjs)
diff --git a/.claude/skills/meta-info/scripts/meta-info.py b/.claude/skills/meta-info/scripts/meta-info.py
index cf76bbd0f..cc3ad9e20 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.11 — Compact summary of 1C metadata object (Python port)
+# meta-info v1.12 — Compact summary of 1C metadata object (Python port)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import os
@@ -177,6 +177,7 @@ type_name_map = {
"DefinedType": "Определяемый тип", "CommonModule": "Общий модуль",
"ScheduledJob": "Регламентное задание", "EventSubscription": "Подписка на событие",
"HTTPService": "HTTP-сервис", "WebService": "Веб-сервис",
+ "ExternalDataSource": "Внешний источник данных", "Table": "Таблица внешнего источника",
}
ref_type_map = {
@@ -185,6 +186,7 @@ ref_type_map = {
"ChartOfCharacteristicTypesRef": "ПВХСсылка", "ChartOfCalculationTypesRef": "ПВРСсылка",
"ExchangePlanRef": "ПланОбменаСсылка", "BusinessProcessRef": "БизнесПроцессСсылка",
"TaskRef": "ЗадачаСсылка",
+ "ExternalDataSourceTableRef": "ВнешнийИсточникДанныхТаблицаСсылка",
}
reg_type_map = {
@@ -317,6 +319,8 @@ def format_single_type(raw, parent_node):
return "ХранилищеЗначения"
if raw == "v8:UUID":
return "УникальныйИдентификатор"
+ if raw == "xs:base64Binary":
+ return "ДвоичныеДанные"
if raw == "v8:Null":
return "Null"
# Normalize d5p1:/dNpN: → cfg: (both map to same namespace)
@@ -1363,6 +1367,85 @@ if not drill_done:
for r in res:
out(format_attr_line(r, ml))
+ # Внешний источник данных: таблицы и функции
+ if md_type == "ExternalDataSource":
+ dlcm = props.find("md:DataLockControlMode", NS)
+ if dlcm is not None:
+ out(f"Блокировка данных: {dlcm.text or ''}")
+ if child_objs is not None:
+ tables = get_simple_children(child_objs, "Table")
+ if tables:
+ out("")
+ out(f"Таблицы ({len(tables)}): {', '.join(tables)}")
+ fns = child_objs.findall("md:Function", NS)
+ if fns:
+ out("")
+ out(f"Функции ({len(fns)}):")
+ for fn in fns:
+ fp = fn.find("md:Properties", NS)
+ fn_name = fp.find("md:Name", NS).text or ""
+ fn_expr = fp.find("md:ExpressionInDataSource", NS)
+ fn_type = format_type(fp.find("md:Type", NS))
+ ret_node = fp.find("md:ReturnValue", NS)
+ ret = "процедура" if (ret_node is not None and ret_node.text == "false") else fn_type
+ expr = (fn_expr.text or "") if fn_expr is not None else ""
+ out(f" {fn_name} → {expr}" + (f" : {ret}" if ret else ""))
+
+ # Таблица внешнего источника: свойства и поля
+ if md_type == "Table":
+ def _g(tag):
+ n = props.find(f"md:{tag}", NS)
+ return (n.text or "") if n is not None else ""
+
+ def _short(ref):
+ return ref.split(".")[-1] if ref else ""
+
+ table_type = _g("TableType")
+ head = ["Вид: " + ("выражение" if table_type == "Expression" else "таблица")]
+ src = _g("ExpressionInDataSource") if table_type == "Expression" else _g("NameInDataSource")
+ if src:
+ head.append(f"в источнике: {src}")
+ head.append("данные: " + ("объектные" if _g("TableDataType") == "ObjectData" else "необъектные"))
+ if _g("ReadOnly") == "true":
+ head.append("только чтение")
+ out(" | ".join(head))
+
+ keys = [_short(f.text) for f in props.findall("md:KeyFields/xr:Field", NS)]
+ refs = []
+ if keys:
+ refs.append(f"ключ: {', '.join(keys)}")
+ for tag, label in (("PresentationField", "представление"), ("ParentField", "родитель"),
+ ("DataVersionField", "версия данных")):
+ v = _short(_g(tag))
+ if v:
+ refs.append(f"{label}: {v}")
+ ibs = [_short(f.text) for f in props.findall("md:InputByString/xr:Field", NS)]
+ if ibs:
+ refs.append(f"ввод по строке: {', '.join(ibs)}")
+ if refs:
+ out(" | ".join(refs))
+
+ if child_objs is not None:
+ fields = get_attributes(child_objs, "Field")
+ if fields:
+ out("")
+ out(f"Поля ({len(fields)}):")
+ ml = get_max_name_len(fields)
+ for f in fields:
+ fp = f["Props"]
+ marks = []
+ nids = fp.find("md:NameInDataSource", NS)
+ if nids is not None and nids.text and nids.text != f["Name"]:
+ marks.append(f"→ {nids.text}")
+ ro = fp.find("md:ReadOnly", NS)
+ if ro is not None and ro.text == "true":
+ marks.append("только чтение")
+ an = fp.find("md:AllowNull", NS)
+ if an is not None and an.text == "true":
+ marks.append("NULL")
+ tail = f" [{', '.join(marks)}]" if marks else ""
+ out(f" {f['Name'].ljust(ml)} {f['Type']}{tail}")
+
# Attributes
if child_objs is not None and md_type != "Enum":
attrs = get_attributes(child_objs)
diff --git a/tests/skills/cases/meta-info/external-data-source-table.json b/tests/skills/cases/meta-info/external-data-source-table.json
new file mode 100644
index 000000000..d1ecb2aa8
--- /dev/null
+++ b/tests/skills/cases/meta-info/external-data-source-table.json
@@ -0,0 +1,47 @@
+{
+ "name": "Таблица внешнего источника: свойства и поля",
+ "setup": "empty-config",
+ "preRun": [
+ {
+ "script": "meta-compile/scripts/meta-compile",
+ "input": {
+ "type": "ExternalDataSource",
+ "name": "PG",
+ "tables": {
+ "products": {
+ "nameInDataSource": "eds.public.products",
+ "tableDataType": "ObjectData",
+ "keyFields": ["id"],
+ "presentationField": "name",
+ "parentField": "parent_id",
+ "dataVersionField": "row_ver",
+ "fields": [
+ "id: Number(10,0)",
+ "name: String(150)",
+ "article: String(50) | nullable",
+ "parent_id: ExternalDataSourceTableRef.PG.products | nullable",
+ { "name": "row_ver", "type": "Number(19,0)", "nameInDataSource": "xmin", "readOnly": true }
+ ]
+ }
+ }
+ },
+ "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
+ }
+ ],
+ "params": { "objectPath": "ExternalDataSources/PG/Tables/products.xml" },
+ "expect": {
+ "stdoutContains": [
+ "Таблица внешнего источника: products",
+ "в источнике: eds.public.products",
+ "данные: объектные",
+ "ключ: id",
+ "представление: name",
+ "родитель: parent_id",
+ "версия данных: row_ver",
+ "Поля (5)",
+ "ВнешнийИсточникДанныхТаблицаСсылка.PG.products",
+ "→ xmin",
+ "только чтение"
+ ]
+ }
+}
diff --git a/tests/skills/cases/meta-info/external-data-source.json b/tests/skills/cases/meta-info/external-data-source.json
new file mode 100644
index 000000000..9fd58ff37
--- /dev/null
+++ b/tests/skills/cases/meta-info/external-data-source.json
@@ -0,0 +1,29 @@
+{
+ "name": "Внешний источник данных: таблицы и функции",
+ "setup": "empty-config",
+ "preRun": [
+ {
+ "script": "meta-compile/scripts/meta-compile",
+ "input": {
+ "type": "ExternalDataSource",
+ "name": "PG",
+ "dataLockControlMode": "AutomaticAndManaged",
+ "tables": {
+ "products": {
+ "nameInDataSource": "eds.public.products",
+ "tableDataType": "ObjectData",
+ "keyFields": ["id"],
+ "presentationField": "name",
+ "fields": ["id: Number(10,0)", "name: String(150)", "article: String(50) | nullable"]
+ }
+ },
+ "functions": { "total": { "expression": "public.f_total(&1, &2)", "returns": "Number(15,2)" } }
+ },
+ "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
+ }
+ ],
+ "params": { "objectPath": "ExternalDataSources/PG.xml" },
+ "expect": {
+ "stdoutContains": ["Внешний источник данных: PG", "Таблицы (1): products", "public.f_total(&1, &2)"]
+ }
+}
diff --git a/tests/skills/cases/meta-info/snapshots/external-data-source-table/Configuration.xml b/tests/skills/cases/meta-info/snapshots/external-data-source-table/Configuration.xml
new file mode 100644
index 000000000..da0e784ee
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/external-data-source-table/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
+
+
+
+ Русский
+ PG
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/external-data-source-table/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-info/snapshots/external-data-source-table/Ext/ClientApplicationInterface.xml
new file mode 100644
index 000000000..3c1161b2d
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/external-data-source-table/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/external-data-source-table/ExternalDataSources/PG.xml b/tests/skills/cases/meta-info/snapshots/external-data-source-table/ExternalDataSources/PG.xml
new file mode 100644
index 000000000..a1b89619b
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/external-data-source-table/ExternalDataSources/PG.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+
+ PG
+
+
+ ru
+ PG
+
+
+
+ Automatic
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/external-data-source-table/ExternalDataSources/PG/Tables/products.xml b/tests/skills/cases/meta-info/snapshots/external-data-source-table/ExternalDataSources/PG/Tables/products.xml
new file mode 100644
index 000000000..4c22f11e3
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/external-data-source-table/ExternalDataSources/PG/Tables/products.xml
@@ -0,0 +1,293 @@
+
+
+
+
+
+ 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
+
+
+ UUID-016
+ UUID-017
+
+
+
+ products
+
+
+ ru
+ products
+
+
+
+ Table
+ eds.public.products
+
+ ObjectData
+
+ ExternalDataSource.PG.Table.products.Field.id
+
+ ExternalDataSource.PG.Table.products.Field.name
+ ExternalDataSource.PG.Table.products.Field.parent_id
+
+
+ true
+ false
+
+ ExternalDataSource.PG.Table.products.Field.name
+
+ Auto
+ Begin
+ Directly
+ Auto
+
+
+
+
+
+
+
+
+
+
+
+ false
+ false
+ Auto
+ ExternalDataSource.PG.Table.products.Field.row_ver
+ InDialog
+
+
+ Automatic
+
+
+
+
+ id
+
+
+ ru
+ id
+
+
+
+
+ xs:decimal
+
+ 10
+ 0
+ Any
+
+
+ false
+
+
+
+ false
+
+ false
+ false
+
+
+ false
+ 0
+ DontCheck
+
+
+ Auto
+ Auto
+ Auto
+
+ id
+ false
+ false
+
+
+
+
+ name
+
+
+ ru
+ name
+
+
+
+
+ xs:string
+
+ 150
+ Variable
+
+
+ false
+
+
+
+ false
+
+ false
+ false
+
+
+ false
+
+ DontCheck
+
+
+ Auto
+ Auto
+ Auto
+
+ name
+ false
+ false
+
+
+
+
+ article
+
+
+ ru
+ article
+
+
+
+
+ xs:string
+
+ 50
+ Variable
+
+
+ false
+
+
+
+ false
+
+ false
+ false
+
+
+ false
+
+ DontCheck
+
+
+ Auto
+ Auto
+ Auto
+
+ article
+ false
+ true
+
+
+
+
+ parent_id
+
+
+ ru
+ parent_id
+
+
+
+
+ cfg:ExternalDataSourceTableRef.PG.products
+
+ false
+
+
+
+ false
+
+ false
+ false
+
+
+ false
+
+ DontCheck
+
+
+ Auto
+ Auto
+ Auto
+
+ parent_id
+ false
+ true
+
+
+
+
+ row_ver
+
+
+ ru
+ row_ver
+
+
+
+
+ xs:decimal
+
+ 19
+ 0
+ Any
+
+
+ false
+
+
+
+ false
+
+ false
+ false
+
+
+ false
+ 0
+ DontCheck
+
+
+ Auto
+ Auto
+ Auto
+
+ xmin
+ true
+ false
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/external-data-source-table/Languages/Русский.xml b/tests/skills/cases/meta-info/snapshots/external-data-source-table/Languages/Русский.xml
new file mode 100644
index 000000000..37c60d786
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/external-data-source-table/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/external-data-source/Configuration.xml b/tests/skills/cases/meta-info/snapshots/external-data-source/Configuration.xml
new file mode 100644
index 000000000..da0e784ee
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/external-data-source/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
+
+
+
+ Русский
+ PG
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/external-data-source/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-info/snapshots/external-data-source/Ext/ClientApplicationInterface.xml
new file mode 100644
index 000000000..3c1161b2d
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/external-data-source/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/external-data-source/ExternalDataSources/PG.xml b/tests/skills/cases/meta-info/snapshots/external-data-source/ExternalDataSources/PG.xml
new file mode 100644
index 000000000..a80b5dfbb
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/external-data-source/ExternalDataSources/PG.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+
+ PG
+
+
+ ru
+ PG
+
+
+
+ AutomaticAndManaged
+
+
+
+
+
+ total
+
+
+ true
+
+ xs:decimal
+
+ 15
+ 2
+ Any
+
+
+ public.f_total(&1, &2)
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/external-data-source/ExternalDataSources/PG/Tables/products.xml b/tests/skills/cases/meta-info/snapshots/external-data-source/ExternalDataSources/PG/Tables/products.xml
new file mode 100644
index 000000000..c93be494c
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/external-data-source/ExternalDataSources/PG/Tables/products.xml
@@ -0,0 +1,214 @@
+
+
+
+
+
+ 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
+
+
+ UUID-016
+ UUID-017
+
+
+
+ products
+
+
+ ru
+ products
+
+
+
+ Table
+ eds.public.products
+
+ ObjectData
+
+ ExternalDataSource.PG.Table.products.Field.id
+
+ ExternalDataSource.PG.Table.products.Field.name
+
+
+
+ true
+ false
+
+ ExternalDataSource.PG.Table.products.Field.name
+
+ Auto
+ Begin
+ Directly
+ Auto
+
+
+
+
+
+
+
+
+
+
+
+ false
+ false
+ Auto
+
+ InDialog
+
+
+ Automatic
+
+
+
+
+ id
+
+
+ ru
+ id
+
+
+
+
+ xs:decimal
+
+ 10
+ 0
+ Any
+
+
+ false
+
+
+
+ false
+
+ false
+ false
+
+
+ false
+ 0
+ DontCheck
+
+
+ Auto
+ Auto
+ Auto
+
+ id
+ false
+ false
+
+
+
+
+ name
+
+
+ ru
+ name
+
+
+
+
+ xs:string
+
+ 150
+ Variable
+
+
+ false
+
+
+
+ false
+
+ false
+ false
+
+
+ false
+
+ DontCheck
+
+
+ Auto
+ Auto
+ Auto
+
+ name
+ false
+ false
+
+
+
+
+ article
+
+
+ ru
+ article
+
+
+
+
+ xs:string
+
+ 50
+ Variable
+
+
+ false
+
+
+
+ false
+
+ false
+ false
+
+
+ false
+
+ DontCheck
+
+
+ Auto
+ Auto
+ Auto
+
+ article
+ false
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-info/snapshots/external-data-source/Languages/Русский.xml b/tests/skills/cases/meta-info/snapshots/external-data-source/Languages/Русский.xml
new file mode 100644
index 000000000..37c60d786
--- /dev/null
+++ b/tests/skills/cases/meta-info/snapshots/external-data-source/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file