From edc8474dddf844c9ac97c1b1461c7238f3fcb468 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Thu, 9 Jul 2026 21:47:25 +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=20=D1=82=D0=B8?= =?UTF-8?q?=D0=BF=D0=B0=20FunctionalOption=20(v1.54/v0.45)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 18-й тип, 1381 объект acc+erp. Компилятор НЕ поддерживал FO вовсе (новый тип с нуля): +validTypes/typePluralMap/dispatch/Emit-FunctionalOptionProperties + рус.синоним ФункциональнаяОпция. FO без InternalInfo/ChildObjects/модулей — Emit-InternalInfo уже раннее-возвращает без generatedTypes-записи, ChildObjects/ модули гейтятся списками типов → FO их не получает. - Свойства: Location (хранилище значения), PrivilegedGetMode (дефолт true — корпус 2864/2864), Content (список зависимых объектов → ). Декомпилятор снят гейт +FO; захват location/privilegedGetMode(omit-true)/content. - Прощающий ввод MDObjectRef-путей (Normalize-MDObjectRef): русские корни метаданных+подвидов (Документ→Document/ТабличнаяЧасть→TabularSection/Реквизит→ Attribute/Измерение→Dimension/Ресурс→Resource/…) на чётных позициях-видах; имена не трогаются. Только компилятор (декомпилятор пишет полный англ. путь → роундтрип byte-exact). Location/Content — полные внешние ссылки, self-формы нет. ПОЛНЫЙ КОРПУС 1381: 1380 byte-exact order-preserved + 1 MAX_PATH-артефакт харнеса (имя 157 симв.; объект компилируется в короткий путь ✓). Регресс 55/55 ps1+py, ps1==py identical. spec §7.7a, кейс functional-option. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../meta-compile/scripts/meta-compile.ps1 | 57 +++- .../meta-compile/scripts/meta-compile.py | 56 +++- .../meta-decompile/scripts/meta-decompile.ps1 | 16 +- docs/meta-dsl-spec.md | 23 ++ .../cases/meta-compile/functional-option.json | 17 ++ .../functional-option/Configuration.xml | 252 ++++++++++++++++++ .../Ext/ClientApplicationInterface.xml | 18 ++ .../FunctionalOptions/ВестиУчетПоСкладам.xml | 21 ++ .../functional-option/Languages/Русский.xml | 16 ++ 9 files changed, 470 insertions(+), 6 deletions(-) create mode 100644 tests/skills/cases/meta-compile/functional-option.json create mode 100644 tests/skills/cases/meta-compile/snapshots/functional-option/Configuration.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/functional-option/Ext/ClientApplicationInterface.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/functional-option/FunctionalOptions/ВестиУчетПоСкладам.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/functional-option/Languages/Русский.xml diff --git a/.claude/skills/meta-compile/scripts/meta-compile.ps1 b/.claude/skills/meta-compile/scripts/meta-compile.ps1 index bf989b91..e3bfd801 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.53 — Compile 1C metadata object from JSON +# meta-compile v1.54 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -197,6 +197,7 @@ $script:objectTypeSynonyms = @{ "HTTPСервис" = "HTTPService" "ВебСервис" = "WebService" "ОпределяемыйТип" = "DefinedType" + "ФункциональнаяОпция" = "FunctionalOption" } # Enum property value synonyms — model often gets these slightly wrong @@ -346,7 +347,7 @@ $validTypes = @("Catalog","Document","Enum","Constant","InformationRegister","Ac "AccountingRegister","CalculationRegister","ChartOfAccounts","ChartOfCharacteristicTypes", "ChartOfCalculationTypes","BusinessProcess","Task","ExchangePlan","DocumentJournal", "Report","DataProcessor","CommonModule","ScheduledJob","EventSubscription", - "HTTPService","WebService","DefinedType") + "HTTPService","WebService","DefinedType","FunctionalOption") if ($objType -notin $validTypes) { Write-Error "Unsupported type: $objType. Valid: $($validTypes -join ', ')" exit 1 @@ -680,6 +681,31 @@ $script:fillEmptyRefWords = @('emptyref','пустаяссылка') $script:fillEnumValWords = @('enumvalue','значениеперечисления') $script:fillBoolTrue = @('true','истина','да') $script:fillBoolFalse = @('false','ложь','нет') +# Прощающий ввод MDObjectRef-путей (Location/Content функц. опции, registerRecords и т.п.): русские корни +# метаданных + подвиды → английские. Виды стоят на ЧЁТНЫХ позициях (0,2,4…), имена (нечётные) не трогаем. +# Английские пути проходят без изменений (в мапе только русские ключи) → роундтрип byte-exact сохраняется. +$script:mdRefRoots = @{ + 'справочник'='Catalog'; 'документ'='Document'; 'перечисление'='Enum'; 'константа'='Constant'; + 'регистрсведений'='InformationRegister'; 'регистрнакопления'='AccumulationRegister'; + 'регистрбухгалтерии'='AccountingRegister'; 'регистррасчета'='CalculationRegister'; 'регистррасчёта'='CalculationRegister'; + 'плансчетов'='ChartOfAccounts'; 'планвидовхарактеристик'='ChartOfCharacteristicTypes'; + 'планвидоврасчета'='ChartOfCalculationTypes'; 'планвидоврасчёта'='ChartOfCalculationTypes'; + 'планобмена'='ExchangePlan'; 'бизнеспроцесс'='BusinessProcess'; 'задача'='Task'; + 'журналдокументов'='DocumentJournal'; 'отчет'='Report'; 'отчёт'='Report'; 'обработка'='DataProcessor'; + 'табличнаячасть'='TabularSection'; 'реквизит'='Attribute'; 'измерение'='Dimension'; 'ресурс'='Resource'; + 'стандартныйреквизит'='StandardAttribute'; 'значениеперечисления'='EnumValue'; 'команда'='Command'; + 'признакучета'='AccountingFlag'; 'признакучёта'='AccountingFlag' +} +function Normalize-MDObjectRef { + param([string]$ref) + if (-not $ref -or -not $ref.Contains('.')) { return $ref } + $parts = $ref -split '\.' + for ($k = 0; $k -lt $parts.Count; $k += 2) { + $t = $script:mdRefRoots[$parts[$k].ToLower()] + if ($t) { $parts[$k] = $t } + } + return ($parts -join '.') +} # Значения платформенного перечисления ВидСчета (ent:AccountType) — FillValue стандартного реквизита Тип у Плана счетов. $script:accountTypeValues = @('Active','Passive','ActivePassive') # XxxRef (тип реквизита) → корень DTR-пути (для разворота короткой записи значения). @@ -2472,6 +2498,31 @@ function Emit-DefinedTypeProperties { if ($vt) { Emit-ValueType $i $vt } else { X "$i" } } +function Emit-FunctionalOptionProperties { + 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" } + # Location — хранилище значения опции (Constant.X / InformationRegister.X.Resource.Y / <Тип>.X.Attribute.Y). + # Ссылка verbatim (MDObjectRef-путь; принимаем location или value). + $loc = if ($def.location) { "$($def.location)" } elseif ($def.value) { "$($def.value)" } else { "" } + if ($loc) { X "$i$(Esc-Xml (Normalize-MDObjectRef $loc))" } else { X "$i" } + # PrivilegedGetMode — привилегированный режим чтения (корпус 2864/2864 = true → дефолт true). + X "$i$(if (Get-BoolProp 'privilegedGetMode' $true) { 'true' } else { 'false' })" + # Content — объекты, зависящие от опции (список MDObjectRef-путей к реквизитам/измерениям/ресурсам). omit-on-empty. + $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" + } +} + function Emit-CommonModuleProperties { param([string]$indent) $i = $indent @@ -3565,6 +3616,7 @@ switch ($objType) { "InformationRegister" { Emit-InformationRegisterProperties "`t`t`t" } "AccumulationRegister" { Emit-AccumulationRegisterProperties "`t`t`t" } "DefinedType" { Emit-DefinedTypeProperties "`t`t`t" } + "FunctionalOption" { Emit-FunctionalOptionProperties "`t`t`t" } "CommonModule" { Emit-CommonModuleProperties "`t`t`t" } "ScheduledJob" { Emit-ScheduledJobProperties "`t`t`t" } "EventSubscription" { Emit-EventSubscriptionProperties "`t`t`t" } @@ -3848,6 +3900,7 @@ $script:typePluralMap = @{ "HTTPService" = "HTTPServices" "WebService" = "WebServices" "DefinedType" = "DefinedTypes" + "FunctionalOption" = "FunctionalOptions" } $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 3213e62e..5a03f2a0 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.53 — Compile 1C metadata object from JSON +# meta-compile v1.54 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -314,6 +314,7 @@ object_type_synonyms = { 'HTTPСервис': 'HTTPService', 'ВебСервис': 'WebService', 'ОпределяемыйТип': 'DefinedType', + 'ФункциональнаяОпция': 'FunctionalOption', } # Enum property value synonyms — model often gets these slightly wrong @@ -460,6 +461,7 @@ valid_types = [ 'BusinessProcess', 'Task', 'ExchangePlan', 'DocumentJournal', 'Report', 'DataProcessor', 'CommonModule', 'ScheduledJob', 'EventSubscription', 'HTTPService', 'WebService', 'DefinedType', + 'FunctionalOption', ] if obj_type not in valid_types: print(f"Unsupported type: {obj_type}. Valid: {', '.join(valid_types)}", file=sys.stderr) @@ -707,6 +709,30 @@ fill_empty_ref_words = ('emptyref', 'пустаяссылка') fill_enum_val_words = ('enumvalue', 'значениеперечисления') fill_bool_true = ('true', 'истина', 'да') fill_bool_false = ('false', 'ложь', 'нет') +# Прощающий ввод MDObjectRef-путей (Location/Content функц. опции): русские корни метаданных + подвиды → +# английские. Виды на ЧЁТНЫХ позициях (0,2,4…); имена (нечётные) не трогаем. Английские пути неизменны. +md_ref_roots = { + 'справочник': 'Catalog', 'документ': 'Document', 'перечисление': 'Enum', 'константа': 'Constant', + 'регистрсведений': 'InformationRegister', 'регистрнакопления': 'AccumulationRegister', + 'регистрбухгалтерии': 'AccountingRegister', 'регистррасчета': 'CalculationRegister', 'регистррасчёта': 'CalculationRegister', + 'плансчетов': 'ChartOfAccounts', 'планвидовхарактеристик': 'ChartOfCharacteristicTypes', + 'планвидоврасчета': 'ChartOfCalculationTypes', 'планвидоврасчёта': 'ChartOfCalculationTypes', + 'планобмена': 'ExchangePlan', 'бизнеспроцесс': 'BusinessProcess', 'задача': 'Task', + 'журналдокументов': 'DocumentJournal', 'отчет': 'Report', 'отчёт': 'Report', 'обработка': 'DataProcessor', + 'табличнаячасть': 'TabularSection', 'реквизит': 'Attribute', 'измерение': 'Dimension', 'ресурс': 'Resource', + 'стандартныйреквизит': 'StandardAttribute', 'значениеперечисления': 'EnumValue', 'команда': 'Command', + 'признакучета': 'AccountingFlag', 'признакучёта': 'AccountingFlag', +} + +def normalize_md_object_ref(ref): + if not ref or '.' not in ref: + return ref + parts = ref.split('.') + for k in range(0, len(parts), 2): + t = md_ref_roots.get(parts[k].lower()) + if t: + parts[k] = t + return '.'.join(parts) # Значения платформенного перечисления ВидСчета (ent:AccountType) — FillValue реквизита Тип у Плана счетов. ACCOUNT_TYPE_VALUES = ('Active', 'Passive', 'ActivePassive') # «Только обороты» () — предопределённый признак учёта субконто; токен в списке flags наравне с добавленными. @@ -2469,6 +2495,32 @@ def emit_defined_type_properties(indent): else: X(f'{i}') +def emit_functional_option_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}') + # Location — хранилище значения опции (ссылка verbatim; location или value). + loc = str(defn['location']) if defn.get('location') else (str(defn['value']) if defn.get('value') else '') + if loc: + X(f'{i}{esc_xml(normalize_md_object_ref(loc))}') + else: + X(f'{i}') + # PrivilegedGetMode — дефолт true (корпус 2864/2864). + X(f'{i}{"true" if get_bool_prop("privilegedGetMode", True) else "false"}') + # Content — зависимые объекты (список MDObjectRef-путей). omit-on-empty. + 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}') + def emit_common_module_properties(indent): i = indent X(f'{i}{esc_xml(obj_name)}') @@ -3418,6 +3470,7 @@ property_emitters = { 'InformationRegister': emit_information_register_properties, 'AccumulationRegister': emit_accumulation_register_properties, 'DefinedType': emit_defined_type_properties, + 'FunctionalOption': emit_functional_option_properties, 'CommonModule': emit_common_module_properties, 'ScheduledJob': emit_scheduled_job_properties, 'EventSubscription': emit_event_subscription_properties, @@ -3687,6 +3740,7 @@ type_plural_map = { 'HTTPService': 'HTTPServices', 'WebService': 'WebServices', 'DefinedType': 'DefinedTypes', + 'FunctionalOption': 'FunctionalOptions', } 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 bd18580b..db280c50 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.44 — XML объекта метаданных 1С → JSON-черновик формата meta-compile +# meta-decompile v0.45 — 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')) { - [Console]::Error.WriteLine("meta-decompile: тип '$objType' пока не поддержан (Catalog, ExchangePlan, ChartOfCharacteristicTypes, ChartOfAccounts, ChartOfCalculationTypes, Document, InformationRegister, AccumulationRegister, AccountingRegister, CalculationRegister, BusinessProcess, Task, Enum, Report, DataProcessor, Constant, DefinedType)"); exit 3 +if ($objType -notin @('Catalog', 'ExchangePlan', 'ChartOfCharacteristicTypes', 'ChartOfAccounts', 'ChartOfCalculationTypes', 'Document', 'InformationRegister', 'AccumulationRegister', 'AccountingRegister', 'CalculationRegister', 'BusinessProcess', 'Task', 'Enum', 'Report', 'DataProcessor', 'Constant', 'DefinedType', 'FunctionalOption')) { + [Console]::Error.WriteLine("meta-decompile: тип '$objType' пока не поддержан (Catalog, ExchangePlan, ChartOfCharacteristicTypes, ChartOfAccounts, ChartOfCalculationTypes, Document, InformationRegister, AccumulationRegister, AccountingRegister, CalculationRegister, BusinessProcess, Task, Enum, Report, DataProcessor, Constant, DefinedType, FunctionalOption)"); exit 3 } $props = $objNode.SelectSingleNode('md:Properties', $nsm) @@ -599,6 +599,16 @@ if ($objType -eq 'DefinedType') { $vt = Get-TypeShorthand ($props.SelectSingleNode('md:Type', $nsm)) if ($vt) { $dsl['valueType'] = $vt } } +# FunctionalOption — функциональная опция: Location (хранилище значения) + PrivilegedGetMode + Content (зависимые объекты). +if ($objType -eq 'FunctionalOption') { + $loc = P 'Location'; if ($loc) { $dsl['location'] = $loc } + Add-BoolProp 'privilegedGetMode' 'PrivilegedGetMode' $true # корпус 2864/2864 true → дефолт true, ловим false + $contentNode = $props.SelectSingleNode('md:Content', $nsm) + if ($contentNode) { + $items = @($contentNode.SelectNodes('xr:Object', $nsm) | ForEach-Object { $_.InnerText }) + if ($items.Count -gt 0) { $dsl['content'] = [System.Collections.ArrayList]@($items) } + } +} # Constant — богатый одиночный реквизит: Type + свойства значения (как у реквизита) + object-уровень. if ($objType -eq 'Constant') { $vt = Get-TypeShorthand ($props.SelectSingleNode('md:Type', $nsm)) diff --git a/docs/meta-dsl-spec.md b/docs/meta-dsl-spec.md index 4f6d93ec..a4a1bab2 100644 --- a/docs/meta-dsl-spec.md +++ b/docs/meta-dsl-spec.md @@ -963,6 +963,29 @@ true); `characteristics` (§7.1.4); `basedOn`/`inputByString`/`dataLockFields` ( { "type": "DefinedType", "name": "ФлагАктивности", "valueType": "Boolean" } ``` +### 7.7a FunctionalOption (Функциональная опция) + +Функциональная опция: хранилище значения (Location) + список зависимых объектов (Content). Без InternalInfo, +ChildObjects и модулей. + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `location` | `""` | Location — где хранится значение опции: `Constant.X` / `InformationRegister.X.Resource.Y` / `<Тип>.X.Attribute.Y` (алиас `value`) | +| `content` | `[]` | Content — массив MDObjectRef-путей к реквизитам/измерениям/ресурсам, зависящим от опции (``) | +| `privilegedGetMode` | `true` | PrivilegedGetMode | +| `comment` | пусто | Comment | + +`location`/`content` — **полные MDObjectRef-пути к внешним объектам** (короткой self-формы нет — опция ссылается +на реквизиты чужих объектов). Прощающий ввод: русские корни метаданных и подвидов (Документ→Document, +ТабличнаяЧасть→TabularSection, Реквизит→Attribute, Измерение→Dimension, Ресурс→Resource, Константа→Constant, …); +имена объектов не трогаются. + +```json +{ "type": "FunctionalOption", "name": "ВестиУчетПоСкладам", "location": "Constant.ВестиУчетПоСкладам", + "content": ["Документ.РеализацияТоваров.ТабличнаяЧасть.Товары.Реквизит.Склад", + "РегистрНакопления.ОстаткиТоваров.Измерение.Склад"] } +``` + ### 7.8 CommonModule | Поле JSON | Умолчание | XML элемент | diff --git a/tests/skills/cases/meta-compile/functional-option.json b/tests/skills/cases/meta-compile/functional-option.json new file mode 100644 index 00000000..55d6a2b7 --- /dev/null +++ b/tests/skills/cases/meta-compile/functional-option.json @@ -0,0 +1,17 @@ +{ + "name": "Функциональная опция с составом", + "input": { + "type": "FunctionalOption", + "name": "ВестиУчетПоСкладам", + "comment": "(Демо)", + "location": "Constant.ВестиУчетПоСкладам", + "content": [ + "Document.РеализацияТоваров.TabularSection.Товары.Attribute.Склад", + "AccumulationRegister.ОстаткиТоваров.Dimension.Склад" + ] + }, + "validatePath": "FunctionalOptions/ВестиУчетПоСкладам", + "expect": { + "files": ["FunctionalOptions/ВестиУчетПоСкладам.xml"] + } +} diff --git a/tests/skills/cases/meta-compile/snapshots/functional-option/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/functional-option/Configuration.xml new file mode 100644 index 00000000..79cfc9a7 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/functional-option/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-option/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-compile/snapshots/functional-option/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/functional-option/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-option/FunctionalOptions/ВестиУчетПоСкладам.xml b/tests/skills/cases/meta-compile/snapshots/functional-option/FunctionalOptions/ВестиУчетПоСкладам.xml new file mode 100644 index 00000000..eaa78291 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/functional-option/FunctionalOptions/ВестиУчетПоСкладам.xml @@ -0,0 +1,21 @@ + + + + + ВестиУчетПоСкладам + + + ru + Вести учет по складам + + + (Демо) + Constant.ВестиУчетПоСкладам + true + + Document.РеализацияТоваров.TabularSection.Товары.Attribute.Склад + AccumulationRegister.ОстаткиТоваров.Dimension.Склад + + + + diff --git a/tests/skills/cases/meta-compile/snapshots/functional-option/Languages/Русский.xml b/tests/skills/cases/meta-compile/snapshots/functional-option/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/functional-option/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file