diff --git a/.claude/skills/meta-compile/scripts/meta-compile.ps1 b/.claude/skills/meta-compile/scripts/meta-compile.ps1 index 6a09f761..f2fac8c8 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.55 — Compile 1C metadata object from JSON +# meta-compile v1.56 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -347,7 +347,8 @@ $validTypes = @("Catalog","Document","Enum","Constant","InformationRegister","Ac "AccountingRegister","CalculationRegister","ChartOfAccounts","ChartOfCharacteristicTypes", "ChartOfCalculationTypes","BusinessProcess","Task","ExchangePlan","DocumentJournal", "Report","DataProcessor","CommonModule","ScheduledJob","EventSubscription", - "HTTPService","WebService","DefinedType","FunctionalOption") + "HTTPService","WebService","DefinedType","FunctionalOption", + "Sequence","FilterCriterion","DocumentNumerator","SettingsStorage") if ($objType -notin $validTypes) { Write-Error "Unsupported type: $objType. Valid: $($validTypes -join ', ')" exit 1 @@ -1084,6 +1085,18 @@ $script:generatedTypes = @{ @{ prefix = "DataProcessorObject"; category = "Object" } @{ prefix = "DataProcessorManager"; category = "Manager" } ) + "Sequence" = @( + @{ prefix = "SequenceRecord"; category = "Record" } + @{ prefix = "SequenceManager"; category = "Manager" } + @{ prefix = "SequenceRecordSet"; category = "RecordSet" } + ) + "FilterCriterion" = @( + @{ prefix = "FilterCriterionManager"; category = "Manager" } + @{ prefix = "FilterCriterionList"; category = "List" } + ) + "SettingsStorage" = @( + @{ prefix = "SettingsStorageManager"; category = "Manager" } + ) } function Emit-InternalInfo { @@ -2523,6 +2536,104 @@ function Emit-FunctionalOptionProperties { } } +# Общий эмиттер списка MDObjectRef (Documents/RegisterRecords с обёрткой ). omit-on-empty. +function Emit-MDRefList { + param([string]$indent, [string]$tag, $items) + $arr = @(); if ($items) { $arr = @($items) } + if ($arr.Count -gt 0) { + X "$indent<$tag>" + foreach ($it in $arr) { X "$indent`t$(Esc-Xml (Normalize-MDObjectRef "$it"))" } + X "$indent" + } else { + X "$indent<$tag/>" + } +} + +function Emit-SequenceProperties { + param([string]$indent) + $i = $indent + X "$i$(Esc-Xml $objName)" + Emit-MLText $i "Synonym" $synonym + if ($def.comment) { X "$i$(Esc-XmlText $def.comment)" } else { X "$i" } + X "$i$(Get-EnumProp 'MoveBoundaryOnPosting' 'moveBoundaryOnPosting' 'DontMove')" + Emit-MDRefList $i "Documents" $def.documents + Emit-MDRefList $i "RegisterRecords" $def.registerRecords + X "$i$(Get-EnumProp 'DataLockControlMode' 'dataLockControlMode' 'Automatic')" +} + +function Emit-FilterCriterionProperties { + param([string]$indent) + $i = $indent + X "$i$(Esc-Xml $objName)" + Emit-MLText $i "Synonym" $synonym + if ($def.comment) { X "$i$(Esc-XmlText $def.comment)" } else { X "$i" } + $vt = if ($def.valueType) { "$($def.valueType)" } elseif ($def.valueTypes) { (@($def.valueTypes) | ForEach-Object { "$_" }) -join ' + ' } else { '' } + if ($vt) { Emit-ValueType $i $vt } else { X "$i" } + $useStdCmds = if (Get-BoolProp "useStandardCommands" $true) { "true" } else { "false" } + X "$i$useStdCmds" + # Content — объекты (реквизиты), по которым идёт отбор. + $content = @(); if ($def.content) { $content = @($def.content) } + if ($content.Count -gt 0) { + X "$i" + foreach ($obj in $content) { X "$i`t$(Esc-Xml (Normalize-MDObjectRef "$obj"))" } + X "$i" + } else { + X "$i" + } + Emit-VerbatimRef $i "DefaultForm" $def.defaultForm + Emit-VerbatimRef $i "AuxiliaryForm" $def.auxiliaryForm + Emit-MLText $i "ListPresentation" $def.listPresentation + Emit-MLText $i "ExtendedListPresentation" $def.extendedListPresentation + Emit-MLText $i "Explanation" $def.explanation +} + +function Emit-DocumentNumeratorProperties { + param([string]$indent) + $i = $indent + X "$i$(Esc-Xml $objName)" + Emit-MLText $i "Synonym" $synonym + if ($def.comment) { X "$i$(Esc-XmlText $def.comment)" } else { X "$i" } + X "$i$(Get-EnumProp 'NumberType' 'numberType' 'String')" + X "$i$(if ($null -ne $def.numberLength) { "$($def.numberLength)" } else { '11' })" + X "$i$(Get-EnumProp 'NumberAllowedLength' 'numberAllowedLength' 'Variable')" + X "$i$(Get-EnumProp 'NumberPeriodicity' 'numberPeriodicity' 'Year')" + X "$i$(if (Get-BoolProp 'checkUnique' $true) { 'true' } else { 'false' })" +} + +function Emit-SettingsStorageProperties { + param([string]$indent) + $i = $indent + X "$i$(Esc-Xml $objName)" + Emit-MLText $i "Synonym" $synonym + if ($def.comment) { X "$i$(Esc-XmlText $def.comment)" } else { X "$i" } + Emit-VerbatimRef $i "DefaultSaveForm" $def.defaultSaveForm + Emit-VerbatimRef $i "DefaultLoadForm" $def.defaultLoadForm + Emit-VerbatimRef $i "AuxiliarySaveForm" $def.auxiliarySaveForm + Emit-VerbatimRef $i "AuxiliaryLoadForm" $def.auxiliaryLoadForm +} + +# Измерение последовательности: Name/Synonym/Comment/Type + DocumentMap/RegisterRecordsMap (списки MDObjectRef — +# соответствие измерения реквизитам документов/движениям регистров). +function Emit-SequenceDimension { + param([string]$indent, $dimDef) + $uuid = New-Guid-String + $parsed = Parse-AttributeShorthand $dimDef + X "$indent" + X "$indent`t" + X "$indent`t`t$(Esc-Xml $parsed.name)" + Emit-MLText "$indent`t`t" "Synonym" $parsed.synonym + if ($parsed.comment) { X "$indent`t`t$(Esc-XmlText $parsed.comment)" } else { X "$indent`t`t" } + if ($parsed.typeEmpty) { X "$indent`t`t" } + elseif ($parsed.type) { Emit-ValueType "$indent`t`t" $parsed.type } + else { X "$indent`t`t" } + $dm = if ($dimDef -is [string]) { $null } else { $dimDef.documentMap } + $rrm = if ($dimDef -is [string]) { $null } else { $dimDef.registerRecordsMap } + Emit-MDRefList "$indent`t`t" "DocumentMap" $dm + Emit-MDRefList "$indent`t`t" "RegisterRecordsMap" $rrm + X "$indent`t" + X "$indent" +} + function Emit-CommonModuleProperties { param([string]$indent) $i = $indent @@ -3606,6 +3717,10 @@ switch ($objType) { "AccumulationRegister" { Emit-AccumulationRegisterProperties "`t`t`t" } "DefinedType" { Emit-DefinedTypeProperties "`t`t`t" } "FunctionalOption" { Emit-FunctionalOptionProperties "`t`t`t" } + "Sequence" { Emit-SequenceProperties "`t`t`t" } + "FilterCriterion" { Emit-FilterCriterionProperties "`t`t`t" } + "DocumentNumerator" { Emit-DocumentNumeratorProperties "`t`t`t" } + "SettingsStorage" { Emit-SettingsStorageProperties "`t`t`t" } "CommonModule" { Emit-CommonModuleProperties "`t`t`t" } "ScheduledJob" { Emit-ScheduledJobProperties "`t`t`t" } "EventSubscription" { Emit-EventSubscriptionProperties "`t`t`t" } @@ -3826,6 +3941,41 @@ if ($objType -eq "DocumentJournal") { } } +# --- Sequence: dimensions --- +if ($objType -eq "Sequence") { + $seqDims = @() + if ($def.dimensions) { $seqDims = @($def.dimensions) } + if ($seqDims.Count -gt 0) { + $hasChildren = $true + X "`t`t" + foreach ($d in $seqDims) { Emit-SequenceDimension "`t`t`t" $d } + X "`t`t" + } else { + X "`t`t" + } +} + +# --- FilterCriterion / SettingsStorage: ChildObjects (формы вне скоупа; FilterCriterion может нести ) --- +if ($objType -in @("FilterCriterion", "SettingsStorage")) { + $fcCommands = @() + if ($def.commands) { + if ($def.commands -is [array] -or $def.commands.GetType().Name -eq 'Object[]') { + foreach ($c in $def.commands) { $fcCommands += @{ name = "$($c.name)"; def = $c } } + } else { + $def.commands.PSObject.Properties | ForEach-Object { $fcCommands += @{ name = $_.Name; def = $_.Value } } + } + } + if ($fcCommands.Count -gt 0) { + $hasChildren = $true + X "`t`t" + foreach ($cmd in $fcCommands) { Emit-Command "`t`t`t" $cmd.name $cmd.def } + X "`t`t" + } else { + X "`t`t" + } +} +# DocumentNumerator: ChildObjects нет вовсе (не эмитим). + # --- HTTPService: URLTemplates --- if ($objType -eq "HTTPService") { $urlTemplates = @{} @@ -3901,6 +4051,10 @@ $script:typePluralMap = @{ "WebService" = "WebServices" "DefinedType" = "DefinedTypes" "FunctionalOption" = "FunctionalOptions" + "Sequence" = "Sequences" + "FilterCriterion" = "FilterCriteria" + "DocumentNumerator" = "DocumentNumerators" + "SettingsStorage" = "SettingsStorages" } $typePlural = $script:typePluralMap[$objType] diff --git a/.claude/skills/meta-compile/scripts/meta-compile.py b/.claude/skills/meta-compile/scripts/meta-compile.py index 713101d4..4306d9fc 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.55 — Compile 1C metadata object from JSON +# meta-compile v1.56 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -462,6 +462,7 @@ valid_types = [ 'Report', 'DataProcessor', 'CommonModule', 'ScheduledJob', 'EventSubscription', 'HTTPService', 'WebService', 'DefinedType', 'FunctionalOption', + 'Sequence', 'FilterCriterion', 'DocumentNumerator', 'SettingsStorage', ] if obj_type not in valid_types: print(f"Unsupported type: {obj_type}. Valid: {', '.join(valid_types)}", file=sys.stderr) @@ -1104,6 +1105,18 @@ generated_types = { {'prefix': 'DataProcessorObject', 'category': 'Object'}, {'prefix': 'DataProcessorManager', 'category': 'Manager'}, ], + 'Sequence': [ + {'prefix': 'SequenceRecord', 'category': 'Record'}, + {'prefix': 'SequenceManager', 'category': 'Manager'}, + {'prefix': 'SequenceRecordSet', 'category': 'RecordSet'}, + ], + 'FilterCriterion': [ + {'prefix': 'FilterCriterionManager', 'category': 'Manager'}, + {'prefix': 'FilterCriterionList', 'category': 'List'}, + ], + 'SettingsStorage': [ + {'prefix': 'SettingsStorageManager', 'category': 'Manager'}, + ], } def emit_internal_info(indent, object_type, object_name): @@ -2521,6 +2534,116 @@ def emit_functional_option_properties(indent): else: X(f'{i}') +def emit_md_ref_list(indent, tag, items): + """Список MDObjectRef (Documents/RegisterRecords/DocumentMap/…) с . omit-on-empty.""" + arr = list(items) if items else [] + if arr: + X(f'{indent}<{tag}>') + for it in arr: + X(f'{indent}\t{esc_xml(normalize_md_object_ref(str(it)))}') + X(f'{indent}') + else: + X(f'{indent}<{tag}/>') + +def emit_sequence_properties(indent): + i = indent + X(f'{i}{esc_xml(obj_name)}') + emit_mltext(i, 'Synonym', synonym) + if defn.get('comment'): + X(f'{i}{esc_xml_text(str(defn["comment"]))}') + else: + X(f'{i}') + X(f'{i}{get_enum_prop("MoveBoundaryOnPosting", "moveBoundaryOnPosting", "DontMove")}') + emit_md_ref_list(i, 'Documents', defn.get('documents')) + emit_md_ref_list(i, 'RegisterRecords', defn.get('registerRecords')) + X(f'{i}{get_enum_prop("DataLockControlMode", "dataLockControlMode", "Automatic")}') + +def emit_filter_criterion_properties(indent): + i = indent + X(f'{i}{esc_xml(obj_name)}') + emit_mltext(i, 'Synonym', synonym) + if defn.get('comment'): + X(f'{i}{esc_xml_text(str(defn["comment"]))}') + else: + X(f'{i}') + if defn.get('valueType'): + vt = str(defn['valueType']) + elif defn.get('valueTypes'): + vt = ' + '.join(str(x) for x in defn['valueTypes']) + else: + vt = '' + if vt: + emit_value_type(i, vt) + else: + X(f'{i}') + use_std_cmds = 'true' if get_bool_prop('useStandardCommands', True) else 'false' + X(f'{i}{use_std_cmds}') + content = list(defn['content']) if defn.get('content') else [] + if content: + X(f'{i}') + for obj in content: + X(f'{i}\t{esc_xml(normalize_md_object_ref(str(obj)))}') + X(f'{i}') + else: + X(f'{i}') + emit_verbatim_ref(i, 'DefaultForm', defn.get('defaultForm')) + emit_verbatim_ref(i, 'AuxiliaryForm', defn.get('auxiliaryForm')) + emit_mltext(i, 'ListPresentation', defn.get('listPresentation')) + emit_mltext(i, 'ExtendedListPresentation', defn.get('extendedListPresentation')) + emit_mltext(i, 'Explanation', defn.get('explanation')) + +def emit_document_numerator_properties(indent): + i = indent + X(f'{i}{esc_xml(obj_name)}') + emit_mltext(i, 'Synonym', synonym) + if defn.get('comment'): + X(f'{i}{esc_xml_text(str(defn["comment"]))}') + else: + X(f'{i}') + X(f'{i}{get_enum_prop("NumberType", "numberType", "String")}') + num_len = str(defn['numberLength']) if defn.get('numberLength') is not None else '11' + X(f'{i}{num_len}') + X(f'{i}{get_enum_prop("NumberAllowedLength", "numberAllowedLength", "Variable")}') + X(f'{i}{get_enum_prop("NumberPeriodicity", "numberPeriodicity", "Year")}') + X(f'{i}{"true" if get_bool_prop("checkUnique", True) else "false"}') + +def emit_settings_storage_properties(indent): + i = indent + X(f'{i}{esc_xml(obj_name)}') + emit_mltext(i, 'Synonym', synonym) + if defn.get('comment'): + X(f'{i}{esc_xml_text(str(defn["comment"]))}') + else: + X(f'{i}') + emit_verbatim_ref(i, 'DefaultSaveForm', defn.get('defaultSaveForm')) + emit_verbatim_ref(i, 'DefaultLoadForm', defn.get('defaultLoadForm')) + emit_verbatim_ref(i, 'AuxiliarySaveForm', defn.get('auxiliarySaveForm')) + emit_verbatim_ref(i, 'AuxiliaryLoadForm', defn.get('auxiliaryLoadForm')) + +def emit_sequence_dimension(indent, dim_def): + uid = new_uuid() + parsed = parse_attribute_shorthand(dim_def) + X(f'{indent}') + X(f'{indent}\t') + X(f'{indent}\t\t{esc_xml(parsed["name"])}') + emit_mltext(f'{indent}\t\t', 'Synonym', parsed['synonym']) + if parsed.get('comment'): + X(f'{indent}\t\t{esc_xml_text(parsed["comment"])}') + else: + X(f'{indent}\t\t') + if parsed.get('typeEmpty'): + X(f'{indent}\t\t') + elif parsed['type']: + emit_value_type(f'{indent}\t\t', parsed['type']) + else: + X(f'{indent}\t\t') + dm = None if isinstance(dim_def, str) else dim_def.get('documentMap') + rrm = None if isinstance(dim_def, str) else dim_def.get('registerRecordsMap') + emit_md_ref_list(f'{indent}\t\t', 'DocumentMap', dm) + emit_md_ref_list(f'{indent}\t\t', 'RegisterRecordsMap', rrm) + X(f'{indent}\t') + X(f'{indent}') + def emit_common_module_properties(indent): i = indent X(f'{i}{esc_xml(obj_name)}') @@ -3467,6 +3590,10 @@ property_emitters = { 'AccumulationRegister': emit_accumulation_register_properties, 'DefinedType': emit_defined_type_properties, 'FunctionalOption': emit_functional_option_properties, + 'Sequence': emit_sequence_properties, + 'FilterCriterion': emit_filter_criterion_properties, + 'DocumentNumerator': emit_document_numerator_properties, + 'SettingsStorage': emit_settings_storage_properties, 'CommonModule': emit_common_module_properties, 'ScheduledJob': emit_scheduled_job_properties, 'EventSubscription': emit_event_subscription_properties, @@ -3678,6 +3805,39 @@ if obj_type == 'DocumentJournal': else: X('\t\t') +# --- Sequence: dimensions --- +if obj_type == 'Sequence': + seq_dims = list(defn.get('dimensions', [])) + if seq_dims: + has_children = True + X('\t\t') + for d in seq_dims: + emit_sequence_dimension('\t\t\t', d) + X('\t\t') + else: + X('\t\t') + +# --- FilterCriterion / SettingsStorage: ChildObjects (формы стрипаются; FilterCriterion может нести ) --- +if obj_type in ('FilterCriterion', 'SettingsStorage'): + fc_commands = [] + if defn.get('commands'): + cd = defn['commands'] + if isinstance(cd, list): + for c in cd: + fc_commands.append({'name': str(c.get('name', '')), 'def': c}) + else: + for k, v in cd.items(): + fc_commands.append({'name': k, 'def': v}) + if fc_commands: + has_children = True + X('\t\t') + for cmd in fc_commands: + emit_command('\t\t\t', cmd['name'], cmd['def']) + X('\t\t') + else: + X('\t\t') +# DocumentNumerator: ChildObjects нет вовсе (не эмитим). + # --- HTTPService: URLTemplates --- if obj_type == 'HTTPService': url_templates = {} @@ -3748,6 +3908,10 @@ type_plural_map = { 'WebService': 'WebServices', 'DefinedType': 'DefinedTypes', 'FunctionalOption': 'FunctionalOptions', + 'Sequence': 'Sequences', + 'FilterCriterion': 'FilterCriteria', + 'DocumentNumerator': 'DocumentNumerators', + 'SettingsStorage': 'SettingsStorages', } type_plural = type_plural_map[obj_type] diff --git a/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 b/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 index 32d472d7..1e1e3a63 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.46 — XML объекта метаданных 1С → JSON-черновик формата meta-compile +# meta-decompile v0.47 — XML объекта метаданных 1С → JSON-черновик формата meta-compile # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # # Поддержаны: Catalog, ExchangePlan, ChartOfCharacteristicTypes, ChartOfAccounts, ChartOfCalculationTypes, Document, @@ -92,8 +92,8 @@ foreach ($c in $rootEl.ChildNodes) { if ($c.NodeType -eq 'Element') { $objNode = if (-not $objNode) { [Console]::Error.WriteLine("meta-decompile: пустой MetaDataObject"); exit 3 } $objType = $objNode.LocalName -if ($objType -notin @('Catalog', 'ExchangePlan', 'ChartOfCharacteristicTypes', 'ChartOfAccounts', 'ChartOfCalculationTypes', 'Document', 'InformationRegister', 'AccumulationRegister', 'AccountingRegister', 'CalculationRegister', 'BusinessProcess', 'Task', 'Enum', 'Report', 'DataProcessor', 'Constant', 'DefinedType', 'FunctionalOption', 'DocumentJournal')) { - [Console]::Error.WriteLine("meta-decompile: тип '$objType' пока не поддержан (Catalog, ExchangePlan, ChartOfCharacteristicTypes, ChartOfAccounts, ChartOfCalculationTypes, Document, InformationRegister, AccumulationRegister, AccountingRegister, CalculationRegister, BusinessProcess, Task, Enum, Report, DataProcessor, Constant, DefinedType, FunctionalOption, DocumentJournal)"); exit 3 +if ($objType -notin @('Catalog', 'ExchangePlan', 'ChartOfCharacteristicTypes', 'ChartOfAccounts', 'ChartOfCalculationTypes', 'Document', 'InformationRegister', 'AccumulationRegister', 'AccountingRegister', 'CalculationRegister', 'BusinessProcess', 'Task', 'Enum', 'Report', 'DataProcessor', 'Constant', 'DefinedType', 'FunctionalOption', 'DocumentJournal', 'Sequence', 'FilterCriterion', 'DocumentNumerator', 'SettingsStorage')) { + [Console]::Error.WriteLine("meta-decompile: тип '$objType' пока не поддержан (…, Sequence, FilterCriterion, DocumentNumerator, SettingsStorage)"); exit 3 } $props = $objNode.SelectSingleNode('md:Properties', $nsm) @@ -421,9 +421,9 @@ Add-EnumProp 'subordinationUse' 'SubordinationUse' 'ToItems' $descrLenDef = switch ($objType) { 'ExchangePlan' { 150 } 'ChartOfCharacteristicTypes' { 100 } 'ChartOfCalculationTypes' { 100 } default { 25 } } $codeLenDef = if ($objType -eq 'ChartOfCalculationTypes') { 5 } else { 9 } $createInpDef = if ($objType -in @('Catalog', 'Document')) { 'Use' } else { 'DontUse' } -$dataLockDef = if ($objType -in @('Catalog', 'ChartOfAccounts', 'ChartOfCalculationTypes')) { 'Automatic' } else { 'Managed' } +$dataLockDef = if ($objType -in @('Catalog', 'ChartOfAccounts', 'ChartOfCalculationTypes', 'Sequence')) { 'Automatic' } else { 'Managed' } $codeSeriesDef = switch ($objType) { 'ChartOfCharacteristicTypes' { 'WholeCharacteristicKind' } 'ChartOfAccounts' { 'WholeChartOfAccounts' } default { 'WholeCatalog' } } -$checkUniqueDef = ($objType -in @('ChartOfCharacteristicTypes', 'ChartOfAccounts', 'Document')) # ПВХ/ПС/Документ дефолт true, Catalog false +$checkUniqueDef = ($objType -in @('ChartOfCharacteristicTypes', 'ChartOfAccounts', 'Document', 'DocumentNumerator')) # ПВХ/ПС/Документ/Нумератор дефолт true, Catalog false $defPresDef = if ($objType -eq 'ChartOfAccounts') { 'AsCode' } else { 'AsDescription' } # ПС по умолчанию AsCode Add-IntProp 'codeLength' 'CodeLength' $codeLenDef Add-IntProp 'descriptionLength' 'DescriptionLength' $descrLenDef @@ -619,6 +619,43 @@ if ($objType -eq 'DocumentJournal') { if ($rdItems.Count -gt 0) { $dsl['registeredDocuments'] = [System.Collections.ArrayList]@($rdItems) } } } +# Sequence — последовательность документов: граница, документы, движения, измерения (ChildObjects ниже). +if ($objType -eq 'Sequence') { + Add-EnumProp 'moveBoundaryOnPosting' 'MoveBoundaryOnPosting' 'DontMove' + foreach ($ll in @(@('Documents','documents'), @('RegisterRecords','registerRecords'))) { + $ln = $props.SelectSingleNode("md:$($ll[0])", $nsm) + if ($ln) { + $items = @($ln.SelectNodes('xr:Item', $nsm) | ForEach-Object { $_.InnerText }) + if ($items.Count -gt 0) { $dsl[$ll[1]] = [System.Collections.ArrayList]@($items) } + } + } + # dataLockControlMode покрыт общим блоком (дефолт Automatic для Sequence). +} +# FilterCriterion — критерий отбора: тип значения + состав (объекты отбора) + формы. +if ($objType -eq 'FilterCriterion') { + $vt = Get-TypeShorthand ($props.SelectSingleNode('md:Type', $nsm)); if ($vt) { $dsl['valueType'] = $vt } + $cn = $props.SelectSingleNode('md:Content', $nsm) + if ($cn) { + $items = @($cn.SelectNodes('xr:Item', $nsm) | ForEach-Object { $_.InnerText }) + if ($items.Count -gt 0) { $dsl['content'] = [System.Collections.ArrayList]@($items) } + } + $dfm = P 'DefaultForm'; if ($dfm) { $dsl['defaultForm'] = $dfm } + $afm = P 'AuxiliaryForm'; if ($afm) { $dsl['auxiliaryForm'] = $afm } +} +# DocumentNumerator — нумератор документов: параметры нумерации (без InternalInfo/ChildObjects). +if ($objType -eq 'DocumentNumerator') { + Add-EnumProp 'numberType' 'NumberType' 'String' + Add-IntProp 'numberLength' 'NumberLength' 11 + Add-EnumProp 'numberAllowedLength' 'NumberAllowedLength' 'Variable' + Add-EnumProp 'numberPeriodicity' 'NumberPeriodicity' 'Year' + # checkUnique покрыт общим блоком (дефолт true для DocumentNumerator). +} +# SettingsStorage — хранилище настроек: формы сохранения/загрузки (плоские ref). +if ($objType -eq 'SettingsStorage') { + foreach ($fp in @(@('DefaultSaveForm','defaultSaveForm'), @('DefaultLoadForm','defaultLoadForm'), @('AuxiliarySaveForm','auxiliarySaveForm'), @('AuxiliaryLoadForm','auxiliaryLoadForm'))) { + $fv = P $fp[0]; if ($fv) { $dsl[$fp[1]] = $fv } + } +} # Constant — богатый одиночный реквизит: Type + свойства значения (как у реквизита) + object-уровень. if ($objType -eq 'Constant') { $vt = Get-TypeShorthand ($props.SelectSingleNode('md:Type', $nsm)) @@ -946,9 +983,31 @@ if ($childObjs) { foreach ($a in $extDimFlagNodes) { [void]$arr.Add((Attr-ToDsl $a)) } $dsl['extDimensionAccountingFlags'] = $arr } - # Регистры: измерения и ресурсы — структурно как реквизит (Attr-ToDsl захватывает общий слой + регистро-специфику). + # Sequence: измерения несут DocumentMap/RegisterRecordsMap (соответствие реквизитам документов/движениям) — + # Attr-ToDsl их не знает → отдельный захват объектной формой. Прочие типы (регистры) — общий Attr-ToDsl. $dimNodes = @($childObjs.SelectNodes('md:Dimension', $nsm)) - if ($dimNodes.Count -gt 0) { + if ($dimNodes.Count -gt 0 -and $objType -eq 'Sequence') { + $arr = [System.Collections.ArrayList]@() + foreach ($dn in $dimNodes) { + $dp = $dn.SelectSingleNode('md:Properties', $nsm) + $dName = ($dp.SelectSingleNode('md:Name', $nsm)).InnerText + $o = [ordered]@{ name = $dName } + $dSyn = Get-MLValue ($dp.SelectSingleNode('md:Synonym', $nsm)) + if ($dSyn -is [string]) { if ($dSyn -ne (Split-CamelWords $dName)) { $o['synonym'] = $dSyn } } + elseif ($null -ne $dSyn) { $o['synonym'] = $dSyn } + $dCmtN = $dp.SelectSingleNode('md:Comment', $nsm); if ($dCmtN -and $dCmtN.InnerText) { $o['comment'] = $dCmtN.InnerText } + $dt = Get-TypeShorthand ($dp.SelectSingleNode('md:Type', $nsm)); if ($dt) { $o['type'] = $dt } + foreach ($mp in @(@('DocumentMap','documentMap'), @('RegisterRecordsMap','registerRecordsMap'))) { + $mn = $dp.SelectSingleNode("md:$($mp[0])", $nsm) + if ($mn) { + $mItems = @($mn.SelectNodes('xr:Item', $nsm) | ForEach-Object { $_.InnerText }) + if ($mItems.Count -gt 0) { $o[$mp[1]] = [System.Collections.ArrayList]@($mItems) } + } + } + [void]$arr.Add($o) + } + $dsl['dimensions'] = $arr + } elseif ($dimNodes.Count -gt 0) { $arr = [System.Collections.ArrayList]@() foreach ($a in $dimNodes) { [void]$arr.Add((Attr-ToDsl $a)) } $dsl['dimensions'] = $arr diff --git a/docs/meta-dsl-spec.md b/docs/meta-dsl-spec.md index dcf4739d..7fdd4446 100644 --- a/docs/meta-dsl-spec.md +++ b/docs/meta-dsl-spec.md @@ -1186,6 +1186,63 @@ ChildObjects и модулей. { "name": "Сумма", "indexing": "Index", "references": ["Document.ПоступлениеНаСчет.Attribute.Сумма"] } ] } ``` +### 7.15a Sequence (Последовательность документов) + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `moveBoundaryOnPosting` | `DontMove` | MoveBoundaryOnPosting | +| `documents` | `[]` | Documents — массив MDObjectRef документов последовательности | +| `registerRecords` | `[]` | RegisterRecords — движения (список MDObjectRef) | +| `dataLockControlMode` | `Automatic` | DataLockControlMode | +| `dimensions` | `[]` | → Dimension в ChildObjects | + +**Измерение (`dimensions[]`)** — `{name, type, synonym?, comment?, documentMap[], registerRecordsMap[]}`: +`documentMap`/`registerRecordsMap` — MDObjectRef-пути к реквизитам документов / движениям регистров +(соответствие измерению). Прощающий ввод русских корней. + +```json +{ "type": "Sequence", "name": "Взаиморасчеты", "documents": ["Document.Реализация"], + "dimensions": [{ "name": "Организация", "type": "CatalogRef.Организации", + "documentMap": ["Document.Реализация.Attribute.Организация"] }] } +``` + +### 7.15b FilterCriterion (Критерий отбора) + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `valueType` | — | Type — тип значения отбора (составной через ` + `) | +| `content` | `[]` | Content — реквизиты, по которым идёт отбор (MDObjectRef) | +| `useStandardCommands` | `true` | UseStandardCommands | +| `defaultForm` / `auxiliaryForm` | `""` | формы (verbatim) | +| `listPresentation` / `extendedListPresentation` / `explanation` | пусто | презентации (ML) | +| `comment` | пусто | Comment | +| `commands` | `[]` | → Command в ChildObjects (§7.1.3) | + +```json +{ "type": "FilterCriterion", "name": "ДокументыПоКонтрагенту", "valueType": "CatalogRef.Контрагенты", + "content": ["Document.Реализация.Attribute.Контрагент"] } +``` + +### 7.15c DocumentNumerator (Нумератор документов) + +Параметры нумерации (без InternalInfo и ChildObjects). + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `numberType` | `String` | NumberType (String/Number) | +| `numberLength` | `11` | NumberLength | +| `numberAllowedLength` | `Variable` | NumberAllowedLength (Variable/Fixed) | +| `numberPeriodicity` | `Year` | NumberPeriodicity (Nonperiodical/Day/…/Year) | +| `checkUnique` | `true` | CheckUnique | + +### 7.15d SettingsStorage (Хранилище настроек) + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `defaultSaveForm` / `defaultLoadForm` | `""` | DefaultSaveForm / DefaultLoadForm (verbatim) | +| `auxiliarySaveForm` / `auxiliaryLoadForm` | `""` | Auxiliary*Form (verbatim) | +| `comment` | пусто | Comment | + ### 7.16 ChartOfAccounts Полное описание типа (все поля, стандартные реквизиты, грамматика предопределённых счетов) — см. **§7.2c**. diff --git a/tests/skills/cases/meta-compile/document-numerator.json b/tests/skills/cases/meta-compile/document-numerator.json new file mode 100644 index 00000000..88acb68b --- /dev/null +++ b/tests/skills/cases/meta-compile/document-numerator.json @@ -0,0 +1,12 @@ +{ + "name": "Нумератор документов", + "input": { + "type": "DocumentNumerator", + "name": "ЕдиныйНумератор", + "numberLength": 8, + "numberAllowedLength": "Fixed", + "numberPeriodicity": "Day" + }, + "validatePath": "DocumentNumerators/ЕдиныйНумератор", + "expect": { "files": ["DocumentNumerators/ЕдиныйНумератор.xml"] } +} diff --git a/tests/skills/cases/meta-compile/filter-criterion.json b/tests/skills/cases/meta-compile/filter-criterion.json new file mode 100644 index 00000000..c5156f5f --- /dev/null +++ b/tests/skills/cases/meta-compile/filter-criterion.json @@ -0,0 +1,15 @@ +{ + "name": "Критерий отбора", + "input": { + "type": "FilterCriterion", + "name": "ДокументыПоКонтрагенту", + "valueType": "CatalogRef.Контрагенты", + "useStandardCommands": false, + "content": [ + "Документ.ПоступлениеТоваров.Реквизит.Контрагент", + "Document.РеализацияТоваров.Attribute.Контрагент" + ] + }, + "validatePath": "FilterCriteria/ДокументыПоКонтрагенту", + "expect": { "files": ["FilterCriteria/ДокументыПоКонтрагенту.xml"] } +} diff --git a/tests/skills/cases/meta-compile/sequence.json b/tests/skills/cases/meta-compile/sequence.json new file mode 100644 index 00000000..a00004a6 --- /dev/null +++ b/tests/skills/cases/meta-compile/sequence.json @@ -0,0 +1,20 @@ +{ + "name": "Последовательность документов с измерением", + "input": { + "type": "Sequence", + "name": "ВзаиморасчетыСКонтрагентами", + "documents": ["Документ.ПоступлениеТоваров", "Document.РеализацияТоваров"], + "dimensions": [ + { + "name": "Организация", + "type": "CatalogRef.Организации", + "documentMap": [ + "Документ.ПоступлениеТоваров.Реквизит.Организация", + "Document.РеализацияТоваров.Attribute.Организация" + ] + } + ] + }, + "validatePath": "Sequences/ВзаиморасчетыСКонтрагентами", + "expect": { "files": ["Sequences/ВзаиморасчетыСКонтрагентами.xml"] } +} diff --git a/tests/skills/cases/meta-compile/settings-storage.json b/tests/skills/cases/meta-compile/settings-storage.json new file mode 100644 index 00000000..bca6a789 --- /dev/null +++ b/tests/skills/cases/meta-compile/settings-storage.json @@ -0,0 +1,10 @@ +{ + "name": "Хранилище настроек", + "input": { + "type": "SettingsStorage", + "name": "ХранилищеОтчетов", + "comment": "(Демо)" + }, + "validatePath": "SettingsStorages/ХранилищеОтчетов", + "expect": { "files": ["SettingsStorages/ХранилищеОтчетов.xml"] } +} diff --git a/tests/skills/cases/meta-compile/snapshots/document-numerator/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/document-numerator/Configuration.xml new file mode 100644 index 00000000..96f417cc --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/document-numerator/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/document-numerator/DocumentNumerators/ЕдиныйНумератор.xml b/tests/skills/cases/meta-compile/snapshots/document-numerator/DocumentNumerators/ЕдиныйНумератор.xml new file mode 100644 index 00000000..f9d00eb3 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/document-numerator/DocumentNumerators/ЕдиныйНумератор.xml @@ -0,0 +1,20 @@ + + + + + ЕдиныйНумератор + + + ru + Единый нумератор + + + + String + 8 + Fixed + Day + true + + + diff --git a/tests/skills/cases/meta-compile/snapshots/document-numerator/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-compile/snapshots/document-numerator/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/document-numerator/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/document-numerator/Languages/Русский.xml b/tests/skills/cases/meta-compile/snapshots/document-numerator/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/document-numerator/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/filter-criterion/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/filter-criterion/Configuration.xml new file mode 100644 index 00000000..fc2cb718 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/filter-criterion/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/filter-criterion/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-compile/snapshots/filter-criterion/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/filter-criterion/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/filter-criterion/FilterCriteria/ДокументыПоКонтрагенту.xml b/tests/skills/cases/meta-compile/snapshots/filter-criterion/FilterCriteria/ДокументыПоКонтрагенту.xml new file mode 100644 index 00000000..3064b640 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/filter-criterion/FilterCriteria/ДокументыПоКонтрагенту.xml @@ -0,0 +1,39 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + + ДокументыПоКонтрагенту + + + ru + Документы по контрагенту + + + + + d5p1:CatalogRef.Контрагенты + + false + + Document.ПоступлениеТоваров.Attribute.Контрагент + Document.РеализацияТоваров.Attribute.Контрагент + + + + + + + + + + diff --git a/tests/skills/cases/meta-compile/snapshots/filter-criterion/Languages/Русский.xml b/tests/skills/cases/meta-compile/snapshots/filter-criterion/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/filter-criterion/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/sequence/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/sequence/Configuration.xml new file mode 100644 index 00000000..6e127543 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/sequence/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/sequence/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-compile/snapshots/sequence/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/sequence/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/sequence/Languages/Русский.xml b/tests/skills/cases/meta-compile/snapshots/sequence/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/sequence/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/sequence/Sequences/ВзаиморасчетыСКонтрагентами.xml b/tests/skills/cases/meta-compile/snapshots/sequence/Sequences/ВзаиморасчетыСКонтрагентами.xml new file mode 100644 index 00000000..804bda0b --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/sequence/Sequences/ВзаиморасчетыСКонтрагентами.xml @@ -0,0 +1,58 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + + ВзаиморасчетыСКонтрагентами + + + ru + Взаиморасчеты сконтрагентами + + + + DontMove + + Document.ПоступлениеТоваров + Document.РеализацияТоваров + + + Automatic + + + + + Организация + + + ru + Организация + + + + + d5p1:CatalogRef.Организации + + + Document.ПоступлениеТоваров.Attribute.Организация + Document.РеализацияТоваров.Attribute.Организация + + + + + + + diff --git a/tests/skills/cases/meta-compile/snapshots/settings-storage/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/settings-storage/Configuration.xml new file mode 100644 index 00000000..18b420f9 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/settings-storage/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/settings-storage/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-compile/snapshots/settings-storage/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/settings-storage/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/settings-storage/Languages/Русский.xml b/tests/skills/cases/meta-compile/snapshots/settings-storage/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/settings-storage/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/settings-storage/SettingsStorages/ХранилищеОтчетов.xml b/tests/skills/cases/meta-compile/snapshots/settings-storage/SettingsStorages/ХранилищеОтчетов.xml new file mode 100644 index 00000000..a2649009 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/settings-storage/SettingsStorages/ХранилищеОтчетов.xml @@ -0,0 +1,26 @@ + + + + + + UUID-002 + UUID-003 + + + + ХранилищеОтчетов + + + ru + Хранилище отчетов + + + (Демо) + + + + + + + +