diff --git a/.claude/skills/meta-validate/scripts/meta-validate.ps1 b/.claude/skills/meta-validate/scripts/meta-validate.ps1
index 0a9adff47..2d30d321a 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.26 — Validate 1C metadata object structure
+# meta-validate v1.27 — Validate 1C metadata object structure
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
@@ -1836,6 +1836,60 @@ if (-not $isAdopted) {
}
}
+# --- Check 21: таблица внешнего источника — ссылки на поля и наличие ключа ---
+# Свойства таблицы ссылаются на её же поля полным путём. Опечатка в имени поля даёт
+# «Неизвестный объект метаданных» при загрузке, а найти её глазами в шестичастном пути трудно.
+if ($mdType -eq "Table") {
+ $fieldNames = @{}
+ if ($childObjNode) {
+ foreach ($f in $childObjNode.SelectNodes("md:Field/md:Properties/md:Name", $ns)) {
+ $fieldNames[$f.InnerText] = $true
+ }
+ }
+ $edsRefsChecked = 0
+ $edsRefsBad = $false
+ foreach ($spec in @(
+ @("KeyFields", "xr:Field"), @("InputByString", "xr:Field"), @("DataLockFields", "xr:Field"),
+ @("PresentationField", $null), @("ParentField", $null), @("DataVersionField", $null))) {
+ $tag = $spec[0]
+ $refs = @()
+ if ($spec[1]) {
+ foreach ($n in $propsNode.SelectNodes("md:$tag/$($spec[1])", $ns)) { $refs += $n.InnerText }
+ } else {
+ $n = $propsNode.SelectSingleNode("md:$tag", $ns)
+ if ($n -and $n.InnerText) { $refs += $n.InnerText }
+ }
+ foreach ($ref in $refs) {
+ $edsRefsChecked++
+ $parts = $ref -split '\.'
+ # Ожидается ExternalDataSource.<Источник>.Table.<Таблица>.Field.<Поле>
+ if ($parts.Count -ne 6 -or $parts[0] -ne "ExternalDataSource" -or $parts[2] -ne "Table" -or $parts[4] -ne "Field") {
+ Report-Error "21. $tag '$ref' — ожидается ExternalDataSource.<Источник>.Table.<Таблица>.Field.<Поле>"
+ $edsRefsBad = $true
+ continue
+ }
+ if ($parts[3] -ne $objName) {
+ Report-Error "21. $tag '$ref' — ссылка на поле ЧУЖОЙ таблицы (эта: $objName)"
+ $edsRefsBad = $true
+ continue
+ }
+ if (-not $fieldNames.ContainsKey($parts[5])) {
+ $known = if ($fieldNames.Count -gt 0) { ($fieldNames.Keys | Sort-Object) -join ", " } else { "полей нет" }
+ Report-Error "21. $tag '$ref' — поля '$($parts[5])' нет в таблице (есть: $known)"
+ $edsRefsBad = $true
+ }
+ }
+ }
+ if ($edsRefsChecked -gt 0 -and -not $edsRefsBad) { Report-OK "21. Field refs: $edsRefsChecked resolved" }
+
+ # Ключ: загрузка XML таблицу без ключа принимает (проверено на платформе), а Конфигуратор
+ # интерактивно требует. Отсюда предупреждение, а не ошибка: рабочие конфигурации без ключа есть.
+ $keyNodes = @($propsNode.SelectNodes("md:KeyFields/xr:Field", $ns))
+ if ($keyNodes.Count -eq 0) {
+ Report-Warn "21. KeyFields пуст — платформа такую таблицу загрузит, но форма записи и набор записей будут недоступны"
+ }
+}
+
# --- Final output ---
& $finalize
diff --git a/.claude/skills/meta-validate/scripts/meta-validate.py b/.claude/skills/meta-validate/scripts/meta-validate.py
index f012c82d9..91ff9f5a2 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.26 — Validate 1C metadata object structure (Python port)
+# meta-validate v1.27 — Validate 1C metadata object structure (Python port)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import os
@@ -1778,6 +1778,48 @@ if not is_adopted:
if form_refs_checked > 0 and not form_ref_bad:
report_ok(f"20. Form refs: {form_refs_checked} resolved")
+# ── Check 21: таблица внешнего источника — ссылки на поля и наличие ключа ──
+# Свойства таблицы ссылаются на её же поля полным путём. Опечатка в имени поля даёт
+# «Неизвестный объект метаданных» при загрузке, а найти её глазами в шестичастном пути трудно.
+if md_type == "Table":
+ field_names = set()
+ if child_obj_node is not None:
+ for f in find_all(child_obj_node, "md:Field/md:Properties/md:Name"):
+ field_names.add(inner_text(f))
+ eds_refs_checked = 0
+ eds_refs_bad = False
+ for tag, is_list in (("KeyFields", True), ("InputByString", True), ("DataLockFields", True),
+ ("PresentationField", False), ("ParentField", False), ("DataVersionField", False)):
+ if is_list:
+ refs = [inner_text(n) for n in find_all(props_node, f"md:{tag}/xr:Field")]
+ else:
+ n = find(props_node, f"md:{tag}")
+ refs = [inner_text(n)] if n is not None and inner_text(n) else []
+ for ref in refs:
+ eds_refs_checked += 1
+ parts = ref.split(".")
+ # Ожидается ExternalDataSource.<Источник>.Table.<Таблица>.Field.<Поле>
+ if len(parts) != 6 or parts[0] != "ExternalDataSource" or parts[2] != "Table" or parts[4] != "Field":
+ report_error(f"21. {tag} '{ref}' — ожидается ExternalDataSource.<Источник>.Table.<Таблица>.Field.<Поле>")
+ eds_refs_bad = True
+ continue
+ if parts[3] != obj_name:
+ report_error(f"21. {tag} '{ref}' — ссылка на поле ЧУЖОЙ таблицы (эта: {obj_name})")
+ eds_refs_bad = True
+ continue
+ if parts[5] not in field_names:
+ known = ", ".join(sorted(field_names)) if field_names else "полей нет"
+ report_error(f"21. {tag} '{ref}' — поля '{parts[5]}' нет в таблице (есть: {known})")
+ eds_refs_bad = True
+ if eds_refs_checked > 0 and not eds_refs_bad:
+ report_ok(f"21. Field refs: {eds_refs_checked} resolved")
+
+ # Ключ: загрузка XML таблицу без ключа принимает (проверено на платформе), а Конфигуратор
+ # интерактивно требует. Отсюда предупреждение, а не ошибка: рабочие конфигурации без ключа есть.
+ if not find_all(props_node, "md:KeyFields/xr:Field"):
+ report_warn("21. KeyFields пуст — платформа такую таблицу загрузит, но форма записи и набор записей будут недоступны")
+
+
# ── Final output ──────────────────────────────────────────────
finalize()
diff --git a/docs/meta-dsl-spec.md b/docs/meta-dsl-spec.md
index 168d93011..59b43431d 100644
--- a/docs/meta-dsl-spec.md
+++ b/docs/meta-dsl-spec.md
@@ -1958,3 +1958,33 @@ ChildObjects и модулей.
| `direction` | `In` | Направление: `In` / `Out` / `InOut` |
Если значение — строка, интерпретируется как `type`.
+
+---
+
+## 18. Внешние источники данных (tables / functions)
+
+Только для `ExternalDataSource`. Полное описание — `.claude/skills/meta-compile/reference/external-data-source.md`:
+таблицы, поля и функции, их свойства и умолчания. Здесь — только форма и связи с общими конвенциями,
+чтобы таблица свойств не жила в двух местах и не разъезжалась.
+
+```json
+{ "type": "ExternalDataSource", "name": "PG",
+ "tables": {
+ "prices": ["product_id: Number(10,0)", "price: Number(15,2)"],
+ "products": { "keyFields": ["id"], "presentationField": "name",
+ "fields": ["id: Number(10,0)", "name: String(150)"] }
+ },
+ "functions": { "total": { "expression": "public.f_total(&1, &2)", "returns": "Number(15,2)" } } }
+```
+
+- **`tables`** — dict имя → массив полей ЛИБО объект со свойствами и ключом `fields`: та же двойственность,
+ что у `tabularSections` (§5).
+- **Поле** — обычный реквизит (§4) плюс три своих ключа: `nameInDataSource`, `readOnly`, `allowNull`
+ (флаги строковой формы — `readonly`, `nullable`). Составной тип у поля платформа запрещает.
+- **Ссылки на поля** (`keyFields`, `presentationField`, `parentField`, `dataVersionField`, `inputByString`,
+ `dataLockFields`) — короткими именами полей этой же таблицы, как `inputByString` у справочника (§7.1.5).
+- **`functions`** — dict имя → строка (выражение) ЛИБО объект, как `urlTemplates` (§16) и `operations` (§17).
+ Параметры не объекты: они записаны в самом выражении как `&1`, `&2`.
+
+Кубы OLAP не поддерживаются. Таблица — отдельный файл, поэтому `meta-compile` описывает источник целиком,
+а дописать таблицу или функцию в существующий умеет `meta-edit` (`add.tables` / `add.functions`).
diff --git a/tests/skills/cases/meta-validate/eds-table-no-key.json b/tests/skills/cases/meta-validate/eds-table-no-key.json
new file mode 100644
index 000000000..7b8ea6c1d
--- /dev/null
+++ b/tests/skills/cases/meta-validate/eds-table-no-key.json
@@ -0,0 +1,46 @@
+{
+ "name": "Таблица внешнего источника без ключа — предупреждение, не ошибка",
+ "setup": "empty-config",
+ "preRun": [
+ {
+ "script": "meta-compile/scripts/meta-compile",
+ "input": {
+ "type": "ExternalDataSource",
+ "name": "PG",
+ "tables": {
+ "products": {
+ "tableDataType": "ObjectData",
+ "keyFields": [
+ "id"
+ ],
+ "presentationField": "name",
+ "dataLockFields": [
+ "id"
+ ],
+ "fields": [
+ "id: Number(10,0)",
+ "name: String(150)"
+ ]
+ },
+ "prices": [
+ "product_id: Number(10,0)",
+ "price: Number(15,2)"
+ ]
+ }
+ },
+ "args": {
+ "-JsonPath": "{inputFile}",
+ "-OutputDir": "{workDir}"
+ }
+ }
+ ],
+ "params": {
+ "objectPath": "ExternalDataSources/PG/Tables/prices.xml"
+ },
+ "expect": {
+ "stdoutContains": [
+ "KeyFields пуст",
+ "0 errors, 1 warnings"
+ ]
+ }
+}
diff --git a/tests/skills/cases/meta-validate/eds-table-refs.json b/tests/skills/cases/meta-validate/eds-table-refs.json
new file mode 100644
index 000000000..fbc236a0b
--- /dev/null
+++ b/tests/skills/cases/meta-validate/eds-table-refs.json
@@ -0,0 +1,45 @@
+{
+ "name": "Таблица внешнего источника: ссылки на поля разрешаются, пустой ключ — предупреждение",
+ "setup": "empty-config",
+ "preRun": [
+ {
+ "script": "meta-compile/scripts/meta-compile",
+ "input": {
+ "type": "ExternalDataSource",
+ "name": "PG",
+ "tables": {
+ "products": {
+ "tableDataType": "ObjectData",
+ "keyFields": [
+ "id"
+ ],
+ "presentationField": "name",
+ "dataLockFields": [
+ "id"
+ ],
+ "fields": [
+ "id: Number(10,0)",
+ "name: String(150)"
+ ]
+ },
+ "prices": [
+ "product_id: Number(10,0)",
+ "price: Number(15,2)"
+ ]
+ }
+ },
+ "args": {
+ "-JsonPath": "{inputFile}",
+ "-OutputDir": "{workDir}"
+ }
+ }
+ ],
+ "params": {
+ "objectPath": "ExternalDataSources/PG/Tables/products.xml"
+ },
+ "expect": {
+ "stdoutContains": [
+ "Validation OK: Table.products"
+ ]
+ }
+}
diff --git a/tests/skills/cases/meta-validate/error-eds-bad-field-ref.json b/tests/skills/cases/meta-validate/error-eds-bad-field-ref.json
new file mode 100644
index 000000000..39e6b3c6c
--- /dev/null
+++ b/tests/skills/cases/meta-validate/error-eds-bad-field-ref.json
@@ -0,0 +1,27 @@
+{
+ "name": "Ссылка на несуществующее поле таблицы внешнего источника — ошибка",
+ "setup": "empty-config",
+ "preRun": [
+ {
+ "script": "meta-compile/scripts/meta-compile",
+ "input": {
+ "type": "ExternalDataSource",
+ "name": "PG",
+ "tables": {
+ "products": {
+ "tableDataType": "ObjectData",
+ "keyFields": ["id"],
+ "presentationField": "nmae",
+ "fields": ["id: Number(10,0)", "name: String(150)"]
+ }
+ }
+ },
+ "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
+ }
+ ],
+ "params": { "objectPath": "ExternalDataSources/PG/Tables/products.xml" },
+ "expectError": true,
+ "expect": {
+ "stdoutContains": ["PresentationField", "поля 'nmae' нет в таблице"]
+ }
+}
diff --git a/tests/skills/cases/meta-validate/snapshots/eds-table-no-key/Configuration.xml b/tests/skills/cases/meta-validate/snapshots/eds-table-no-key/Configuration.xml
new file mode 100644
index 000000000..da0e784ee
--- /dev/null
+++ b/tests/skills/cases/meta-validate/snapshots/eds-table-no-key/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-validate/snapshots/eds-table-no-key/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-validate/snapshots/eds-table-no-key/Ext/ClientApplicationInterface.xml
new file mode 100644
index 000000000..3c1161b2d
--- /dev/null
+++ b/tests/skills/cases/meta-validate/snapshots/eds-table-no-key/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ UUID-002
+
+
+
+
+ UUID-004
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-validate/snapshots/eds-table-no-key/ExternalDataSources/PG.xml b/tests/skills/cases/meta-validate/snapshots/eds-table-no-key/ExternalDataSources/PG.xml
new file mode 100644
index 000000000..8ba69f674
--- /dev/null
+++ b/tests/skills/cases/meta-validate/snapshots/eds-table-no-key/ExternalDataSources/PG.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+ 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-validate/snapshots/eds-table-no-key/ExternalDataSources/PG/Tables/prices.xml b/tests/skills/cases/meta-validate/snapshots/eds-table-no-key/ExternalDataSources/PG/Tables/prices.xml
new file mode 100644
index 000000000..f3d281122
--- /dev/null
+++ b/tests/skills/cases/meta-validate/snapshots/eds-table-no-key/ExternalDataSources/PG/Tables/prices.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+ 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
+
+
+
+ prices
+
+
+ ru
+ prices
+
+
+
+ Table
+ prices
+
+ NonobjectData
+
+
+
+
+
+ true
+ false
+
+ Auto
+ Begin
+ Directly
+ Auto
+
+
+
+
+
+
+
+
+
+
+
+ false
+ false
+ Auto
+
+ InDialog
+
+
+ Automatic
+
+
+
+
+ product_id
+
+
+ ru
+ product_id
+
+
+
+
+ xs:decimal
+
+ 10
+ 0
+ Any
+
+
+ false
+
+
+
+ false
+
+ false
+ false
+
+
+ false
+ 0
+ DontCheck
+
+
+ Auto
+ Auto
+ Auto
+
+ product_id
+ false
+ false
+
+
+
+
+ price
+
+
+ ru
+ price
+
+
+
+
+ xs:decimal
+
+ 15
+ 2
+ Any
+
+
+ false
+
+
+
+ false
+
+ false
+ false
+
+
+ false
+ 0
+ DontCheck
+
+
+ Auto
+ Auto
+ Auto
+
+ price
+ false
+ false
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-validate/snapshots/eds-table-no-key/ExternalDataSources/PG/Tables/products.xml b/tests/skills/cases/meta-validate/snapshots/eds-table-no-key/ExternalDataSources/PG/Tables/products.xml
new file mode 100644
index 000000000..f4e115d26
--- /dev/null
+++ b/tests/skills/cases/meta-validate/snapshots/eds-table-no-key/ExternalDataSources/PG/Tables/products.xml
@@ -0,0 +1,175 @@
+
+
+
+
+
+ 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
+ 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
+
+
+ ExternalDataSource.PG.Table.products.Field.id
+
+ 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
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-validate/snapshots/eds-table-no-key/Languages/Русский.xml b/tests/skills/cases/meta-validate/snapshots/eds-table-no-key/Languages/Русский.xml
new file mode 100644
index 000000000..37c60d786
--- /dev/null
+++ b/tests/skills/cases/meta-validate/snapshots/eds-table-no-key/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-validate/snapshots/eds-table-refs/Configuration.xml b/tests/skills/cases/meta-validate/snapshots/eds-table-refs/Configuration.xml
new file mode 100644
index 000000000..da0e784ee
--- /dev/null
+++ b/tests/skills/cases/meta-validate/snapshots/eds-table-refs/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-validate/snapshots/eds-table-refs/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-validate/snapshots/eds-table-refs/Ext/ClientApplicationInterface.xml
new file mode 100644
index 000000000..3c1161b2d
--- /dev/null
+++ b/tests/skills/cases/meta-validate/snapshots/eds-table-refs/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ UUID-002
+
+
+
+
+ UUID-004
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-validate/snapshots/eds-table-refs/ExternalDataSources/PG.xml b/tests/skills/cases/meta-validate/snapshots/eds-table-refs/ExternalDataSources/PG.xml
new file mode 100644
index 000000000..8ba69f674
--- /dev/null
+++ b/tests/skills/cases/meta-validate/snapshots/eds-table-refs/ExternalDataSources/PG.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+ 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-validate/snapshots/eds-table-refs/ExternalDataSources/PG/Tables/prices.xml b/tests/skills/cases/meta-validate/snapshots/eds-table-refs/ExternalDataSources/PG/Tables/prices.xml
new file mode 100644
index 000000000..f3d281122
--- /dev/null
+++ b/tests/skills/cases/meta-validate/snapshots/eds-table-refs/ExternalDataSources/PG/Tables/prices.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+ 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
+
+
+
+ prices
+
+
+ ru
+ prices
+
+
+
+ Table
+ prices
+
+ NonobjectData
+
+
+
+
+
+ true
+ false
+
+ Auto
+ Begin
+ Directly
+ Auto
+
+
+
+
+
+
+
+
+
+
+
+ false
+ false
+ Auto
+
+ InDialog
+
+
+ Automatic
+
+
+
+
+ product_id
+
+
+ ru
+ product_id
+
+
+
+
+ xs:decimal
+
+ 10
+ 0
+ Any
+
+
+ false
+
+
+
+ false
+
+ false
+ false
+
+
+ false
+ 0
+ DontCheck
+
+
+ Auto
+ Auto
+ Auto
+
+ product_id
+ false
+ false
+
+
+
+
+ price
+
+
+ ru
+ price
+
+
+
+
+ xs:decimal
+
+ 15
+ 2
+ Any
+
+
+ false
+
+
+
+ false
+
+ false
+ false
+
+
+ false
+ 0
+ DontCheck
+
+
+ Auto
+ Auto
+ Auto
+
+ price
+ false
+ false
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-validate/snapshots/eds-table-refs/ExternalDataSources/PG/Tables/products.xml b/tests/skills/cases/meta-validate/snapshots/eds-table-refs/ExternalDataSources/PG/Tables/products.xml
new file mode 100644
index 000000000..f4e115d26
--- /dev/null
+++ b/tests/skills/cases/meta-validate/snapshots/eds-table-refs/ExternalDataSources/PG/Tables/products.xml
@@ -0,0 +1,175 @@
+
+
+
+
+
+ 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
+ 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
+
+
+ ExternalDataSource.PG.Table.products.Field.id
+
+ 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
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-validate/snapshots/eds-table-refs/Languages/Русский.xml b/tests/skills/cases/meta-validate/snapshots/eds-table-refs/Languages/Русский.xml
new file mode 100644
index 000000000..37c60d786
--- /dev/null
+++ b/tests/skills/cases/meta-validate/snapshots/eds-table-refs/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file