From df42f6cc796cd6dcbf1095d99930fc3c75e764dc Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Fri, 10 Jul 2026 13:46:23 +0300 Subject: [PATCH] =?UTF-8?q?feat(meta-compile,meta-decompile):=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B0=20SessionParam?= =?UTF-8?q?eter/CommonCommand/CommandGroup/CommonAttribute/FunctionalOptio?= =?UTF-8?q?nsParameter/WSReference=20(v1.59/v0.50)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Группа B (простые служебные типы), 25-30-й типы, 1269 объектов acc+erp. Все НОВЫЕ. ПОЛНЫЙ КОРПУС 1269/1269 byte-exact, TOTAL 0, 0 крашей. Регресс 68/68 ps1+py, ps1==py identical. - SessionParameter — параметр сеанса (тип значения). FunctionalOptionsParameter — Use(MDObjectRef). WSReference — LocationURL +InternalInfo Manager. CommandGroup — Representation/Picture/Category. - CommonCommand — общая команда (Group/Representation/Picture/CommandParameterType/ParameterUseMode/…) + заготовка Ext/CommandModule.bsl. Переиспользован Emit-CommandPicture. - **CommonAttribute** (сложный) — богатый реквизит + Content(состав объектов {metadata,use,conditionalSeparation}) + 9 свойств разделения данных + Indexing/FullTextSearch/DataHistory. **Ловушки:** (1) дефолт типа String(0) (не $def.type — это тип метаобъекта); (2) FillValue тип-зависим (String→typed-empty, Number→0), но системный реквизит-разделитель ОбластьДанных имеет nil на Number → маркер `fillValue:{nil:true}` (аналог emptyRef). Прощающий ввод состава — Normalize-MDObjectRef. spec §7.15f, 6 кейсов. Кросс-дрейфа нет (новые типы). NB: py-декомпилятор отложен. **Модель meta-compile: 30 типов метаданных.** Co-Authored-By: Claude Opus 4.8 (1M context) --- .../meta-compile/scripts/meta-compile.ps1 | 164 +++++++++++- .../meta-compile/scripts/meta-compile.py | 176 +++++++++++- .../meta-decompile/scripts/meta-decompile.ps1 | 122 ++++++++- docs/meta-dsl-spec.md | 19 ++ .../cases/meta-compile/command-group.json | 1 + .../cases/meta-compile/common-attribute.json | 1 + .../cases/meta-compile/common-command.json | 1 + .../functional-options-parameter.json | 1 + .../cases/meta-compile/session-parameter.json | 1 + .../command-group/CommandGroups/МояГруппа.xml | 22 ++ .../snapshots/command-group/Configuration.xml | 252 ++++++++++++++++++ .../Ext/ClientApplicationInterface.xml | 18 ++ .../command-group/Languages/Русский.xml | 16 ++ .../CommonAttributes/Организация.xml | 63 +++++ .../common-attribute/Configuration.xml | 252 ++++++++++++++++++ .../Ext/ClientApplicationInterface.xml | 18 ++ .../common-attribute/Languages/Русский.xml | 16 ++ .../CommonCommands/ОткрытьНастройки.xml | 27 ++ .../ОткрытьНастройки/Ext/CommandModule.bsl | 0 .../common-command/Configuration.xml | 252 ++++++++++++++++++ .../Ext/ClientApplicationInterface.xml | 18 ++ .../common-command/Languages/Русский.xml | 16 ++ .../Configuration.xml | 252 ++++++++++++++++++ .../Ext/ClientApplicationInterface.xml | 18 ++ .../Организация.xml | 18 ++ .../Languages/Русский.xml | 16 ++ .../session-parameter/Configuration.xml | 252 ++++++++++++++++++ .../Ext/ClientApplicationInterface.xml | 18 ++ .../session-parameter/Languages/Русский.xml | 16 ++ .../SessionParameters/ТекущийПользователь.xml | 19 ++ .../snapshots/ws-reference/Configuration.xml | 252 ++++++++++++++++++ .../Ext/ClientApplicationInterface.xml | 18 ++ .../ws-reference/Languages/Русский.xml | 16 ++ .../ws-reference/WSReferences/ОбменСервис.xml | 22 ++ .../cases/meta-compile/ws-reference.json | 1 + 35 files changed, 2368 insertions(+), 6 deletions(-) create mode 100644 tests/skills/cases/meta-compile/command-group.json create mode 100644 tests/skills/cases/meta-compile/common-attribute.json create mode 100644 tests/skills/cases/meta-compile/common-command.json create mode 100644 tests/skills/cases/meta-compile/functional-options-parameter.json create mode 100644 tests/skills/cases/meta-compile/session-parameter.json create mode 100644 tests/skills/cases/meta-compile/snapshots/command-group/CommandGroups/МояГруппа.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/command-group/Configuration.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/command-group/Ext/ClientApplicationInterface.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/command-group/Languages/Русский.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/common-attribute/CommonAttributes/Организация.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/common-attribute/Configuration.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/common-attribute/Ext/ClientApplicationInterface.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/common-attribute/Languages/Русский.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/common-command/CommonCommands/ОткрытьНастройки.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/common-command/CommonCommands/ОткрытьНастройки/Ext/CommandModule.bsl create mode 100644 tests/skills/cases/meta-compile/snapshots/common-command/Configuration.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/common-command/Ext/ClientApplicationInterface.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/common-command/Languages/Русский.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/functional-options-parameter/Configuration.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/functional-options-parameter/Ext/ClientApplicationInterface.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/functional-options-parameter/FunctionalOptionsParameters/Организация.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/functional-options-parameter/Languages/Русский.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/session-parameter/Configuration.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/session-parameter/Ext/ClientApplicationInterface.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/session-parameter/Languages/Русский.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/session-parameter/SessionParameters/ТекущийПользователь.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/ws-reference/Configuration.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/ws-reference/Ext/ClientApplicationInterface.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/ws-reference/Languages/Русский.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/ws-reference/WSReferences/ОбменСервис.xml create mode 100644 tests/skills/cases/meta-compile/ws-reference.json diff --git a/.claude/skills/meta-compile/scripts/meta-compile.ps1 b/.claude/skills/meta-compile/scripts/meta-compile.ps1 index 7c48bd17..f3063052 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.58 — Compile 1C metadata object from JSON +# meta-compile v1.59 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -348,7 +348,8 @@ $validTypes = @("Catalog","Document","Enum","Constant","InformationRegister","Ac "ChartOfCalculationTypes","BusinessProcess","Task","ExchangePlan","DocumentJournal", "Report","DataProcessor","CommonModule","ScheduledJob","EventSubscription", "HTTPService","WebService","DefinedType","FunctionalOption", - "Sequence","FilterCriterion","DocumentNumerator","SettingsStorage","CommonForm") + "Sequence","FilterCriterion","DocumentNumerator","SettingsStorage","CommonForm", + "SessionParameter","CommonCommand","CommandGroup","CommonAttribute","FunctionalOptionsParameter","WSReference") if ($objType -notin $validTypes) { Write-Error "Unsupported type: $objType. Valid: $($validTypes -join ', ')" exit 1 @@ -828,6 +829,7 @@ function Emit-FillValue { } if ($null -eq $spec) { X "$indent"; return } # явный nil-override + if ($spec.nil -eq $true) { X "$indent"; return } # явный nil на типизированном (маркер декомпилятора) if ($spec.emptyRef -eq $true) { X "$indent"; return } # пустая ссылка (маркер декомпилятора) if ($spec -is [bool]) { X "$indent$(if ($spec) { 'true' } else { 'false' })"; return @@ -1109,6 +1111,9 @@ $script:generatedTypes = @{ "SettingsStorage" = @( @{ prefix = "SettingsStorageManager"; category = "Manager" } ) + "WSReference" = @( + @{ prefix = "WSReferenceManager"; category = "Manager" } + ) } function Emit-InternalInfo { @@ -2648,6 +2653,140 @@ function Emit-CommonFormProperties { Emit-MLText $i "Explanation" $def.explanation } +function Emit-SessionParameterProperties { + 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" } +} + +function Emit-FunctionalOptionsParameterProperties { + 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" } + # Use — измерения регистров/реквизиты, к которым привязан параметр (список MDObjectRef). + Emit-MDRefList $i "Use" $def.use +} + +function Emit-WSReferenceProperties { + 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" } + $url = if ($def.locationURL) { "$($def.locationURL)" } elseif ($def.locationUrl) { "$($def.locationUrl)" } else { "" } + if ($url) { X "$i$(Esc-XmlText $url)" } else { X "$i" } +} + +function Emit-CommandGroupProperties { + 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 'Representation' 'representation' 'Auto')" + Emit-MLText $i "ToolTip" $def.tooltip + Emit-CommandPicture $i $def + X "$i$(Get-EnumProp 'Category' 'category' 'NavigationPanel')" +} + +function Emit-CommonCommandProperties { + 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" } + $group = if ($def.group) { "$($def.group)" } else { "" } + if ($group) { X "$i$(Esc-Xml $group)" } else { X "$i" } + X "$i$(Get-EnumProp 'Representation' 'representation' 'Auto')" + Emit-MLText $i "ToolTip" $def.tooltip + Emit-CommandPicture $i $def + if ($def.shortcut) { X "$i$(Esc-Xml "$($def.shortcut)")" } else { X "$i" } + $inclHelp = if (Get-BoolProp "includeHelpInContents" $false) { "true" } else { "false" } + X "$i$inclHelp" + if ($def.commandParameterType) { + X "$i" + Emit-TypeContent "$i`t" "$($def.commandParameterType)" + X "$i" + } else { + X "$i" + } + X "$i$(Get-EnumProp 'ParameterUseMode' 'parameterUseMode' 'Single')" + X "$i$(if (Get-BoolProp 'modifiesData' $false) { 'true' } else { 'false' })" + X "$i$(Get-EnumProp 'OnMainServerUnavalableBehavior' 'onMainServerUnavalableBehavior' 'Auto')" +} + +function Emit-CommonAttributeProperties { + 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" } + # Дефолт типа — String(0) (переменная длина 0), НЕ $def.type (это тип метаобъекта «CommonAttribute»). + $vt = if ($def.valueType) { "$($def.valueType)" } else { 'String(0)' } + Emit-ValueType $i $vt + X "$i$(if (Get-BoolProp 'passwordMode' $false) { 'true' } else { 'false' })" + Emit-MLText $i "Format" $def.format + Emit-MLText $i "EditFormat" $def.editFormat + Emit-MLText $i "ToolTip" $def.tooltip + X "$i$(if (Get-BoolProp 'markNegatives' $false) { 'true' } else { 'false' })" + if ($def.mask) { X "$i$(Esc-XmlText $def.mask)" } else { X "$i" } + X "$i$(if (Get-BoolProp 'multiLine' $false) { 'true' } else { 'false' })" + X "$i$(if (Get-BoolProp 'extendedEdit' $false) { 'true' } else { 'false' })" + Emit-MinMaxValue $i "MinValue" $def.minValue + Emit-MinMaxValue $i "MaxValue" $def.maxValue + $ffv = if (Get-BoolProp 'fillFromFillingValue' $false) { 'true' } else { 'false' } + X "$i$ffv" + Emit-FillValue $i $vt $def.fillValue ($null -ne $def.fillValue) + X "$i$(Get-EnumProp 'FillChecking' 'fillChecking' 'DontCheck')" + X "$i$(Get-EnumProp 'ChoiceFoldersAndItems' 'choiceFoldersAndItems' 'Items')" + Emit-ChoiceParameterLinks $i $def.choiceParameterLinks + Emit-ChoiceParameters $i $def.choiceParameters + X "$i$(Get-EnumProp 'QuickChoice' 'quickChoice' 'Auto')" + X "$i$(Get-EnumProp 'CreateOnInput' 'createOnInput' 'Auto')" + if ($def.choiceForm) { X "$i$(Esc-Xml "$($def.choiceForm)")" } else { X "$i" } + Emit-LinkByType $i $def.linkByType + X "$i$(Get-EnumProp 'ChoiceHistoryOnInput' 'choiceHistoryOnInput' 'Auto')" + # Content — объекты, к которым добавлен общий реквизит: {metadata, use?, conditionalSeparation?}. + $content = @(); if ($def.content) { $content = @($def.content) } + if ($content.Count -gt 0) { + X "$i" + foreach ($c in $content) { + $md = if ($c -is [string]) { "$c" } else { "$($c.metadata)" } + $use = if ($c -is [string]) { 'Use' } elseif ($c.use) { "$($c.use)" } else { 'Use' } + X "$i`t" + X "$i`t`t$(Esc-Xml (Normalize-MDObjectRef $md))" + X "$i`t`t$use" + $cs = if ($c -isnot [string] -and $c.conditionalSeparation) { "$($c.conditionalSeparation)" } else { "" } + if ($cs) { X "$i`t`t$(Esc-Xml $cs)" } else { X "$i`t`t" } + X "$i`t" + } + X "$i" + } else { + X "$i" + } + X "$i$(Get-EnumProp 'AutoUse' 'autoUse' 'DontUse')" + X "$i$(Get-EnumProp 'DataSeparation' 'dataSeparation' 'DontUse')" + X "$i$(Get-EnumProp 'SeparatedDataUse' 'separatedDataUse' 'Independently')" + $dsv = if ($def.dataSeparationValue) { "$($def.dataSeparationValue)" } else { "" } + if ($dsv) { X "$i$(Esc-Xml $dsv)" } else { X "$i" } + $dsu = if ($def.dataSeparationUse) { "$($def.dataSeparationUse)" } else { "" } + if ($dsu) { X "$i$(Esc-Xml $dsu)" } else { X "$i" } + $cs2 = if ($def.conditionalSeparation) { "$($def.conditionalSeparation)" } else { "" } + if ($cs2) { X "$i$(Esc-Xml $cs2)" } else { X "$i" } + X "$i$(Get-EnumProp 'UsersSeparation' 'usersSeparation' 'DontUse')" + X "$i$(Get-EnumProp 'AuthenticationSeparation' 'authenticationSeparation' 'DontUse')" + X "$i$(Get-EnumProp 'ConfigurationExtensionsSeparation' 'configurationExtensionsSeparation' 'DontUse')" + X "$i$(Get-EnumProp 'Indexing' 'indexing' 'DontIndex')" + X "$i$(Get-EnumProp 'FullTextSearch' 'fullTextSearch' 'Use')" + X "$i$(Get-EnumProp 'DataHistory' 'dataHistory' 'Use')" +} + # Измерение последовательности: Name/Synonym/Comment/Type + DocumentMap/RegisterRecordsMap (списки MDObjectRef — # соответствие измерения реквизитам документов/движениям регистров). function Emit-SequenceDimension { @@ -3756,6 +3895,12 @@ switch ($objType) { "DocumentNumerator" { Emit-DocumentNumeratorProperties "`t`t`t" } "SettingsStorage" { Emit-SettingsStorageProperties "`t`t`t" } "CommonForm" { Emit-CommonFormProperties "`t`t`t" } + "SessionParameter" { Emit-SessionParameterProperties "`t`t`t" } + "CommonCommand" { Emit-CommonCommandProperties "`t`t`t" } + "CommandGroup" { Emit-CommandGroupProperties "`t`t`t" } + "CommonAttribute" { Emit-CommonAttributeProperties "`t`t`t" } + "FunctionalOptionsParameter" { Emit-FunctionalOptionsParameterProperties "`t`t`t" } + "WSReference" { Emit-WSReferenceProperties "`t`t`t" } "CommonModule" { Emit-CommonModuleProperties "`t`t`t" } "ScheduledJob" { Emit-ScheduledJobProperties "`t`t`t" } "EventSubscription" { Emit-EventSubscriptionProperties "`t`t`t" } @@ -4091,6 +4236,12 @@ $script:typePluralMap = @{ "DocumentNumerator" = "DocumentNumerators" "SettingsStorage" = "SettingsStorages" "CommonForm" = "CommonForms" + "SessionParameter" = "SessionParameters" + "CommonCommand" = "CommonCommands" + "CommandGroup" = "CommandGroups" + "CommonAttribute" = "CommonAttributes" + "FunctionalOptionsParameter" = "FunctionalOptionsParameters" + "WSReference" = "WSReferences" } $typePlural = $script:typePluralMap[$objType] @@ -4368,6 +4519,15 @@ if ($objType -in $typesWithModule) { $modulesCreated += $modulePath } } +# CommonCommand — заготовка модуля команды (CommandModule.bsl). +if ($objType -eq "CommonCommand") { + $modulePath = Join-Path $extDir "CommandModule.bsl" + if (-not (Test-Path $modulePath)) { + Ensure-ExtDir + [System.IO.File]::WriteAllText($modulePath, "", $enc) + $modulesCreated += $modulePath + } +} # CommonForm — заготовка структуры формы под компиляцию: Ext/Form.xml (пустая управляемая форма) + Ext/Form/Module.bsl. # Содержимое формы наполняет form-compile/form-edit (не перезаписываем существующее). if ($objType -eq "CommonForm") { diff --git a/.claude/skills/meta-compile/scripts/meta-compile.py b/.claude/skills/meta-compile/scripts/meta-compile.py index e81ec7d9..f0e92734 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.58 — Compile 1C metadata object from JSON +# meta-compile v1.59 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -464,6 +464,7 @@ valid_types = [ 'FunctionalOption', 'Sequence', 'FilterCriterion', 'DocumentNumerator', 'SettingsStorage', 'CommonForm', + 'SessionParameter', 'CommonCommand', 'CommandGroup', 'CommonAttribute', 'FunctionalOptionsParameter', 'WSReference', ] if obj_type not in valid_types: print(f"Unsupported type: {obj_type}. Valid: {', '.join(valid_types)}", file=sys.stderr) @@ -854,6 +855,9 @@ def emit_fill_value(indent, type_str, spec, has_spec, type_empty=False): if spec is None: X(f'{indent}') # явный nil-override return + if isinstance(spec, dict) and spec.get('nil') is True: + X(f'{indent}') # явный nil на типизированном (маркер декомпилятора) + return if isinstance(spec, dict) and spec.get('emptyRef') is True: X(f'{indent}') # пустая ссылка (маркер декомпилятора) return @@ -1128,6 +1132,9 @@ generated_types = { 'SettingsStorage': [ {'prefix': 'SettingsStorageManager', 'category': 'Manager'}, ], + 'WSReference': [ + {'prefix': 'WSReferenceManager', 'category': 'Manager'}, + ], } def emit_internal_info(indent, object_type, object_name): @@ -2655,6 +2662,153 @@ def emit_common_form_properties(indent): emit_mltext(i, 'ExtendedPresentation', defn.get('extendedPresentation')) emit_mltext(i, 'Explanation', defn.get('explanation')) +def _emit_comment(i): + if defn.get('comment'): + X(f'{i}{esc_xml_text(str(defn["comment"]))}') + else: + X(f'{i}') + +def emit_session_parameter_properties(indent): + i = indent + X(f'{i}{esc_xml(obj_name)}') + emit_mltext(i, 'Synonym', synonym) + _emit_comment(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}') + +def emit_functional_options_parameter_properties(indent): + i = indent + X(f'{i}{esc_xml(obj_name)}') + emit_mltext(i, 'Synonym', synonym) + _emit_comment(i) + emit_md_ref_list(i, 'Use', defn.get('use')) + +def emit_ws_reference_properties(indent): + i = indent + X(f'{i}{esc_xml(obj_name)}') + emit_mltext(i, 'Synonym', synonym) + _emit_comment(i) + url = str(defn['locationURL']) if defn.get('locationURL') else (str(defn['locationUrl']) if defn.get('locationUrl') else '') + if url: + X(f'{i}{esc_xml_text(url)}') + else: + X(f'{i}') + +def emit_command_group_properties(indent): + i = indent + X(f'{i}{esc_xml(obj_name)}') + emit_mltext(i, 'Synonym', synonym) + _emit_comment(i) + X(f'{i}{get_enum_prop("Representation", "representation", "Auto")}') + emit_mltext(i, 'ToolTip', defn.get('tooltip')) + emit_command_picture(i, defn) + X(f'{i}{get_enum_prop("Category", "category", "NavigationPanel")}') + +def emit_common_command_properties(indent): + i = indent + X(f'{i}{esc_xml(obj_name)}') + emit_mltext(i, 'Synonym', synonym) + _emit_comment(i) + group = str(defn['group']) if defn.get('group') else '' + if group: + X(f'{i}{esc_xml(group)}') + else: + X(f'{i}') + X(f'{i}{get_enum_prop("Representation", "representation", "Auto")}') + emit_mltext(i, 'ToolTip', defn.get('tooltip')) + emit_command_picture(i, defn) + if defn.get('shortcut'): + X(f'{i}{esc_xml(str(defn["shortcut"]))}') + else: + X(f'{i}') + incl_help = 'true' if get_bool_prop('includeHelpInContents', False) else 'false' + X(f'{i}{incl_help}') + if defn.get('commandParameterType'): + X(f'{i}') + emit_type_content(f'{i}\t', str(defn['commandParameterType'])) + X(f'{i}') + else: + X(f'{i}') + X(f'{i}{get_enum_prop("ParameterUseMode", "parameterUseMode", "Single")}') + X(f'{i}{"true" if get_bool_prop("modifiesData", False) else "false"}') + X(f'{i}{get_enum_prop("OnMainServerUnavalableBehavior", "onMainServerUnavalableBehavior", "Auto")}') + +def emit_common_attribute_properties(indent): + i = indent + X(f'{i}{esc_xml(obj_name)}') + emit_mltext(i, 'Synonym', synonym) + _emit_comment(i) + vt = str(defn['valueType']) if defn.get('valueType') else 'String(0)' + emit_value_type(i, vt) + X(f'{i}{"true" if get_bool_prop("passwordMode", False) else "false"}') + emit_mltext(i, 'Format', defn.get('format')) + emit_mltext(i, 'EditFormat', defn.get('editFormat')) + emit_mltext(i, 'ToolTip', defn.get('tooltip')) + X(f'{i}{"true" if get_bool_prop("markNegatives", False) else "false"}') + if defn.get('mask'): + X(f'{i}{esc_xml_text(str(defn["mask"]))}') + else: + X(f'{i}') + X(f'{i}{"true" if get_bool_prop("multiLine", False) else "false"}') + X(f'{i}{"true" if get_bool_prop("extendedEdit", False) else "false"}') + emit_min_max_value(i, 'MinValue', defn.get('minValue')) + emit_min_max_value(i, 'MaxValue', defn.get('maxValue')) + X(f'{i}{"true" if get_bool_prop("fillFromFillingValue", False) else "false"}') + emit_fill_value(i, vt, defn.get('fillValue'), defn.get('fillValue') is not None) + X(f'{i}{get_enum_prop("FillChecking", "fillChecking", "DontCheck")}') + X(f'{i}{get_enum_prop("ChoiceFoldersAndItems", "choiceFoldersAndItems", "Items")}') + emit_choice_parameter_links(i, defn.get('choiceParameterLinks')) + emit_choice_parameters(i, defn.get('choiceParameters')) + X(f'{i}{get_enum_prop("QuickChoice", "quickChoice", "Auto")}') + X(f'{i}{get_enum_prop("CreateOnInput", "createOnInput", "Auto")}') + if defn.get('choiceForm'): + X(f'{i}{esc_xml(str(defn["choiceForm"]))}') + else: + X(f'{i}') + emit_link_by_type(i, defn.get('linkByType')) + X(f'{i}{get_enum_prop("ChoiceHistoryOnInput", "choiceHistoryOnInput", "Auto")}') + content = list(defn['content']) if defn.get('content') else [] + if content: + X(f'{i}') + for c in content: + md = c if isinstance(c, str) else str(c.get('metadata', '')) + use = 'Use' if isinstance(c, str) else (str(c['use']) if c.get('use') else 'Use') + X(f'{i}\t') + X(f'{i}\t\t{esc_xml(normalize_md_object_ref(md))}') + X(f'{i}\t\t{use}') + cs = '' if isinstance(c, str) else (str(c['conditionalSeparation']) if c.get('conditionalSeparation') else '') + if cs: + X(f'{i}\t\t{esc_xml(cs)}') + else: + X(f'{i}\t\t') + X(f'{i}\t') + X(f'{i}') + else: + X(f'{i}') + X(f'{i}{get_enum_prop("AutoUse", "autoUse", "DontUse")}') + X(f'{i}{get_enum_prop("DataSeparation", "dataSeparation", "DontUse")}') + X(f'{i}{get_enum_prop("SeparatedDataUse", "separatedDataUse", "Independently")}') + dsv = str(defn['dataSeparationValue']) if defn.get('dataSeparationValue') else '' + X(f'{i}{esc_xml(dsv)}' if dsv else f'{i}') + dsu = str(defn['dataSeparationUse']) if defn.get('dataSeparationUse') else '' + X(f'{i}{esc_xml(dsu)}' if dsu else f'{i}') + cs2 = str(defn['conditionalSeparation']) if defn.get('conditionalSeparation') else '' + X(f'{i}{esc_xml(cs2)}' if cs2 else f'{i}') + X(f'{i}{get_enum_prop("UsersSeparation", "usersSeparation", "DontUse")}') + X(f'{i}{get_enum_prop("AuthenticationSeparation", "authenticationSeparation", "DontUse")}') + X(f'{i}{get_enum_prop("ConfigurationExtensionsSeparation", "configurationExtensionsSeparation", "DontUse")}') + X(f'{i}{get_enum_prop("Indexing", "indexing", "DontIndex")}') + X(f'{i}{get_enum_prop("FullTextSearch", "fullTextSearch", "Use")}') + X(f'{i}{get_enum_prop("DataHistory", "dataHistory", "Use")}') + def emit_sequence_dimension(indent, dim_def): uid = new_uuid() parsed = parse_attribute_shorthand(dim_def) @@ -3641,6 +3795,12 @@ property_emitters = { 'DocumentNumerator': emit_document_numerator_properties, 'SettingsStorage': emit_settings_storage_properties, 'CommonForm': emit_common_form_properties, + 'SessionParameter': emit_session_parameter_properties, + 'CommonCommand': emit_common_command_properties, + 'CommandGroup': emit_command_group_properties, + 'CommonAttribute': emit_common_attribute_properties, + 'FunctionalOptionsParameter': emit_functional_options_parameter_properties, + 'WSReference': emit_ws_reference_properties, 'CommonModule': emit_common_module_properties, 'ScheduledJob': emit_scheduled_job_properties, 'EventSubscription': emit_event_subscription_properties, @@ -3960,6 +4120,12 @@ type_plural_map = { 'DocumentNumerator': 'DocumentNumerators', 'SettingsStorage': 'SettingsStorages', 'CommonForm': 'CommonForms', + 'SessionParameter': 'SessionParameters', + 'CommonCommand': 'CommonCommands', + 'CommandGroup': 'CommandGroups', + 'CommonAttribute': 'CommonAttributes', + 'FunctionalOptionsParameter': 'FunctionalOptionsParameters', + 'WSReference': 'WSReferences', } type_plural = type_plural_map[obj_type] @@ -4033,6 +4199,14 @@ if obj_type in types_with_module: write_utf8_bom(module_path, '') modules_created.append(module_path) +# CommonCommand — заготовка модуля команды (CommandModule.bsl). +if obj_type == 'CommonCommand': + module_path = os.path.join(ext_dir, 'CommandModule.bsl') + if not os.path.isfile(module_path): + ensure_ext_dir() + write_utf8_bom(module_path, '') + modules_created.append(module_path) + # CommonForm — заготовка структуры формы под компиляцию (form-compile наполняет содержимое). if obj_type == 'CommonForm': ensure_ext_dir() diff --git a/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 b/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 index 065ba849..d62b3fa8 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.49 — XML объекта метаданных 1С → JSON-черновик формата meta-compile +# meta-decompile v0.50 — 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', 'Sequence', 'FilterCriterion', 'DocumentNumerator', 'SettingsStorage', 'CommonModule', 'EventSubscription', 'ScheduledJob', 'CommonForm')) { - [Console]::Error.WriteLine("meta-decompile: тип '$objType' пока не поддержан (…, CommonModule, EventSubscription, ScheduledJob, CommonForm)"); 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', 'CommonModule', 'EventSubscription', 'ScheduledJob', 'CommonForm', 'SessionParameter', 'CommonCommand', 'CommandGroup', 'CommonAttribute', 'FunctionalOptionsParameter', 'WSReference')) { + [Console]::Error.WriteLine("meta-decompile: тип '$objType' пока не поддержан (…, SessionParameter, CommonCommand, CommandGroup, CommonAttribute, FunctionalOptionsParameter, WSReference)"); exit 3 } $props = $objNode.SelectSingleNode('md:Properties', $nsm) @@ -691,6 +691,122 @@ if ($objType -eq 'CommonForm') { } $ep = Get-MLValue ($props.SelectSingleNode('md:ExtendedPresentation', $nsm)); if ($null -ne $ep) { $dsl['extendedPresentation'] = $ep } } +# SessionParameter — параметр сеанса: только тип значения. +if ($objType -eq 'SessionParameter') { + $vt = Get-TypeShorthand ($props.SelectSingleNode('md:Type', $nsm)); if ($vt) { $dsl['valueType'] = $vt } +} +# FunctionalOptionsParameter — параметр функ. опции: Use (список MDObjectRef). +if ($objType -eq 'FunctionalOptionsParameter') { + $un = $props.SelectSingleNode('md:Use', $nsm) + if ($un) { $items = @($un.SelectNodes('xr:Item', $nsm) | ForEach-Object { $_.InnerText }); if ($items.Count -gt 0) { $dsl['use'] = [System.Collections.ArrayList]@($items) } } +} +# WSReference — WS-ссылка: URL расположения WSDL (+InternalInfo Manager). +if ($objType -eq 'WSReference') { + $url = P 'LocationURL'; if ($url) { $dsl['locationURL'] = $url } +} +# Общий захват структурного (зеркало Emit-CommandPicture). Пишет в $tgt ключи picture/loadTransparent. +function Get-PictureToDsl { param($propsNode, $tgt) + $refN = $propsNode.SelectSingleNode('md:Picture/xr:Ref', $nsm) + $absN = $propsNode.SelectSingleNode('md:Picture/xr:Abs', $nsm) + if ($refN -or $absN) { + $psrc = if ($refN) { $refN.InnerText } else { "abs:$($absN.InnerText)" } + $ltN = $propsNode.SelectSingleNode('md:Picture/xr:LoadTransparent', $nsm) + $ltFalse = ($ltN -and $ltN.InnerText -eq 'false') + $tpxN = $propsNode.SelectSingleNode('md:Picture/xr:TransparentPixel', $nsm) + if ($tpxN) { + $po = [ordered]@{ src = $psrc }; if ($ltFalse) { $po['loadTransparent'] = $false } + $po['transparentPixel'] = [ordered]@{ x = [int]$tpxN.GetAttribute('x'); y = [int]$tpxN.GetAttribute('y') } + $tgt['picture'] = $po + } else { $tgt['picture'] = $psrc; if ($ltFalse) { $tgt['loadTransparent'] = $false } } + } +} +# CommandGroup — группа команд: представление, подсказка, картинка, категория. +if ($objType -eq 'CommandGroup') { + Add-EnumProp 'representation' 'Representation' 'Auto' + $tt = Get-MLValue ($props.SelectSingleNode('md:ToolTip', $nsm)); if ($null -ne $tt) { $dsl['tooltip'] = $tt } + Get-PictureToDsl $props $dsl + Add-EnumProp 'category' 'Category' 'NavigationPanel' +} +# CommonCommand — общая команда: группа, представление, подсказка, картинка, параметр, режимы. +if ($objType -eq 'CommonCommand') { + $grp = P 'Group'; if ($grp) { $dsl['group'] = $grp } + Add-EnumProp 'representation' 'Representation' 'Auto' + $tt = Get-MLValue ($props.SelectSingleNode('md:ToolTip', $nsm)); if ($null -ne $tt) { $dsl['tooltip'] = $tt } + Get-PictureToDsl $props $dsl + $sc = P 'Shortcut'; if ($sc) { $dsl['shortcut'] = $sc } + $cpt = Get-TypeShorthand ($props.SelectSingleNode('md:CommandParameterType', $nsm)); if ($cpt) { $dsl['commandParameterType'] = $cpt } + Add-EnumProp 'parameterUseMode' 'ParameterUseMode' 'Single' + Add-BoolProp 'modifiesData' 'ModifiesData' $false + Add-EnumProp 'onMainServerUnavalableBehavior' 'OnMainServerUnavalableBehavior' 'Auto' +} +# CommonAttribute — общий реквизит: тип + value-свойства + состав объектов + свойства разделения данных. +if ($objType -eq 'CommonAttribute') { + $vt = Get-TypeShorthand ($props.SelectSingleNode('md:Type', $nsm)); if ($vt -and $vt -ne 'String(0)') { $dsl['valueType'] = $vt } + Add-BoolProp 'passwordMode' 'PasswordMode' $false + foreach ($mlp in @(@('Format','format'), @('EditFormat','editFormat'), @('ToolTip','tooltip'))) { + $mv = Get-MLValue ($props.SelectSingleNode("md:$($mlp[0])", $nsm)); if ($null -ne $mv) { $dsl[$mlp[1]] = $mv } + } + Add-BoolProp 'markNegatives' 'MarkNegatives' $false + $msk = P 'Mask'; if ($msk) { $dsl['mask'] = $msk } + Add-BoolProp 'multiLine' 'MultiLine' $false + Add-BoolProp 'extendedEdit' 'ExtendedEdit' $false + foreach ($mm in @(@('MinValue','minValue'), @('MaxValue','maxValue'))) { + $mn = $props.SelectSingleNode("md:$($mm[0])", $nsm) + if ($mn -and $mn.GetAttribute('nil', 'http://www.w3.org/2001/XMLSchema-instance') -ne 'true') { + $mxt = $mn.GetAttribute('type', 'http://www.w3.org/2001/XMLSchema-instance') + if ($mxt -match 'decimal$') { $dsl[$mm[1]] = if ($mn.InnerText -match '^-?\d+$') { [long]$mn.InnerText } else { [double]$mn.InnerText } } else { $dsl[$mm[1]] = $mn.InnerText } + } + } + Add-BoolProp 'fillFromFillingValue' 'FillFromFillingValue' $false + # FillValue: тип-зависимый дефолт (String→typed-empty, Number→0, прочее→nil). Захват при отклонении. + # nil на String/Number-типе ≠ дефолт → маркер {nil:true} (напр. системный реквизит-разделитель ОбластьДанных). + $catVt = if ($vt) { $vt } else { 'String(0)' } + $fvN = $props.SelectSingleNode('md:FillValue', $nsm) + if ($fvN) { + $fvNil = ($fvN.GetAttribute('nil', 'http://www.w3.org/2001/XMLSchema-instance') -eq 'true') + if ($fvNil) { + if ($catVt -match '^(String|Number)') { $dsl['fillValue'] = [ordered]@{ nil = $true } } + } else { + $fvXt = $fvN.GetAttribute('type', 'http://www.w3.org/2001/XMLSchema-instance') + if ($fvXt -match 'DesignTimeRef$' -and $fvN.InnerText -eq '') { $dsl['fillValue'] = [ordered]@{ emptyRef = $true } } + elseif ($fvXt -match 'decimal$') { if ($fvN.InnerText -ne '0') { $dsl['fillValue'] = if ($fvN.InnerText -match '^-?\d+$') { [long]$fvN.InnerText } else { [double]$fvN.InnerText } } } + elseif (-not [string]::IsNullOrEmpty($fvN.InnerText)) { $dsl['fillValue'] = $fvN.InnerText } + } + } + Add-EnumProp 'fillChecking' 'FillChecking' 'DontCheck' + Add-EnumProp 'choiceFoldersAndItems' 'ChoiceFoldersAndItems' 'Items' + $cpl = Parse-ChoiceParameterLinks $props 'md:ChoiceParameterLinks'; if ($null -ne $cpl) { $dsl['choiceParameterLinks'] = $cpl } + $cp = Parse-ChoiceParameters $props 'md:ChoiceParameters'; if ($null -ne $cp) { $dsl['choiceParameters'] = $cp } + Add-EnumProp 'quickChoice' 'QuickChoice' 'Auto' + Add-EnumProp 'createOnInput' 'CreateOnInput' 'Auto' + $cf = P 'ChoiceForm'; if ($cf) { $dsl['choiceForm'] = $cf } + Add-EnumProp 'choiceHistoryOnInput' 'ChoiceHistoryOnInput' 'Auto' + # Content — объекты, к которым добавлен общий реквизит. + $cn = $props.SelectSingleNode('md:Content', $nsm) + if ($cn) { + $cArr = [System.Collections.ArrayList]@() + foreach ($it in @($cn.SelectNodes('xr:Item', $nsm))) { + $mdN = $it.SelectSingleNode('xr:Metadata', $nsm); $mdv = if ($mdN) { $mdN.InnerText } else { '' } + $useN = $it.SelectSingleNode('xr:Use', $nsm); $usev = if ($useN) { $useN.InnerText } else { 'Use' } + $csN = $it.SelectSingleNode('xr:ConditionalSeparation', $nsm); $csv = if ($csN) { $csN.InnerText } else { '' } + if ($usev -eq 'Use' -and -not $csv) { [void]$cArr.Add($mdv) } + else { $io = [ordered]@{ metadata = $mdv }; if ($usev -ne 'Use') { $io['use'] = $usev }; if ($csv) { $io['conditionalSeparation'] = $csv }; [void]$cArr.Add($io) } + } + if ($cArr.Count -gt 0) { $dsl['content'] = $cArr } + } + Add-EnumProp 'autoUse' 'AutoUse' 'DontUse' + Add-EnumProp 'dataSeparation' 'DataSeparation' 'DontUse' + Add-EnumProp 'separatedDataUse' 'SeparatedDataUse' 'Independently' + $dsv = P 'DataSeparationValue'; if ($dsv) { $dsl['dataSeparationValue'] = $dsv } + $dsu = P 'DataSeparationUse'; if ($dsu) { $dsl['dataSeparationUse'] = $dsu } + $cs2 = P 'ConditionalSeparation'; if ($cs2) { $dsl['conditionalSeparation'] = $cs2 } + Add-EnumProp 'usersSeparation' 'UsersSeparation' 'DontUse' + Add-EnumProp 'authenticationSeparation' 'AuthenticationSeparation' 'DontUse' + Add-EnumProp 'configurationExtensionsSeparation' 'ConfigurationExtensionsSeparation' 'DontUse' + Add-EnumProp 'indexing' 'Indexing' 'DontIndex' + Add-EnumProp 'dataHistory' 'DataHistory' 'Use' + # fullTextSearch покрыт общим блоком (дефолт Use). +} # ScheduledJob — регламентное задание: метод, ключ, флаги, рестарт. if ($objType -eq 'ScheduledJob') { $mn = P 'MethodName'; if ($mn) { $dsl['methodName'] = $mn } diff --git a/docs/meta-dsl-spec.md b/docs/meta-dsl-spec.md index e740f525..368c98f9 100644 --- a/docs/meta-dsl-spec.md +++ b/docs/meta-dsl-spec.md @@ -1265,6 +1265,25 @@ ChildObjects и модулей. { "type": "CommonForm", "name": "НастройкиОбмена", "usePurposes": ["PlatformApplication"] } ``` +### 7.15f Служебные типы (SessionParameter / FunctionalOptionsParameter / WSReference / CommandGroup / CommonCommand / CommonAttribute) + +- **SessionParameter** — параметр сеанса: `valueType` (составной тип значения). Без ChildObjects. +- **FunctionalOptionsParameter** — параметр функ. опции: `use` (массив MDObjectRef — измерения/реквизиты). +- **WSReference** — WS-ссылка: `locationURL` (URL WSDL). +InternalInfo Manager. +- **CommandGroup** — группа команд: `representation` (Auto), `tooltip` (ML), `picture` (§7.1.3), `category` (NavigationPanel). +- **CommonCommand** — общая команда: `group`, `representation`, `tooltip`, `picture`, `shortcut`, `includeHelpInContents`, + `commandParameterType` (тип), `parameterUseMode` (Single), `modifiesData`, `onMainServerUnavalableBehavior` (Auto). + Создаёт `Ext/CommandModule.bsl`. +- **CommonAttribute** — общий реквизит: `valueType` (дефолт `String(0)`) + все value-свойства (§4.2) + `content` + (массив `{metadata, use?, conditionalSeparation?}` или строка) + свойства разделения данных (`autoUse`/`dataSeparation`/ + `separatedDataUse`/`usersSeparation`/`authenticationSeparation`/`configurationExtensionsSeparation` — дефолт DontUse/ + Independently) + `indexing`/`fullTextSearch`/`dataHistory`. FillValue тип-зависим; `{nil: true}` — явный nil на типизированном. + +```json +{ "type": "CommonAttribute", "name": "Организация", "valueType": "CatalogRef.Организации", + "autoUse": "Use", "content": ["Документ.РеализацияТоваров", { "metadata": "Документ.ПоступлениеТоваров" }] } +``` + ### 7.16 ChartOfAccounts Полное описание типа (все поля, стандартные реквизиты, грамматика предопределённых счетов) — см. **§7.2c**. diff --git a/tests/skills/cases/meta-compile/command-group.json b/tests/skills/cases/meta-compile/command-group.json new file mode 100644 index 00000000..77009640 --- /dev/null +++ b/tests/skills/cases/meta-compile/command-group.json @@ -0,0 +1 @@ +{ "name": "Группа команд", "input": { "type": "CommandGroup", "name": "МояГруппа", "representation": "Picture", "category": "FormCommandBar", "picture": { "src": "CommonPicture.Логотип", "loadTransparent": false } }, "validatePath": "CommandGroups/МояГруппа", "skipValidation": true, "expect": { "files": ["CommandGroups/МояГруппа.xml"] } } diff --git a/tests/skills/cases/meta-compile/common-attribute.json b/tests/skills/cases/meta-compile/common-attribute.json new file mode 100644 index 00000000..dd144086 --- /dev/null +++ b/tests/skills/cases/meta-compile/common-attribute.json @@ -0,0 +1 @@ +{ "name": "Общий реквизит с составом", "input": { "type": "CommonAttribute", "name": "Организация", "valueType": "CatalogRef.Организации", "autoUse": "Use", "content": [ { "metadata": "Документ.РеализацияТоваров", "use": "Use" }, "Документ.ПоступлениеТоваров" ] }, "validatePath": "CommonAttributes/Организация", "skipValidation": true, "expect": { "files": ["CommonAttributes/Организация.xml"] } } diff --git a/tests/skills/cases/meta-compile/common-command.json b/tests/skills/cases/meta-compile/common-command.json new file mode 100644 index 00000000..6d6b9f0a --- /dev/null +++ b/tests/skills/cases/meta-compile/common-command.json @@ -0,0 +1 @@ +{ "name": "Общая команда", "input": { "type": "CommonCommand", "name": "ОткрытьНастройки", "group": "NavigationPanelOrdinary", "commandParameterType": "CatalogRef.Организации", "modifiesData": true }, "validatePath": "CommonCommands/ОткрытьНастройки", "skipValidation": true, "expect": { "files": ["CommonCommands/ОткрытьНастройки.xml", "CommonCommands/ОткрытьНастройки/Ext/CommandModule.bsl"] } } diff --git a/tests/skills/cases/meta-compile/functional-options-parameter.json b/tests/skills/cases/meta-compile/functional-options-parameter.json new file mode 100644 index 00000000..22457a15 --- /dev/null +++ b/tests/skills/cases/meta-compile/functional-options-parameter.json @@ -0,0 +1 @@ +{ "name": "Параметр функциональной опции", "input": { "type": "FunctionalOptionsParameter", "name": "Организация", "use": ["РегистрСведений.Настройки.Измерение.Организация"] }, "validatePath": "FunctionalOptionsParameters/Организация", "skipValidation": true, "expect": { "files": ["FunctionalOptionsParameters/Организация.xml"] } } diff --git a/tests/skills/cases/meta-compile/session-parameter.json b/tests/skills/cases/meta-compile/session-parameter.json new file mode 100644 index 00000000..4da01155 --- /dev/null +++ b/tests/skills/cases/meta-compile/session-parameter.json @@ -0,0 +1 @@ +{ "name": "Параметр сеанса", "input": { "type": "SessionParameter", "name": "ТекущийПользователь", "valueType": "CatalogRef.Пользователи + CatalogRef.ВнешниеПользователи" }, "validatePath": "SessionParameters/ТекущийПользователь", "skipValidation": true, "expect": { "files": ["SessionParameters/ТекущийПользователь.xml"] } } diff --git a/tests/skills/cases/meta-compile/snapshots/command-group/CommandGroups/МояГруппа.xml b/tests/skills/cases/meta-compile/snapshots/command-group/CommandGroups/МояГруппа.xml new file mode 100644 index 00000000..5d3e36d8 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/command-group/CommandGroups/МояГруппа.xml @@ -0,0 +1,22 @@ + + + + + МояГруппа + + + ru + Моя группа + + + + Picture + + + CommonPicture.Логотип + false + + FormCommandBar + + + diff --git a/tests/skills/cases/meta-compile/snapshots/command-group/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/command-group/Configuration.xml new file mode 100644 index 00000000..62277c4f --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/command-group/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/command-group/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-compile/snapshots/command-group/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/command-group/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/command-group/Languages/Русский.xml b/tests/skills/cases/meta-compile/snapshots/command-group/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/command-group/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/common-attribute/CommonAttributes/Организация.xml b/tests/skills/cases/meta-compile/snapshots/common-attribute/CommonAttributes/Организация.xml new file mode 100644 index 00000000..79b95809 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/common-attribute/CommonAttributes/Организация.xml @@ -0,0 +1,63 @@ + + + + + Организация + + + ru + Организация + + + + + d5p1:CatalogRef.Организации + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + Document.РеализацияТоваров + Use + + + + Document.ПоступлениеТоваров + Use + + + + Use + DontUse + Independently + + + + DontUse + DontUse + DontUse + DontIndex + Use + Use + + + diff --git a/tests/skills/cases/meta-compile/snapshots/common-attribute/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/common-attribute/Configuration.xml new file mode 100644 index 00000000..4d20ce54 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/common-attribute/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/common-attribute/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-compile/snapshots/common-attribute/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/common-attribute/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/common-attribute/Languages/Русский.xml b/tests/skills/cases/meta-compile/snapshots/common-attribute/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/common-attribute/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/common-command/CommonCommands/ОткрытьНастройки.xml b/tests/skills/cases/meta-compile/snapshots/common-command/CommonCommands/ОткрытьНастройки.xml new file mode 100644 index 00000000..d05e2d35 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/common-command/CommonCommands/ОткрытьНастройки.xml @@ -0,0 +1,27 @@ + + + + + ОткрытьНастройки + + + ru + Открыть настройки + + + + NavigationPanelOrdinary + Auto + + + + false + + d5p1:CatalogRef.Организации + + Single + true + Auto + + + diff --git a/tests/skills/cases/meta-compile/snapshots/common-command/CommonCommands/ОткрытьНастройки/Ext/CommandModule.bsl b/tests/skills/cases/meta-compile/snapshots/common-command/CommonCommands/ОткрытьНастройки/Ext/CommandModule.bsl new file mode 100644 index 00000000..e69de29b diff --git a/tests/skills/cases/meta-compile/snapshots/common-command/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/common-command/Configuration.xml new file mode 100644 index 00000000..3f46102a --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/common-command/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/common-command/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-compile/snapshots/common-command/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/common-command/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/common-command/Languages/Русский.xml b/tests/skills/cases/meta-compile/snapshots/common-command/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/common-command/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/functional-options-parameter/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/functional-options-parameter/Configuration.xml new file mode 100644 index 00000000..44e48aaf --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/functional-options-parameter/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/functional-options-parameter/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-compile/snapshots/functional-options-parameter/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/functional-options-parameter/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/functional-options-parameter/FunctionalOptionsParameters/Организация.xml b/tests/skills/cases/meta-compile/snapshots/functional-options-parameter/FunctionalOptionsParameters/Организация.xml new file mode 100644 index 00000000..1861f0b6 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/functional-options-parameter/FunctionalOptionsParameters/Организация.xml @@ -0,0 +1,18 @@ + + + + + Организация + + + ru + Организация + + + + + InformationRegister.Настройки.Dimension.Организация + + + + diff --git a/tests/skills/cases/meta-compile/snapshots/functional-options-parameter/Languages/Русский.xml b/tests/skills/cases/meta-compile/snapshots/functional-options-parameter/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/functional-options-parameter/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/session-parameter/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/session-parameter/Configuration.xml new file mode 100644 index 00000000..b855c7a1 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/session-parameter/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/session-parameter/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-compile/snapshots/session-parameter/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/session-parameter/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/session-parameter/Languages/Русский.xml b/tests/skills/cases/meta-compile/snapshots/session-parameter/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/session-parameter/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/session-parameter/SessionParameters/ТекущийПользователь.xml b/tests/skills/cases/meta-compile/snapshots/session-parameter/SessionParameters/ТекущийПользователь.xml new file mode 100644 index 00000000..7e74ccc6 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/session-parameter/SessionParameters/ТекущийПользователь.xml @@ -0,0 +1,19 @@ + + + + + ТекущийПользователь + + + ru + Текущий пользователь + + + + + d5p1:CatalogRef.Пользователи + d5p1:CatalogRef.ВнешниеПользователи + + + + diff --git a/tests/skills/cases/meta-compile/snapshots/ws-reference/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/ws-reference/Configuration.xml new file mode 100644 index 00000000..1541d494 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/ws-reference/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/ws-reference/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-compile/snapshots/ws-reference/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/ws-reference/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/ws-reference/Languages/Русский.xml b/tests/skills/cases/meta-compile/snapshots/ws-reference/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/ws-reference/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/ws-reference/WSReferences/ОбменСервис.xml b/tests/skills/cases/meta-compile/snapshots/ws-reference/WSReferences/ОбменСервис.xml new file mode 100644 index 00000000..74ab2839 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/ws-reference/WSReferences/ОбменСервис.xml @@ -0,0 +1,22 @@ + + + + + + UUID-002 + UUID-003 + + + + ОбменСервис + + + ru + Обмен сервис + + + + https://api.example.com/ws?wsdl + + + diff --git a/tests/skills/cases/meta-compile/ws-reference.json b/tests/skills/cases/meta-compile/ws-reference.json new file mode 100644 index 00000000..1475dd68 --- /dev/null +++ b/tests/skills/cases/meta-compile/ws-reference.json @@ -0,0 +1 @@ +{ "name": "WS-ссылка", "input": { "type": "WSReference", "name": "ОбменСервис", "locationURL": "https://api.example.com/ws?wsdl" }, "validatePath": "WSReferences/ОбменСервис", "skipValidation": true, "expect": { "files": ["WSReferences/ОбменСервис.xml"] } }