diff --git a/.claude/skills/meta-compile/scripts/meta-compile.ps1 b/.claude/skills/meta-compile/scripts/meta-compile.ps1 index d9572024..a754317c 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.21 — Compile 1C metadata object from JSON +# meta-compile v1.22 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -826,6 +826,8 @@ function Parse-AttributeShorthand { hasFillValue = ($val.PSObject -and $val.PSObject.Properties -and ($val.PSObject.Properties.Name -contains 'fillValue')) fillValue = $val.fillValue linkByType = $val.linkByType + choiceParameterLinks = $val.choiceParameterLinks + choiceParameters = $val.choiceParameters } } @@ -1154,6 +1156,133 @@ function Emit-LinkByType { X "$indent" } +# --- Параметры/связи выбора (порт из form-compile; структура реквизита ⟷ элемента формы совпадает) --- + +# Свойство из dict/PSCustomObject по списку синонимов (первый найденный, иначе $null). +function Get-ChElProp { + param($obj, [string[]]$names) + if ($null -eq $obj) { return $null } + foreach ($n in $names) { + if ($obj -is [System.Collections.IDictionary]) { if ($obj.Contains($n)) { return $obj[$n] } } + elseif ($obj.PSObject -and $obj.PSObject.Properties[$n]) { return $obj.PSObject.Properties[$n].Value } + } + return $null +} + +# Строковый литерал shorthand → скаляр: true/false→bool, целое/дробное→число, иначе строка. +function ConvertTo-ChScalar { + param([string]$s) + $t = "$s".Trim() + if ($t -match '^(?i:true|истина)$') { return $true } + if ($t -match '^(?i:false|ложь)$') { return $false } + if ($t -match '^-?\d+$') { return [int]$t } + if ($t -match '^-?\d+\.\d+$') { return [double]::Parse($t, [System.Globalization.CultureInfo]::InvariantCulture) } + return $t +} + +# Значение параметра выбора → @{XsiType; Text}. Авто-детект по значению (без типа реквизита). +function Normalize-ChoiceValue { + param($value) + if ($value -is [bool]) { return @{ XsiType='xs:boolean'; Text=$(if ($value) { 'true' } else { 'false' }) } } + if ($value -is [int] -or $value -is [long] -or $value -is [double] -or $value -is [decimal]) { + return @{ XsiType='xs:decimal'; Text=(Format-FillNum $value) } + } + $s = "$value" + if ($s -eq '') { return @{ XsiType='xs:string'; Text='' } } + if ($s -match '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$') { return @{ XsiType='xs:dateTime'; Text=$s } } + $ref = Normalize-FillRef $s + if ($ref) { return @{ XsiType='xr:DesignTimeRef'; Text=$ref } } + return @{ XsiType='xs:string'; Text=$s } +} + +# Shorthand "name=value" | "name=v1, v2" → {name, value}. "name=path" для links. +function ConvertFrom-ChParamShorthand { + param([string]$s) + $eq = $s.IndexOf('=') + if ($eq -lt 0) { return @{ name = $s.Trim() } } + $name = $s.Substring(0, $eq).Trim(); $rest = $s.Substring($eq + 1) + if ($rest -match ',') { + $vals = @(); foreach ($p in ($rest -split ',')) { $vals += ,(ConvertTo-ChScalar $p) } + return @{ name = $name; value = $vals } + } + return @{ name = $name; value = (ConvertTo-ChScalar $rest) } +} +function ConvertFrom-ChLinkShorthand { + param([string]$s) + $eq = $s.IndexOf('=') + if ($eq -lt 0) { return @{ name = $s.Trim() } } + $o = @{ name = $s.Substring(0, $eq).Trim() }; $rest = $s.Substring($eq + 1).Trim() + if ($rest -match '^(.*):(?i:(Clear|DontChange|очистить|неизменять))$') { $o['dataPath'] = $matches[1].Trim(); $o['valueChange'] = $matches[2] } + else { $o['dataPath'] = $rest } + return $o +} + +# — [{name, value?}]. Значение ПРЯМО на app:value (xsi:type=тип); массив → v8:FixedArray +# с детьми v8:Value; без value → app:value nil. +function Emit-ChoiceParameters { + param([string]$indent, $cp) + if (-not $cp -or @($cp).Count -eq 0) { X "$indent"; return } + X "$indent" + foreach ($item in @($cp)) { + if ($item -is [string]) { $item = ConvertFrom-ChParamShorthand $item } + $name = Get-ChElProp $item @('name','имя') + $hasVal = $false; $val = $null + if ($item -is [System.Collections.IDictionary]) { + if ($item.Contains('value')) { $hasVal = $true; $val = $item['value'] } + elseif ($item.Contains('значение')) { $hasVal = $true; $val = $item['значение'] } + } elseif ($item.PSObject) { + if ($item.PSObject.Properties['value']) { $hasVal = $true; $val = $item.PSObject.Properties['value'].Value } + elseif ($item.PSObject.Properties['значение']) { $hasVal = $true; $val = $item.PSObject.Properties['значение'].Value } + } + $valIsArray = ($val -is [System.Array]) -or ($val -is [System.Collections.IList] -and $val -isnot [string]) + X "$indent`t" + if (-not $hasVal) { + X "$indent`t`t" + } elseif ($valIsArray) { + X "$indent`t`t" + foreach ($v in $val) { + $norm = Normalize-ChoiceValue -value $v + if ([string]::IsNullOrEmpty($norm.Text)) { X "$indent`t`t`t" } + else { X "$indent`t`t`t$(Esc-Xml $norm.Text)" } + } + X "$indent`t`t" + } else { + $norm = Normalize-ChoiceValue -value $val + if ([string]::IsNullOrEmpty($norm.Text)) { X "$indent`t`t" } + else { X "$indent`t`t$(Esc-Xml $norm.Text)" } + } + X "$indent`t" + } + X "$indent" +} + +# — [{name, dataPath, valueChange?}]. valueChange дефолт Clear. +function Emit-ChoiceParameterLinks { + param([string]$indent, $cpl) + if (-not $cpl -or @($cpl).Count -eq 0) { X "$indent"; return } + X "$indent" + foreach ($lk in @($cpl)) { + if ($lk -is [string]) { $lk = ConvertFrom-ChLinkShorthand $lk } + $name = Get-ChElProp $lk @('name','имя') + $dp = Get-ChElProp $lk @('dataPath','path','путь') + $vcRaw = Get-ChElProp $lk @('valueChange','режимИзменения') + $vc = 'Clear' + if ($vcRaw) { + $vc = switch -Regex ("$vcRaw".ToLower()) { + '^(clear|очистить|очистка)$' { 'Clear'; break } + '^(dontchange|неизменять|неменять|нет)$' { 'DontChange'; break } + default { "$vcRaw" } + } + } + X "$indent`t" + X "$indent`t`t$(Esc-Xml "$name")" + X "$indent`t`t$(Esc-Xml "$dp")" + X "$indent`t`t$vc" + X "$indent`t" + } + X "$indent" +} + function Emit-Attribute { param([string]$indent, $parsed, [string]$context) # $context: "catalog", "document", "object", "processor", "tabular", "processor-tabular", "register" @@ -1221,8 +1350,8 @@ function Emit-Attribute { X "$indent`t`t$fillChecking" X "$indent`t`tItems" - X "$indent`t`t" - X "$indent`t`t" + Emit-ChoiceParameterLinks "$indent`t`t" $parsed.choiceParameterLinks + Emit-ChoiceParameters "$indent`t`t" $parsed.choiceParameters $qc = if ($parsed.quickChoice) { $parsed.quickChoice } else { "Auto" } X "$indent`t`t$qc" $coi = if ($parsed.createOnInput) { $parsed.createOnInput } else { "Auto" } diff --git a/.claude/skills/meta-compile/scripts/meta-compile.py b/.claude/skills/meta-compile/scripts/meta-compile.py index f107c98a..010b4944 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.21 — Compile 1C metadata object from JSON +# meta-compile v1.22 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -850,6 +850,8 @@ def parse_attribute_shorthand(val): 'hasFillValue': ('fillValue' in val), 'fillValue': val.get('fillValue'), 'linkByType': val.get('linkByType'), + 'choiceParameterLinks': val.get('choiceParameterLinks'), + 'choiceParameters': val.get('choiceParameters'), } def parse_enum_value_shorthand(val): @@ -1200,6 +1202,133 @@ def emit_link_by_type(indent, spec): X(f'{indent}\t{li}') X(f'{indent}') +# --- Параметры/связи выбора (порт из form-compile) --- + +def ch_el_prop(obj, names): + if obj is None: + return None + if isinstance(obj, dict): + for n in names: + if n in obj: + return obj[n] + return None + +def convert_to_ch_scalar(s): + t = str(s).strip() + if re.match(r'^(?i:true|истина)$', t): + return True + if re.match(r'^(?i:false|ложь)$', t): + return False + if re.match(r'^-?\d+$', t): + return int(t) + if re.match(r'^-?\d+\.\d+$', t): + return float(t) + return t + +def normalize_choice_value(value): + """Значение параметра выбора → (xsi_type, text). Авто-детект по значению.""" + if isinstance(value, bool): + return ('xs:boolean', 'true' if value else 'false') + if isinstance(value, (int, float)): + return ('xs:decimal', format_fill_num(value)) + s = str(value) + if s == '': + return ('xs:string', '') + if re.match(r'^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$', s): + return ('xs:dateTime', s) + ref = normalize_fill_ref(s) + if ref: + return ('xr:DesignTimeRef', ref) + return ('xs:string', s) + +def convert_from_ch_param_shorthand(s): + eq = s.find('=') + if eq < 0: + return {'name': s.strip()} + name = s[:eq].strip() + rest = s[eq + 1:] + if ',' in rest: + return {'name': name, 'value': [convert_to_ch_scalar(p) for p in rest.split(',')]} + return {'name': name, 'value': convert_to_ch_scalar(rest)} + +def convert_from_ch_link_shorthand(s): + eq = s.find('=') + if eq < 0: + return {'name': s.strip()} + o = {'name': s[:eq].strip()} + rest = s[eq + 1:].strip() + m = re.match(r'^(.*):(?i:(Clear|DontChange|очистить|неизменять))$', rest) + if m: + o['dataPath'] = m.group(1).strip() + o['valueChange'] = m.group(2) + else: + o['dataPath'] = rest + return o + +def emit_choice_parameters(indent, cp): + if not cp: + X(f'{indent}') + return + if isinstance(cp, (str, dict)): + cp = [cp] + X(f'{indent}') + for item in cp: + if isinstance(item, str): + item = convert_from_ch_param_shorthand(item) + name = ch_el_prop(item, ['name', 'имя']) + has_val = isinstance(item, dict) and ('value' in item or 'значение' in item) + val = item.get('value', item.get('значение')) if has_val else None + val_is_array = isinstance(val, (list, tuple)) + X(f'{indent}\t') + if not has_val: + X(f'{indent}\t\t') + elif val_is_array: + X(f'{indent}\t\t') + for v in val: + xt, tx = normalize_choice_value(v) + if tx == '' or tx is None: + X(f'{indent}\t\t\t') + else: + X(f'{indent}\t\t\t{esc_xml(tx)}') + X(f'{indent}\t\t') + else: + xt, tx = normalize_choice_value(val) + if tx == '' or tx is None: + X(f'{indent}\t\t') + else: + X(f'{indent}\t\t{esc_xml(tx)}') + X(f'{indent}\t') + X(f'{indent}') + +def emit_choice_parameter_links(indent, cpl): + if not cpl: + X(f'{indent}') + return + if isinstance(cpl, (str, dict)): + cpl = [cpl] + X(f'{indent}') + for lk in cpl: + if isinstance(lk, str): + lk = convert_from_ch_link_shorthand(lk) + name = ch_el_prop(lk, ['name', 'имя']) + dp = ch_el_prop(lk, ['dataPath', 'path', 'путь']) + vc_raw = ch_el_prop(lk, ['valueChange', 'режимИзменения']) + vc = 'Clear' + if vc_raw: + low = str(vc_raw).lower() + if re.match(r'^(clear|очистить|очистка)$', low): + vc = 'Clear' + elif re.match(r'^(dontchange|неизменять|неменять|нет)$', low): + vc = 'DontChange' + else: + vc = str(vc_raw) + X(f'{indent}\t') + X(f'{indent}\t\t{esc_xml(str(name))}') + X(f'{indent}\t\t{esc_xml(str(dp))}') + X(f'{indent}\t\t{vc}') + X(f'{indent}\t') + X(f'{indent}') + def emit_attribute(indent, parsed, context): attr_name = parsed['name'] ctx_reserved = RESERVED_BY_CONTEXT.get(context) @@ -1254,8 +1383,8 @@ def emit_attribute(indent, parsed, context): fill_checking = parsed['fillChecking'] X(f'{indent}\t\t{fill_checking}') X(f'{indent}\t\tItems') - X(f'{indent}\t\t') - X(f'{indent}\t\t') + emit_choice_parameter_links(f'{indent}\t\t', parsed.get('choiceParameterLinks')) + emit_choice_parameters(f'{indent}\t\t', parsed.get('choiceParameters')) X(f'{indent}\t\t{parsed.get("quickChoice") or "Auto"}') X(f'{indent}\t\t{parsed.get("createOnInput") or "Auto"}') X(f'{indent}\t\t') diff --git a/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 b/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 index 1e914635..369967a4 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.14 — XML объекта метаданных 1С → JSON-черновик формата meta-compile +# meta-decompile v0.15 — XML объекта метаданных 1С → JSON-черновик формата meta-compile # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # # Пилот: только Catalog. Инверс meta-compile (omit-on-default: ключ эмитим только @@ -79,6 +79,7 @@ $nsm.AddNamespace('md', 'http://v8.1c.ru/8.3/MDClasses') $nsm.AddNamespace('v8', 'http://v8.1c.ru/8.1/data/core') $nsm.AddNamespace('xr', 'http://v8.1c.ru/8.3/xcf/readable') $nsm.AddNamespace('xsi', 'http://www.w3.org/2001/XMLSchema-instance') +$nsm.AddNamespace('app', 'http://v8.1c.ru/8.2/managed-application/core') $rootEl = $doc.DocumentElement if ($rootEl.LocalName -ne 'MetaDataObject') { @@ -183,6 +184,31 @@ function Get-TypeShorthand { return ($parts -join ' + ') } +# Скалярное значение параметра выбора () → JSON-значение (bool/число/строка). +# string/dateTime/DesignTimeRef → строка (компилятор auto-детектит обратно). +function Convert-ChScalarNode { + param($vN) + $xt = $vN.GetAttribute('type', 'http://www.w3.org/2001/XMLSchema-instance') + $txt = $vN.InnerText + if ($xt -match 'boolean$') { return ($txt -eq 'true') } + if ($xt -match 'decimal$') { + if ($txt -match '^-?\d+$') { return [int]$txt } + return [double]::Parse($txt, [System.Globalization.CultureInfo]::InvariantCulture) + } + return $txt +} +# app:value (тип прямо на узле) → значение ЛИБО массив (v8:FixedArray с детьми v8:Value). +function Get-ChoiceParamValue { + param($valNode) + $xt = $valNode.GetAttribute('type', 'http://www.w3.org/2001/XMLSchema-instance') + if ($xt -match 'FixedArray$') { + $arr = [System.Collections.ArrayList]@() + foreach ($sub in @($valNode.SelectNodes('v8:Value', $nsm))) { [void]$arr.Add((Convert-ChScalarNode $sub)) } + return $arr + } + return Convert-ChScalarNode $valNode +} + # --- Реквизит → DSL: shorthand-строка "Имя: Тип | флаги" ЛИБО object-форма при кастомном синониме. # (Синоним ≠ авто → object {name, type, synonym, [flags]}; иначе компактный shorthand.) --- function Attr-ToDsl { @@ -263,6 +289,46 @@ function Attr-ToDsl { } } + # ChoiceParameterLinks — [{name, dataPath, valueChange?}]. valueChange=Clear → компактно строкой "name=dataPath". + $cplNode = $ap.SelectSingleNode('md:ChoiceParameterLinks', $nsm) + if ($cplNode) { + $links = @($cplNode.SelectNodes('xr:Link', $nsm)) + if ($links.Count -gt 0) { + $arr = [System.Collections.ArrayList]@() + foreach ($lk in $links) { + $lName = $lk.SelectSingleNode('xr:Name', $nsm).InnerText + $lDp = $lk.SelectSingleNode('xr:DataPath', $nsm).InnerText + $vcN = $lk.SelectSingleNode('xr:ValueChange', $nsm) + $vcv = if ($vcN) { $vcN.InnerText } else { 'Clear' } + if ($vcv -eq 'Clear') { [void]$arr.Add("$lName=$lDp") } + else { [void]$arr.Add([ordered]@{ name = $lName; dataPath = $lDp; valueChange = $vcv }) } + } + $extra['choiceParameterLinks'] = $arr + } + } + + # ChoiceParameters — [{name, value?}]. app:value nil → без value; иначе типизированное значение. + $cpNode = $ap.SelectSingleNode('md:ChoiceParameters', $nsm) + if ($cpNode) { + $items = @($cpNode.SelectNodes('app:item', $nsm)) + if ($items.Count -gt 0) { + $arr = [System.Collections.ArrayList]@() + foreach ($it in $items) { + $pName = $it.GetAttribute('name') + $valN = $it.SelectSingleNode('app:value', $nsm) + $nilAttr = if ($valN) { $valN.GetAttribute('nil', 'http://www.w3.org/2001/XMLSchema-instance') } else { '' } + if (-not $valN -or $nilAttr -eq 'true') { + [void]$arr.Add([ordered]@{ name = $pName }) + } else { + $o = [ordered]@{ name = $pName } + $o['value'] = Get-ChoiceParamValue $valN + [void]$arr.Add($o) + } + } + $extra['choiceParameters'] = $arr + } + } + if ($synCustom -or ($null -ne $ttVal) -or $extra.Count -gt 0) { $o = [ordered]@{ name = $nm } if ($ts) { $o['type'] = $ts } diff --git a/docs/meta-dsl-spec.md b/docs/meta-dsl-spec.md index 5aa67482..fd74f360 100644 --- a/docs/meta-dsl-spec.md +++ b/docs/meta-dsl-spec.md @@ -151,6 +151,8 @@ JSON DSL для описания объектов метаданных конф | `fillFromFillingValue` | FillFromFillingValue | false | bool | | `fillValue` | FillValue | по типу (см. ниже) | значение заполнения — bool/число/строка/дата/DTR-путь; `null` → nil | | `linkByType` | LinkByType | пусто | связь по типу: `{dataPath, linkItem?}` ИЛИ строка-путь (linkItem=0). Тип значения реквизита-Характеристики берётся из реквизита по `dataPath` | +| `choiceParameterLinks` | ChoiceParameterLinks | пусто | связи параметров выбора: массив `{name, dataPath, valueChange?}` ИЛИ строк `"name=dataPath[:DontChange]"`. valueChange по умолч. `Clear` | +| `choiceParameters` | ChoiceParameters | пусто | параметры выбора: массив `{name, value?}` ИЛИ строк `"name=value"`. value — bool/число/строка/DTR-путь ИЛИ массив (→ FixedArray); без value → nil | | `createOnInput` | CreateOnInput | Auto | Auto/Use/DontUse | | `quickChoice` | QuickChoice | Auto | Auto/Use/DontUse. Прощаем bool (форм-стиль): `true`→Use, `false`→DontUse | | `dataHistory` | DataHistory | Use | Use/DontUse | diff --git a/tests/skills/cases/meta-compile/catalog-attr-choice-params.json b/tests/skills/cases/meta-compile/catalog-attr-choice-params.json new file mode 100644 index 00000000..51e7d203 --- /dev/null +++ b/tests/skills/cases/meta-compile/catalog-attr-choice-params.json @@ -0,0 +1,21 @@ +{ + "name": "Реквизит: ChoiceParameterLinks + ChoiceParameters (ограничение выбора)", + "input": { + "type": "Catalog", + "name": "ТестВыбора", + "attributes": [ + { "name": "Счет", "type": "CatalogRef.БанковскиеСчета", + "choiceParameterLinks": [ { "name": "Отбор.Владелец", "dataPath": "Catalog.ТестВыбора.StandardAttribute.Ref", "valueChange": "Clear" } ] }, + { "name": "Партнер", "type": "CatalogRef.Партнеры", + "choiceParameters": [ { "name": "Отбор.ЭтоГруппа", "value": false } ] }, + { "name": "ТипТТН", "type": "CatalogRef.ВидыТранспорта", + "choiceParameters": [ { "name": "Отбор.Тип", "value": ["Enum.ТипыВЕТИС.EmptyRef", "Enum.ТипыВЕТИС.EnumValue.ТТН"] } ] }, + { "name": "Валюта", "type": "CatalogRef.Валюты", + "choiceParameterLinks": "Отбор.Владелец=Catalog.ТестВыбора.StandardAttribute.Ref" } + ] + }, + "validatePath": "Catalogs/ТестВыбора", + "expect": { + "files": ["Catalogs/ТестВыбора.xml"] + } +} diff --git a/tests/skills/cases/meta-compile/snapshots/catalog-attr-choice-params/Catalogs/ТестВыбора.xml b/tests/skills/cases/meta-compile/snapshots/catalog-attr-choice-params/Catalogs/ТестВыбора.xml new file mode 100644 index 00000000..22d48e49 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/catalog-attr-choice-params/Catalogs/ТестВыбора.xml @@ -0,0 +1,275 @@ + + + + + + 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 + + Auto + InDialog + false + BothWays + + Catalog.ТестВыбора.StandardAttribute.Description + Catalog.ТестВыбора.StandardAttribute.Code + + Begin + DontUse + Directly + + + + + + + + + + + false + + + Automatic + Use + + + + + + Use + Auto + DontUse + false + false + + + + + Счет + + + ru + Счет + + + + + d5p1:CatalogRef.БанковскиеСчета + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Отбор.Владелец + Catalog.ТестВыбора.StandardAttribute.Ref + Clear + + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + Партнер + + + ru + Партнер + + + + + d5p1:CatalogRef.Партнеры + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + + false + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + ТипТТН + + + ru + Тип ттн + + + + + d5p1:CatalogRef.ВидыТранспорта + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + + + Enum.ТипыВЕТИС.EmptyRef + Enum.ТипыВЕТИС.EnumValue.ТТН + + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + Валюта + + + ru + Валюта + + + + + d5p1:CatalogRef.Валюты + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Отбор.Владелец + Catalog.ТестВыбора.StandardAttribute.Ref + Clear + + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + diff --git a/tests/skills/cases/meta-compile/snapshots/catalog-attr-choice-params/Catalogs/ТестВыбора/Ext/ObjectModule.bsl b/tests/skills/cases/meta-compile/snapshots/catalog-attr-choice-params/Catalogs/ТестВыбора/Ext/ObjectModule.bsl new file mode 100644 index 00000000..e69de29b diff --git a/tests/skills/cases/meta-compile/snapshots/catalog-attr-choice-params/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/catalog-attr-choice-params/Configuration.xml new file mode 100644 index 00000000..ffd0a96a --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/catalog-attr-choice-params/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-attr-choice-params/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-compile/snapshots/catalog-attr-choice-params/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/catalog-attr-choice-params/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-attr-choice-params/Languages/Русский.xml b/tests/skills/cases/meta-compile/snapshots/catalog-attr-choice-params/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/catalog-attr-choice-params/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file