mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-07 18:50:53 +03:00
feat(meta-edit,meta-remove): точечная правка и удаление внешних источников
meta-edit добавляет поля в таблицу внешнего источника: тот же парсер реквизита, свой тег <Field>, свой контекст (без индексов и полнотекстового поиска — чужой таблицей 1С не владеет) и три своих свойства в хвосте. Сам источник точечно не правится: и таблица (отдельный файл), и функция (узел с полным набором свойств) требуют эмиттера, который живёт в meta-compile, — дублировать его здесь значило бы завести вторую реализацию одного и того же. Заодно закрыт тихий отказ, существовавший независимо от внешних источников: проверка допустимых детей смотрела на истинность списка, а не на наличие ключа, поэтому для вида с пустым списком трактовалась как «ограничений нет» и чужой ребёнок молча записывался в объект. Теперь add-attribute на таблице внешнего источника отвергается с предупреждением, а не пишет <Attribute> вместо <Field>. meta-remove понимает две формы: ExternalDataSource.PG — источник целиком, и четырёхчастную ExternalDataSource.PG.Table.products — одну таблицу. Таблица числится в ChildObjects файла источника, а не конфигурации, поэтому дерегистрация разведена переменной реестра; поиск ссылок дополнен путями вида ExternalDataSource.И.Table.Т и ExternalDataSourceTableRef.И.Т. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NBsZA5cr2WFThtgp7i5WVi
This commit is contained in:
co-authored by
Claude Opus 5
parent
bb56a7e898
commit
ed766154fe
@@ -43,6 +43,22 @@
|
|||||||
-Operation add-column -Value "Тип: EnumRef.ТипыДокументов"
|
-Operation add-column -Value "Тип: EnumRef.ТипыДокументов"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## add-field (таблица внешнего источника)
|
||||||
|
|
||||||
|
Поле задаётся как обычный реквизит, плюс три своих ключа: `nameInDataSource` (умолчание — имя поля),
|
||||||
|
`readOnly`, `allowNull`. Флаги строковой формы — `readonly`, `nullable`.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{ "add": { "fields": [
|
||||||
|
"barcode: String(20) | nullable",
|
||||||
|
{ "name": "cost", "type": "Number(15,2)", "nameInDataSource": "cost_net", "readOnly": true }
|
||||||
|
] } }
|
||||||
|
```
|
||||||
|
|
||||||
|
Сам внешний источник точечно не правится: и таблица (отдельный файл), и функция (узел с полным
|
||||||
|
набором свойств) собираются `meta-compile` по описанию источника целиком. Удалить таблицу —
|
||||||
|
`meta-remove ExternalDataSource.<Источник>.Table.<Таблица>`.
|
||||||
|
|
||||||
## add-ts
|
## add-ts
|
||||||
|
|
||||||
Формат: `ИмяТЧ: Реквизит1: Тип1, Реквизит2: Тип2, ...`
|
Формат: `ИмяТЧ: Реквизит1: Тип1, Реквизит2: Тип2, ...`
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# meta-edit v1.43 — Edit existing 1C metadata object XML
|
# meta-edit v1.44 — Edit existing 1C metadata object XML
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
[CmdletBinding(PositionalBinding=$false)]
|
[CmdletBinding(PositionalBinding=$false)]
|
||||||
param(
|
param(
|
||||||
@@ -465,6 +465,7 @@ $script:childTypeSynonyms = @{
|
|||||||
"templates" = "templates"; "макеты" = "templates"
|
"templates" = "templates"; "макеты" = "templates"
|
||||||
"commands" = "commands"; "команды" = "commands"
|
"commands" = "commands"; "команды" = "commands"
|
||||||
"properties" = "properties"; "свойства" = "properties"
|
"properties" = "properties"; "свойства" = "properties"
|
||||||
|
"fields" = "fields"; "поля" = "fields"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Type synonyms (from meta-compile)
|
# Type synonyms (from meta-compile)
|
||||||
@@ -955,6 +956,10 @@ function Parse-AttributeShorthand {
|
|||||||
indexing = if ($val.indexing) { "$($val.indexing)" } else { "" }
|
indexing = if ($val.indexing) { "$($val.indexing)" } else { "" }
|
||||||
after = if ($val.after) { "$($val.after)" } else { "" }
|
after = if ($val.after) { "$($val.after)" } else { "" }
|
||||||
before = if ($val.before) { "$($val.before)" } else { "" }
|
before = if ($val.before) { "$($val.before)" } else { "" }
|
||||||
|
# Поле таблицы внешнего источника (контекст eds-field).
|
||||||
|
nameInDataSource = if ($val.nameInDataSource) { "$($val.nameInDataSource)" } else { "" }
|
||||||
|
readOnly = if ($val.readOnly -eq $true) { $true } else { $false }
|
||||||
|
allowNull = if ($val.allowNull -eq $true) { $true } else { $false }
|
||||||
}
|
}
|
||||||
# Map flags to properties
|
# Map flags to properties
|
||||||
if ($result.flags -contains "req" -and -not $result.fillChecking) {
|
if ($result.flags -contains "req" -and -not $result.fillChecking) {
|
||||||
@@ -994,6 +999,7 @@ function Parse-EnumValueShorthand {
|
|||||||
function Get-AttributeContext {
|
function Get-AttributeContext {
|
||||||
switch ($script:objType) {
|
switch ($script:objType) {
|
||||||
"Catalog" { return "catalog" }
|
"Catalog" { return "catalog" }
|
||||||
|
"Table" { return "eds-field" }
|
||||||
"Document" { return "document" }
|
"Document" { return "document" }
|
||||||
{ $_ -in @("InformationRegister","AccumulationRegister","AccountingRegister","CalculationRegister") } { return "register" }
|
{ $_ -in @("InformationRegister","AccumulationRegister","AccountingRegister","CalculationRegister") } { return "register" }
|
||||||
{ $_ -in @("DataProcessor","Report","ExternalDataProcessor","ExternalReport") } { return "processor" }
|
{ $_ -in @("DataProcessor","Report","ExternalDataProcessor","ExternalReport") } { return "processor" }
|
||||||
@@ -1022,7 +1028,7 @@ $script:reservedByContext = @{
|
|||||||
}
|
}
|
||||||
|
|
||||||
function Build-AttributeFragment {
|
function Build-AttributeFragment {
|
||||||
param($parsed, [string]$context, [string]$indent)
|
param($parsed, [string]$context, [string]$indent, [string]$elemTag = "Attribute")
|
||||||
|
|
||||||
if (-not $context) { $context = Get-AttributeContext }
|
if (-not $context) { $context = Get-AttributeContext }
|
||||||
|
|
||||||
@@ -1037,7 +1043,7 @@ function Build-AttributeFragment {
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} elseif ($context -notin @("tabular", "processor-tabular") -and
|
} elseif ($context -notin @("tabular", "processor-tabular", "eds-field") -and
|
||||||
($script:reservedAttrNames.ContainsKey($attrName) -or ($script:reservedAttrNames.Values -contains $attrName))) {
|
($script:reservedAttrNames.ContainsKey($attrName) -or ($script:reservedAttrNames.Values -contains $attrName))) {
|
||||||
Write-Warning "Attribute '$attrName' conflicts with a standard attribute name. This may cause errors when loading into 1C."
|
Write-Warning "Attribute '$attrName' conflicts with a standard attribute name. This may cause errors when loading into 1C."
|
||||||
}
|
}
|
||||||
@@ -1045,7 +1051,7 @@ function Build-AttributeFragment {
|
|||||||
$uuid = New-Guid-String
|
$uuid = New-Guid-String
|
||||||
$sb = New-Object System.Text.StringBuilder
|
$sb = New-Object System.Text.StringBuilder
|
||||||
|
|
||||||
$sb.AppendLine("$indent<Attribute uuid=`"$uuid`">") | Out-Null
|
$sb.AppendLine("$indent<$elemTag uuid=`"$uuid`">") | Out-Null
|
||||||
$sb.AppendLine("$indent`t<Properties>") | Out-Null
|
$sb.AppendLine("$indent`t<Properties>") | Out-Null
|
||||||
$sb.AppendLine("$indent`t`t<Name>$(Esc-XmlText $parsed.name)</Name>") | Out-Null
|
$sb.AppendLine("$indent`t`t<Name>$(Esc-XmlText $parsed.name)</Name>") | Out-Null
|
||||||
$sb.AppendLine($(Build-MLTextXml "$indent`t`t" "Synonym" $parsed.synonym)) | Out-Null
|
$sb.AppendLine($(Build-MLTextXml "$indent`t`t" "Synonym" $parsed.synonym)) | Out-Null
|
||||||
@@ -1084,22 +1090,39 @@ function Build-AttributeFragment {
|
|||||||
if ($parsed.fillChecking) { $fillChecking = Normalize-EnumValue "FillChecking" $parsed.fillChecking }
|
if ($parsed.fillChecking) { $fillChecking = Normalize-EnumValue "FillChecking" $parsed.fillChecking }
|
||||||
$sb.AppendLine("$indent`t`t<FillChecking>$fillChecking</FillChecking>") | Out-Null
|
$sb.AppendLine("$indent`t`t<FillChecking>$fillChecking</FillChecking>") | Out-Null
|
||||||
|
|
||||||
$sb.AppendLine("$indent`t`t<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>") | Out-Null
|
# Поле внешнего источника (eds-field) не имеет ChoiceFoldersAndItems и LinkByType, а ChoiceForm
|
||||||
|
# у него стоит ПОСЛЕ ChoiceHistoryOnInput — порядок снят с выгрузки платформы.
|
||||||
|
if ($context -ne "eds-field") {
|
||||||
|
$sb.AppendLine("$indent`t`t<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>") | Out-Null
|
||||||
|
}
|
||||||
$sb.AppendLine("$indent`t`t<ChoiceParameterLinks/>") | Out-Null
|
$sb.AppendLine("$indent`t`t<ChoiceParameterLinks/>") | Out-Null
|
||||||
$sb.AppendLine("$indent`t`t<ChoiceParameters/>") | Out-Null
|
$sb.AppendLine("$indent`t`t<ChoiceParameters/>") | Out-Null
|
||||||
$sb.AppendLine("$indent`t`t<QuickChoice>Auto</QuickChoice>") | Out-Null
|
$sb.AppendLine("$indent`t`t<QuickChoice>Auto</QuickChoice>") | Out-Null
|
||||||
$sb.AppendLine("$indent`t`t<CreateOnInput>Auto</CreateOnInput>") | Out-Null
|
$sb.AppendLine("$indent`t`t<CreateOnInput>Auto</CreateOnInput>") | Out-Null
|
||||||
$sb.AppendLine("$indent`t`t<ChoiceForm/>") | Out-Null
|
if ($context -ne "eds-field") {
|
||||||
$sb.AppendLine("$indent`t`t<LinkByType/>") | Out-Null
|
$sb.AppendLine("$indent`t`t<ChoiceForm/>") | Out-Null
|
||||||
|
$sb.AppendLine("$indent`t`t<LinkByType/>") | Out-Null
|
||||||
|
}
|
||||||
$sb.AppendLine("$indent`t`t<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>") | Out-Null
|
$sb.AppendLine("$indent`t`t<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>") | Out-Null
|
||||||
|
|
||||||
|
if ($context -eq "eds-field") {
|
||||||
|
$sb.AppendLine("$indent`t`t<ChoiceForm/>") | Out-Null
|
||||||
|
$nids = if ($parsed.nameInDataSource) { "$($parsed.nameInDataSource)" } else { $parsed.name }
|
||||||
|
$sb.AppendLine("$indent`t`t<NameInDataSource>$(Esc-XmlText $nids)</NameInDataSource>") | Out-Null
|
||||||
|
$ro = if ($parsed.readOnly -eq $true -or $parsed.flags -contains "readonly") { "true" } else { "false" }
|
||||||
|
$sb.AppendLine("$indent`t`t<ReadOnly>$ro</ReadOnly>") | Out-Null
|
||||||
|
$an = if ($parsed.allowNull -eq $true -or $parsed.flags -contains "nullable") { "true" } else { "false" }
|
||||||
|
$sb.AppendLine("$indent`t`t<AllowNull>$an</AllowNull>") | Out-Null
|
||||||
|
}
|
||||||
|
|
||||||
# Use — catalog only
|
# Use — catalog only
|
||||||
if ($context -eq "catalog") {
|
if ($context -eq "catalog") {
|
||||||
$sb.AppendLine("$indent`t`t<Use>ForItem</Use>") | Out-Null
|
$sb.AppendLine("$indent`t`t<Use>ForItem</Use>") | Out-Null
|
||||||
}
|
}
|
||||||
|
|
||||||
# Indexing/FullTextSearch/DataHistory — not for non-stored objects (processor, processor-tabular)
|
# Indexing/FullTextSearch/DataHistory — not for non-stored objects (processor, processor-tabular)
|
||||||
if ($context -notin @("processor", "processor-tabular")) {
|
# Поля внешнего источника: индексами чужой таблицы 1С не владеет.
|
||||||
|
if ($context -notin @("processor", "processor-tabular", "eds-field")) {
|
||||||
$indexing = "DontIndex"
|
$indexing = "DontIndex"
|
||||||
if ($parsed.flags -contains "index") { $indexing = "Index" }
|
if ($parsed.flags -contains "index") { $indexing = "Index" }
|
||||||
if ($parsed.flags -contains "indexadditional") { $indexing = "IndexWithAdditionalOrder" }
|
if ($parsed.flags -contains "indexadditional") { $indexing = "IndexWithAdditionalOrder" }
|
||||||
@@ -1111,7 +1134,7 @@ function Build-AttributeFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$sb.AppendLine("$indent`t</Properties>") | Out-Null
|
$sb.AppendLine("$indent`t</Properties>") | Out-Null
|
||||||
$sb.Append("$indent</Attribute>") | Out-Null
|
$sb.Append("$indent</$elemTag>") | Out-Null
|
||||||
return $sb.ToString()
|
return $sb.ToString()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1538,11 +1561,15 @@ $script:validChildTypes = @{
|
|||||||
"CalculationRegister" = @("dimensions","resources","attributes","forms","templates","commands")
|
"CalculationRegister" = @("dimensions","resources","attributes","forms","templates","commands")
|
||||||
"DocumentJournal" = @("columns","forms","templates","commands")
|
"DocumentJournal" = @("columns","forms","templates","commands")
|
||||||
"Constant" = @("forms")
|
"Constant" = @("forms")
|
||||||
|
# Внешний источник данных правится целиком через meta-compile: и таблица (отдельный файл),
|
||||||
|
# и функция (узел с полным набором свойств) требуют эмиттера, который живёт там.
|
||||||
|
"ExternalDataSource" = @()
|
||||||
|
"Table" = @("fields","forms","templates","commands")
|
||||||
}
|
}
|
||||||
|
|
||||||
# Canonical child order in ChildObjects
|
# Canonical child order in ChildObjects
|
||||||
$script:childOrder = @(
|
$script:childOrder = @(
|
||||||
"Resource", "Dimension", "Attribute", "TabularSection",
|
"Resource", "Dimension", "Attribute", "TabularSection", "Field", "Function",
|
||||||
"AccountingFlag", "ExtDimensionAccountingFlag",
|
"AccountingFlag", "ExtDimensionAccountingFlag",
|
||||||
"EnumValue", "Column", "AddressingAttribute", "Recalculation",
|
"EnumValue", "Column", "AddressingAttribute", "Recalculation",
|
||||||
"Form", "Template", "Command"
|
"Form", "Template", "Command"
|
||||||
@@ -1559,6 +1586,7 @@ $script:childTypeToXmlTag = @{
|
|||||||
"forms" = "Form"
|
"forms" = "Form"
|
||||||
"templates" = "Template"
|
"templates" = "Template"
|
||||||
"commands" = "Command"
|
"commands" = "Command"
|
||||||
|
"fields" = "Field"
|
||||||
}
|
}
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@@ -1904,11 +1932,15 @@ function Process-Add($addDef) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
# Validate allowed
|
# Validate allowed. Проверяем НАЛИЧИЕ ключа, а не истинность списка: пустой список
|
||||||
$allowed = $script:validChildTypes[$script:objType]
|
# ($script:objType без допустимых детей) трактовался как «ограничений нет», и чужой
|
||||||
if ($allowed -and $childType -notin $allowed) {
|
# ребёнок молча записывался в объект.
|
||||||
Warn "$childType not allowed for $($script:objType), skipping"
|
if ($script:validChildTypes.ContainsKey($script:objType)) {
|
||||||
return
|
$allowed = $script:validChildTypes[$script:objType]
|
||||||
|
if ($childType -notin $allowed) {
|
||||||
|
Warn "$childType not allowed for $($script:objType), skipping"
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$xmlTag = $script:childTypeToXmlTag[$childType]
|
$xmlTag = $script:childTypeToXmlTag[$childType]
|
||||||
@@ -1941,6 +1973,25 @@ function Process-Add($addDef) {
|
|||||||
$existingNames[$parsed.name] = "Attribute"
|
$existingNames[$parsed.name] = "Attribute"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
"fields" {
|
||||||
|
# Поле таблицы внешнего источника: тот же парсер реквизита, свой тег и контекст.
|
||||||
|
foreach ($item in $items) {
|
||||||
|
$parsed = Parse-AttributeShorthand $item
|
||||||
|
if ($existingNames.ContainsKey($parsed.name)) {
|
||||||
|
Warn "Field '$($parsed.name)' already exists, skipping"
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
$fragmentXml = Build-AttributeFragment $parsed "eds-field" $indent "Field"
|
||||||
|
$nodes = Import-Fragment $fragmentXml
|
||||||
|
$refNode = Find-InsertionPoint "Field" $parsed
|
||||||
|
foreach ($node in $nodes) {
|
||||||
|
Insert-BeforeElement $script:childObjectsEl $node $refNode $indent
|
||||||
|
}
|
||||||
|
Info "Added field: $($parsed.name)"
|
||||||
|
$script:addCount++
|
||||||
|
$existingNames[$parsed.name] = "Field"
|
||||||
|
}
|
||||||
|
}
|
||||||
"tabularSections" {
|
"tabularSections" {
|
||||||
foreach ($item in $items) {
|
foreach ($item in $items) {
|
||||||
$tsName = if ($item -is [string]) { "$item" } else { "$($item.name)" }
|
$tsName = if ($item -is [string]) { "$item" } else { "$($item.name)" }
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# meta-edit v1.43 — Edit existing 1C metadata object XML
|
# meta-edit v1.44 — Edit existing 1C metadata object XML
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
@@ -503,6 +503,7 @@ child_type_synonyms = {
|
|||||||
"templates": "templates", "макеты": "templates",
|
"templates": "templates", "макеты": "templates",
|
||||||
"commands": "commands", "команды": "commands",
|
"commands": "commands", "команды": "commands",
|
||||||
"properties": "properties", "свойства": "properties",
|
"properties": "properties", "свойства": "properties",
|
||||||
|
"fields": "fields", "поля": "fields",
|
||||||
}
|
}
|
||||||
|
|
||||||
type_synonyms = {
|
type_synonyms = {
|
||||||
@@ -967,6 +968,10 @@ def parse_attribute_shorthand(val):
|
|||||||
"indexing": normalize_enum_value("Indexing", str(val.get("indexing", ""))) if val.get("indexing") else "",
|
"indexing": normalize_enum_value("Indexing", str(val.get("indexing", ""))) if val.get("indexing") else "",
|
||||||
"after": str(val.get("after", "")),
|
"after": str(val.get("after", "")),
|
||||||
"before": str(val.get("before", "")),
|
"before": str(val.get("before", "")),
|
||||||
|
# Поле таблицы внешнего источника (контекст eds-field).
|
||||||
|
"nameInDataSource": str(val.get("nameInDataSource", "")),
|
||||||
|
"readOnly": val.get("readOnly") is True,
|
||||||
|
"allowNull": val.get("allowNull") is True,
|
||||||
}
|
}
|
||||||
# Map flags to properties
|
# Map flags to properties
|
||||||
if "req" in result["flags"] and not result["fillChecking"]:
|
if "req" in result["flags"] and not result["fillChecking"]:
|
||||||
@@ -1002,6 +1007,8 @@ def get_attribute_context():
|
|||||||
"""Determine attribute context from object type."""
|
"""Determine attribute context from object type."""
|
||||||
if obj_type == "Catalog":
|
if obj_type == "Catalog":
|
||||||
return "catalog"
|
return "catalog"
|
||||||
|
if obj_type == "Table":
|
||||||
|
return "eds-field"
|
||||||
if obj_type == "Document":
|
if obj_type == "Document":
|
||||||
return "document"
|
return "document"
|
||||||
if obj_type in ("InformationRegister", "AccumulationRegister", "AccountingRegister", "CalculationRegister"):
|
if obj_type in ("InformationRegister", "AccumulationRegister", "AccountingRegister", "CalculationRegister"):
|
||||||
@@ -1057,7 +1064,7 @@ RESERVED_BY_CONTEXT = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def build_attribute_fragment(parsed, context, indent):
|
def build_attribute_fragment(parsed, context, indent, elem_tag="Attribute"):
|
||||||
"""Build XML fragment string for an Attribute element."""
|
"""Build XML fragment string for an Attribute element."""
|
||||||
if not context:
|
if not context:
|
||||||
context = get_attribute_context()
|
context = get_attribute_context()
|
||||||
@@ -1069,13 +1076,13 @@ def build_attribute_fragment(parsed, context, indent):
|
|||||||
if attr_name.lower() in ctx_reserved:
|
if attr_name.lower() in ctx_reserved:
|
||||||
print(f"meta-edit: имя реквизита '{attr_name}' зарезервировано стандартным реквизитом объекта '{context}'. Выберите другое имя.", file=sys.stderr)
|
print(f"meta-edit: имя реквизита '{attr_name}' зарезервировано стандартным реквизитом объекта '{context}'. Выберите другое имя.", file=sys.stderr)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
elif context not in ('tabular', 'processor-tabular') and (attr_name in RESERVED_ATTR_NAMES or attr_name in RESERVED_ATTR_NAMES_RU):
|
elif context not in ('tabular', 'processor-tabular', 'eds-field') and (attr_name in RESERVED_ATTR_NAMES or attr_name in RESERVED_ATTR_NAMES_RU):
|
||||||
print(f"WARNING: Attribute '{attr_name}' conflicts with a standard attribute name. This may cause errors when loading into 1C.", file=sys.stderr)
|
print(f"WARNING: Attribute '{attr_name}' conflicts with a standard attribute name. This may cause errors when loading into 1C.", file=sys.stderr)
|
||||||
|
|
||||||
uid = new_uuid()
|
uid = new_uuid()
|
||||||
lines = []
|
lines = []
|
||||||
|
|
||||||
lines.append(f'{indent}<Attribute uuid="{uid}">')
|
lines.append(f'{indent}<{elem_tag} uuid="{uid}">')
|
||||||
lines.append(f"{indent}\t<Properties>")
|
lines.append(f"{indent}\t<Properties>")
|
||||||
lines.append(f"{indent}\t\t<Name>{esc_xml_text(parsed['name'])}</Name>")
|
lines.append(f"{indent}\t\t<Name>{esc_xml_text(parsed['name'])}</Name>")
|
||||||
lines.append(build_mltext_xml(f"{indent}\t\t", "Synonym", parsed["synonym"]))
|
lines.append(build_mltext_xml(f"{indent}\t\t", "Synonym", parsed["synonym"]))
|
||||||
@@ -1114,21 +1121,35 @@ def build_attribute_fragment(parsed, context, indent):
|
|||||||
fill_checking = parsed["fillChecking"]
|
fill_checking = parsed["fillChecking"]
|
||||||
lines.append(f"{indent}\t\t<FillChecking>{fill_checking}</FillChecking>")
|
lines.append(f"{indent}\t\t<FillChecking>{fill_checking}</FillChecking>")
|
||||||
|
|
||||||
lines.append(f"{indent}\t\t<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>")
|
# Поле внешнего источника (eds-field) не имеет ChoiceFoldersAndItems и LinkByType, а ChoiceForm
|
||||||
|
# у него стоит ПОСЛЕ ChoiceHistoryOnInput — порядок снят с выгрузки платформы.
|
||||||
|
if context != "eds-field":
|
||||||
|
lines.append(f"{indent}\t\t<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>")
|
||||||
lines.append(f"{indent}\t\t<ChoiceParameterLinks/>")
|
lines.append(f"{indent}\t\t<ChoiceParameterLinks/>")
|
||||||
lines.append(f"{indent}\t\t<ChoiceParameters/>")
|
lines.append(f"{indent}\t\t<ChoiceParameters/>")
|
||||||
lines.append(f"{indent}\t\t<QuickChoice>Auto</QuickChoice>")
|
lines.append(f"{indent}\t\t<QuickChoice>Auto</QuickChoice>")
|
||||||
lines.append(f"{indent}\t\t<CreateOnInput>Auto</CreateOnInput>")
|
lines.append(f"{indent}\t\t<CreateOnInput>Auto</CreateOnInput>")
|
||||||
lines.append(f"{indent}\t\t<ChoiceForm/>")
|
if context != "eds-field":
|
||||||
lines.append(f"{indent}\t\t<LinkByType/>")
|
lines.append(f"{indent}\t\t<ChoiceForm/>")
|
||||||
|
lines.append(f"{indent}\t\t<LinkByType/>")
|
||||||
lines.append(f"{indent}\t\t<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>")
|
lines.append(f"{indent}\t\t<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>")
|
||||||
|
|
||||||
|
if context == "eds-field":
|
||||||
|
lines.append(f"{indent}\t\t<ChoiceForm/>")
|
||||||
|
nids = parsed.get("nameInDataSource") or parsed["name"]
|
||||||
|
lines.append(f"{indent}\t\t<NameInDataSource>{esc_xml_text(str(nids))}</NameInDataSource>")
|
||||||
|
ro = "true" if (parsed.get("readOnly") is True or "readonly" in parsed["flags"]) else "false"
|
||||||
|
lines.append(f"{indent}\t\t<ReadOnly>{ro}</ReadOnly>")
|
||||||
|
an = "true" if (parsed.get("allowNull") is True or "nullable" in parsed["flags"]) else "false"
|
||||||
|
lines.append(f"{indent}\t\t<AllowNull>{an}</AllowNull>")
|
||||||
|
|
||||||
# Use -- catalog only
|
# Use -- catalog only
|
||||||
if context == "catalog":
|
if context == "catalog":
|
||||||
lines.append(f"{indent}\t\t<Use>ForItem</Use>")
|
lines.append(f"{indent}\t\t<Use>ForItem</Use>")
|
||||||
|
|
||||||
# Indexing/FullTextSearch/DataHistory -- not for non-stored objects
|
# Indexing/FullTextSearch/DataHistory -- not for non-stored objects
|
||||||
if context not in ("processor", "processor-tabular"):
|
# Поля внешнего источника: индексами чужой таблицы 1С не владеет.
|
||||||
|
if context not in ("processor", "processor-tabular", "eds-field"):
|
||||||
indexing = "DontIndex"
|
indexing = "DontIndex"
|
||||||
if "index" in parsed["flags"]:
|
if "index" in parsed["flags"]:
|
||||||
indexing = "Index"
|
indexing = "Index"
|
||||||
@@ -1141,7 +1162,7 @@ def build_attribute_fragment(parsed, context, indent):
|
|||||||
lines.append(f"{indent}\t\t<DataHistory>Use</DataHistory>")
|
lines.append(f"{indent}\t\t<DataHistory>Use</DataHistory>")
|
||||||
|
|
||||||
lines.append(f"{indent}\t</Properties>")
|
lines.append(f"{indent}\t</Properties>")
|
||||||
lines.append(f"{indent}</Attribute>")
|
lines.append(f"{indent}</{elem_tag}>")
|
||||||
return "\r\n".join(lines)
|
return "\r\n".join(lines)
|
||||||
|
|
||||||
|
|
||||||
@@ -1530,11 +1551,15 @@ valid_child_types = {
|
|||||||
"CalculationRegister": ["dimensions", "resources", "attributes", "forms", "templates", "commands"],
|
"CalculationRegister": ["dimensions", "resources", "attributes", "forms", "templates", "commands"],
|
||||||
"DocumentJournal": ["columns", "forms", "templates", "commands"],
|
"DocumentJournal": ["columns", "forms", "templates", "commands"],
|
||||||
"Constant": ["forms"],
|
"Constant": ["forms"],
|
||||||
|
# Внешний источник данных правится целиком через meta-compile: и таблица (отдельный файл),
|
||||||
|
# и функция (узел с полным набором свойств) требуют эмиттера, который живёт там.
|
||||||
|
"ExternalDataSource": [],
|
||||||
|
"Table": ["fields", "forms", "templates", "commands"],
|
||||||
}
|
}
|
||||||
|
|
||||||
# Canonical child order in ChildObjects
|
# Canonical child order in ChildObjects
|
||||||
child_order = [
|
child_order = [
|
||||||
"Resource", "Dimension", "Attribute", "TabularSection",
|
"Resource", "Dimension", "Attribute", "TabularSection", "Field", "Function",
|
||||||
"AccountingFlag", "ExtDimensionAccountingFlag",
|
"AccountingFlag", "ExtDimensionAccountingFlag",
|
||||||
"EnumValue", "Column", "AddressingAttribute", "Recalculation",
|
"EnumValue", "Column", "AddressingAttribute", "Recalculation",
|
||||||
"Form", "Template", "Command",
|
"Form", "Template", "Command",
|
||||||
@@ -1551,6 +1576,7 @@ child_type_to_xml_tag = {
|
|||||||
"forms": "Form",
|
"forms": "Form",
|
||||||
"templates": "Template",
|
"templates": "Template",
|
||||||
"commands": "Command",
|
"commands": "Command",
|
||||||
|
"fields": "Field",
|
||||||
}
|
}
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@@ -1855,11 +1881,13 @@ def process_add(add_def):
|
|||||||
warn(f"Unknown add child type: {raw_key}")
|
warn(f"Unknown add child type: {raw_key}")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Validate allowed
|
# Validate allowed. Проверяем НАЛИЧИЕ ключа, а не истинность списка: пустой список
|
||||||
allowed = valid_child_types.get(obj_type)
|
# (объект без допустимых детей) трактовался как «ограничений нет», и чужой ребёнок
|
||||||
if allowed and child_type not in allowed:
|
# молча записывался в объект.
|
||||||
warn(f"{child_type} not allowed for {obj_type}, skipping")
|
if obj_type in valid_child_types:
|
||||||
continue
|
if child_type not in valid_child_types[obj_type]:
|
||||||
|
warn(f"{child_type} not allowed for {obj_type}, skipping")
|
||||||
|
continue
|
||||||
|
|
||||||
xml_tag = child_type_to_xml_tag.get(child_type)
|
xml_tag = child_type_to_xml_tag.get(child_type)
|
||||||
if not xml_tag:
|
if not xml_tag:
|
||||||
@@ -1886,6 +1914,22 @@ def process_add(add_def):
|
|||||||
add_count += 1
|
add_count += 1
|
||||||
existing_names[parsed["name"]] = "Attribute"
|
existing_names[parsed["name"]] = "Attribute"
|
||||||
|
|
||||||
|
elif child_type == "fields":
|
||||||
|
# Поле таблицы внешнего источника: тот же парсер реквизита, свой тег и контекст.
|
||||||
|
for item in items:
|
||||||
|
parsed = parse_attribute_shorthand(item)
|
||||||
|
if parsed["name"] in existing_names:
|
||||||
|
warn(f"Field '{parsed['name']}' already exists, skipping")
|
||||||
|
continue
|
||||||
|
fragment_xml = build_attribute_fragment(parsed, "eds-field", indent, "Field")
|
||||||
|
nodes = import_fragment(fragment_xml)
|
||||||
|
ref_node = find_insertion_point("Field", parsed)
|
||||||
|
for node in nodes:
|
||||||
|
insert_before_element(child_objects_el, node, ref_node, indent)
|
||||||
|
info(f"Added field: {parsed['name']}")
|
||||||
|
add_count += 1
|
||||||
|
existing_names[parsed["name"]] = "Field"
|
||||||
|
|
||||||
elif child_type == "tabularSections":
|
elif child_type == "tabularSections":
|
||||||
for item in items:
|
for item in items:
|
||||||
if isinstance(item, str):
|
if isinstance(item, str):
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ allowed-tools:
|
|||||||
| Параметр | Обязательный | Описание |
|
| Параметр | Обязательный | Описание |
|
||||||
|------------|:------------:|-------------------------------------------------|
|
|------------|:------------:|-------------------------------------------------|
|
||||||
| ConfigDir | да | Корневая директория выгрузки (где Configuration.xml) |
|
| ConfigDir | да | Корневая директория выгрузки (где Configuration.xml) |
|
||||||
| Object | да | Тип и имя объекта: `Catalog.Товары`, `Document.Заказ` и т.д. |
|
| Object | да | Тип и имя объекта: `Catalog.Товары`, `Document.Заказ` и т.д. Таблица внешнего источника — четырьмя частями: `ExternalDataSource.PG.Table.products` |
|
||||||
| DryRun | нет | Только показать что будет удалено, без изменений |
|
| DryRun | нет | Только показать что будет удалено, без изменений |
|
||||||
| KeepFiles | нет | Не удалять файлы, только дерегистрировать |
|
| KeepFiles | нет | Не удалять файлы, только дерегистрировать |
|
||||||
| Force | нет | Удалить несмотря на найденные ссылки; ссылки на формы объекта при этом очищаются |
|
| Force | нет | Удалить несмотря на найденные ссылки; ссылки на формы объекта при этом очищаются |
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# meta-remove v1.11 — Remove metadata object from 1C configuration dump
|
# meta-remove v1.12 — Remove metadata object from 1C configuration dump
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
[CmdletBinding(PositionalBinding=$false)]
|
[CmdletBinding(PositionalBinding=$false)]
|
||||||
param(
|
param(
|
||||||
@@ -60,6 +60,7 @@ $typePluralMap = @{
|
|||||||
"WSReference" = "WSReferences"
|
"WSReference" = "WSReferences"
|
||||||
"StyleItem" = "StyleItems"
|
"StyleItem" = "StyleItems"
|
||||||
"Language" = "Languages"
|
"Language" = "Languages"
|
||||||
|
"ExternalDataSource" = "ExternalDataSources"
|
||||||
}
|
}
|
||||||
|
|
||||||
# --- Resolve paths ---
|
# --- Resolve paths ---
|
||||||
@@ -216,21 +217,47 @@ function Assert-EditAllowed([string]$targetPath, [string]$require) {
|
|||||||
|
|
||||||
# --- Parse object spec ---
|
# --- Parse object spec ---
|
||||||
|
|
||||||
$parts = $Object -split "\.", 2
|
# Таблица внешнего источника — единственный объект с четырёхчастным именем: она лежит не в
|
||||||
if ($parts.Count -ne 2 -or -not $parts[0] -or -not $parts[1]) {
|
# каталоге вида, а внутри источника, и числится в ChildObjects файла источника, не конфигурации.
|
||||||
Write-Host "[ERROR] Invalid object format '$Object'. Expected: Type.Name (e.g. Catalog.Товары)"
|
$edsSource = ""
|
||||||
exit 1
|
if ($Object -match '^ExternalDataSource\.([^.]+)\.Table\.(.+)$') {
|
||||||
|
$edsSource = $Matches[1]
|
||||||
|
$objType = "Table"
|
||||||
|
$objName = $Matches[2]
|
||||||
|
} else {
|
||||||
|
$parts = $Object -split "\.", 2
|
||||||
|
if ($parts.Count -ne 2 -or -not $parts[0] -or -not $parts[1]) {
|
||||||
|
Write-Host "[ERROR] Invalid object format '$Object'. Expected: Type.Name (e.g. Catalog.Товары) or ExternalDataSource.Источник.Table.Таблица"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
$objType = $parts[0]
|
||||||
|
$objName = $parts[1]
|
||||||
}
|
}
|
||||||
|
|
||||||
$objType = $parts[0]
|
if ($edsSource) {
|
||||||
$objName = $parts[1]
|
$typePlural = Join-Path (Join-Path "ExternalDataSources" $edsSource) "Tables"
|
||||||
|
} else {
|
||||||
if (-not $typePluralMap.ContainsKey($objType)) {
|
if (-not $typePluralMap.ContainsKey($objType)) {
|
||||||
Write-Host "[ERROR] Unknown type '$objType'. Supported: $($typePluralMap.Keys -join ', ')"
|
Write-Host "[ERROR] Unknown type '$objType'. Supported: $($typePluralMap.Keys -join ', ')"
|
||||||
exit 1
|
exit 1
|
||||||
|
}
|
||||||
|
$typePlural = $typePluralMap[$objType]
|
||||||
}
|
}
|
||||||
|
|
||||||
$typePlural = $typePluralMap[$objType]
|
# Реестр, где объект числится: обычно ChildObjects конфигурации, а для таблицы — файл источника.
|
||||||
|
if ($edsSource) {
|
||||||
|
$registryXml = Join-Path (Join-Path $ConfigDir "ExternalDataSources") "$edsSource.xml"
|
||||||
|
$registryRoot = "ExternalDataSource"
|
||||||
|
$registryLabel = "ExternalDataSources/$edsSource.xml"
|
||||||
|
if (-not (Test-Path $registryXml)) {
|
||||||
|
Write-Host "[ERROR] Внешний источник '$edsSource' не найден: $registryLabel"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$registryXml = $configXml
|
||||||
|
$registryRoot = "Configuration"
|
||||||
|
$registryLabel = "Configuration.xml"
|
||||||
|
}
|
||||||
|
|
||||||
Write-Host "=== meta-remove: ${objType}.${objName} ==="
|
Write-Host "=== meta-remove: ${objType}.${objName} ==="
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
@@ -304,10 +331,10 @@ if (-not $hasXml -and -not $hasDir) {
|
|||||||
# Check if registered in Configuration.xml before proceeding
|
# Check if registered in Configuration.xml before proceeding
|
||||||
$cfgCheckDoc = New-Object System.Xml.XmlDocument
|
$cfgCheckDoc = New-Object System.Xml.XmlDocument
|
||||||
$cfgCheckDoc.PreserveWhitespace = $true
|
$cfgCheckDoc.PreserveWhitespace = $true
|
||||||
$cfgCheckDoc.Load($configXml)
|
$cfgCheckDoc.Load($registryXml)
|
||||||
$cfgCheckNs = New-Object System.Xml.XmlNamespaceManager($cfgCheckDoc.NameTable)
|
$cfgCheckNs = New-Object System.Xml.XmlNamespaceManager($cfgCheckDoc.NameTable)
|
||||||
$cfgCheckNs.AddNamespace("md", "http://v8.1c.ru/8.3/MDClasses")
|
$cfgCheckNs.AddNamespace("md", "http://v8.1c.ru/8.3/MDClasses")
|
||||||
$cfgCheckNode = $cfgCheckDoc.DocumentElement.SelectSingleNode("md:Configuration/md:ChildObjects", $cfgCheckNs)
|
$cfgCheckNode = $cfgCheckDoc.DocumentElement.SelectSingleNode("md:$registryRoot/md:ChildObjects", $cfgCheckNs)
|
||||||
$registeredInCfg = $false
|
$registeredInCfg = $false
|
||||||
if ($cfgCheckNode) {
|
if ($cfgCheckNode) {
|
||||||
foreach ($child in @($cfgCheckNode.ChildNodes)) {
|
foreach ($child in @($cfgCheckNode.ChildNodes)) {
|
||||||
@@ -390,6 +417,18 @@ if ($ruMgr) {
|
|||||||
# English manager = plural directory name
|
# English manager = plural directory name
|
||||||
$searchPatterns += "$typePlural.$objName"
|
$searchPatterns += "$typePlural.$objName"
|
||||||
|
|
||||||
|
# 2а) Внешний источник данных: ссылки на сам источник и на его таблицы
|
||||||
|
if ($objType -eq "ExternalDataSource") {
|
||||||
|
$searchPatterns += "ExternalDataSource.$objName."
|
||||||
|
$searchPatterns += "ВнешниеИсточникиДанных.$objName"
|
||||||
|
$searchPatterns += "ExternalDataSources.$objName"
|
||||||
|
}
|
||||||
|
if ($edsSource) {
|
||||||
|
$searchPatterns += "ExternalDataSource.$edsSource.Table.$objName"
|
||||||
|
$searchPatterns += "ExternalDataSourceTableRef.$edsSource.$objName"
|
||||||
|
$searchPatterns += "ВнешниеИсточникиДанных.$edsSource.Таблицы.$objName"
|
||||||
|
}
|
||||||
|
|
||||||
# 3) CommonModule: method calls in BSL (ModuleName.)
|
# 3) CommonModule: method calls in BSL (ModuleName.)
|
||||||
if ($objType -eq "CommonModule") {
|
if ($objType -eq "CommonModule") {
|
||||||
$searchPatterns += "$objName."
|
$searchPatterns += "$objName."
|
||||||
@@ -504,22 +543,22 @@ if ($references.Count -gt 0) {
|
|||||||
Write-Host "[OK] No references found"
|
Write-Host "[OK] No references found"
|
||||||
}
|
}
|
||||||
|
|
||||||
# --- 3. Remove from Configuration.xml ChildObjects ---
|
# --- 3. Remove from registry ChildObjects (Configuration.xml или файл внешнего источника) ---
|
||||||
|
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
Write-Host "--- Configuration.xml ---"
|
Write-Host "--- $registryLabel ---"
|
||||||
|
|
||||||
$xmlDoc = New-Object System.Xml.XmlDocument
|
$xmlDoc = New-Object System.Xml.XmlDocument
|
||||||
$xmlDoc.PreserveWhitespace = $true
|
$xmlDoc.PreserveWhitespace = $true
|
||||||
$xmlDoc.Load($configXml)
|
$xmlDoc.Load($registryXml)
|
||||||
|
|
||||||
$ns = New-Object System.Xml.XmlNamespaceManager($xmlDoc.NameTable)
|
$ns = New-Object System.Xml.XmlNamespaceManager($xmlDoc.NameTable)
|
||||||
$ns.AddNamespace("md", "http://v8.1c.ru/8.3/MDClasses")
|
$ns.AddNamespace("md", "http://v8.1c.ru/8.3/MDClasses")
|
||||||
$ns.AddNamespace("v8", "http://v8.1c.ru/8.1/data/core")
|
$ns.AddNamespace("v8", "http://v8.1c.ru/8.1/data/core")
|
||||||
|
|
||||||
$cfgNode = $xmlDoc.DocumentElement.SelectSingleNode("md:Configuration", $ns)
|
$cfgNode = $xmlDoc.DocumentElement.SelectSingleNode("md:$registryRoot", $ns)
|
||||||
if (-not $cfgNode) {
|
if (-not $cfgNode) {
|
||||||
Write-Host "[ERROR] Configuration element not found in Configuration.xml"
|
Write-Host "[ERROR] $registryRoot element not found in $registryLabel"
|
||||||
$errors++
|
$errors++
|
||||||
} else {
|
} else {
|
||||||
$childObjects = $cfgNode.SelectSingleNode("md:ChildObjects", $ns)
|
$childObjects = $cfgNode.SelectSingleNode("md:ChildObjects", $ns)
|
||||||
@@ -570,10 +609,10 @@ if (-not $cfgNode) {
|
|||||||
$xmlText = [regex]::Replace($xmlText, '(?s)<!\[CDATA\[.*?\]\]>|<!--.*?-->|(?<=\S) />', { param($m) if ($m.Value -eq ' />') { '/>' } else { $m.Value } })
|
$xmlText = [regex]::Replace($xmlText, '(?s)<!\[CDATA\[.*?\]\]>|<!--.*?-->|(?<=\S) />', { param($m) if ($m.Value -eq ' />') { '/>' } else { $m.Value } })
|
||||||
# Целевой перевод строки: стиль файла-назначения — правка наследует его (#44/#46/#47),
|
# Целевой перевод строки: стиль файла-назначения — правка наследует его (#44/#46/#47),
|
||||||
# новый файл получает канон выгрузки CRLF. Зеркало _detect_xml_style в py-порту.
|
# новый файл получает канон выгрузки CRLF. Зеркало _detect_xml_style в py-порту.
|
||||||
$targetEol = if ((Test-Path -LiteralPath $configXml) -and ([System.IO.File]::ReadAllText($configXml) -notmatch "`r`n")) { "`n" } else { "`r`n" }
|
$targetEol = if ((Test-Path -LiteralPath $registryXml) -and ([System.IO.File]::ReadAllText($registryXml) -notmatch "`r`n")) { "`n" } else { "`r`n" }
|
||||||
$xmlText = ($xmlText -replace "`r`n", "`n") -replace "`n", $targetEol
|
$xmlText = ($xmlText -replace "`r`n", "`n") -replace "`n", $targetEol
|
||||||
[System.IO.File]::WriteAllText($configXml, $xmlText, $enc)
|
[System.IO.File]::WriteAllText($registryXml, $xmlText, $enc)
|
||||||
Write-Host "[OK] Configuration.xml saved"
|
Write-Host "[OK] $registryLabel saved"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# meta-remove v1.11 — Remove metadata object from 1C configuration dump
|
# meta-remove v1.12 — Remove metadata object from 1C configuration dump
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
@@ -250,6 +250,7 @@ TYPE_PLURAL_MAP = {
|
|||||||
"WSReference": "WSReferences",
|
"WSReference": "WSReferences",
|
||||||
"StyleItem": "StyleItems",
|
"StyleItem": "StyleItems",
|
||||||
"Language": "Languages",
|
"Language": "Languages",
|
||||||
|
"ExternalDataSource": "ExternalDataSources",
|
||||||
}
|
}
|
||||||
|
|
||||||
# Type -> reference type names (used in XML <v8:Type> elements)
|
# Type -> reference type names (used in XML <v8:Type> elements)
|
||||||
@@ -388,19 +389,42 @@ def main():
|
|||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
# --- Parse object spec ---
|
# --- Parse object spec ---
|
||||||
parts = args.Object.split(".", 1)
|
# Таблица внешнего источника — единственный объект с четырёхчастным именем: она лежит не в
|
||||||
if len(parts) != 2 or not parts[0] or not parts[1]:
|
# каталоге вида, а внутри источника, и числится в ChildObjects файла источника, не конфигурации.
|
||||||
print(f"[ERROR] Invalid object format '{args.Object}'. Expected: Type.Name (e.g. Catalog.\u0422\u043e\u0432\u0430\u0440\u044b)")
|
eds_source = ""
|
||||||
sys.exit(1)
|
m_eds = re.match(r'^ExternalDataSource\.([^.]+)\.Table\.(.+)$', args.Object)
|
||||||
|
if m_eds:
|
||||||
|
eds_source = m_eds.group(1)
|
||||||
|
obj_type = "Table"
|
||||||
|
obj_name = m_eds.group(2)
|
||||||
|
else:
|
||||||
|
parts = args.Object.split(".", 1)
|
||||||
|
if len(parts) != 2 or not parts[0] or not parts[1]:
|
||||||
|
print(f"[ERROR] Invalid object format '{args.Object}'. Expected: Type.Name (e.g. Catalog.\u0422\u043e\u0432\u0430\u0440\u044b) or ExternalDataSource.\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a.Table.\u0422\u0430\u0431\u043b\u0438\u0446\u0430")
|
||||||
|
sys.exit(1)
|
||||||
|
obj_type = parts[0]
|
||||||
|
obj_name = parts[1]
|
||||||
|
|
||||||
obj_type = parts[0]
|
if eds_source:
|
||||||
obj_name = parts[1]
|
type_plural = os.path.join("ExternalDataSources", eds_source, "Tables")
|
||||||
|
else:
|
||||||
|
if obj_type not in TYPE_PLURAL_MAP:
|
||||||
|
print(f"[ERROR] Unknown type '{obj_type}'. Supported: {', '.join(TYPE_PLURAL_MAP.keys())}")
|
||||||
|
sys.exit(1)
|
||||||
|
type_plural = TYPE_PLURAL_MAP[obj_type]
|
||||||
|
|
||||||
if obj_type not in TYPE_PLURAL_MAP:
|
# Реестр, где объект числится: обычно ChildObjects конфигурации, а для таблицы — файл источника.
|
||||||
print(f"[ERROR] Unknown type '{obj_type}'. Supported: {', '.join(TYPE_PLURAL_MAP.keys())}")
|
if eds_source:
|
||||||
sys.exit(1)
|
registry_xml = os.path.join(config_dir, "ExternalDataSources", f"{eds_source}.xml")
|
||||||
|
registry_root = "ExternalDataSource"
|
||||||
type_plural = TYPE_PLURAL_MAP[obj_type]
|
registry_label = f"ExternalDataSources/{eds_source}.xml"
|
||||||
|
if not os.path.isfile(registry_xml):
|
||||||
|
print(f"[ERROR] \u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a '{eds_source}' \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d: {registry_label}")
|
||||||
|
sys.exit(1)
|
||||||
|
else:
|
||||||
|
registry_xml = config_xml
|
||||||
|
registry_root = "Configuration"
|
||||||
|
registry_label = "Configuration.xml"
|
||||||
|
|
||||||
print(f"=== meta-remove: {obj_type}.{obj_name} ===")
|
print(f"=== meta-remove: {obj_type}.{obj_name} ===")
|
||||||
print()
|
print()
|
||||||
@@ -425,7 +449,7 @@ def main():
|
|||||||
|
|
||||||
if not has_xml and not has_dir:
|
if not has_xml and not has_dir:
|
||||||
# Check if registered in Configuration.xml before proceeding
|
# Check if registered in Configuration.xml before proceeding
|
||||||
cfg_check_tree = etree.parse(config_xml, etree.XMLParser(remove_blank_text=False))
|
cfg_check_tree = etree.parse(registry_xml, etree.XMLParser(remove_blank_text=False))
|
||||||
cfg_check_root = cfg_check_tree.getroot()
|
cfg_check_root = cfg_check_tree.getroot()
|
||||||
child_objects = cfg_check_root.find(f"{{{MD_NS}}}Configuration/{{{MD_NS}}}ChildObjects")
|
child_objects = cfg_check_root.find(f"{{{MD_NS}}}Configuration/{{{MD_NS}}}ChildObjects")
|
||||||
registered_in_cfg = False
|
registered_in_cfg = False
|
||||||
@@ -463,6 +487,16 @@ def main():
|
|||||||
search_patterns.append(f"{ru_mgr}.{obj_name}")
|
search_patterns.append(f"{ru_mgr}.{obj_name}")
|
||||||
search_patterns.append(f"{type_plural}.{obj_name}")
|
search_patterns.append(f"{type_plural}.{obj_name}")
|
||||||
|
|
||||||
|
# 2а) Внешний источник данных: ссылки на сам источник и на его таблицы
|
||||||
|
if obj_type == "ExternalDataSource":
|
||||||
|
search_patterns.append(f"ExternalDataSource.{obj_name}.")
|
||||||
|
search_patterns.append(f"\u0412\u043d\u0435\u0448\u043d\u0438\u0435\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438\u0414\u0430\u043d\u043d\u044b\u0445.{obj_name}")
|
||||||
|
search_patterns.append(f"ExternalDataSources.{obj_name}")
|
||||||
|
if eds_source:
|
||||||
|
search_patterns.append(f"ExternalDataSource.{eds_source}.Table.{obj_name}")
|
||||||
|
search_patterns.append(f"ExternalDataSourceTableRef.{eds_source}.{obj_name}")
|
||||||
|
search_patterns.append(f"\u0412\u043d\u0435\u0448\u043d\u0438\u0435\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438\u0414\u0430\u043d\u043d\u044b\u0445.{eds_source}.\u0422\u0430\u0431\u043b\u0438\u0446\u044b.{obj_name}")
|
||||||
|
|
||||||
# 3) CommonModule: method calls
|
# 3) CommonModule: method calls
|
||||||
if obj_type == "CommonModule":
|
if obj_type == "CommonModule":
|
||||||
search_patterns.append(f"{obj_name}.")
|
search_patterns.append(f"{obj_name}.")
|
||||||
@@ -578,17 +612,17 @@ def main():
|
|||||||
else:
|
else:
|
||||||
print("[OK] No references found")
|
print("[OK] No references found")
|
||||||
|
|
||||||
# --- 3. Remove from Configuration.xml ChildObjects ---
|
# --- 3. Remove from registry ChildObjects (Configuration.xml или файл внешнего источника) ---
|
||||||
print()
|
print()
|
||||||
print("--- Configuration.xml ---")
|
print(f"--- {registry_label} ---")
|
||||||
|
|
||||||
xml_parser = etree.XMLParser(remove_blank_text=False)
|
xml_parser = etree.XMLParser(remove_blank_text=False)
|
||||||
tree = etree.parse(config_xml, xml_parser)
|
tree = etree.parse(registry_xml, xml_parser)
|
||||||
xml_root = tree.getroot()
|
xml_root = tree.getroot()
|
||||||
|
|
||||||
cfg_node = xml_root.find(f"{{{MD_NS}}}Configuration")
|
cfg_node = xml_root.find(f"{{{MD_NS}}}{registry_root}")
|
||||||
if cfg_node is None:
|
if cfg_node is None:
|
||||||
print("[ERROR] Configuration element not found in Configuration.xml")
|
print(f"[ERROR] {registry_root} element not found in {registry_label}")
|
||||||
errors += 1
|
errors += 1
|
||||||
else:
|
else:
|
||||||
child_objects = cfg_node.find(f"{{{MD_NS}}}ChildObjects")
|
child_objects = cfg_node.find(f"{{{MD_NS}}}ChildObjects")
|
||||||
@@ -611,8 +645,8 @@ def main():
|
|||||||
|
|
||||||
# Save Configuration.xml
|
# Save Configuration.xml
|
||||||
if actions > 0 and not args.DryRun:
|
if actions > 0 and not args.DryRun:
|
||||||
save_xml_bom(tree, config_xml)
|
save_xml_bom(tree, registry_xml)
|
||||||
print("[OK] Configuration.xml saved")
|
print(f"[OK] {registry_label} saved")
|
||||||
|
|
||||||
# --- 4. Remove from subsystem Content ---
|
# --- 4. Remove from subsystem Content ---
|
||||||
print()
|
print()
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"name": "Поле в таблицу внешнего источника; реквизит туда не пускают",
|
||||||
|
"setup": "empty-config",
|
||||||
|
"preRun": [
|
||||||
|
{
|
||||||
|
"script": "meta-compile/scripts/meta-compile",
|
||||||
|
"input": {
|
||||||
|
"type": "ExternalDataSource",
|
||||||
|
"name": "PG",
|
||||||
|
"tables": {
|
||||||
|
"products": {
|
||||||
|
"keyFields": ["id"],
|
||||||
|
"fields": ["id: Number(10,0)", "name: String(150)"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"params": { "objectPath": "ExternalDataSources/PG/Tables/products.xml" },
|
||||||
|
"input": {
|
||||||
|
"add": {
|
||||||
|
"fields": [
|
||||||
|
"barcode: String(20) | nullable",
|
||||||
|
{ "name": "cost", "type": "Number(15,2)", "nameInDataSource": "cost_net", "readOnly": true }
|
||||||
|
],
|
||||||
|
"attributes": ["Лишний: String(10)"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expect": {
|
||||||
|
"stdoutContains": ["Added field: barcode", "Added field: cost", "attributes not allowed for Table"],
|
||||||
|
"fileContains": [
|
||||||
|
{
|
||||||
|
"file": "ExternalDataSources/PG/Tables/products.xml",
|
||||||
|
"text": ["<NameInDataSource>cost_net</NameInDataSource>", "<AllowNull>true</AllowNull>", "<Field uuid="]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fileNotContains": [
|
||||||
|
{ "file": "ExternalDataSources/PG/Tables/products.xml", "text": ["<Attribute uuid=", "<Indexing>"] }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,252 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
||||||
|
<Configuration uuid="UUID-001">
|
||||||
|
<InternalInfo>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-002</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-003</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-004</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-005</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-006</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-007</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-008</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-009</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-010</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-011</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-012</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-013</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-014</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-015</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
</InternalInfo>
|
||||||
|
<Properties>
|
||||||
|
<Name>TestConfig</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>TestConfig</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<NamePrefix/>
|
||||||
|
<ConfigurationExtensionCompatibilityMode>Version8_3_24</ConfigurationExtensionCompatibilityMode>
|
||||||
|
<DefaultRunMode>ManagedApplication</DefaultRunMode>
|
||||||
|
<UsePurposes>
|
||||||
|
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
|
||||||
|
</UsePurposes>
|
||||||
|
<ScriptVariant>Russian</ScriptVariant>
|
||||||
|
<DefaultRoles/>
|
||||||
|
<Vendor/>
|
||||||
|
<Version/>
|
||||||
|
<UpdateCatalogAddress/>
|
||||||
|
<IncludeHelpInContents>false</IncludeHelpInContents>
|
||||||
|
<UseManagedFormInOrdinaryApplication>false</UseManagedFormInOrdinaryApplication>
|
||||||
|
<UseOrdinaryFormInManagedApplication>false</UseOrdinaryFormInManagedApplication>
|
||||||
|
<AdditionalFullTextSearchDictionaries/>
|
||||||
|
<CommonSettingsStorage/>
|
||||||
|
<ReportsUserSettingsStorage/>
|
||||||
|
<ReportsVariantsStorage/>
|
||||||
|
<FormDataSettingsStorage/>
|
||||||
|
<DynamicListsUserSettingsStorage/>
|
||||||
|
<URLExternalDataStorage/>
|
||||||
|
<Content/>
|
||||||
|
<DefaultReportForm/>
|
||||||
|
<DefaultReportVariantForm/>
|
||||||
|
<DefaultReportSettingsForm/>
|
||||||
|
<DefaultReportAppearanceTemplate/>
|
||||||
|
<DefaultDynamicListSettingsForm/>
|
||||||
|
<DefaultSearchForm/>
|
||||||
|
<DefaultDataHistoryChangeHistoryForm/>
|
||||||
|
<DefaultDataHistoryVersionDataForm/>
|
||||||
|
<DefaultDataHistoryVersionDifferencesForm/>
|
||||||
|
<DefaultCollaborationSystemUsersChoiceForm/>
|
||||||
|
<RequiredMobileApplicationPermissions/>
|
||||||
|
<UsedMobileApplicationFunctionalities>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Biometrics</app:functionality>
|
||||||
|
<app:use>true</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Location</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>BackgroundLocation</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>BluetoothPrinters</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>WiFiPrinters</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Contacts</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Calendars</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>PushNotifications</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>LocalNotifications</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>InAppPurchases</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>PersonalComputerFileExchange</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Ads</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>NumberDialing</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>CallProcessing</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>CallLog</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>AutoSendSMS</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>ReceiveSMS</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>SMSLog</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Camera</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Microphone</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>MusicLibrary</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>PictureAndVideoLibraries</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>AudioPlaybackAndVibration</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>BackgroundAudioPlaybackAndVibration</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>InstallPackages</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>OSBackup</app:functionality>
|
||||||
|
<app:use>true</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>ApplicationUsageStatistics</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>BarcodeScanning</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>BackgroundAudioRecording</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>AllFilesAccess</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Videoconferences</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>NFC</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>DocumentScanning</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>SpeechToText</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Geofences</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>IncomingShareRequests</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>AllIncomingShareRequestsTypesProcessing</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
</UsedMobileApplicationFunctionalities>
|
||||||
|
<StandaloneConfigurationRestrictionRoles/>
|
||||||
|
<MobileApplicationURLs/>
|
||||||
|
<AllowedIncomingShareRequestTypes/>
|
||||||
|
<MainClientApplicationWindowMode>Normal</MainClientApplicationWindowMode>
|
||||||
|
<DefaultInterface/>
|
||||||
|
<DefaultStyle/>
|
||||||
|
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
||||||
|
<BriefInformation/>
|
||||||
|
<DetailedInformation/>
|
||||||
|
<Copyright/>
|
||||||
|
<VendorInformationAddress/>
|
||||||
|
<ConfigurationInformationAddress/>
|
||||||
|
<DataLockControlMode>Managed</DataLockControlMode>
|
||||||
|
<ObjectAutonumerationMode>NotAutoFree</ObjectAutonumerationMode>
|
||||||
|
<ModalityUseMode>DontUse</ModalityUseMode>
|
||||||
|
<SynchronousPlatformExtensionAndAddInCallUseMode>DontUse</SynchronousPlatformExtensionAndAddInCallUseMode>
|
||||||
|
<InterfaceCompatibilityMode>TaxiEnableVersion8_2</InterfaceCompatibilityMode>
|
||||||
|
<DatabaseTablespacesUseMode>DontUse</DatabaseTablespacesUseMode>
|
||||||
|
<CompatibilityMode>Version8_3_24</CompatibilityMode>
|
||||||
|
<DefaultConstantsForm/>
|
||||||
|
</Properties>
|
||||||
|
<ChildObjects>
|
||||||
|
<Language>Русский</Language>
|
||||||
|
<ExternalDataSource>PG</ExternalDataSource>
|
||||||
|
</ChildObjects>
|
||||||
|
</Configuration>
|
||||||
|
</MetaDataObject>
|
||||||
+18
@@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ClientApplicationInterface xmlns="http://v8.1c.ru/8.2/managed-application/core" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="InterfaceLayouter">
|
||||||
|
<top>
|
||||||
|
<panel id="UUID-001">
|
||||||
|
<uuid>UUID-002</uuid>
|
||||||
|
</panel>
|
||||||
|
</top>
|
||||||
|
<left>
|
||||||
|
<panel id="UUID-003">
|
||||||
|
<uuid>UUID-004</uuid>
|
||||||
|
</panel>
|
||||||
|
</left>
|
||||||
|
<panelDef id="UUID-004"/>
|
||||||
|
<panelDef id="UUID-005"/>
|
||||||
|
<panelDef id="UUID-006"/>
|
||||||
|
<panelDef id="UUID-002"/>
|
||||||
|
<panelDef id="UUID-007"/>
|
||||||
|
</ClientApplicationInterface>
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
||||||
|
<ExternalDataSource uuid="UUID-001">
|
||||||
|
<InternalInfo>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceManager.PG" category="Manager">
|
||||||
|
<xr:TypeId>UUID-002</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-003</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceTablesManager.PG" category="TablesManager">
|
||||||
|
<xr:TypeId>UUID-004</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-005</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceCubesManager.PG" category="CubesManager">
|
||||||
|
<xr:TypeId>UUID-006</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-007</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
</InternalInfo>
|
||||||
|
<Properties>
|
||||||
|
<Name>PG</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>PG</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<DataLockControlMode>Automatic</DataLockControlMode>
|
||||||
|
</Properties>
|
||||||
|
<ChildObjects>
|
||||||
|
<Table>products</Table>
|
||||||
|
</ChildObjects>
|
||||||
|
</ExternalDataSource>
|
||||||
|
</MetaDataObject>
|
||||||
+254
@@ -0,0 +1,254 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
||||||
|
<Table uuid="UUID-001">
|
||||||
|
<InternalInfo>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceTableManager.PG.products" category="Manager">
|
||||||
|
<xr:TypeId>UUID-002</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-003</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceTableObject.PG.products" category="Object">
|
||||||
|
<xr:TypeId>UUID-004</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-005</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceTableRef.PG.products" category="Ref">
|
||||||
|
<xr:TypeId>UUID-006</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-007</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceTableList.PG.products" category="List">
|
||||||
|
<xr:TypeId>UUID-008</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-009</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceTableRecord.PG.products" category="Record">
|
||||||
|
<xr:TypeId>UUID-010</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-011</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceTableRecordSet.PG.products" category="RecordSet">
|
||||||
|
<xr:TypeId>UUID-012</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-013</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceTableRecordKey.PG.products" category="RecordKey">
|
||||||
|
<xr:TypeId>UUID-014</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-015</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceTableRecordManager.PG.products" category="RecordManager">
|
||||||
|
<xr:TypeId>UUID-016</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-017</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
</InternalInfo>
|
||||||
|
<Properties>
|
||||||
|
<Name>products</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>products</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<TableType>Table</TableType>
|
||||||
|
<NameInDataSource>products</NameInDataSource>
|
||||||
|
<ExpressionInDataSource/>
|
||||||
|
<TableDataType>NonobjectData</TableDataType>
|
||||||
|
<KeyFields>
|
||||||
|
<xr:Field>ExternalDataSource.PG.Table.products.Field.id</xr:Field>
|
||||||
|
</KeyFields>
|
||||||
|
<PresentationField/>
|
||||||
|
<ParentField/>
|
||||||
|
<UnfilledParentValue xsi:nil="true"/>
|
||||||
|
<Characteristics/>
|
||||||
|
<UseStandardCommands>true</UseStandardCommands>
|
||||||
|
<QuickChoice>false</QuickChoice>
|
||||||
|
<InputByString/>
|
||||||
|
<CreateOnInput>Auto</CreateOnInput>
|
||||||
|
<SearchStringModeOnInputByString>Begin</SearchStringModeOnInputByString>
|
||||||
|
<ChoiceDataGetModeOnInputByString>Directly</ChoiceDataGetModeOnInputByString>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<DefaultObjectForm/>
|
||||||
|
<DefaultRecordForm/>
|
||||||
|
<DefaultListForm/>
|
||||||
|
<DefaultChoiceForm/>
|
||||||
|
<ObjectPresentation/>
|
||||||
|
<ExtendedObjectPresentation/>
|
||||||
|
<RecordPresentation/>
|
||||||
|
<ExtendedRecordPresentation/>
|
||||||
|
<ListPresentation/>
|
||||||
|
<ExtendedListPresentation/>
|
||||||
|
<Explanation/>
|
||||||
|
<IncludeHelpInContents>false</IncludeHelpInContents>
|
||||||
|
<ReadOnly>false</ReadOnly>
|
||||||
|
<TransactionsIsolationLevel>Auto</TransactionsIsolationLevel>
|
||||||
|
<DataVersionField/>
|
||||||
|
<EditType>InDialog</EditType>
|
||||||
|
<BasedOn/>
|
||||||
|
<DataLockFields/>
|
||||||
|
<DataLockControlMode>Automatic</DataLockControlMode>
|
||||||
|
</Properties>
|
||||||
|
<ChildObjects>
|
||||||
|
<Field uuid="UUID-018">
|
||||||
|
<Properties>
|
||||||
|
<Name>id</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>id</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<Type>
|
||||||
|
<v8:Type>xs:decimal</v8:Type>
|
||||||
|
<v8:NumberQualifiers>
|
||||||
|
<v8:Digits>10</v8:Digits>
|
||||||
|
<v8:FractionDigits>0</v8:FractionDigits>
|
||||||
|
<v8:AllowedSign>Any</v8:AllowedSign>
|
||||||
|
</v8:NumberQualifiers>
|
||||||
|
</Type>
|
||||||
|
<PasswordMode>false</PasswordMode>
|
||||||
|
<Format/>
|
||||||
|
<EditFormat/>
|
||||||
|
<ToolTip/>
|
||||||
|
<MarkNegatives>false</MarkNegatives>
|
||||||
|
<Mask/>
|
||||||
|
<MultiLine>false</MultiLine>
|
||||||
|
<ExtendedEdit>false</ExtendedEdit>
|
||||||
|
<MinValue xsi:nil="true"/>
|
||||||
|
<MaxValue xsi:nil="true"/>
|
||||||
|
<FillFromFillingValue>false</FillFromFillingValue>
|
||||||
|
<FillValue xsi:type="xs:decimal">0</FillValue>
|
||||||
|
<FillChecking>DontCheck</FillChecking>
|
||||||
|
<ChoiceParameterLinks/>
|
||||||
|
<ChoiceParameters/>
|
||||||
|
<QuickChoice>Auto</QuickChoice>
|
||||||
|
<CreateOnInput>Auto</CreateOnInput>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<ChoiceForm/>
|
||||||
|
<NameInDataSource>id</NameInDataSource>
|
||||||
|
<ReadOnly>false</ReadOnly>
|
||||||
|
<AllowNull>false</AllowNull>
|
||||||
|
</Properties>
|
||||||
|
</Field>
|
||||||
|
<Field uuid="UUID-019">
|
||||||
|
<Properties>
|
||||||
|
<Name>name</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>name</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<Type>
|
||||||
|
<v8:Type>xs:string</v8:Type>
|
||||||
|
<v8:StringQualifiers>
|
||||||
|
<v8:Length>150</v8:Length>
|
||||||
|
<v8:AllowedLength>Variable</v8:AllowedLength>
|
||||||
|
</v8:StringQualifiers>
|
||||||
|
</Type>
|
||||||
|
<PasswordMode>false</PasswordMode>
|
||||||
|
<Format/>
|
||||||
|
<EditFormat/>
|
||||||
|
<ToolTip/>
|
||||||
|
<MarkNegatives>false</MarkNegatives>
|
||||||
|
<Mask/>
|
||||||
|
<MultiLine>false</MultiLine>
|
||||||
|
<ExtendedEdit>false</ExtendedEdit>
|
||||||
|
<MinValue xsi:nil="true"/>
|
||||||
|
<MaxValue xsi:nil="true"/>
|
||||||
|
<FillFromFillingValue>false</FillFromFillingValue>
|
||||||
|
<FillValue xsi:type="xs:string"/>
|
||||||
|
<FillChecking>DontCheck</FillChecking>
|
||||||
|
<ChoiceParameterLinks/>
|
||||||
|
<ChoiceParameters/>
|
||||||
|
<QuickChoice>Auto</QuickChoice>
|
||||||
|
<CreateOnInput>Auto</CreateOnInput>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<ChoiceForm/>
|
||||||
|
<NameInDataSource>name</NameInDataSource>
|
||||||
|
<ReadOnly>false</ReadOnly>
|
||||||
|
<AllowNull>false</AllowNull>
|
||||||
|
</Properties>
|
||||||
|
</Field>
|
||||||
|
<Field uuid="UUID-020">
|
||||||
|
<Properties>
|
||||||
|
<Name>barcode</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>barcode</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<Type>
|
||||||
|
<v8:Type>xs:string</v8:Type>
|
||||||
|
<v8:StringQualifiers>
|
||||||
|
<v8:Length>20</v8:Length>
|
||||||
|
<v8:AllowedLength>Variable</v8:AllowedLength>
|
||||||
|
</v8:StringQualifiers>
|
||||||
|
</Type>
|
||||||
|
<PasswordMode>false</PasswordMode>
|
||||||
|
<Format/>
|
||||||
|
<EditFormat/>
|
||||||
|
<ToolTip/>
|
||||||
|
<MarkNegatives>false</MarkNegatives>
|
||||||
|
<Mask/>
|
||||||
|
<MultiLine>false</MultiLine>
|
||||||
|
<ExtendedEdit>false</ExtendedEdit>
|
||||||
|
<MinValue xsi:nil="true"/>
|
||||||
|
<MaxValue xsi:nil="true"/>
|
||||||
|
<FillFromFillingValue>false</FillFromFillingValue>
|
||||||
|
<FillValue xsi:type="xs:string"/>
|
||||||
|
<FillChecking>DontCheck</FillChecking>
|
||||||
|
<ChoiceParameterLinks/>
|
||||||
|
<ChoiceParameters/>
|
||||||
|
<QuickChoice>Auto</QuickChoice>
|
||||||
|
<CreateOnInput>Auto</CreateOnInput>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<ChoiceForm/>
|
||||||
|
<NameInDataSource>barcode</NameInDataSource>
|
||||||
|
<ReadOnly>false</ReadOnly>
|
||||||
|
<AllowNull>true</AllowNull>
|
||||||
|
</Properties>
|
||||||
|
</Field>
|
||||||
|
<Field uuid="UUID-021">
|
||||||
|
<Properties>
|
||||||
|
<Name>cost</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>cost</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<Type>
|
||||||
|
<v8:Type>xs:decimal</v8:Type>
|
||||||
|
<v8:NumberQualifiers>
|
||||||
|
<v8:Digits>15</v8:Digits>
|
||||||
|
<v8:FractionDigits>2</v8:FractionDigits>
|
||||||
|
<v8:AllowedSign>Any</v8:AllowedSign>
|
||||||
|
</v8:NumberQualifiers>
|
||||||
|
</Type>
|
||||||
|
<PasswordMode>false</PasswordMode>
|
||||||
|
<Format/>
|
||||||
|
<EditFormat/>
|
||||||
|
<ToolTip/>
|
||||||
|
<MarkNegatives>false</MarkNegatives>
|
||||||
|
<Mask/>
|
||||||
|
<MultiLine>false</MultiLine>
|
||||||
|
<ExtendedEdit>false</ExtendedEdit>
|
||||||
|
<MinValue xsi:nil="true"/>
|
||||||
|
<MaxValue xsi:nil="true"/>
|
||||||
|
<FillFromFillingValue>false</FillFromFillingValue>
|
||||||
|
<FillValue xsi:type="xs:decimal">0</FillValue>
|
||||||
|
<FillChecking>DontCheck</FillChecking>
|
||||||
|
<ChoiceParameterLinks/>
|
||||||
|
<ChoiceParameters/>
|
||||||
|
<QuickChoice>Auto</QuickChoice>
|
||||||
|
<CreateOnInput>Auto</CreateOnInput>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<ChoiceForm/>
|
||||||
|
<NameInDataSource>cost_net</NameInDataSource>
|
||||||
|
<ReadOnly>true</ReadOnly>
|
||||||
|
<AllowNull>false</AllowNull>
|
||||||
|
</Properties>
|
||||||
|
</Field>
|
||||||
|
</ChildObjects>
|
||||||
|
</Table>
|
||||||
|
</MetaDataObject>
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
||||||
|
<Language uuid="UUID-001">
|
||||||
|
<Properties>
|
||||||
|
<Name>Русский</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Русский</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<LanguageCode>ru</LanguageCode>
|
||||||
|
</Properties>
|
||||||
|
</Language>
|
||||||
|
</MetaDataObject>
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"name": "Таблица внешнего источника: файл удалён, имя убрано из ChildObjects источника",
|
||||||
|
"preRun": [
|
||||||
|
{
|
||||||
|
"script": "meta-compile/scripts/meta-compile",
|
||||||
|
"input": {
|
||||||
|
"type": "ExternalDataSource",
|
||||||
|
"name": "PG",
|
||||||
|
"tables": {
|
||||||
|
"products": { "keyFields": ["id"], "fields": ["id: Number(10,0)"] },
|
||||||
|
"prices": ["product_id: Number(10,0)", "price: Number(15,2)"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"object": "ExternalDataSource.PG.Table.prices",
|
||||||
|
"expect": {
|
||||||
|
"files": ["ExternalDataSources/PG.xml", "ExternalDataSources/PG/Tables/products.xml"],
|
||||||
|
"filesAbsent": ["ExternalDataSources/PG/Tables/prices.xml"],
|
||||||
|
"fileContains": [
|
||||||
|
{ "file": "ExternalDataSources/PG.xml", "text": "<Table>products</Table>" }
|
||||||
|
],
|
||||||
|
"fileNotContains": [
|
||||||
|
{ "file": "ExternalDataSources/PG.xml", "text": "<Table>prices</Table>" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,252 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
||||||
|
<Configuration uuid="UUID-001">
|
||||||
|
<InternalInfo>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-002</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-003</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-004</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-005</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-006</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-007</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-008</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-009</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-010</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-011</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-012</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-013</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-014</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-015</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
</InternalInfo>
|
||||||
|
<Properties>
|
||||||
|
<Name>TestConfig</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>TestConfig</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<NamePrefix/>
|
||||||
|
<ConfigurationExtensionCompatibilityMode>Version8_3_24</ConfigurationExtensionCompatibilityMode>
|
||||||
|
<DefaultRunMode>ManagedApplication</DefaultRunMode>
|
||||||
|
<UsePurposes>
|
||||||
|
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
|
||||||
|
</UsePurposes>
|
||||||
|
<ScriptVariant>Russian</ScriptVariant>
|
||||||
|
<DefaultRoles/>
|
||||||
|
<Vendor/>
|
||||||
|
<Version/>
|
||||||
|
<UpdateCatalogAddress/>
|
||||||
|
<IncludeHelpInContents>false</IncludeHelpInContents>
|
||||||
|
<UseManagedFormInOrdinaryApplication>false</UseManagedFormInOrdinaryApplication>
|
||||||
|
<UseOrdinaryFormInManagedApplication>false</UseOrdinaryFormInManagedApplication>
|
||||||
|
<AdditionalFullTextSearchDictionaries/>
|
||||||
|
<CommonSettingsStorage/>
|
||||||
|
<ReportsUserSettingsStorage/>
|
||||||
|
<ReportsVariantsStorage/>
|
||||||
|
<FormDataSettingsStorage/>
|
||||||
|
<DynamicListsUserSettingsStorage/>
|
||||||
|
<URLExternalDataStorage/>
|
||||||
|
<Content/>
|
||||||
|
<DefaultReportForm/>
|
||||||
|
<DefaultReportVariantForm/>
|
||||||
|
<DefaultReportSettingsForm/>
|
||||||
|
<DefaultReportAppearanceTemplate/>
|
||||||
|
<DefaultDynamicListSettingsForm/>
|
||||||
|
<DefaultSearchForm/>
|
||||||
|
<DefaultDataHistoryChangeHistoryForm/>
|
||||||
|
<DefaultDataHistoryVersionDataForm/>
|
||||||
|
<DefaultDataHistoryVersionDifferencesForm/>
|
||||||
|
<DefaultCollaborationSystemUsersChoiceForm/>
|
||||||
|
<RequiredMobileApplicationPermissions/>
|
||||||
|
<UsedMobileApplicationFunctionalities>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Biometrics</app:functionality>
|
||||||
|
<app:use>true</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Location</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>BackgroundLocation</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>BluetoothPrinters</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>WiFiPrinters</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Contacts</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Calendars</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>PushNotifications</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>LocalNotifications</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>InAppPurchases</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>PersonalComputerFileExchange</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Ads</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>NumberDialing</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>CallProcessing</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>CallLog</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>AutoSendSMS</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>ReceiveSMS</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>SMSLog</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Camera</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Microphone</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>MusicLibrary</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>PictureAndVideoLibraries</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>AudioPlaybackAndVibration</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>BackgroundAudioPlaybackAndVibration</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>InstallPackages</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>OSBackup</app:functionality>
|
||||||
|
<app:use>true</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>ApplicationUsageStatistics</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>BarcodeScanning</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>BackgroundAudioRecording</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>AllFilesAccess</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Videoconferences</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>NFC</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>DocumentScanning</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>SpeechToText</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Geofences</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>IncomingShareRequests</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>AllIncomingShareRequestsTypesProcessing</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
</UsedMobileApplicationFunctionalities>
|
||||||
|
<StandaloneConfigurationRestrictionRoles/>
|
||||||
|
<MobileApplicationURLs/>
|
||||||
|
<AllowedIncomingShareRequestTypes/>
|
||||||
|
<MainClientApplicationWindowMode>Normal</MainClientApplicationWindowMode>
|
||||||
|
<DefaultInterface/>
|
||||||
|
<DefaultStyle/>
|
||||||
|
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
||||||
|
<BriefInformation/>
|
||||||
|
<DetailedInformation/>
|
||||||
|
<Copyright/>
|
||||||
|
<VendorInformationAddress/>
|
||||||
|
<ConfigurationInformationAddress/>
|
||||||
|
<DataLockControlMode>Managed</DataLockControlMode>
|
||||||
|
<ObjectAutonumerationMode>NotAutoFree</ObjectAutonumerationMode>
|
||||||
|
<ModalityUseMode>DontUse</ModalityUseMode>
|
||||||
|
<SynchronousPlatformExtensionAndAddInCallUseMode>DontUse</SynchronousPlatformExtensionAndAddInCallUseMode>
|
||||||
|
<InterfaceCompatibilityMode>TaxiEnableVersion8_2</InterfaceCompatibilityMode>
|
||||||
|
<DatabaseTablespacesUseMode>DontUse</DatabaseTablespacesUseMode>
|
||||||
|
<CompatibilityMode>Version8_3_24</CompatibilityMode>
|
||||||
|
<DefaultConstantsForm/>
|
||||||
|
</Properties>
|
||||||
|
<ChildObjects>
|
||||||
|
<Language>Русский</Language>
|
||||||
|
<ExternalDataSource>PG</ExternalDataSource>
|
||||||
|
</ChildObjects>
|
||||||
|
</Configuration>
|
||||||
|
</MetaDataObject>
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ClientApplicationInterface xmlns="http://v8.1c.ru/8.2/managed-application/core" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="InterfaceLayouter">
|
||||||
|
<top>
|
||||||
|
<panel id="UUID-001">
|
||||||
|
<uuid>UUID-002</uuid>
|
||||||
|
</panel>
|
||||||
|
</top>
|
||||||
|
<left>
|
||||||
|
<panel id="UUID-003">
|
||||||
|
<uuid>UUID-004</uuid>
|
||||||
|
</panel>
|
||||||
|
</left>
|
||||||
|
<panelDef id="UUID-004"/>
|
||||||
|
<panelDef id="UUID-005"/>
|
||||||
|
<panelDef id="UUID-006"/>
|
||||||
|
<panelDef id="UUID-002"/>
|
||||||
|
<panelDef id="UUID-007"/>
|
||||||
|
</ClientApplicationInterface>
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
||||||
|
<ExternalDataSource uuid="UUID-001">
|
||||||
|
<InternalInfo>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceManager.PG" category="Manager">
|
||||||
|
<xr:TypeId>UUID-002</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-003</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceTablesManager.PG" category="TablesManager">
|
||||||
|
<xr:TypeId>UUID-004</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-005</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceCubesManager.PG" category="CubesManager">
|
||||||
|
<xr:TypeId>UUID-006</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-007</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
</InternalInfo>
|
||||||
|
<Properties>
|
||||||
|
<Name>PG</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>PG</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<DataLockControlMode>Automatic</DataLockControlMode>
|
||||||
|
</Properties>
|
||||||
|
<ChildObjects>
|
||||||
|
<Table>products</Table>
|
||||||
|
</ChildObjects>
|
||||||
|
</ExternalDataSource>
|
||||||
|
</MetaDataObject>
|
||||||
+130
@@ -0,0 +1,130 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
||||||
|
<Table uuid="UUID-001">
|
||||||
|
<InternalInfo>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceTableManager.PG.products" category="Manager">
|
||||||
|
<xr:TypeId>UUID-002</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-003</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceTableObject.PG.products" category="Object">
|
||||||
|
<xr:TypeId>UUID-004</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-005</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceTableRef.PG.products" category="Ref">
|
||||||
|
<xr:TypeId>UUID-006</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-007</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceTableList.PG.products" category="List">
|
||||||
|
<xr:TypeId>UUID-008</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-009</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceTableRecord.PG.products" category="Record">
|
||||||
|
<xr:TypeId>UUID-010</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-011</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceTableRecordSet.PG.products" category="RecordSet">
|
||||||
|
<xr:TypeId>UUID-012</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-013</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceTableRecordKey.PG.products" category="RecordKey">
|
||||||
|
<xr:TypeId>UUID-014</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-015</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="ExternalDataSourceTableRecordManager.PG.products" category="RecordManager">
|
||||||
|
<xr:TypeId>UUID-016</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-017</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
</InternalInfo>
|
||||||
|
<Properties>
|
||||||
|
<Name>products</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>products</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<TableType>Table</TableType>
|
||||||
|
<NameInDataSource>products</NameInDataSource>
|
||||||
|
<ExpressionInDataSource/>
|
||||||
|
<TableDataType>NonobjectData</TableDataType>
|
||||||
|
<KeyFields>
|
||||||
|
<xr:Field>ExternalDataSource.PG.Table.products.Field.id</xr:Field>
|
||||||
|
</KeyFields>
|
||||||
|
<PresentationField/>
|
||||||
|
<ParentField/>
|
||||||
|
<UnfilledParentValue xsi:nil="true"/>
|
||||||
|
<Characteristics/>
|
||||||
|
<UseStandardCommands>true</UseStandardCommands>
|
||||||
|
<QuickChoice>false</QuickChoice>
|
||||||
|
<InputByString/>
|
||||||
|
<CreateOnInput>Auto</CreateOnInput>
|
||||||
|
<SearchStringModeOnInputByString>Begin</SearchStringModeOnInputByString>
|
||||||
|
<ChoiceDataGetModeOnInputByString>Directly</ChoiceDataGetModeOnInputByString>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<DefaultObjectForm/>
|
||||||
|
<DefaultRecordForm/>
|
||||||
|
<DefaultListForm/>
|
||||||
|
<DefaultChoiceForm/>
|
||||||
|
<ObjectPresentation/>
|
||||||
|
<ExtendedObjectPresentation/>
|
||||||
|
<RecordPresentation/>
|
||||||
|
<ExtendedRecordPresentation/>
|
||||||
|
<ListPresentation/>
|
||||||
|
<ExtendedListPresentation/>
|
||||||
|
<Explanation/>
|
||||||
|
<IncludeHelpInContents>false</IncludeHelpInContents>
|
||||||
|
<ReadOnly>false</ReadOnly>
|
||||||
|
<TransactionsIsolationLevel>Auto</TransactionsIsolationLevel>
|
||||||
|
<DataVersionField/>
|
||||||
|
<EditType>InDialog</EditType>
|
||||||
|
<BasedOn/>
|
||||||
|
<DataLockFields/>
|
||||||
|
<DataLockControlMode>Automatic</DataLockControlMode>
|
||||||
|
</Properties>
|
||||||
|
<ChildObjects>
|
||||||
|
<Field uuid="UUID-018">
|
||||||
|
<Properties>
|
||||||
|
<Name>id</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>id</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<Type>
|
||||||
|
<v8:Type>xs:decimal</v8:Type>
|
||||||
|
<v8:NumberQualifiers>
|
||||||
|
<v8:Digits>10</v8:Digits>
|
||||||
|
<v8:FractionDigits>0</v8:FractionDigits>
|
||||||
|
<v8:AllowedSign>Any</v8:AllowedSign>
|
||||||
|
</v8:NumberQualifiers>
|
||||||
|
</Type>
|
||||||
|
<PasswordMode>false</PasswordMode>
|
||||||
|
<Format/>
|
||||||
|
<EditFormat/>
|
||||||
|
<ToolTip/>
|
||||||
|
<MarkNegatives>false</MarkNegatives>
|
||||||
|
<Mask/>
|
||||||
|
<MultiLine>false</MultiLine>
|
||||||
|
<ExtendedEdit>false</ExtendedEdit>
|
||||||
|
<MinValue xsi:nil="true"/>
|
||||||
|
<MaxValue xsi:nil="true"/>
|
||||||
|
<FillFromFillingValue>false</FillFromFillingValue>
|
||||||
|
<FillValue xsi:type="xs:decimal">0</FillValue>
|
||||||
|
<FillChecking>DontCheck</FillChecking>
|
||||||
|
<ChoiceParameterLinks/>
|
||||||
|
<ChoiceParameters/>
|
||||||
|
<QuickChoice>Auto</QuickChoice>
|
||||||
|
<CreateOnInput>Auto</CreateOnInput>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<ChoiceForm/>
|
||||||
|
<NameInDataSource>id</NameInDataSource>
|
||||||
|
<ReadOnly>false</ReadOnly>
|
||||||
|
<AllowNull>false</AllowNull>
|
||||||
|
</Properties>
|
||||||
|
</Field>
|
||||||
|
</ChildObjects>
|
||||||
|
</Table>
|
||||||
|
</MetaDataObject>
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
||||||
|
<Language uuid="UUID-001">
|
||||||
|
<Properties>
|
||||||
|
<Name>Русский</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Русский</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<LanguageCode>ru</LanguageCode>
|
||||||
|
</Properties>
|
||||||
|
</Language>
|
||||||
|
</MetaDataObject>
|
||||||
Reference in New Issue
Block a user