diff --git a/.claude/skills/meta-compile/scripts/meta-compile.ps1 b/.claude/skills/meta-compile/scripts/meta-compile.ps1 index 021bfa9d..9be0259c 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.26 — Compile 1C metadata object from JSON +# meta-compile v1.27 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -1045,6 +1045,9 @@ function Emit-StandardAttribute { $fts = OvOr 'FullTextSearch' 'Use' $syn = OvOr 'Synonym' '' $tt = OvOr 'ToolTip' '' + $cf = OvOr 'ChoiceForm' '' + $cmt = OvOr 'Comment' '' + $msk = OvOr 'Mask' '' X "$indent" X "$indent`t" X "$indent`t$fc" @@ -1055,7 +1058,7 @@ function Emit-StandardAttribute { Emit-MLText "$indent`t" "xr:ToolTip" $tt X "$indent`tfalse" X "$indent`t" - X "$indent`t" + if ($cf) { X "$indent`t$(Esc-Xml "$cf")" } else { X "$indent`t" } X "$indent`tAuto" X "$indent`tAuto" X "$indent`t" @@ -1064,12 +1067,19 @@ function Emit-StandardAttribute { X "$indent`tfalse" X "$indent`t" Emit-MLText "$indent`t" "xr:Synonym" $syn - X "$indent`t" + if ($cmt) { X "$indent`t$(Esc-XmlText "$cmt")" } else { X "$indent`t" } X "$indent`t$fts" - X "$indent`t" - X "$indent`t" - X "$indent`t" - X "$indent`t" + Emit-ChoiceParameterLinks "$indent`t" (OvOr 'ChoiceParameterLinks' $null) 'xr:ChoiceParameterLinks' + # FillValue: дефолт nil; override-значение → типизированное (Normalize-ChoiceValue: DTR-путь/строка/bool). + $fvRaw = OvOr 'FillValue' $null + if ($null -eq $fvRaw) { X "$indent`t" } + else { + $fvN = Normalize-ChoiceValue $fvRaw + if ([string]::IsNullOrEmpty($fvN.Text)) { X "$indent`t" } + else { X "$indent`t$(Esc-Xml $fvN.Text)" } + } + if ($msk) { X "$indent`t$(Esc-XmlText "$msk")" } else { X "$indent`t" } + Emit-ChoiceParameters "$indent`t" (OvOr 'ChoiceParameters' $null) 'xr:ChoiceParameters' X "$indent" } @@ -1101,6 +1111,12 @@ function Emit-StandardAttributes { if ($null -ne $d.fillFromFillingValue) { $ov['FillFromFillingValue'] = if ($d.fillFromFillingValue) { 'true' } else { 'false' } } if ($d.fullTextSearch) { $ov['FullTextSearch'] = "$($d.fullTextSearch)" } if ($d.dataHistory) { $ov['DataHistory'] = "$($d.dataHistory)" } + if ($null -ne $d.fillValue) { $ov['FillValue'] = $d.fillValue } # DTR-путь/строка/bool + if ($null -ne $d.choiceParameterLinks) { $ov['ChoiceParameterLinks'] = $d.choiceParameterLinks } + if ($null -ne $d.choiceParameters) { $ov['ChoiceParameters'] = $d.choiceParameters } + if ($d.comment) { $ov['Comment'] = "$($d.comment)" } + if ($d.mask) { $ov['Mask'] = "$($d.mask)" } + if ($d.choiceForm) { $ov['ChoiceForm'] = "$($d.choiceForm)" } } } Emit-StandardAttribute "$indent`t" $a $ov @@ -1274,9 +1290,9 @@ function ConvertFrom-ChLinkShorthand { # — [{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" + param([string]$indent, $cp, [string]$tag = 'ChoiceParameters') + if (-not $cp -or @($cp).Count -eq 0) { X "$indent<$tag/>"; return } + X "$indent<$tag>" foreach ($item in @($cp)) { if ($item -is [string]) { $item = ConvertFrom-ChParamShorthand $item } $name = Get-ChElProp $item @('name','имя') @@ -1308,14 +1324,14 @@ function Emit-ChoiceParameters { } X "$indent`t" } - X "$indent" + 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" + param([string]$indent, $cpl, [string]$tag = 'ChoiceParameterLinks') + if (-not $cpl -or @($cpl).Count -eq 0) { X "$indent<$tag/>"; return } + X "$indent<$tag>" foreach ($lk in @($cpl)) { if ($lk -is [string]) { $lk = ConvertFrom-ChLinkShorthand $lk } $name = Get-ChElProp $lk @('name','имя') @@ -1335,7 +1351,7 @@ function Emit-ChoiceParameterLinks { X "$indent`t`t$vc" X "$indent`t" } - X "$indent" + X "$indent" } # --- Characteristics (привязка ПВХ «Дополнительные реквизиты и сведения») --- diff --git a/.claude/skills/meta-compile/scripts/meta-compile.py b/.claude/skills/meta-compile/scripts/meta-compile.py index 2dd773ef..5d34320a 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.26 — Compile 1C metadata object from JSON +# meta-compile v1.27 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -1057,6 +1057,9 @@ def emit_standard_attribute(indent, attr_name, ov=None): fts = ov.get('FullTextSearch', 'Use') syn = ov.get('Synonym', '') tt = ov.get('ToolTip', '') + cf = ov.get('ChoiceForm', '') + cmt = ov.get('Comment', '') + msk = ov.get('Mask', '') X(f'{indent}') X(f'{indent}\t') X(f'{indent}\t{fc}') @@ -1067,7 +1070,10 @@ def emit_standard_attribute(indent, attr_name, ov=None): emit_mltext(f'{indent}\t', 'xr:ToolTip', tt) X(f'{indent}\tfalse') X(f'{indent}\t') - X(f'{indent}\t') + if cf: + X(f'{indent}\t{esc_xml(str(cf))}') + else: + X(f'{indent}\t') X(f'{indent}\tAuto') X(f'{indent}\tAuto') X(f'{indent}\t') @@ -1076,12 +1082,26 @@ def emit_standard_attribute(indent, attr_name, ov=None): X(f'{indent}\tfalse') X(f'{indent}\t') emit_mltext(f'{indent}\t', 'xr:Synonym', syn) - X(f'{indent}\t') + if cmt: + X(f'{indent}\t{esc_xml_text(str(cmt))}') + else: + X(f'{indent}\t') X(f'{indent}\t{fts}') - X(f'{indent}\t') - X(f'{indent}\t') - X(f'{indent}\t') - X(f'{indent}\t') + emit_choice_parameter_links(f'{indent}\t', ov.get('ChoiceParameterLinks'), 'xr:ChoiceParameterLinks') + fv_raw = ov.get('FillValue', None) + if fv_raw is None: + X(f'{indent}\t') + else: + fv_xt, fv_tx = normalize_choice_value(fv_raw) + if fv_tx == '' or fv_tx is None: + X(f'{indent}\t') + else: + X(f'{indent}\t{esc_xml(fv_tx)}') + if msk: + X(f'{indent}\t{esc_xml_text(str(msk))}') + else: + X(f'{indent}\t') + emit_choice_parameters(f'{indent}\t', ov.get('ChoiceParameters'), 'xr:ChoiceParameters') X(f'{indent}') # Единый эмиттер блока StandardAttributes — поведение правят ДАННЫЕ, не форк кода (см. коммент в .ps1). @@ -1115,6 +1135,18 @@ def emit_standard_attributes(indent, object_type): ov['FullTextSearch'] = str(d['fullTextSearch']) if d.get('dataHistory'): ov['DataHistory'] = str(d['dataHistory']) + if d.get('fillValue') is not None: + ov['FillValue'] = d['fillValue'] + if d.get('choiceParameterLinks') is not None: + ov['ChoiceParameterLinks'] = d['choiceParameterLinks'] + if d.get('choiceParameters') is not None: + ov['ChoiceParameters'] = d['choiceParameters'] + if d.get('comment'): + ov['Comment'] = str(d['comment']) + if d.get('mask'): + ov['Mask'] = str(d['mask']) + if d.get('choiceForm'): + ov['ChoiceForm'] = str(d['choiceForm']) emit_standard_attribute(f'{indent}\t', a, ov) X(f'{indent}') @@ -1331,13 +1363,13 @@ def convert_from_ch_link_shorthand(s): o['dataPath'] = rest return o -def emit_choice_parameters(indent, cp): +def emit_choice_parameters(indent, cp, tag='ChoiceParameters'): if not cp: - X(f'{indent}') + X(f'{indent}<{tag}/>') return if isinstance(cp, (str, dict)): cp = [cp] - X(f'{indent}') + X(f'{indent}<{tag}>') for item in cp: if isinstance(item, str): item = convert_from_ch_param_shorthand(item) @@ -1365,15 +1397,15 @@ def emit_choice_parameters(indent, cp): else: X(f'{indent}\t\t{esc_xml(tx)}') X(f'{indent}\t') - X(f'{indent}') + X(f'{indent}') -def emit_choice_parameter_links(indent, cpl): +def emit_choice_parameter_links(indent, cpl, tag='ChoiceParameterLinks'): if not cpl: - X(f'{indent}') + X(f'{indent}<{tag}/>') return if isinstance(cpl, (str, dict)): cpl = [cpl] - X(f'{indent}') + X(f'{indent}<{tag}>') for lk in cpl: if isinstance(lk, str): lk = convert_from_ch_link_shorthand(lk) @@ -1394,7 +1426,7 @@ def emit_choice_parameter_links(indent, cpl): X(f'{indent}\t\t{esc_xml(str(dp))}') X(f'{indent}\t\t{vc}') X(f'{indent}\t') - X(f'{indent}') + X(f'{indent}') # --- Characteristics (привязка ПВХ «Дополнительные реквизиты и сведения») --- diff --git a/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 b/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 index dcfceaf7..92ae391a 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.17 — XML объекта метаданных 1С → JSON-черновик формата meta-compile +# meta-decompile v0.18 — XML объекта метаданных 1С → JSON-черновик формата meta-compile # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # # Пилот: только Catalog. Инверс meta-compile (omit-on-default: ключ эмитим только @@ -209,6 +209,41 @@ function Get-ChoiceParamValue { return Convert-ChScalarNode $valNode } +# → [{name,dataPath,valueChange?}] | строки "name=dataPath". $tag: 'md:...' (реквизит) | 'xr:...' (станд.). +function Parse-ChoiceParameterLinks { + param($parent, [string]$tag) + $node = $parent.SelectSingleNode($tag, $nsm) + if (-not $node) { return $null } + $links = @($node.SelectNodes('xr:Link', $nsm)) + if ($links.Count -eq 0) { return $null } + $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 }) } + } + return $arr +} +# → [{name,value?}]. $tag: 'md:...' | 'xr:...'. +function Parse-ChoiceParameters { + param($parent, [string]$tag) + $node = $parent.SelectSingleNode($tag, $nsm) + if (-not $node) { return $null } + $items = @($node.SelectNodes('app:item', $nsm)) + if ($items.Count -eq 0) { return $null } + $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) } + } + return $arr +} + # --- Реквизит → DSL: shorthand-строка "Имя: Тип | флаги" ЛИБО object-форма при кастомном синониме. # (Синоним ≠ авто → object {name, type, synonym, [flags]}; иначе компактный shorthand.) --- function Attr-ToDsl { @@ -289,45 +324,8 @@ 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 - } - } + $cplArr = Parse-ChoiceParameterLinks $ap 'md:ChoiceParameterLinks'; if ($null -ne $cplArr) { $extra['choiceParameterLinks'] = $cplArr } + $cpArr = Parse-ChoiceParameters $ap 'md:ChoiceParameters'; if ($null -ne $cpArr) { $extra['choiceParameters'] = $cpArr } if ($synCustom -or ($null -ne $ttVal) -or $extra.Count -gt 0) { $o = [ordered]@{ name = $nm } @@ -487,6 +485,14 @@ if ($saNode) { # FullTextSearch / DataHistory (профиль = Use) $ftsN = $sa.SelectSingleNode('xr:FullTextSearch', $nsm); if ($ftsN -and $ftsN.InnerText -ne 'Use') { $ov['fullTextSearch'] = $ftsN.InnerText } $dhN = $sa.SelectSingleNode('xr:DataHistory', $nsm); if ($dhN -and $dhN.InnerText -ne 'Use') { $ov['dataHistory'] = $dhN.InnerText } + # FillValue (дефолт nil) — DTR-путь/строка/bool. Comment/Mask/ChoiceForm (дефолт пусто). + $fvN = $sa.SelectSingleNode('xr:FillValue', $nsm) + if ($fvN -and $fvN.GetAttribute('nil', 'http://www.w3.org/2001/XMLSchema-instance') -ne 'true') { $ov['fillValue'] = Convert-ChScalarNode $fvN } + $saCmt = $sa.SelectSingleNode('xr:Comment', $nsm); if ($saCmt -and $saCmt.InnerText) { $ov['comment'] = $saCmt.InnerText } + $saMsk = $sa.SelectSingleNode('xr:Mask', $nsm); if ($saMsk -and $saMsk.InnerText) { $ov['mask'] = $saMsk.InnerText } + $saCf = $sa.SelectSingleNode('xr:ChoiceForm', $nsm); if ($saCf -and $saCf.InnerText) { $ov['choiceForm'] = $saCf.InnerText } + $saCpl = Parse-ChoiceParameterLinks $sa 'xr:ChoiceParameterLinks'; if ($null -ne $saCpl) { $ov['choiceParameterLinks'] = $saCpl } + $saCp = Parse-ChoiceParameters $sa 'xr:ChoiceParameters'; if ($null -ne $saCp) { $ov['choiceParameters'] = $saCp } if ($ov.Count -gt 0) { $saMap[$an] = $ov } } $dsl['standardAttributes'] = $saMap # даже пустой = блок есть (чистый профиль) diff --git a/docs/meta-dsl-spec.md b/docs/meta-dsl-spec.md index df65e940..2721d896 100644 --- a/docs/meta-dsl-spec.md +++ b/docs/meta-dsl-spec.md @@ -360,7 +360,9 @@ JSON DSL для описания объектов метаданных конф Формат: `standardAttributes` — объект `{ ИмяРеквизита: { переопределения } }`. Имена реквизитов — как в XML: `PredefinedDataName`, `Predefined`, `Ref`, `DeletionMark`, `IsFolder`, `Owner`, `Parent`, `Description`, `Code`. -Переопределяемые поля реквизита: `synonym` (ML — строка/`{ru,en}`), `tooltip` (ML), `fillChecking` (`DontCheck`|`ShowError`|`ShowWarning`), `fillFromFillingValue` (bool), `fullTextSearch` (`Use`|`DontUse`), `dataHistory` (`Use`|`DontUse`). +Переопределяемые поля реквизита: `synonym` (ML — строка/`{ru,en}`), `tooltip` (ML), `fillChecking` (`DontCheck`|`ShowError`|`ShowWarning`), `fillFromFillingValue` (bool), `fullTextSearch` (`Use`|`DontUse`), `dataHistory` (`Use`|`DontUse`), `fillValue` (значение — DTR-путь/строка/bool; см. §4.2), `choiceParameterLinks` / `choiceParameters` (как у реквизита, §4.2), `comment`, `mask`, `choiceForm`. + +> Не покрыты (редкие вырожденные формы `fillValue` стандартного реквизита): «пустое» значение с не-nil типом — `xs:string` из одних пробелов и пустой `xr:DesignTimeRef`. **Профиль материализованного блока** (значения, которые платформа заполняет автоматически — задавать их в DSL не нужно): diff --git a/tests/skills/cases/meta-compile/catalog-stdattr-custom.json b/tests/skills/cases/meta-compile/catalog-stdattr-custom.json new file mode 100644 index 00000000..ae33f0cc --- /dev/null +++ b/tests/skills/cases/meta-compile/catalog-stdattr-custom.json @@ -0,0 +1,20 @@ +{ + "name": "Кастомизация стандартных реквизитов (FillValue/ChoiceParameterLinks/Comment/Mask)", + "input": { + "type": "Catalog", + "name": "Договоры", + "owners": ["Catalog.Контрагенты"], + "standardAttributes": { + "Owner": { + "choiceParameterLinks": [ { "name": "Отбор.Владелец", "dataPath": "Ссылка", "valueChange": "Clear" } ], + "choiceParameters": [ { "name": "Отбор.ЭтоГруппа", "value": false } ] + }, + "Code": { "fillValue": "0000000000", "comment": "префикс кода", "mask": "!9999999999" }, + "Description": { "fillValue": "Catalog.Контрагенты.EmptyRef" } + } + }, + "validatePath": "Catalogs/Договоры", + "expect": { + "files": ["Catalogs/Договоры.xml"] + } +} diff --git a/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Catalogs/Договоры.xml b/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Catalogs/Договоры.xml new file mode 100644 index 00000000..10c1728e --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Catalogs/Договоры.xml @@ -0,0 +1,339 @@ + + + + + + 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 + + Catalog.Контрагенты + + ToItems + 9 + 25 + String + Variable + WholeCatalog + false + true + AsDescription + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + ShowError + false + true + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + Отбор.Владелец + Catalog.Договоры.StandardAttribute.Ref + Clear + + + + + + + false + + + + + + DontCheck + false + true + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + ShowError + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + Catalog.Контрагенты.EmptyRef + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + префикс кода + Use + + 0000000000 + !9999999999 + + + + + 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-stdattr-custom/Catalogs/Договоры/Ext/ObjectModule.bsl b/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Catalogs/Договоры/Ext/ObjectModule.bsl new file mode 100644 index 00000000..e69de29b diff --git a/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Configuration.xml new file mode 100644 index 00000000..b3258ed1 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/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-stdattr-custom/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/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-stdattr-custom/Languages/Русский.xml b/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file