mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-19 09:09:41 +03:00
feat(meta-compile,meta-decompile): предопределённые элементы Catalog (Ext/Predefined.xml) (v1.19/v0.5)
Раундтрип-находка (класс-3, непокрытый блок — крупнейшая категория ~56k). meta-compile вообще не генерил Ext/Predefined.xml. DSL спроектирован по данным корпуса (9309 элементов) + совместно. DSL `predefined` (массив; строка ИЛИ объект): - строка "(Код) Имя [Наименование]": Имя обяз.; Наименование — нет [..] → авто(Split-CamelCase), [] → пусто (системные/placeholder, 29% корпуса), [текст] → задано; - объект (группа/иерархия): name/code/description/isFolder/childItems + рус.синонимы имя/код/наименование/группа/подчиненные (прощающий ввод). - Код: по codeType каталога (Number→xs:decimal, String→без типа), пусто→<Code/>. meta-compile (дуал-порт): генерация Ext/Predefined.xml (root CatalogPredefinedItems + рекурсия Item). Заодно фикс: Esc-XmlText для ТЕКСТА элемента (& < > без экранирования кавычек — в тексте 1С держит raw). meta-decompile: захват predefined → компактный DSL (строка/объект). Фикс PS-ловушки распаковки одноэлементного @() из if → папки с ОДНИМ ребёнком теряли его. spec meta-dsl-spec.md v2.4 §7.1.2; тест-кейс catalog-predefined. Валидация: PS==PY паритет; predefined-категории 0 (PredefinedData/Item/ChildItems/Description/Code); полный прогон −56620 (218537→161917); регресс 36/36 (ps+py); 1С-cert зелёный (грузится в платформу). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -330,6 +330,11 @@ function Esc-Xml {
|
|||||||
param([string]$s)
|
param([string]$s)
|
||||||
return $s.Replace('&','&').Replace('<','<').Replace('>','>').Replace('"','"')
|
return $s.Replace('&','&').Replace('<','<').Replace('>','>').Replace('"','"')
|
||||||
}
|
}
|
||||||
|
# Эскейп ТЕКСТА элемента: только & < > (кавычки в тексте 1С держит raw, экранирование только для атрибутов).
|
||||||
|
function Esc-XmlText {
|
||||||
|
param([string]$s)
|
||||||
|
return $s.Replace('&','&').Replace('<','<').Replace('>','>')
|
||||||
|
}
|
||||||
|
|
||||||
# ML-значение: строка → один <v8:item> ru; объект {lang: content} → item на язык (в порядке ключей).
|
# ML-значение: строка → один <v8:item> ru; объект {lang: content} → item на язык (в порядке ключей).
|
||||||
function Emit-MLItems {
|
function Emit-MLItems {
|
||||||
@@ -3070,6 +3075,59 @@ $typesNoSubDir = @("DefinedType","ScheduledJob","EventSubscription")
|
|||||||
|
|
||||||
# Object subdirectory: {OutputDir}/{TypePlural}/{Name}/Ext/
|
# Object subdirectory: {OutputDir}/{TypePlural}/{Name}/Ext/
|
||||||
$objSubDir = Join-Path $typeDir $objName
|
$objSubDir = Join-Path $typeDir $objName
|
||||||
|
# --- Predefined data (Ext/Predefined.xml) ---
|
||||||
|
# Элемент DSL: строка "(Код) Имя [Наименование]" ЛИБО объект (+ русские синонимы ключей).
|
||||||
|
# Наименование: нет [..]/ключа → авто(Split-CamelCase Имени); [] / "" → пусто; [текст]/текст → как есть.
|
||||||
|
function Resolve-PredefItem {
|
||||||
|
param($val)
|
||||||
|
if ($val -is [string]) {
|
||||||
|
$m = [regex]::Match($val, '^\s*(?:\(([^)]*)\)\s*)?(\S+)(?:\s*\[(.*)\])?\s*$')
|
||||||
|
$name = $m.Groups[2].Value
|
||||||
|
$code = if ($m.Groups[1].Success) { $m.Groups[1].Value } else { '' }
|
||||||
|
$desc = if ($m.Groups[3].Success) { $m.Groups[3].Value } else { Split-CamelCase $name }
|
||||||
|
return @{ name = $name; code = $code; desc = $desc; isFolder = $false; children = @() }
|
||||||
|
}
|
||||||
|
# Объектная форма + русские синонимы (прощающий ввод).
|
||||||
|
$gv = { param($o, [string[]]$keys) foreach ($k in $keys) { if ($o.PSObject.Properties[$k]) { return $o.$k } } return $null }
|
||||||
|
$name = "$(& $gv $val @('name','имя'))"
|
||||||
|
$codeV = & $gv $val @('code','код')
|
||||||
|
$code = if ($null -ne $codeV) { "$codeV" } else { '' }
|
||||||
|
$hasDesc = $val.PSObject.Properties['description'] -or $val.PSObject.Properties['наименование']
|
||||||
|
$descV = & $gv $val @('description','наименование')
|
||||||
|
$desc = if ($hasDesc) { "$descV" } else { Split-CamelCase $name } # ключа нет → авто; '' → пусто
|
||||||
|
$folderV = & $gv $val @('isFolder','группа')
|
||||||
|
$isFolder = ($folderV -eq $true)
|
||||||
|
$subs = & $gv $val @('childItems','подчиненные')
|
||||||
|
return @{ name = $name; code = $code; desc = $desc; isFolder = $isFolder; children = @(if ($subs) { $subs } else { @() }) }
|
||||||
|
}
|
||||||
|
function Emit-PredefItem {
|
||||||
|
param($sb, $val, [string]$indent, [string]$codeType)
|
||||||
|
$r = Resolve-PredefItem $val
|
||||||
|
[void]$sb.Append("$indent<Item id=`"$(New-Guid-String)`">`n")
|
||||||
|
[void]$sb.Append("$indent`t<Name>$(Esc-XmlText $r.name)</Name>`n")
|
||||||
|
if (-not $r.code) { [void]$sb.Append("$indent`t<Code/>`n") }
|
||||||
|
elseif ($codeType -eq 'Number') { [void]$sb.Append("$indent`t<Code xsi:type=`"xs:decimal`">$(Esc-XmlText $r.code)</Code>`n") }
|
||||||
|
else { [void]$sb.Append("$indent`t<Code>$(Esc-XmlText $r.code)</Code>`n") }
|
||||||
|
if ($r.desc -eq '') { [void]$sb.Append("$indent`t<Description/>`n") }
|
||||||
|
else { [void]$sb.Append("$indent`t<Description>$(Esc-XmlText $r.desc)</Description>`n") }
|
||||||
|
[void]$sb.Append("$indent`t<IsFolder>$(if ($r.isFolder) { 'true' } else { 'false' })</IsFolder>`n")
|
||||||
|
if ($r.children.Count -gt 0) {
|
||||||
|
[void]$sb.Append("$indent`t<ChildItems>`n")
|
||||||
|
foreach ($c in $r.children) { Emit-PredefItem $sb $c "$indent`t`t" $codeType }
|
||||||
|
[void]$sb.Append("$indent`t</ChildItems>`n")
|
||||||
|
}
|
||||||
|
[void]$sb.Append("$indent</Item>`n")
|
||||||
|
}
|
||||||
|
function Build-PredefinedXml {
|
||||||
|
param($items, [string]$xsiType, [string]$codeType)
|
||||||
|
$sb = New-Object System.Text.StringBuilder
|
||||||
|
[void]$sb.Append("<?xml version=`"1.0`" encoding=`"UTF-8`"?>`n")
|
||||||
|
[void]$sb.Append("<PredefinedData xmlns=`"http://v8.1c.ru/8.3/xcf/predef`" xmlns:v8=`"http://v8.1c.ru/8.1/data/core`" 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`" xsi:type=`"$xsiType`" version=`"$($script:formatVersion)`">`n")
|
||||||
|
foreach ($it in $items) { Emit-PredefItem $sb $it "`t" $codeType }
|
||||||
|
[void]$sb.Append("</PredefinedData>`n")
|
||||||
|
return $sb.ToString()
|
||||||
|
}
|
||||||
|
|
||||||
$extDir = Join-Path $objSubDir "Ext"
|
$extDir = Join-Path $objSubDir "Ext"
|
||||||
|
|
||||||
if (-not (Test-Path $typeDir)) {
|
if (-not (Test-Path $typeDir)) {
|
||||||
@@ -3168,6 +3226,16 @@ if ($objType -eq "BusinessProcess") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Предопределённые элементы (Ext/Predefined.xml) — пока Catalog. Пусто/нет ключа → файл не создаём.
|
||||||
|
if ($objType -eq "Catalog" -and $def.predefined -and @($def.predefined).Count -gt 0) {
|
||||||
|
Ensure-ExtDir
|
||||||
|
$catCodeType = if ($def.codeType) { "$($def.codeType)" } else { 'String' }
|
||||||
|
$predefXml = Build-PredefinedXml @($def.predefined) "CatalogPredefinedItems" $catCodeType
|
||||||
|
$predefPath = Join-Path $extDir "Predefined.xml"
|
||||||
|
[System.IO.File]::WriteAllText($predefPath, $predefXml, $enc)
|
||||||
|
$modulesCreated += $predefPath
|
||||||
|
}
|
||||||
|
|
||||||
# --- 17. Register in Configuration.xml ---
|
# --- 17. Register in Configuration.xml ---
|
||||||
|
|
||||||
$configXmlPath = Join-Path $OutputDir "Configuration.xml"
|
$configXmlPath = Join-Path $OutputDir "Configuration.xml"
|
||||||
|
|||||||
@@ -181,6 +181,10 @@ def assert_edit_allowed(target_path, require):
|
|||||||
def esc_xml(s):
|
def esc_xml(s):
|
||||||
return s.replace('&', '&').replace('<', '<').replace('>', '>').replace('"', '"')
|
return s.replace('&', '&').replace('<', '<').replace('>', '>').replace('"', '"')
|
||||||
|
|
||||||
|
def esc_xml_text(s):
|
||||||
|
# Эскейп ТЕКСТА элемента: только & < > (кавычки в тексте 1С держит raw).
|
||||||
|
return s.replace('&', '&').replace('<', '<').replace('>', '>')
|
||||||
|
|
||||||
def new_uuid():
|
def new_uuid():
|
||||||
return str(uuid.uuid4())
|
return str(uuid.uuid4())
|
||||||
|
|
||||||
@@ -2806,6 +2810,60 @@ if obj_type in types_with_module:
|
|||||||
write_utf8_bom(module_path, '')
|
write_utf8_bom(module_path, '')
|
||||||
modules_created.append(module_path)
|
modules_created.append(module_path)
|
||||||
|
|
||||||
|
# --- Predefined data (Ext/Predefined.xml). Элемент: "(Код) Имя [Наименование]" ИЛИ объект (+рус. синонимы).
|
||||||
|
# Наименование: нет [..]/ключа → авто(Split-CamelCase); [] / "" → пусто; [текст]/текст → как есть.
|
||||||
|
def resolve_predef_item(val):
|
||||||
|
if isinstance(val, str):
|
||||||
|
m = re.match(r'^\s*(?:\(([^)]*)\)\s*)?(\S+)(?:\s*\[(.*)\])?\s*$', val)
|
||||||
|
name = m.group(2)
|
||||||
|
code = m.group(1) if m.group(1) is not None else ''
|
||||||
|
desc = m.group(3) if m.group(3) is not None else split_camel_case(name)
|
||||||
|
return {'name': name, 'code': code, 'desc': desc, 'isFolder': False, 'children': []}
|
||||||
|
def gv(keys):
|
||||||
|
for k in keys:
|
||||||
|
if k in val:
|
||||||
|
return val[k]
|
||||||
|
return None
|
||||||
|
name = str(gv(['name', 'имя']) or '')
|
||||||
|
code_v = gv(['code', 'код'])
|
||||||
|
code = str(code_v) if code_v is not None else ''
|
||||||
|
has_desc = ('description' in val) or ('наименование' in val)
|
||||||
|
desc_v = gv(['description', 'наименование'])
|
||||||
|
desc = ('' if desc_v is None else str(desc_v)) if has_desc else split_camel_case(name)
|
||||||
|
is_folder = gv(['isFolder', 'группа']) is True
|
||||||
|
subs = gv(['childItems', 'подчиненные']) or []
|
||||||
|
return {'name': name, 'code': code, 'desc': desc, 'isFolder': is_folder, 'children': list(subs)}
|
||||||
|
|
||||||
|
def emit_predef_item(out, val, indent, code_type):
|
||||||
|
r = resolve_predef_item(val)
|
||||||
|
out.append(f'{indent}<Item id="{new_uuid()}">')
|
||||||
|
out.append(f'{indent}\t<Name>{esc_xml_text(r["name"])}</Name>')
|
||||||
|
if not r['code']:
|
||||||
|
out.append(f'{indent}\t<Code/>')
|
||||||
|
elif code_type == 'Number':
|
||||||
|
out.append(f'{indent}\t<Code xsi:type="xs:decimal">{esc_xml_text(r["code"])}</Code>')
|
||||||
|
else:
|
||||||
|
out.append(f'{indent}\t<Code>{esc_xml_text(r["code"])}</Code>')
|
||||||
|
if r['desc'] == '':
|
||||||
|
out.append(f'{indent}\t<Description/>')
|
||||||
|
else:
|
||||||
|
out.append(f'{indent}\t<Description>{esc_xml_text(r["desc"])}</Description>')
|
||||||
|
out.append(f'{indent}\t<IsFolder>{"true" if r["isFolder"] else "false"}</IsFolder>')
|
||||||
|
if r['children']:
|
||||||
|
out.append(f'{indent}\t<ChildItems>')
|
||||||
|
for c in r['children']:
|
||||||
|
emit_predef_item(out, c, indent + '\t\t', code_type)
|
||||||
|
out.append(f'{indent}\t</ChildItems>')
|
||||||
|
out.append(f'{indent}</Item>')
|
||||||
|
|
||||||
|
def build_predefined_xml(items, xsi_type, code_type):
|
||||||
|
out = ['<?xml version="1.0" encoding="UTF-8"?>']
|
||||||
|
out.append(f'<PredefinedData xmlns="http://v8.1c.ru/8.3/xcf/predef" xmlns:v8="http://v8.1c.ru/8.1/data/core" 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" xsi:type="{xsi_type}" version="{format_version}">')
|
||||||
|
for it in items:
|
||||||
|
emit_predef_item(out, it, '\t', code_type)
|
||||||
|
out.append('</PredefinedData>')
|
||||||
|
return '\n'.join(out) + '\n'
|
||||||
|
|
||||||
# Special files
|
# Special files
|
||||||
if obj_type == 'ExchangePlan':
|
if obj_type == 'ExchangePlan':
|
||||||
content_path = os.path.join(ext_dir, 'Content.xml')
|
content_path = os.path.join(ext_dir, 'Content.xml')
|
||||||
@@ -2823,6 +2881,15 @@ if obj_type == 'BusinessProcess':
|
|||||||
write_utf8_bom(flowchart_path, flowchart_xml)
|
write_utf8_bom(flowchart_path, flowchart_xml)
|
||||||
modules_created.append(flowchart_path)
|
modules_created.append(flowchart_path)
|
||||||
|
|
||||||
|
# Предопределённые элементы (Ext/Predefined.xml) — пока Catalog.
|
||||||
|
if obj_type == 'Catalog' and defn.get('predefined'):
|
||||||
|
ensure_ext_dir()
|
||||||
|
cat_code_type = str(defn['codeType']) if defn.get('codeType') else 'String'
|
||||||
|
predef_xml = build_predefined_xml(defn['predefined'], 'CatalogPredefinedItems', cat_code_type)
|
||||||
|
predef_path = os.path.join(ext_dir, 'Predefined.xml')
|
||||||
|
write_utf8_bom(predef_path, predef_xml)
|
||||||
|
modules_created.append(predef_path)
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# 17. Register in Configuration.xml
|
# 17. Register in Configuration.xml
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# meta-decompile v0.4 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
# meta-decompile v0.5 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
#
|
#
|
||||||
# Пилот: только Catalog. Инверс meta-compile (omit-on-default: ключ эмитим только
|
# Пилот: только Catalog. Инверс meta-compile (omit-on-default: ключ эмитим только
|
||||||
@@ -310,34 +310,51 @@ if ($childObjs) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# --- Предопределённые (соседний Ext/Predefined.xml). meta-compile пока их НЕ потребляет (пробел DSL).
|
# --- Предопределённые (соседний Ext/Predefined.xml) → DSL predefined.
|
||||||
# ⚠️ ЧЕРНОВАЯ/ВРЕМЕННАЯ форма `predefined` — предложение по факту корпуса, НЕ утверждённый DSL.
|
# Плоский элемент → строка "(Код) Имя [Наименование]" (Наименование: ==авто → опустить; '' → []; иначе [текст]).
|
||||||
# Правило: непокрытый блок проектируем в DSL СНАЧАЛА (совместно), потом переписываем этот захват под него. ---
|
# Группа/иерархия → object {name, [code], [description], isFolder, childItems}. codeType — из свойства каталога. ---
|
||||||
$objDir = Split-Path -Parent (Resolve-Path -LiteralPath $ObjectPath).Path
|
$objDir = Split-Path -Parent (Resolve-Path -LiteralPath $ObjectPath).Path
|
||||||
$predefPath = Join-Path (Join-Path (Join-Path $objDir $objName) 'Ext') 'Predefined.xml'
|
$predefPath = Join-Path (Join-Path (Join-Path $objDir $objName) 'Ext') 'Predefined.xml'
|
||||||
if (Test-Path -LiteralPath $predefPath) {
|
if (Test-Path -LiteralPath $predefPath) {
|
||||||
$pdoc = New-Object System.Xml.XmlDocument
|
$pdoc = New-Object System.Xml.XmlDocument
|
||||||
$pdoc.Load($predefPath)
|
$pdoc.Load($predefPath)
|
||||||
function Parse-PredefItem {
|
function PredefItem-ToDsl {
|
||||||
param($itemEl)
|
param($itemEl)
|
||||||
$o = [ordered]@{}
|
$name = ($itemEl.SelectSingleNode("*[local-name()='Name']")).InnerText
|
||||||
$o['name'] = ($itemEl.SelectSingleNode("*[local-name()='Name']")).InnerText
|
|
||||||
$codeEl = $itemEl.SelectSingleNode("*[local-name()='Code']")
|
$codeEl = $itemEl.SelectSingleNode("*[local-name()='Code']")
|
||||||
if ($codeEl -and $codeEl.InnerText) { $o['code'] = $codeEl.InnerText }
|
$code = if ($codeEl -and $codeEl.InnerText) { $codeEl.InnerText } else { '' }
|
||||||
$descEl = $itemEl.SelectSingleNode("*[local-name()='Description']")
|
$descEl = $itemEl.SelectSingleNode("*[local-name()='Description']")
|
||||||
if ($descEl -and $descEl.InnerText) { $o['description'] = $descEl.InnerText }
|
$desc = if ($descEl) { $descEl.InnerText } else { '' }
|
||||||
$folderEl = $itemEl.SelectSingleNode("*[local-name()='IsFolder']")
|
$folderEl = $itemEl.SelectSingleNode("*[local-name()='IsFolder']")
|
||||||
if ($folderEl -and $folderEl.InnerText -eq 'true') { $o['isFolder'] = $true }
|
$isFolder = ($folderEl -and $folderEl.InnerText -eq 'true')
|
||||||
$childContainer = $itemEl.SelectSingleNode("*[local-name()='ChildItems']")
|
$childContainer = $itemEl.SelectSingleNode("*[local-name()='ChildItems']")
|
||||||
if ($childContainer) {
|
# ВАЖНО: обернуть весь if в @(), иначе PS распаковывает одноэлементный @(...) из if-блока
|
||||||
$kids = [System.Collections.ArrayList]@()
|
# обратно в узел → $kids.Count = $null → папки с ОДНИМ ребёнком теряют его.
|
||||||
foreach ($k in @($childContainer.SelectNodes("*[local-name()='Item']"))) { [void]$kids.Add((Parse-PredefItem $k)) }
|
$kids = @(if ($childContainer) { $childContainer.SelectNodes("*[local-name()='Item']") } else { @() })
|
||||||
if ($kids.Count -gt 0) { $o['children'] = $kids }
|
$auto = Split-CamelWords $name
|
||||||
|
|
||||||
|
if (-not $isFolder -and $kids.Count -eq 0) {
|
||||||
|
# Плоский → компактная строка.
|
||||||
|
$s = if ($code) { "($code) $name" } else { $name }
|
||||||
|
if ($desc -eq '') { $s = "$s []" }
|
||||||
|
elseif ($desc -ne $auto) { $s = "$s [$desc]" }
|
||||||
|
return $s
|
||||||
|
}
|
||||||
|
# Группа/иерархия → объект.
|
||||||
|
$o = [ordered]@{ name = $name }
|
||||||
|
if ($code) { $o['code'] = $code }
|
||||||
|
if ($desc -eq '') { $o['description'] = '' }
|
||||||
|
elseif ($desc -ne $auto) { $o['description'] = $desc }
|
||||||
|
if ($isFolder) { $o['isFolder'] = $true }
|
||||||
|
if ($kids.Count -gt 0) {
|
||||||
|
$sub = [System.Collections.ArrayList]@()
|
||||||
|
foreach ($k in $kids) { [void]$sub.Add((PredefItem-ToDsl $k)) }
|
||||||
|
$o['childItems'] = $sub
|
||||||
}
|
}
|
||||||
return $o
|
return $o
|
||||||
}
|
}
|
||||||
$rootItems = [System.Collections.ArrayList]@()
|
$rootItems = [System.Collections.ArrayList]@()
|
||||||
foreach ($it in @($pdoc.DocumentElement.SelectNodes("*[local-name()='Item']"))) { [void]$rootItems.Add((Parse-PredefItem $it)) }
|
foreach ($it in @($pdoc.DocumentElement.SelectNodes("*[local-name()='Item']"))) { [void]$rootItems.Add((PredefItem-ToDsl $it)) }
|
||||||
if ($rootItems.Count -gt 0) { $dsl['predefined'] = $rootItems }
|
if ($rootItems.Count -gt 0) { $dsl['predefined'] = $rootItems }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+40
-1
@@ -1,6 +1,6 @@
|
|||||||
# Meta DSL — спецификация JSON-формата для объектов метаданных 1С
|
# Meta DSL — спецификация JSON-формата для объектов метаданных 1С
|
||||||
|
|
||||||
Версия: 2.3
|
Версия: 2.4
|
||||||
|
|
||||||
## Обзор
|
## Обзор
|
||||||
|
|
||||||
@@ -275,6 +275,45 @@ JSON DSL для описания объектов метаданных конф
|
|||||||
|
|
||||||
> Пока поддержано для **Catalog**. У прочих типов объектов — свои стандартные реквизиты и профили (будут добавлены при их проработке).
|
> Пока поддержано для **Catalog**. У прочих типов объектов — свои стандартные реквизиты и профили (будут добавлены при их проработке).
|
||||||
|
|
||||||
|
#### 7.1.2 `predefined` — предопределённые элементы
|
||||||
|
|
||||||
|
Массив предопределённых элементов справочника → файл `Ext/Predefined.xml`. Ключа нет / пустой массив → файл не создаётся. Элемент — **строка** (короткая форма, плоский случай) ЛИБО **объект** (группа/иерархия).
|
||||||
|
|
||||||
|
**Строковая форма:** `"(Код) Имя [Наименование]"`
|
||||||
|
- **Имя** — обязательный идентификатор (без пробелов).
|
||||||
|
- **`(Код)`** — опциональный префикс.
|
||||||
|
- **`[Наименование]`** — опциональный суффикс:
|
||||||
|
- нет `[...]` → Наименование **авто** из Имени (Split-CamelCase, §2);
|
||||||
|
- `[]` (пусто) → Наименование пустое (для системных/placeholder-элементов);
|
||||||
|
- `[текст]` → заданное.
|
||||||
|
|
||||||
|
```json
|
||||||
|
"predefined": [
|
||||||
|
"Основной", // Наименование авто = "Основной"
|
||||||
|
"(1) ДокументОПриемке [Документ о приемке]", // код + имя + Наименование
|
||||||
|
"ПустоеЗначение []" // Наименование пустое
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
**Объектная форма** (группа/иерархия):
|
||||||
|
|
||||||
|
| Ключ | Синоним | Описание |
|
||||||
|
|------|---------|----------|
|
||||||
|
| `name` | `имя` | Имя (обязательно) |
|
||||||
|
| `code` | `код` | Код |
|
||||||
|
| `description` | `наименование` | Наименование (ключа нет → авто; `""` → пусто) |
|
||||||
|
| `isFolder` | `группа` | Признак группы |
|
||||||
|
| `childItems` | `подчиненные` | Вложенные элементы (строки/объекты, рекурсивно) |
|
||||||
|
|
||||||
|
```json
|
||||||
|
{ "name": "Группа1", "isFolder": true, "description": "Прочие",
|
||||||
|
"childItems": [ "Факс", "(7) Скайп [Скайп]" ] }
|
||||||
|
```
|
||||||
|
|
||||||
|
Тип кода в XML определяется свойством каталога `codeType`: `Number` → `<Code xsi:type="xs:decimal">`, `String` → `<Code>` (без типа); пустой код → `<Code/>`.
|
||||||
|
|
||||||
|
> Пока поддержано для **Catalog** (`CatalogPredefinedItems`). ChartOf*/ПВХ — при их проработке.
|
||||||
|
|
||||||
### 7.2 Document
|
### 7.2 Document
|
||||||
|
|
||||||
| Поле JSON | Умолчание | XML элемент |
|
| Поле JSON | Умолчание | XML элемент |
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "Справочник с предопределёнными элементами",
|
||||||
|
"input": {
|
||||||
|
"type": "Catalog", "name": "ВидыКонтактов", "codeType": "Number", "codeLength": 3,
|
||||||
|
"predefined": [
|
||||||
|
"Телефон",
|
||||||
|
"(1) ЭлектроннаяПочта [Электронная почта]",
|
||||||
|
"ПустоеЗначение []",
|
||||||
|
{ "name": "Группа1", "isFolder": true, "description": "Прочие контакты",
|
||||||
|
"childItems": [ "Факс", "(7) Скайп [Скайп]" ] }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"validatePath": "Catalogs/ВидыКонтактов",
|
||||||
|
"expect": { "files": ["Catalogs/ВидыКонтактов.xml", "Catalogs/ВидыКонтактов/Ext/Predefined.xml"] }
|
||||||
|
}
|
||||||
+91
@@ -0,0 +1,91 @@
|
|||||||
|
<?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">
|
||||||
|
<Catalog uuid="UUID-001">
|
||||||
|
<InternalInfo>
|
||||||
|
<xr:GeneratedType name="CatalogObject.ВидыКонтактов" category="Object">
|
||||||
|
<xr:TypeId>UUID-002</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-003</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="CatalogRef.ВидыКонтактов" category="Ref">
|
||||||
|
<xr:TypeId>UUID-004</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-005</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="CatalogSelection.ВидыКонтактов" category="Selection">
|
||||||
|
<xr:TypeId>UUID-006</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-007</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="CatalogList.ВидыКонтактов" category="List">
|
||||||
|
<xr:TypeId>UUID-008</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-009</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="CatalogManager.ВидыКонтактов" category="Manager">
|
||||||
|
<xr:TypeId>UUID-010</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-011</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
</InternalInfo>
|
||||||
|
<Properties>
|
||||||
|
<Name>ВидыКонтактов</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Виды контактов</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<Hierarchical>false</Hierarchical>
|
||||||
|
<HierarchyType>HierarchyFoldersAndItems</HierarchyType>
|
||||||
|
<LimitLevelCount>false</LimitLevelCount>
|
||||||
|
<LevelCount>2</LevelCount>
|
||||||
|
<FoldersOnTop>true</FoldersOnTop>
|
||||||
|
<UseStandardCommands>true</UseStandardCommands>
|
||||||
|
<Owners/>
|
||||||
|
<SubordinationUse>ToItems</SubordinationUse>
|
||||||
|
<CodeLength>3</CodeLength>
|
||||||
|
<DescriptionLength>25</DescriptionLength>
|
||||||
|
<CodeType>Number</CodeType>
|
||||||
|
<CodeAllowedLength>Variable</CodeAllowedLength>
|
||||||
|
<CodeSeries>WholeCatalog</CodeSeries>
|
||||||
|
<CheckUnique>false</CheckUnique>
|
||||||
|
<Autonumbering>true</Autonumbering>
|
||||||
|
<DefaultPresentation>AsDescription</DefaultPresentation>
|
||||||
|
<Characteristics/>
|
||||||
|
<PredefinedDataUpdate>Auto</PredefinedDataUpdate>
|
||||||
|
<EditType>InDialog</EditType>
|
||||||
|
<QuickChoice>false</QuickChoice>
|
||||||
|
<ChoiceMode>BothWays</ChoiceMode>
|
||||||
|
<InputByString>
|
||||||
|
<xr:Field>Catalog.ВидыКонтактов.StandardAttribute.Description</xr:Field>
|
||||||
|
<xr:Field>Catalog.ВидыКонтактов.StandardAttribute.Code</xr:Field>
|
||||||
|
</InputByString>
|
||||||
|
<SearchStringModeOnInputByString>Begin</SearchStringModeOnInputByString>
|
||||||
|
<FullTextSearchOnInputByString>DontUse</FullTextSearchOnInputByString>
|
||||||
|
<ChoiceDataGetModeOnInputByString>Directly</ChoiceDataGetModeOnInputByString>
|
||||||
|
<DefaultObjectForm/>
|
||||||
|
<DefaultFolderForm/>
|
||||||
|
<DefaultListForm/>
|
||||||
|
<DefaultChoiceForm/>
|
||||||
|
<DefaultFolderChoiceForm/>
|
||||||
|
<AuxiliaryObjectForm/>
|
||||||
|
<AuxiliaryFolderForm/>
|
||||||
|
<AuxiliaryListForm/>
|
||||||
|
<AuxiliaryChoiceForm/>
|
||||||
|
<AuxiliaryFolderChoiceForm/>
|
||||||
|
<IncludeHelpInContents>false</IncludeHelpInContents>
|
||||||
|
<BasedOn/>
|
||||||
|
<DataLockFields/>
|
||||||
|
<DataLockControlMode>Automatic</DataLockControlMode>
|
||||||
|
<FullTextSearch>Use</FullTextSearch>
|
||||||
|
<ObjectPresentation/>
|
||||||
|
<ExtendedObjectPresentation/>
|
||||||
|
<ListPresentation/>
|
||||||
|
<ExtendedListPresentation/>
|
||||||
|
<Explanation/>
|
||||||
|
<CreateOnInput>DontUse</CreateOnInput>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<DataHistory>DontUse</DataHistory>
|
||||||
|
<UpdateDataHistoryImmediatelyAfterWrite>false</UpdateDataHistoryImmediatelyAfterWrite>
|
||||||
|
<ExecuteAfterWriteDataHistoryVersionProcessing>false</ExecuteAfterWriteDataHistoryVersionProcessing>
|
||||||
|
</Properties>
|
||||||
|
<ChildObjects/>
|
||||||
|
</Catalog>
|
||||||
|
</MetaDataObject>
|
||||||
+41
@@ -0,0 +1,41 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<PredefinedData xmlns="http://v8.1c.ru/8.3/xcf/predef" xmlns:v8="http://v8.1c.ru/8.1/data/core" 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" xsi:type="CatalogPredefinedItems" version="2.17">
|
||||||
|
<Item id="UUID-001">
|
||||||
|
<Name>Телефон</Name>
|
||||||
|
<Code/>
|
||||||
|
<Description>Телефон</Description>
|
||||||
|
<IsFolder>false</IsFolder>
|
||||||
|
</Item>
|
||||||
|
<Item id="UUID-002">
|
||||||
|
<Name>ЭлектроннаяПочта</Name>
|
||||||
|
<Code xsi:type="xs:decimal">1</Code>
|
||||||
|
<Description>Электронная почта</Description>
|
||||||
|
<IsFolder>false</IsFolder>
|
||||||
|
</Item>
|
||||||
|
<Item id="UUID-003">
|
||||||
|
<Name>ПустоеЗначение</Name>
|
||||||
|
<Code/>
|
||||||
|
<Description/>
|
||||||
|
<IsFolder>false</IsFolder>
|
||||||
|
</Item>
|
||||||
|
<Item id="UUID-004">
|
||||||
|
<Name>Группа1</Name>
|
||||||
|
<Code/>
|
||||||
|
<Description>Прочие контакты</Description>
|
||||||
|
<IsFolder>true</IsFolder>
|
||||||
|
<ChildItems>
|
||||||
|
<Item id="UUID-005">
|
||||||
|
<Name>Факс</Name>
|
||||||
|
<Code/>
|
||||||
|
<Description>Факс</Description>
|
||||||
|
<IsFolder>false</IsFolder>
|
||||||
|
</Item>
|
||||||
|
<Item id="UUID-006">
|
||||||
|
<Name>Скайп</Name>
|
||||||
|
<Code xsi:type="xs:decimal">7</Code>
|
||||||
|
<Description>Скайп</Description>
|
||||||
|
<IsFolder>false</IsFolder>
|
||||||
|
</Item>
|
||||||
|
</ChildItems>
|
||||||
|
</Item>
|
||||||
|
</PredefinedData>
|
||||||
@@ -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></Vendor>
|
||||||
|
<Version></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>
|
||||||
|
<Catalog>ВидыКонтактов</Catalog>
|
||||||
|
</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,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