From e2f019d872ffbeeb86f585fdc2a1a1eade5c3b8e Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sat, 4 Jul 2026 11:27:56 +0300 Subject: [PATCH] =?UTF-8?q?feat(meta-compile,meta-decompile):=20Characteri?= =?UTF-8?q?stics=20=E2=80=94=20=D0=BF=D1=80=D0=B8=D0=B2=D1=8F=D0=B7=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=9F=D0=92=D0=A5=20(v1.25/v0.16)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Блок «Дополнительные реквизиты и сведения»/контактная инфо. DSL `characteristics`: массив {types:{from,key,filterField,filterValue}, values:{from,object,type,value}} — имена зеркалят XML без xr:, -1-поля неявны. Синонимы XML-имён (characteristicTypes/keyField/…) приняты. Прощающий ввод (по мотивам dataPath): поля — голое→StandardAttribute. (ссылочные Ref/Parent/Owner, RU→EN) / Attribute.<имя>, частичное Dimension.X/ Resource.X/StandardAttribute.X→+from (регистры ДопСведения), полный путь как есть. from — рус.корни + короткая 3-сегм.→вставка TabularSection. filterValue — голый предопределённый→+каталог из types.from. Декомпилятор пишет короткую форму (dogfood: каждый из 212 объектов роундтрип- тестирует резолвер). Асимметрия для безопасности: голая форма только для Ref/Parent/Owner, прочие StandardAttribute.X — частичной формой. remaining Characteristics=0 на ВСЕХ 212 объектах корпуса, регресс 44/44 ps1+py, ps1↔py identical. spec §7.1.4, кейс catalog-characteristics. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../meta-compile/scripts/meta-compile.ps1 | 97 ++++++- .../meta-compile/scripts/meta-compile.py | 89 ++++++- .../meta-decompile/scripts/meta-decompile.ps1 | 48 +++- docs/meta-dsl-spec.md | 28 ++ .../meta-compile/catalog-characteristics.json | 21 ++ .../Catalogs/Организации.xml | 124 +++++++++ .../Catalogs/Организации/Ext/ObjectModule.bsl | 0 .../catalog-characteristics/Configuration.xml | 252 ++++++++++++++++++ .../Ext/ClientApplicationInterface.xml | 18 ++ .../Languages/Русский.xml | 16 ++ 10 files changed, 688 insertions(+), 5 deletions(-) create mode 100644 tests/skills/cases/meta-compile/catalog-characteristics.json create mode 100644 tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Catalogs/Организации.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Catalogs/Организации/Ext/ObjectModule.bsl create mode 100644 tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Configuration.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Ext/ClientApplicationInterface.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Languages/Русский.xml diff --git a/.claude/skills/meta-compile/scripts/meta-compile.ps1 b/.claude/skills/meta-compile/scripts/meta-compile.ps1 index a3902d6f..7bbc9f47 100644 --- a/.claude/skills/meta-compile/scripts/meta-compile.ps1 +++ b/.claude/skills/meta-compile/scripts/meta-compile.ps1 @@ -1,4 +1,4 @@ -# meta-compile v1.24 — Compile 1C metadata object from JSON +# meta-compile v1.25 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -1338,6 +1338,99 @@ function Emit-ChoiceParameterLinks { X "$indent" } +# --- Characteristics (привязка ПВХ «Дополнительные реквизиты и сведения») --- + +# from: рус. корень (Справочник→Catalog) + член (ТабличнаяЧасть→TabularSection); короткая 3-сегментная +# "<Тип>.X.Y" → вставить TabularSection (from — всегда таблица, не реквизит). Полный путь → как есть. +function Normalize-CharFrom { + param([string]$from) + if (-not $from) { return $from } + $parts = @("$from" -split '\.') + if ($script:objectTypeSynonyms.ContainsKey($parts[0])) { $parts[0] = $script:objectTypeSynonyms[$parts[0]] } + for ($i = 1; $i -lt $parts.Count; $i++) { + switch -Regex ($parts[$i]) { + '^ТабличнаяЧасть$' { $parts[$i] = 'TabularSection' } + '^Измерение$' { $parts[$i] = 'Dimension' } + '^Ресурс$' { $parts[$i] = 'Resource' } + '^Реквизит$' { $parts[$i] = 'Attribute' } + } + } + if ($parts.Count -eq 3 -and $parts[0] -in @('Catalog','Document','ChartOfCharacteristicTypes','ChartOfCalculationTypes','ChartOfAccounts','ExchangePlan','BusinessProcess','Task')) { + $parts = @($parts[0], $parts[1], 'TabularSection', $parts[2]) + } + return ($parts -join '.') +} + +# Стандартный реквизит ссылочного типа в полях Characteristics: Ref/Parent/Owner (по имени EN/RU). +# Прочие стандартные реквизиты редки в полях — их задают частичной формой StandardAttribute.X. +function Resolve-CharStdEn { + param([string]$name) + $n = "$name".ToLower() + if ($n -eq 'ref' -or $n -eq 'ссылка') { return 'Ref' } + if ($n -eq 'parent' -or $n -eq 'родитель') { return 'Parent' } + if ($n -eq 'owner' -or $n -eq 'владелец') { return 'Owner' } + return $null +} + +# Поле: голое→StandardAttribute./Attribute.<имя>; частичное Member.X→.Member.X; полный путь→verbatim. +function Expand-CharField { + param([string]$field, [string]$from) + $s = "$field" + if (-not $s) { return $s } + if ($s -match '^(StandardAttribute|Attribute|Dimension|Resource)\.') { return "$from.$s" } + if (-not $s.Contains('.')) { + $en = Resolve-CharStdEn $s + if ($en) { return "$from.StandardAttribute.$en" } + return "$from.Attribute.$s" + } + return $s +} + +# filterValue: голый предопределённый → префикс каталога (2 сегмента) из typesFrom; полный путь → verbatim. +function Expand-CharFilterValue { + param([string]$fv, [string]$typesFrom) + $s = "$fv" + if (-not $s -or $s.Contains('.')) { return $s } + $tp = @("$typesFrom" -split '\.') + if ($tp.Count -ge 2) { return "$($tp[0]).$($tp[1]).$s" } + return $s +} + +function Emit-Characteristics { + param([string]$indent, $chars) + if (-not $chars -or @($chars).Count -eq 0) { X "$indent"; return } + X "$indent" + foreach ($ch in @($chars)) { + $types = Get-ChElProp $ch @('types','characteristicTypes','типы') + $values = Get-ChElProp $ch @('values','characteristicValues','значения') + $tFrom = Normalize-CharFrom "$(Get-ChElProp $types @('from','source','источник'))" + $vFrom = Normalize-CharFrom "$(Get-ChElProp $values @('from','source','источник'))" + $key = Expand-CharField "$(Get-ChElProp $types @('key','keyField'))" $tFrom + $tff = Expand-CharField "$(Get-ChElProp $types @('filterField','typesFilterField'))" $tFrom + $tfv = Expand-CharFilterValue "$(Get-ChElProp $types @('filterValue','typesFilterValue'))" $tFrom + $obj = Expand-CharField "$(Get-ChElProp $values @('object','objectField'))" $vFrom + $typ = Expand-CharField "$(Get-ChElProp $values @('type','typeField'))" $vFrom + $val = Expand-CharField "$(Get-ChElProp $values @('value','valueField'))" $vFrom + X "$indent`t" + X "$indent`t`t" + X "$indent`t`t`t$(Esc-Xml $key)" + X "$indent`t`t`t$(Esc-Xml $tff)" + X "$indent`t`t`t$(Esc-Xml $tfv)" + X "$indent`t`t`t-1" + X "$indent`t`t`t-1" + X "$indent`t`t" + X "$indent`t`t" + X "$indent`t`t`t$(Esc-Xml $obj)" + X "$indent`t`t`t$(Esc-Xml $typ)" + X "$indent`t`t`t$(Esc-Xml $val)" + X "$indent`t`t`t-1" + X "$indent`t`t`t-1" + X "$indent`t`t" + X "$indent`t" + } + X "$indent" +} + function Emit-Attribute { param([string]$indent, $parsed, [string]$context) # $context: "catalog", "document", "object", "processor", "tabular", "processor-tabular", "register" @@ -1758,7 +1851,7 @@ function Emit-CatalogProperties { X "$i$defaultPresentation" Emit-StandardAttributes $i "Catalog" - X "$i" + Emit-Characteristics $i $def.characteristics X "$i$(Get-EnumProp 'PredefinedDataUpdate' 'predefinedDataUpdate' 'Auto')" X "$i$(Get-EnumProp 'EditType' 'editType' 'InDialog')" $quickChoice = if ($def.quickChoice -eq $true) { "true" } else { "false" } diff --git a/.claude/skills/meta-compile/scripts/meta-compile.py b/.claude/skills/meta-compile/scripts/meta-compile.py index bb583cba..7960fe1f 100644 --- a/.claude/skills/meta-compile/scripts/meta-compile.py +++ b/.claude/skills/meta-compile/scripts/meta-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# meta-compile v1.24 — Compile 1C metadata object from JSON +# meta-compile v1.25 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -1396,6 +1396,91 @@ def emit_choice_parameter_links(indent, cpl): X(f'{indent}\t') X(f'{indent}') +# --- Characteristics (привязка ПВХ «Дополнительные реквизиты и сведения») --- + +CHAR_FROM_TS_TYPES = {'Catalog', 'Document', 'ChartOfCharacteristicTypes', 'ChartOfCalculationTypes', + 'ChartOfAccounts', 'ExchangePlan', 'BusinessProcess', 'Task'} +CHAR_MEMBER_RU = {'ТабличнаяЧасть': 'TabularSection', 'Измерение': 'Dimension', 'Ресурс': 'Resource', 'Реквизит': 'Attribute'} + +def normalize_char_from(from_): + if not from_: + return from_ + parts = str(from_).split('.') + if parts[0] in object_type_synonyms: + parts[0] = object_type_synonyms[parts[0]] + for i in range(1, len(parts)): + if parts[i] in CHAR_MEMBER_RU: + parts[i] = CHAR_MEMBER_RU[parts[i]] + if len(parts) == 3 and parts[0] in CHAR_FROM_TS_TYPES: + parts = [parts[0], parts[1], 'TabularSection', parts[2]] + return '.'.join(parts) + +def resolve_char_std_en(name): + n = str(name).lower() + if n in ('ref', 'ссылка'): + return 'Ref' + if n in ('parent', 'родитель'): + return 'Parent' + if n in ('owner', 'владелец'): + return 'Owner' + return None + +def expand_char_field(field, from_): + s = str(field or '') + if not s: + return s + if re.match(r'^(StandardAttribute|Attribute|Dimension|Resource)\.', s): + return f'{from_}.{s}' + if '.' not in s: + en = resolve_char_std_en(s) + if en: + return f'{from_}.StandardAttribute.{en}' + return f'{from_}.Attribute.{s}' + return s + +def expand_char_filter_value(fv, types_from): + s = str(fv or '') + if not s or '.' in s: + return s + tp = str(types_from).split('.') + if len(tp) >= 2: + return f'{tp[0]}.{tp[1]}.{s}' + return s + +def emit_characteristics(indent, chars): + if not chars: + X(f'{indent}') + return + X(f'{indent}') + for ch in chars: + types = ch_el_prop(ch, ['types', 'characteristicTypes', 'типы']) + values = ch_el_prop(ch, ['values', 'characteristicValues', 'значения']) + t_from = normalize_char_from(ch_el_prop(types, ['from', 'source', 'источник']) or '') + v_from = normalize_char_from(ch_el_prop(values, ['from', 'source', 'источник']) or '') + key = expand_char_field(ch_el_prop(types, ['key', 'keyField']), t_from) + tff = expand_char_field(ch_el_prop(types, ['filterField', 'typesFilterField']), t_from) + tfv = expand_char_filter_value(ch_el_prop(types, ['filterValue', 'typesFilterValue']), t_from) + obj = expand_char_field(ch_el_prop(values, ['object', 'objectField']), v_from) + typ = expand_char_field(ch_el_prop(values, ['type', 'typeField']), v_from) + val = expand_char_field(ch_el_prop(values, ['value', 'valueField']), v_from) + X(f'{indent}\t') + X(f'{indent}\t\t') + X(f'{indent}\t\t\t{esc_xml(key)}') + X(f'{indent}\t\t\t{esc_xml(tff)}') + X(f'{indent}\t\t\t{esc_xml(tfv)}') + X(f'{indent}\t\t\t-1') + X(f'{indent}\t\t\t-1') + X(f'{indent}\t\t') + X(f'{indent}\t\t') + X(f'{indent}\t\t\t{esc_xml(obj)}') + X(f'{indent}\t\t\t{esc_xml(typ)}') + X(f'{indent}\t\t\t{esc_xml(val)}') + X(f'{indent}\t\t\t-1') + X(f'{indent}\t\t\t-1') + X(f'{indent}\t\t') + X(f'{indent}\t') + X(f'{indent}') + def emit_attribute(indent, parsed, context): attr_name = parsed['name'] ctx_reserved = RESERVED_BY_CONTEXT.get(context) @@ -1744,7 +1829,7 @@ def emit_catalog_properties(indent): default_presentation = get_enum_prop('DefaultPresentation', 'defaultPresentation', 'AsDescription') X(f'{i}{default_presentation}') emit_standard_attributes(i, 'Catalog') - X(f'{i}') + emit_characteristics(i, defn.get('characteristics')) X(f'{i}{get_enum_prop("PredefinedDataUpdate", "predefinedDataUpdate", "Auto")}') X(f'{i}{get_enum_prop("EditType", "editType", "InDialog")}') quick_choice = 'true' if defn.get('quickChoice') is True else 'false' diff --git a/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 b/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 index 369967a4..be24eaf2 100644 --- a/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 +++ b/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 @@ -1,4 +1,4 @@ -# meta-decompile v0.15 — XML объекта метаданных 1С → JSON-черновик формата meta-compile +# meta-decompile v0.16 — XML объекта метаданных 1С → JSON-черновик формата meta-compile # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # # Пилот: только Catalog. Инверс meta-compile (omit-on-default: ключ эмитим только @@ -411,6 +411,52 @@ foreach ($pp in @( if ($null -ne $pv) { $dsl[$pp[1]] = $pv } } +# --- Characteristics (привязка ПВХ). Короткая форма: поля bare/partial, filterValue без каталога, from полный. +function Shorten-CharField { param([string]$full, [string]$from) + if ($full.StartsWith("$from.")) { + $rest = $full.Substring($from.Length + 1) + if ($rest -match '^StandardAttribute\.(Ref|Parent|Owner)$') { return $Matches[1] } # ссылочные станд. → голое + if ($rest -match '^Attribute\.(.+)$') { return $Matches[1] } # кастом → голое + return $rest # прочие StandardAttribute.X / Dimension.X / Resource.X → частичное (безопасно) + } + return $full +} +function Shorten-CharFilterValue { param([string]$full, [string]$typesFrom) + $tp = @("$typesFrom" -split '\.') + if ($tp.Count -ge 2) { + $pref = "$($tp[0]).$($tp[1])." + if ($full.StartsWith($pref)) { $tail = $full.Substring($pref.Length); if (-not $tail.Contains('.')) { return $tail } } + } + return $full +} +$charsNode = $props.SelectSingleNode('md:Characteristics', $nsm) +if ($charsNode) { + $chList = @($charsNode.SelectNodes('xr:Characteristic', $nsm)) + if ($chList.Count -gt 0) { + $chArr = [System.Collections.ArrayList]@() + foreach ($ch in $chList) { + $ct = $ch.SelectSingleNode('xr:CharacteristicTypes', $nsm) + $cv = $ch.SelectSingleNode('xr:CharacteristicValues', $nsm) + $tFrom = $ct.GetAttribute('from'); $vFrom = $cv.GetAttribute('from') + $gt = { param($n, $node) $x = $node.SelectSingleNode("xr:$n", $nsm); if ($x) { $x.InnerText } else { "" } } + $types = [ordered]@{ + from = $tFrom + key = Shorten-CharField (& $gt 'KeyField' $ct) $tFrom + filterField = Shorten-CharField (& $gt 'TypesFilterField' $ct) $tFrom + filterValue = Shorten-CharFilterValue (& $gt 'TypesFilterValue' $ct) $tFrom + } + $values = [ordered]@{ + from = $vFrom + object = Shorten-CharField (& $gt 'ObjectField' $cv) $vFrom + type = Shorten-CharField (& $gt 'TypeField' $cv) $vFrom + value = Shorten-CharField (& $gt 'ValueField' $cv) $vFrom + } + [void]$chArr.Add([ordered]@{ types = $types; values = $values }) + } + $dsl['characteristics'] = $chArr + } +} + # --- StandardAttributes: блок есть ⟺ кастомизация ≥1 стандартного реквизита. # Захватываем ОТКЛОНЕНИЯ от профиля материализованного блока (профиль компилятор восстановит сам). # Профиль Catalog: Owner{FC=ShowError,FFV=true}, Parent{FFV=true}, Description{FC=ShowError}. --- diff --git a/docs/meta-dsl-spec.md b/docs/meta-dsl-spec.md index 269d6b14..79e183a0 100644 --- a/docs/meta-dsl-spec.md +++ b/docs/meta-dsl-spec.md @@ -347,6 +347,7 @@ JSON DSL для описания объектов метаданных конф | `extendedListPresentation` | пусто | ExtendedListPresentation (ML) | | `explanation` | пусто | Explanation (ML) | | `standardAttributes` | *(ключа нет → блок опущен)* | StandardAttributes | +| `characteristics` | `[]` | Characteristics (привязка ПВХ, §7.1.4) | | `attributes` | `[]` | → Attribute в ChildObjects | | `tabularSections` | `{}` | → TabularSection в ChildObjects | @@ -452,6 +453,33 @@ JSON DSL для описания объектов метаданных конф > Тело модуля команды генерируется заготовкой (обработчик пустой). Раундтрип тела модуля не проверяет (как ObjectModule). +#### 7.1.4 `characteristics` — привязка ПВХ («Дополнительные реквизиты и сведения») + +Массив характеристик. Каждая связывает **источник типов** (где определены характеристики) и **источник значений** +(где хранятся значения). Имена ключей зеркалят XML без `xr:`; `-1`-поля (`DataPathField`/`MultipleValues*`) неявны. + +```json +"characteristics": [{ + "types": { "from": "Справочник.НаборыДопРеквИСвед.ДополнительныеРеквизиты", + "key": "Свойство", "filterField": "Ссылка", "filterValue": "Справочник_Организации" }, + "values": { "from": "Catalog.Организации.TabularSection.ДополнительныеРеквизиты", + "object": "Ссылка", "type": "Свойство", "value": "Значение" } +}] +``` + +- **`from`** — источник-таблица. Прощающий ввод: рус. корни (`Справочник`→Catalog, `ТабличнаяЧасть`→TabularSection), + короткая 3-сегментная `Тип.X.ТЧ` → вставит `TabularSection`. Синоним `source`. +- **Поля** (`key`/`filterField`/`object`/`type`/`value`) — путь к полю источника, прощающий ввод (как dataPath): + голое имя → `StandardAttribute.` для ссылочных станд. (`Ссылка`/`Родитель`/`Владелец`, RU→EN), иначе → `Attribute.<имя>`; + частичное `Dimension.X`/`Resource.X`/`StandardAttribute.X` → + префикс `from` (форма для регистров ДопСведения); + полный путь → как есть. +- **`filterValue`** — предопределённое значение фильтра типов (`xr:DesignTimeRef`); голое имя → + префикс каталога + из `types.from`; полный путь → как есть. +- **Синонимы ключей:** `types`/`characteristicTypes`, `values`/`characteristicValues`, `key`/`keyField`, + `filterField`/`typesFilterField`, `filterValue`/`typesFilterValue`, `object`/`objectField`, `type`/`typeField`, `value`/`valueField`. + +Декомпилятор пишет короткую форму (поля голые/частичные, `filterValue` без каталога, `from` полный). + ### 7.2 Document | Поле JSON | Умолчание | XML элемент | diff --git a/tests/skills/cases/meta-compile/catalog-characteristics.json b/tests/skills/cases/meta-compile/catalog-characteristics.json new file mode 100644 index 00000000..55786202 --- /dev/null +++ b/tests/skills/cases/meta-compile/catalog-characteristics.json @@ -0,0 +1,21 @@ +{ + "name": "Характеристики ПВХ (Дополнительные реквизиты и сведения)", + "input": { + "type": "Catalog", + "name": "Организации", + "characteristics": [ + { "types": { "from": "Справочник.НаборыДопРеквИСвед.ДополнительныеРеквизиты", + "key": "Свойство", "filterField": "Ссылка", "filterValue": "Справочник_Организации" }, + "values": { "from": "Catalog.Организации.TabularSection.ДополнительныеРеквизиты", + "object": "Ссылка", "type": "Свойство", "value": "Значение" } }, + { "types": { "from": "Catalog.НаборыДопРеквИСвед.TabularSection.ДополнительныеСведения", + "key": "Свойство", "filterField": "Ссылка", "filterValue": "Справочник_Организации" }, + "values": { "from": "InformationRegister.ДополнительныеСведения", + "object": "Dimension.Объект", "type": "Dimension.Свойство", "value": "Resource.Значение" } } + ] + }, + "validatePath": "Catalogs/Организации", + "expect": { + "files": ["Catalogs/Организации.xml"] + } +} diff --git a/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Catalogs/Организации.xml b/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Catalogs/Организации.xml new file mode 100644 index 00000000..3c222e05 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Catalogs/Организации.xml @@ -0,0 +1,124 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Организации + + + ru + Организации + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 9 + 25 + String + Variable + WholeCatalog + false + true + AsDescription + + + + Catalog.НаборыДопРеквИСвед.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Catalog.НаборыДопРеквИСвед.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref + Catalog.НаборыДопРеквИСвед.Справочник_Организации + -1 + -1 + + + Catalog.Организации.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref + Catalog.Организации.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Catalog.Организации.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + -1 + -1 + + + + + Catalog.НаборыДопРеквИСвед.TabularSection.ДополнительныеСведения.Attribute.Свойство + Catalog.НаборыДопРеквИСвед.TabularSection.ДополнительныеСведения.StandardAttribute.Ref + Catalog.НаборыДопРеквИСвед.Справочник_Организации + -1 + -1 + + + InformationRegister.ДополнительныеСведения.Dimension.Объект + InformationRegister.ДополнительныеСведения.Dimension.Свойство + InformationRegister.ДополнительныеСведения.Resource.Значение + -1 + -1 + + + + Auto + InDialog + false + BothWays + + Catalog.Организации.StandardAttribute.Description + Catalog.Организации.StandardAttribute.Code + + Begin + DontUse + Directly + + + + + + + + + + + false + + + Automatic + Use + + + + + + Use + Auto + DontUse + false + false + + + + diff --git a/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Catalogs/Организации/Ext/ObjectModule.bsl b/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Catalogs/Организации/Ext/ObjectModule.bsl new file mode 100644 index 00000000..e69de29b diff --git a/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Configuration.xml new file mode 100644 index 00000000..74ca373f --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Configuration.xml @@ -0,0 +1,252 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Организации + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Languages/Русский.xml b/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file