diff --git a/.claude/skills/form-add/SKILL.md b/.claude/skills/form-add/SKILL.md index f470e9568..c050dd747 100644 --- a/.claude/skills/form-add/SKILL.md +++ b/.claude/skills/form-add/SKILL.md @@ -25,7 +25,7 @@ allowed-tools: |-------------|:------------:|--------------|----------------------------------------------| | ObjectPath | да | — | Путь к XML-файлу объекта (Documents/Док.xml) | | FormName | да | — | Имя формы (ФормаДокумента) | -| Purpose | нет | Object | Назначение формы — см. таблицу ниже | +| Purpose | нет | основная форма вида | Назначение формы — см. таблицу ниже: у справочника это форма объекта, у регистра сведений — форма записи, у журнала — форма списка | | Synonym | нет | = FormName | Синоним формы | | --set-default | нет | авто | Сделать основной. Без флага основной становится первая форма каждого назначения | diff --git a/.claude/skills/form-add/scripts/form-add.ps1 b/.claude/skills/form-add/scripts/form-add.ps1 index 87df6da61..e19d079ae 100644 --- a/.claude/skills/form-add/scripts/form-add.ps1 +++ b/.claude/skills/form-add/scripts/form-add.ps1 @@ -379,17 +379,24 @@ $supportedTypes = @($formKinds.Keys) + @($noOwnForms.Keys) # формы есть . $processorLikeTypes = @("DataProcessor", "Report", "ExternalDataProcessor", "ExternalReport") +# Вид объекта — первый элемент-потомок MetaDataObject, а не первое совпавшее по всему документу +# имя. Поиск по документу зависел от порядка перебора видов: у бизнес-процесса есть свойство +# , и он определялся как задача, после чего имя объекта не находилось вовсе. $objectType = $null $objectNode = $null -foreach ($t in $supportedTypes) { - $node = $xmlDoc.SelectSingleNode("//md:$t", $nsMgr) - if ($node) { - $objectType = $t - $objectNode = $node +foreach ($child in $metaDataObject.ChildNodes) { + if ($child.NodeType -eq [System.Xml.XmlNodeType]::Element) { + $objectType = $child.LocalName + $objectNode = $child break } } +if ($objectType -and -not ($formKinds.ContainsKey($objectType) -or $noOwnForms.ContainsKey($objectType))) { + Write-Error "Тип объекта '$objectType' не поддерживается. Поддерживаемые типы: $(($formKinds.Keys | Sort-Object) -join ', ')" + exit 1 +} + if (-not $objectType) { Write-Error "Не удалось определить тип объекта. Поддерживаемые типы: $(($formKinds.Keys | Sort-Object) -join ', ')" exit 1 diff --git a/.claude/skills/form-add/scripts/form-add.py b/.claude/skills/form-add/scripts/form-add.py index 4b3806fa1..727a00d28 100644 --- a/.claude/skills/form-add/scripts/form-add.py +++ b/.claude/skills/form-add/scripts/form-add.py @@ -569,15 +569,22 @@ def main(): # метаданных формы есть . processor_like_types = ["DataProcessor", "Report", "ExternalDataProcessor", "ExternalReport"] + # Вид объекта — первый элемент-потомок MetaDataObject, а не первое совпавшее по всему + # документу имя. Поиск по документу зависел от порядка перебора видов: у бизнес-процесса + # есть свойство , и он определялся как задача, после чего имя объекта не находилось. object_type = None object_node = None - for t in supported_types: - node = root.find(f".//md:{t}", NSMAP) - if node is not None: - object_type = t - object_node = node + for child in root: + if isinstance(child.tag, str): + object_type = etree.QName(child).localname + object_node = child break + if object_type is not None and object_type not in form_kinds and object_type not in no_own_forms: + print(f"Тип объекта '{object_type}' не поддерживается. " + f"Поддерживаемые типы: {', '.join(sorted(form_kinds))}", file=sys.stderr) + sys.exit(1) + if object_type is None: print(f"Не удалось определить тип объекта. Поддерживаемые типы: {', '.join(sorted(form_kinds))}", file=sys.stderr) diff --git a/tests/skills/cases/form-add/catalog-custom-form.json b/tests/skills/cases/form-add/catalog-custom-form.json deleted file mode 100644 index c7c1733bf..000000000 --- a/tests/skills/cases/form-add/catalog-custom-form.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "Произвольная форма: без главного реквизита и без назначения основной", - "preRun": [ - { - "script": "meta-compile/scripts/meta-compile", - "input": { - "type": "Catalog", - "name": "ТоварыТест" - }, - "args": { - "-JsonPath": "{inputFile}", - "-OutputDir": "{workDir}" - } - } - ], - "params": { - "objectPath": "Catalogs/ТоварыТест.xml", - "formName": "ПроизвольнаяФорма" - }, - "args_extra": [ - "-Purpose", - "Custom" - ], - "validatePath": "Catalogs/ТоварыТест/Forms/ПроизвольнаяФорма", - "expect": { - "stdoutContains": "Основной не назначена" - } -} diff --git a/tests/skills/cases/form-add/catalog-folder-and-custom-forms.json b/tests/skills/cases/form-add/catalog-folder-and-custom-forms.json new file mode 100644 index 000000000..7ecdff1a2 --- /dev/null +++ b/tests/skills/cases/form-add/catalog-folder-and-custom-forms.json @@ -0,0 +1,47 @@ +{ + "name": "Справочник: форма группы, форма выбора группы и произвольная форма", + "preRun": [ + { + "script": "meta-compile/scripts/meta-compile", + "input": { + "type": "Catalog", + "name": "ТоварыТест", + "properties": { + "Hierarchical": true + } + }, + "args": { + "-JsonPath": "{inputFile}", + "-OutputDir": "{workDir}" + } + }, + { + "script": "form-add/scripts/form-add", + "args": { + "-ObjectPath": "{workDir}/Catalogs/ТоварыТест.xml", + "-FormName": "ФормаГруппы", + "-Purpose": "Folder" + } + }, + { + "script": "form-add/scripts/form-add", + "args": { + "-ObjectPath": "{workDir}/Catalogs/ТоварыТест.xml", + "-FormName": "ФормаВыбораГруппы", + "-Purpose": "FolderChoice" + } + } + ], + "params": { + "objectPath": "Catalogs/ТоварыТест.xml", + "formName": "ПроизвольнаяФорма" + }, + "args_extra": [ + "-Purpose", + "Custom" + ], + "validatePath": "Catalogs/ТоварыТест/Forms/ПроизвольнаяФорма", + "expect": { + "stdoutContains": "Основной не назначена" + } +} diff --git a/tests/skills/cases/form-add/catalog-folder-form.json b/tests/skills/cases/form-add/catalog-folder-form.json deleted file mode 100644 index 66363149d..000000000 --- a/tests/skills/cases/form-add/catalog-folder-form.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "Форма группы справочника: главный реквизит CatalogObject, свойство DefaultFolderForm", - "preRun": [ - { - "script": "meta-compile/scripts/meta-compile", - "input": { - "type": "Catalog", - "name": "ТоварыТест" - }, - "args": { - "-JsonPath": "{inputFile}", - "-OutputDir": "{workDir}" - } - } - ], - "params": { - "objectPath": "Catalogs/ТоварыТест.xml", - "formName": "ФормаГруппы" - }, - "args_extra": [ - "-Purpose", - "Folder" - ], - "validatePath": "Catalogs/ТоварыТест/Forms/ФормаГруппы", - "expect": { - "stdoutContains": "DefaultFolderForm: Catalog.ТоварыТест.Form.ФормаГруппы" - } -} diff --git a/tests/skills/cases/form-add/information-register-recordset-form.json b/tests/skills/cases/form-add/information-register-forms.json similarity index 59% rename from tests/skills/cases/form-add/information-register-recordset-form.json rename to tests/skills/cases/form-add/information-register-forms.json index 7d0e428c8..831e4de54 100644 --- a/tests/skills/cases/form-add/information-register-recordset-form.json +++ b/tests/skills/cases/form-add/information-register-forms.json @@ -1,5 +1,5 @@ { - "name": "Форма набора записей регистра сведений", + "name": "Регистр сведений: форма записи (умолчание вида) и форма набора записей", "preRun": [ { "script": "meta-compile/scripts/meta-compile", @@ -17,6 +17,13 @@ "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" } + }, + { + "script": "form-add/scripts/form-add", + "args": { + "-ObjectPath": "{workDir}/InformationRegisters/ЦеныТест.xml", + "-FormName": "ФормаЗаписи" + } } ], "params": { @@ -27,5 +34,8 @@ "-Purpose", "RecordSet" ], - "validatePath": "InformationRegisters/ЦеныТест/Forms/ФормаНабора" + "validatePath": "InformationRegisters/ЦеныТест/Forms/ФормаНабора", + "expect": { + "stdoutContains": "Основной не назначена" + } } diff --git a/tests/skills/cases/form-add/settings-storage-forms.json b/tests/skills/cases/form-add/settings-storage-forms.json new file mode 100644 index 000000000..ccf407c2e --- /dev/null +++ b/tests/skills/cases/form-add/settings-storage-forms.json @@ -0,0 +1,36 @@ +{ + "name": "Хранилище настроек: формы сохранения и загрузки", + "preRun": [ + { + "script": "meta-compile/scripts/meta-compile", + "input": { + "type": "SettingsStorage", + "name": "ХранилищеТест" + }, + "args": { + "-JsonPath": "{inputFile}", + "-OutputDir": "{workDir}" + } + }, + { + "script": "form-add/scripts/form-add", + "args": { + "-ObjectPath": "{workDir}/SettingsStorages/ХранилищеТест.xml", + "-FormName": "ФормаСохранения", + "-Purpose": "Save" + } + } + ], + "params": { + "objectPath": "SettingsStorages/ХранилищеТест.xml", + "formName": "ФормаЗагрузки" + }, + "args_extra": [ + "-Purpose", + "Load" + ], + "validatePath": "SettingsStorages/ХранилищеТест/Forms/ФормаЗагрузки", + "expect": { + "stdoutContains": "DefaultLoadForm: SettingsStorage.ХранилищеТест.Form.ФормаЗагрузки" + } +} diff --git a/tests/skills/cases/form-add/settings-storage-save-form.json b/tests/skills/cases/form-add/settings-storage-save-form.json deleted file mode 100644 index 5fe54f772..000000000 --- a/tests/skills/cases/form-add/settings-storage-save-form.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "Форма сохранения настроек хранилища", - "preRun": [ - { - "script": "meta-compile/scripts/meta-compile", - "input": { - "type": "SettingsStorage", - "name": "ХранилищеТест" - }, - "args": { - "-JsonPath": "{inputFile}", - "-OutputDir": "{workDir}" - } - } - ], - "params": { - "objectPath": "SettingsStorages/ХранилищеТест.xml", - "formName": "ФормаСохранения" - }, - "args_extra": [ - "-Purpose", - "Save" - ], - "validatePath": "SettingsStorages/ХранилищеТест/Forms/ФормаСохранения", - "expect": { - "stdoutContains": "DefaultSaveForm: SettingsStorage.ХранилищеТест.Form.ФормаСохранения" - } -} diff --git a/tests/skills/cases/form-add/snapshots/catalog-custom-form/Catalogs/ТоварыТест.xml b/tests/skills/cases/form-add/snapshots/catalog-custom-form/Catalogs/ТоварыТест.xml deleted file mode 100644 index ca575b1b1..000000000 --- a/tests/skills/cases/form-add/snapshots/catalog-custom-form/Catalogs/ТоварыТест.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - UUID-002 - UUID-003 - - - UUID-004 - UUID-005 - - - UUID-006 - UUID-007 - - - UUID-008 - UUID-009 - - - UUID-010 - UUID-011 - - - - ТоварыТест - - - ru - Товары тест - - - - false - HierarchyFoldersAndItems - false - 2 - true - true - - ToItems - 9 - 25 - String - Variable - WholeCatalog - false - true - AsDescription - - Auto - InDialog - false - BothWays - - Catalog.ТоварыТест.StandardAttribute.Description - Catalog.ТоварыТест.StandardAttribute.Code - - Begin - DontUse - Directly - - - - - - - - - - - false - - - Managed - Use - - - - - - Use - Auto - DontUse - false - false - - -
ПроизвольнаяФорма
-
-
-
\ No newline at end of file diff --git a/tests/skills/cases/form-add/snapshots/catalog-folder-form/Catalogs/ТоварыТест.xml b/tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест.xml similarity index 95% rename from tests/skills/cases/form-add/snapshots/catalog-folder-form/Catalogs/ТоварыТест.xml rename to tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест.xml index 8a1655dcd..86e13284b 100644 --- a/tests/skills/cases/form-add/snapshots/catalog-folder-form/Catalogs/ТоварыТест.xml +++ b/tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест.xml @@ -64,7 +64,7 @@ Catalog.ТоварыТест.Form.ФормаГруппы - + Catalog.ТоварыТест.Form.ФормаВыбораГруппы @@ -88,6 +88,8 @@
ФормаГруппы
+
ФормаВыбораГруппы
+
ПроизвольнаяФорма
\ No newline at end of file diff --git a/tests/skills/cases/form-add/snapshots/catalog-custom-form/Catalogs/ТоварыТест/Ext/ObjectModule.bsl b/tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Ext/ObjectModule.bsl similarity index 100% rename from tests/skills/cases/form-add/snapshots/catalog-custom-form/Catalogs/ТоварыТест/Ext/ObjectModule.bsl rename to tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Ext/ObjectModule.bsl diff --git a/tests/skills/cases/form-add/snapshots/catalog-custom-form/Catalogs/ТоварыТест/Forms/ПроизвольнаяФорма.xml b/tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Forms/ПроизвольнаяФорма.xml similarity index 100% rename from tests/skills/cases/form-add/snapshots/catalog-custom-form/Catalogs/ТоварыТест/Forms/ПроизвольнаяФорма.xml rename to tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Forms/ПроизвольнаяФорма.xml diff --git a/tests/skills/cases/form-add/snapshots/catalog-custom-form/Catalogs/ТоварыТест/Forms/ПроизвольнаяФорма/Ext/Form.xml b/tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Forms/ПроизвольнаяФорма/Ext/Form.xml similarity index 100% rename from tests/skills/cases/form-add/snapshots/catalog-custom-form/Catalogs/ТоварыТест/Forms/ПроизвольнаяФорма/Ext/Form.xml rename to tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Forms/ПроизвольнаяФорма/Ext/Form.xml diff --git a/tests/skills/cases/form-add/snapshots/catalog-custom-form/Catalogs/ТоварыТест/Forms/ПроизвольнаяФорма/Ext/Form/Module.bsl b/tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Forms/ПроизвольнаяФорма/Ext/Form/Module.bsl similarity index 100% rename from tests/skills/cases/form-add/snapshots/catalog-custom-form/Catalogs/ТоварыТест/Forms/ПроизвольнаяФорма/Ext/Form/Module.bsl rename to tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Forms/ПроизвольнаяФорма/Ext/Form/Module.bsl diff --git a/tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Forms/ФормаВыбораГруппы.xml b/tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Forms/ФормаВыбораГруппы.xml new file mode 100644 index 000000000..ac866bb62 --- /dev/null +++ b/tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Forms/ФормаВыбораГруппы.xml @@ -0,0 +1,21 @@ + + +
+ + ФормаВыбораГруппы + + + ru + ФормаВыбораГруппы + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + +
+
\ No newline at end of file diff --git a/tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Forms/ФормаВыбораГруппы/Ext/Form.xml b/tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Forms/ФормаВыбораГруппы/Ext/Form.xml new file mode 100644 index 000000000..0634ed91f --- /dev/null +++ b/tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Forms/ФормаВыбораГруппы/Ext/Form.xml @@ -0,0 +1,18 @@ + +
+ + true + + + + + + cfg:DynamicList + + true + + Catalog.ТоварыТест + + + + \ No newline at end of file diff --git a/tests/skills/cases/form-add/snapshots/catalog-folder-form/Catalogs/ТоварыТест/Forms/ФормаГруппы/Ext/Form/Module.bsl b/tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Forms/ФормаВыбораГруппы/Ext/Form/Module.bsl similarity index 100% rename from tests/skills/cases/form-add/snapshots/catalog-folder-form/Catalogs/ТоварыТест/Forms/ФормаГруппы/Ext/Form/Module.bsl rename to tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Forms/ФормаВыбораГруппы/Ext/Form/Module.bsl diff --git a/tests/skills/cases/form-add/snapshots/catalog-folder-form/Catalogs/ТоварыТест/Forms/ФормаГруппы.xml b/tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Forms/ФормаГруппы.xml similarity index 100% rename from tests/skills/cases/form-add/snapshots/catalog-folder-form/Catalogs/ТоварыТест/Forms/ФормаГруппы.xml rename to tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Forms/ФормаГруппы.xml diff --git a/tests/skills/cases/form-add/snapshots/catalog-folder-form/Catalogs/ТоварыТест/Forms/ФормаГруппы/Ext/Form.xml b/tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Forms/ФормаГруппы/Ext/Form.xml similarity index 100% rename from tests/skills/cases/form-add/snapshots/catalog-folder-form/Catalogs/ТоварыТест/Forms/ФормаГруппы/Ext/Form.xml rename to tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Forms/ФормаГруппы/Ext/Form.xml diff --git a/tests/skills/cases/form-add/snapshots/information-register-recordset-form/InformationRegisters/ЦеныТест/Forms/ФормаНабора/Ext/Form/Module.bsl b/tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Forms/ФормаГруппы/Ext/Form/Module.bsl similarity index 100% rename from tests/skills/cases/form-add/snapshots/information-register-recordset-form/InformationRegisters/ЦеныТест/Forms/ФормаНабора/Ext/Form/Module.bsl rename to tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Catalogs/ТоварыТест/Forms/ФормаГруппы/Ext/Form/Module.bsl diff --git a/tests/skills/cases/form-add/snapshots/catalog-custom-form/Configuration.xml b/tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Configuration.xml similarity index 100% rename from tests/skills/cases/form-add/snapshots/catalog-custom-form/Configuration.xml rename to tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Configuration.xml diff --git a/tests/skills/cases/form-add/snapshots/catalog-custom-form/Ext/ClientApplicationInterface.xml b/tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Ext/ClientApplicationInterface.xml similarity index 100% rename from tests/skills/cases/form-add/snapshots/catalog-custom-form/Ext/ClientApplicationInterface.xml rename to tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Ext/ClientApplicationInterface.xml diff --git a/tests/skills/cases/form-add/snapshots/catalog-custom-form/Languages/Русский.xml b/tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Languages/Русский.xml similarity index 100% rename from tests/skills/cases/form-add/snapshots/catalog-custom-form/Languages/Русский.xml rename to tests/skills/cases/form-add/snapshots/catalog-folder-and-custom-forms/Languages/Русский.xml diff --git a/tests/skills/cases/form-add/snapshots/catalog-folder-form/Catalogs/ТоварыТест/Ext/ObjectModule.bsl b/tests/skills/cases/form-add/snapshots/catalog-folder-form/Catalogs/ТоварыТест/Ext/ObjectModule.bsl deleted file mode 100644 index e69de29bb..000000000 diff --git a/tests/skills/cases/form-add/snapshots/catalog-folder-form/Configuration.xml b/tests/skills/cases/form-add/snapshots/catalog-folder-form/Configuration.xml deleted file mode 100644 index 2bbc2f43a..000000000 --- a/tests/skills/cases/form-add/snapshots/catalog-folder-form/Configuration.xml +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - 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/form-add/snapshots/information-register-recordset-form/Configuration.xml b/tests/skills/cases/form-add/snapshots/information-register-forms/Configuration.xml similarity index 100% rename from tests/skills/cases/form-add/snapshots/information-register-recordset-form/Configuration.xml rename to tests/skills/cases/form-add/snapshots/information-register-forms/Configuration.xml diff --git a/tests/skills/cases/form-add/snapshots/catalog-folder-form/Ext/ClientApplicationInterface.xml b/tests/skills/cases/form-add/snapshots/information-register-forms/Ext/ClientApplicationInterface.xml similarity index 100% rename from tests/skills/cases/form-add/snapshots/catalog-folder-form/Ext/ClientApplicationInterface.xml rename to tests/skills/cases/form-add/snapshots/information-register-forms/Ext/ClientApplicationInterface.xml diff --git a/tests/skills/cases/form-add/snapshots/information-register-recordset-form/InformationRegisters/ЦеныТест.xml b/tests/skills/cases/form-add/snapshots/information-register-forms/InformationRegisters/ЦеныТест.xml similarity index 98% rename from tests/skills/cases/form-add/snapshots/information-register-recordset-form/InformationRegisters/ЦеныТест.xml rename to tests/skills/cases/form-add/snapshots/information-register-forms/InformationRegisters/ЦеныТест.xml index 4773601b8..1b446ca49 100644 --- a/tests/skills/cases/form-add/snapshots/information-register-recordset-form/InformationRegisters/ЦеныТест.xml +++ b/tests/skills/cases/form-add/snapshots/information-register-forms/InformationRegisters/ЦеныТест.xml @@ -42,7 +42,7 @@ true InDialog - + InformationRegister.ЦеныТест.Form.ФормаЗаписи @@ -260,6 +260,7 @@ Use +
ФормаЗаписи
ФормаНабора
diff --git a/tests/skills/cases/form-add/snapshots/information-register-recordset-form/InformationRegisters/ЦеныТест/Ext/RecordSetModule.bsl b/tests/skills/cases/form-add/snapshots/information-register-forms/InformationRegisters/ЦеныТест/Ext/RecordSetModule.bsl similarity index 100% rename from tests/skills/cases/form-add/snapshots/information-register-recordset-form/InformationRegisters/ЦеныТест/Ext/RecordSetModule.bsl rename to tests/skills/cases/form-add/snapshots/information-register-forms/InformationRegisters/ЦеныТест/Ext/RecordSetModule.bsl diff --git a/tests/skills/cases/form-add/snapshots/settings-storage-save-form/Languages/Русский.xml b/tests/skills/cases/form-add/snapshots/information-register-forms/InformationRegisters/ЦеныТест/Forms/ФормаЗаписи.xml similarity index 71% rename from tests/skills/cases/form-add/snapshots/settings-storage-save-form/Languages/Русский.xml rename to tests/skills/cases/form-add/snapshots/information-register-forms/InformationRegisters/ЦеныТест/Forms/ФормаЗаписи.xml index 37c60d786..94bc565e0 100644 --- a/tests/skills/cases/form-add/snapshots/settings-storage-save-form/Languages/Русский.xml +++ b/tests/skills/cases/form-add/snapshots/information-register-forms/InformationRegisters/ЦеныТест/Forms/ФормаЗаписи.xml @@ -1,16 +1,21 @@ - +
- Русский + ФормаЗаписи ru - Русский + ФормаЗаписи - ru + Managed + false + + PlatformApplication + MobilePlatformApplication + - +
\ No newline at end of file diff --git a/tests/skills/cases/form-add/snapshots/information-register-forms/InformationRegisters/ЦеныТест/Forms/ФормаЗаписи/Ext/Form.xml b/tests/skills/cases/form-add/snapshots/information-register-forms/InformationRegisters/ЦеныТест/Forms/ФормаЗаписи/Ext/Form.xml new file mode 100644 index 000000000..9bc5b6b90 --- /dev/null +++ b/tests/skills/cases/form-add/snapshots/information-register-forms/InformationRegisters/ЦеныТест/Forms/ФормаЗаписи/Ext/Form.xml @@ -0,0 +1,16 @@ + +
+ + true + + + + + + cfg:InformationRegisterRecordManager.ЦеныТест + + true + true + + + \ No newline at end of file diff --git a/tests/skills/cases/form-add/snapshots/settings-storage-save-form/SettingsStorages/ХранилищеТест/Forms/ФормаСохранения/Ext/Form/Module.bsl b/tests/skills/cases/form-add/snapshots/information-register-forms/InformationRegisters/ЦеныТест/Forms/ФормаЗаписи/Ext/Form/Module.bsl similarity index 100% rename from tests/skills/cases/form-add/snapshots/settings-storage-save-form/SettingsStorages/ХранилищеТест/Forms/ФормаСохранения/Ext/Form/Module.bsl rename to tests/skills/cases/form-add/snapshots/information-register-forms/InformationRegisters/ЦеныТест/Forms/ФормаЗаписи/Ext/Form/Module.bsl diff --git a/tests/skills/cases/form-add/snapshots/information-register-recordset-form/InformationRegisters/ЦеныТест/Forms/ФормаНабора.xml b/tests/skills/cases/form-add/snapshots/information-register-forms/InformationRegisters/ЦеныТест/Forms/ФормаНабора.xml similarity index 100% rename from tests/skills/cases/form-add/snapshots/information-register-recordset-form/InformationRegisters/ЦеныТест/Forms/ФормаНабора.xml rename to tests/skills/cases/form-add/snapshots/information-register-forms/InformationRegisters/ЦеныТест/Forms/ФормаНабора.xml diff --git a/tests/skills/cases/form-add/snapshots/information-register-recordset-form/InformationRegisters/ЦеныТест/Forms/ФормаНабора/Ext/Form.xml b/tests/skills/cases/form-add/snapshots/information-register-forms/InformationRegisters/ЦеныТест/Forms/ФормаНабора/Ext/Form.xml similarity index 100% rename from tests/skills/cases/form-add/snapshots/information-register-recordset-form/InformationRegisters/ЦеныТест/Forms/ФормаНабора/Ext/Form.xml rename to tests/skills/cases/form-add/snapshots/information-register-forms/InformationRegisters/ЦеныТест/Forms/ФормаНабора/Ext/Form.xml diff --git a/tests/skills/cases/form-add/snapshots/information-register-forms/InformationRegisters/ЦеныТест/Forms/ФормаНабора/Ext/Form/Module.bsl b/tests/skills/cases/form-add/snapshots/information-register-forms/InformationRegisters/ЦеныТест/Forms/ФормаНабора/Ext/Form/Module.bsl new file mode 100644 index 000000000..8ead4cec0 --- /dev/null +++ b/tests/skills/cases/form-add/snapshots/information-register-forms/InformationRegisters/ЦеныТест/Forms/ФормаНабора/Ext/Form/Module.bsl @@ -0,0 +1,19 @@ +#Область ОбработчикиСобытийФормы + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовФормы + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +#КонецОбласти + +#Область ОбработчикиОповещений + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#КонецОбласти \ No newline at end of file diff --git a/tests/skills/cases/form-add/snapshots/catalog-folder-form/Languages/Русский.xml b/tests/skills/cases/form-add/snapshots/information-register-forms/Languages/Русский.xml similarity index 100% rename from tests/skills/cases/form-add/snapshots/catalog-folder-form/Languages/Русский.xml rename to tests/skills/cases/form-add/snapshots/information-register-forms/Languages/Русский.xml diff --git a/tests/skills/cases/form-add/snapshots/settings-storage-save-form/Configuration.xml b/tests/skills/cases/form-add/snapshots/settings-storage-forms/Configuration.xml similarity index 100% rename from tests/skills/cases/form-add/snapshots/settings-storage-save-form/Configuration.xml rename to tests/skills/cases/form-add/snapshots/settings-storage-forms/Configuration.xml diff --git a/tests/skills/cases/form-add/snapshots/information-register-recordset-form/Ext/ClientApplicationInterface.xml b/tests/skills/cases/form-add/snapshots/settings-storage-forms/Ext/ClientApplicationInterface.xml similarity index 100% rename from tests/skills/cases/form-add/snapshots/information-register-recordset-form/Ext/ClientApplicationInterface.xml rename to tests/skills/cases/form-add/snapshots/settings-storage-forms/Ext/ClientApplicationInterface.xml diff --git a/tests/skills/cases/form-add/snapshots/information-register-recordset-form/Languages/Русский.xml b/tests/skills/cases/form-add/snapshots/settings-storage-forms/Languages/Русский.xml similarity index 100% rename from tests/skills/cases/form-add/snapshots/information-register-recordset-form/Languages/Русский.xml rename to tests/skills/cases/form-add/snapshots/settings-storage-forms/Languages/Русский.xml diff --git a/tests/skills/cases/form-add/snapshots/settings-storage-save-form/SettingsStorages/ХранилищеТест.xml b/tests/skills/cases/form-add/snapshots/settings-storage-forms/SettingsStorages/ХранилищеТест.xml similarity index 91% rename from tests/skills/cases/form-add/snapshots/settings-storage-save-form/SettingsStorages/ХранилищеТест.xml rename to tests/skills/cases/form-add/snapshots/settings-storage-forms/SettingsStorages/ХранилищеТест.xml index 11340f9c8..285201177 100644 --- a/tests/skills/cases/form-add/snapshots/settings-storage-save-form/SettingsStorages/ХранилищеТест.xml +++ b/tests/skills/cases/form-add/snapshots/settings-storage-forms/SettingsStorages/ХранилищеТест.xml @@ -17,12 +17,13 @@ SettingsStorage.ХранилищеТест.Form.ФормаСохранения - + SettingsStorage.ХранилищеТест.Form.ФормаЗагрузки
ФормаСохранения
+
ФормаЗагрузки
\ No newline at end of file diff --git a/tests/skills/cases/form-add/snapshots/settings-storage-forms/SettingsStorages/ХранилищеТест/Forms/ФормаЗагрузки.xml b/tests/skills/cases/form-add/snapshots/settings-storage-forms/SettingsStorages/ХранилищеТест/Forms/ФормаЗагрузки.xml new file mode 100644 index 000000000..2684fe720 --- /dev/null +++ b/tests/skills/cases/form-add/snapshots/settings-storage-forms/SettingsStorages/ХранилищеТест/Forms/ФормаЗагрузки.xml @@ -0,0 +1,21 @@ + + +
+ + ФормаЗагрузки + + + ru + ФормаЗагрузки + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + +
+
\ No newline at end of file diff --git a/tests/skills/cases/form-add/snapshots/settings-storage-save-form/SettingsStorages/ХранилищеТест/Forms/ФормаСохранения/Ext/Form.xml b/tests/skills/cases/form-add/snapshots/settings-storage-forms/SettingsStorages/ХранилищеТест/Forms/ФормаЗагрузки/Ext/Form.xml similarity index 100% rename from tests/skills/cases/form-add/snapshots/settings-storage-save-form/SettingsStorages/ХранилищеТест/Forms/ФормаСохранения/Ext/Form.xml rename to tests/skills/cases/form-add/snapshots/settings-storage-forms/SettingsStorages/ХранилищеТест/Forms/ФормаЗагрузки/Ext/Form.xml diff --git a/tests/skills/cases/form-add/snapshots/settings-storage-forms/SettingsStorages/ХранилищеТест/Forms/ФормаЗагрузки/Ext/Form/Module.bsl b/tests/skills/cases/form-add/snapshots/settings-storage-forms/SettingsStorages/ХранилищеТест/Forms/ФормаЗагрузки/Ext/Form/Module.bsl new file mode 100644 index 000000000..8ead4cec0 --- /dev/null +++ b/tests/skills/cases/form-add/snapshots/settings-storage-forms/SettingsStorages/ХранилищеТест/Forms/ФормаЗагрузки/Ext/Form/Module.bsl @@ -0,0 +1,19 @@ +#Область ОбработчикиСобытийФормы + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовФормы + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +#КонецОбласти + +#Область ОбработчикиОповещений + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#КонецОбласти \ No newline at end of file diff --git a/tests/skills/cases/form-add/snapshots/settings-storage-save-form/SettingsStorages/ХранилищеТест/Forms/ФормаСохранения.xml b/tests/skills/cases/form-add/snapshots/settings-storage-forms/SettingsStorages/ХранилищеТест/Forms/ФормаСохранения.xml similarity index 100% rename from tests/skills/cases/form-add/snapshots/settings-storage-save-form/SettingsStorages/ХранилищеТест/Forms/ФормаСохранения.xml rename to tests/skills/cases/form-add/snapshots/settings-storage-forms/SettingsStorages/ХранилищеТест/Forms/ФормаСохранения.xml diff --git a/tests/skills/cases/form-add/snapshots/settings-storage-forms/SettingsStorages/ХранилищеТест/Forms/ФормаСохранения/Ext/Form.xml b/tests/skills/cases/form-add/snapshots/settings-storage-forms/SettingsStorages/ХранилищеТест/Forms/ФормаСохранения/Ext/Form.xml new file mode 100644 index 000000000..189f84368 --- /dev/null +++ b/tests/skills/cases/form-add/snapshots/settings-storage-forms/SettingsStorages/ХранилищеТест/Forms/ФормаСохранения/Ext/Form.xml @@ -0,0 +1,7 @@ + +
+ + true + + + \ No newline at end of file diff --git a/tests/skills/cases/form-add/snapshots/settings-storage-forms/SettingsStorages/ХранилищеТест/Forms/ФормаСохранения/Ext/Form/Module.bsl b/tests/skills/cases/form-add/snapshots/settings-storage-forms/SettingsStorages/ХранилищеТест/Forms/ФормаСохранения/Ext/Form/Module.bsl new file mode 100644 index 000000000..8ead4cec0 --- /dev/null +++ b/tests/skills/cases/form-add/snapshots/settings-storage-forms/SettingsStorages/ХранилищеТест/Forms/ФормаСохранения/Ext/Form/Module.bsl @@ -0,0 +1,19 @@ +#Область ОбработчикиСобытийФормы + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовФормы + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +#КонецОбласти + +#Область ОбработчикиОповещений + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#КонецОбласти \ No newline at end of file diff --git a/tests/skills/cases/form-add/snapshots/settings-storage-save-form/Ext/ClientApplicationInterface.xml b/tests/skills/cases/form-add/snapshots/settings-storage-save-form/Ext/ClientApplicationInterface.xml deleted file mode 100644 index 3c1161b2d..000000000 --- a/tests/skills/cases/form-add/snapshots/settings-storage-save-form/Ext/ClientApplicationInterface.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - UUID-002 - - - - - UUID-004 - - - - - - - - \ No newline at end of file diff --git a/tests/skills/check-form-purposes.mjs b/tests/skills/check-form-purposes.mjs index 671febed0..2722cdd02 100644 --- a/tests/skills/check-form-purposes.mjs +++ b/tests/skills/check-form-purposes.mjs @@ -73,15 +73,16 @@ function parseSkillTable(text, port) { ? /^ "(\w+)" = @\{\n([\s\S]*?)^ \}/gm : /^ "(\w+)": \{\n([\s\S]*?)^ \},/gm; const ruleRe = isPs - ? /"(\w+)"\s*=\s*@\{ MainAttr = (\$null|"[^"]*"); AttrName = (?:\$null|"[^"]*"); Slot = (\$null|"[^"]*")/g - : /"(\w+)": \{"main_attr": (None|"[^"]*"), "attr_name": (?:None|"[^"]*"),\s*"slot": (None|"[^"]*")/g; + ? /"(\w+)"\s*=\s*@\{ MainAttr = (\$null|"[^"]*"); AttrName = (?:\$null|"[^"]*"); Slot = (\$null|"[^"]*")([^}]*)/g + : /"(\w+)": \{"main_attr": (None|"[^"]*"), "attr_name": (?:None|"[^"]*"),\s*"slot": (None|"[^"]*")([^}]*)/g; for (const km of tm[1].matchAll(kindRe)) { const rules = new Map(); ruleRe.lastIndex = 0; for (const rm of km[2].matchAll(ruleRe)) { const unq = (v) => (v === '$null' || v === 'None') ? null : v.slice(1, -1); - rules.set(rm[1], { mainAttr: unq(rm[2]), slot: unq(rm[3]) }); + const primary = /Primary = \$true|"primary": True/.test(rm[4] || ''); + rules.set(rm[1], { mainAttr: unq(rm[2]), slot: unq(rm[3]), primary }); } if (rules.size === 0) errors.push(`${port}: у вида ${km[1]} не разобрано ни одного назначения`); table.set(km[1], rules); @@ -125,7 +126,16 @@ for (const [kind, rules] of psTable) { } } -// 3. Паритет портов. +// 3. Основная форма вида: ровно одна на вид. Ею пользуется умолчание -Purpose; ноль пометок +// оставит навык с пустым назначением, две — сделают умолчание зависимым от порядка ключей. +for (const [kind, rules] of psTable) { + const primaries = [...rules.entries()].filter(([, r]) => r.primary).map(([p]) => p); + if (primaries.length !== 1) { + errors.push(`form-add: у ${kind} пометок Primary ${primaries.length} (${primaries.join(', ') || 'нет'}), нужна ровно одна`); + } +} + +// 4. Паритет портов. for (const kind of new Set([...psTable.keys(), ...pyTable.keys()])) { const a = psTable.get(kind); const b = pyTable.get(kind); @@ -142,6 +152,9 @@ for (const kind of new Set([...psTable.keys(), ...pyTable.keys()])) { if (norm(ra.mainAttr) !== norm(rb.mainAttr)) { errors.push(`паритет: ${kind}/${p} главный реквизит PS=${ra.mainAttr} PY=${rb.mainAttr}`); } + if (ra.primary !== rb.primary) { + errors.push(`паритет: ${kind}/${p} пометка Primary PS=${ra.primary} PY=${rb.primary}`); + } } }