diff --git a/.claude/skills/meta-edit/scripts/meta-edit.ps1 b/.claude/skills/meta-edit/scripts/meta-edit.ps1 index e665ab34..d8e6781f 100644 --- a/.claude/skills/meta-edit/scripts/meta-edit.ps1 +++ b/.claude/skills/meta-edit/scripts/meta-edit.ps1 @@ -1,4 +1,4 @@ -# meta-edit v1.17 — Edit existing 1C metadata object XML (+structural attr props Format/EditFormat/ToolTip/ChoiceForm/MinValue/MaxValue/LinkByType/ChoiceParameterLinks/ChoiceParameters/FillValue) +# meta-edit v1.18 — Edit existing 1C metadata object XML (+свойства-списки DataLockFields/RegisteredDocuments) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [string]$DefinitionFile, @@ -12,14 +12,17 @@ param( "add-attribute", "add-ts", "add-dimension", "add-resource", "add-enumValue", "add-column", "add-form", "add-template", "add-command", "add-owner", "add-registerRecord", "add-basedOn", "add-inputByString", + "add-dataLockField", "add-registeredDocument", "remove-attribute", "remove-ts", "remove-dimension", "remove-resource", "remove-enumValue", "remove-column", "remove-form", "remove-template", "remove-command", "remove-owner", "remove-registerRecord", "remove-basedOn", "remove-inputByString", + "remove-dataLockField", "remove-registeredDocument", "add-ts-attribute", "remove-ts-attribute", "modify-ts-attribute", "modify-ts", "modify-attribute", "modify-dimension", "modify-resource", "modify-enumValue", "modify-column", "modify-property", - "set-owners", "set-registerRecords", "set-basedOn", "set-inputByString" + "set-owners", "set-registerRecords", "set-basedOn", "set-inputByString", + "set-dataLockFields", "set-registeredDocuments" )] [string]$Operation, [string]$Value, @@ -1490,6 +1493,8 @@ function Convert-InlineToDefinition([string]$operation, [string]$value) { "registerRecord" = "RegisterRecords"; "registerRecords" = "RegisterRecords" "basedOn" = "BasedOn" "inputByString" = "InputByString" + "dataLockField" = "DataLockFields"; "dataLockFields" = "DataLockFields" + "registeredDocument" = "RegisteredDocuments"; "registeredDocuments" = "RegisteredDocuments" } if ($complexTargetMap.ContainsKey($target)) { @@ -2363,6 +2368,8 @@ $script:complexPropertyMap = @{ "RegisterRecords" = @{ tag = "xr:Item"; attr = 'xsi:type="xr:MDObjectRef"' } "BasedOn" = @{ tag = "xr:Item"; attr = 'xsi:type="xr:MDObjectRef"' } "InputByString" = @{ tag = "xr:Field"; attr = $null } + "DataLockFields" = @{ tag = "xr:Field"; attr = $null; expand = $true } + "RegisteredDocuments" = @{ tag = "xr:Item"; attr = 'xsi:type="xr:MDObjectRef"' } } # Известные свойства объекта (union по корпусу acc+erp 8.3.24) — allowlist для modify-property. @@ -2812,6 +2819,7 @@ function Get-ComplexPropertyValues([System.Xml.XmlElement]$propEl) { function Add-ComplexPropertyItem([string]$propertyName, [string[]]$values) { $mapEntry = $script:complexPropertyMap[$propertyName] if (-not $mapEntry) { Warn "Unknown complex property: $propertyName"; return } + if ($mapEntry.expand) { $values = @($values | ForEach-Object { Expand-DataPath "$_" }) } $propEl = Find-PropertyElement $propertyName if (-not $propEl) { @@ -2859,6 +2867,8 @@ function Add-ComplexPropertyItem([string]$propertyName, [string[]]$values) { } function Remove-ComplexPropertyItem([string]$propertyName, [string[]]$values) { + $mapEntry = $script:complexPropertyMap[$propertyName] + if ($mapEntry -and $mapEntry.expand) { $values = @($values | ForEach-Object { Expand-DataPath "$_" }) } $propEl = Find-PropertyElement $propertyName if (-not $propEl) { Warn "Property element '$propertyName' not found in Properties" @@ -2896,6 +2906,7 @@ function Remove-ComplexPropertyItem([string]$propertyName, [string[]]$values) { function Set-ComplexProperty([string]$propertyName, [string[]]$values) { $mapEntry = $script:complexPropertyMap[$propertyName] if (-not $mapEntry) { Warn "Unknown complex property: $propertyName"; return } + if ($mapEntry.expand) { $values = @($values | ForEach-Object { Expand-DataPath "$_" }) } $propEl = Find-PropertyElement $propertyName if (-not $propEl) { diff --git a/.claude/skills/meta-edit/scripts/meta-edit.py b/.claude/skills/meta-edit/scripts/meta-edit.py index 1736d1b8..b842f9e8 100644 --- a/.claude/skills/meta-edit/scripts/meta-edit.py +++ b/.claude/skills/meta-edit/scripts/meta-edit.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# meta-edit v1.17 — Edit existing 1C metadata object XML (+structural attr props Format/EditFormat/ToolTip/ChoiceForm/MinValue/MaxValue/LinkByType/ChoiceParameterLinks/ChoiceParameters/FillValue) +# meta-edit v1.18 — Edit existing 1C metadata object XML (+свойства-списки DataLockFields/RegisteredDocuments) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -1430,6 +1430,8 @@ def convert_inline_to_definition(operation, value): "registerRecord": "RegisterRecords", "registerRecords": "RegisterRecords", "basedOn": "BasedOn", "inputByString": "InputByString", + "dataLockField": "DataLockFields", "dataLockFields": "DataLockFields", + "registeredDocument": "RegisteredDocuments", "registeredDocuments": "RegisteredDocuments", } if target in complex_target_map: @@ -2191,6 +2193,8 @@ complex_property_map = { "RegisterRecords": {"tag": "xr:Item", "attr": 'xsi:type="xr:MDObjectRef"'}, "BasedOn": {"tag": "xr:Item", "attr": 'xsi:type="xr:MDObjectRef"'}, "InputByString": {"tag": "xr:Field", "attr": None}, + "DataLockFields": {"tag": "xr:Field", "attr": None, "expand": True}, + "RegisteredDocuments": {"tag": "xr:Item", "attr": 'xsi:type="xr:MDObjectRef"'}, } # Известные свойства объекта (union по корпусу acc+erp 8.3.24) — allowlist для modify-property. @@ -2724,6 +2728,8 @@ def add_complex_property_item(property_name, values): if not map_entry: warn(f"Unknown complex property: {property_name}") return + if map_entry.get("expand"): + values = [expand_data_path(str(v)) for v in values] prop_el = find_property_element(property_name) if prop_el is None: @@ -2763,6 +2769,9 @@ def add_complex_property_item(property_name, values): def remove_complex_property_item(property_name, values): global remove_count + map_entry = complex_property_map.get(property_name) + if map_entry and map_entry.get("expand"): + values = [expand_data_path(str(v)) for v in values] prop_el = find_property_element(property_name) if prop_el is None: warn(f"Property element '{property_name}' not found in Properties") @@ -2793,6 +2802,8 @@ def set_complex_property(property_name, values): if not map_entry: warn(f"Unknown complex property: {property_name}") return + if map_entry.get("expand"): + values = [expand_data_path(str(v)) for v in values] prop_el = find_property_element(property_name) if prop_el is None: @@ -2872,14 +2883,17 @@ def main(): "add-attribute", "add-ts", "add-dimension", "add-resource", "add-enumValue", "add-column", "add-form", "add-template", "add-command", "add-owner", "add-registerRecord", "add-basedOn", "add-inputByString", + "add-dataLockField", "add-registeredDocument", "remove-attribute", "remove-ts", "remove-dimension", "remove-resource", "remove-enumValue", "remove-column", "remove-form", "remove-template", "remove-command", "remove-owner", "remove-registerRecord", "remove-basedOn", "remove-inputByString", + "remove-dataLockField", "remove-registeredDocument", "add-ts-attribute", "remove-ts-attribute", "modify-ts-attribute", "modify-ts", "modify-attribute", "modify-dimension", "modify-resource", "modify-enumValue", "modify-column", "modify-property", "set-owners", "set-registerRecords", "set-basedOn", "set-inputByString", + "set-dataLockFields", "set-registeredDocuments", ] parser = argparse.ArgumentParser(description="Edit existing 1C metadata object XML", allow_abbrev=False) diff --git a/tests/skills/cases/meta-edit/modify-property-datalockfields.json b/tests/skills/cases/meta-edit/modify-property-datalockfields.json new file mode 100644 index 00000000..295ffa4c --- /dev/null +++ b/tests/skills/cases/meta-edit/modify-property-datalockfields.json @@ -0,0 +1,13 @@ +{ + "name": "modify-property: DataLockFields (свойство-список, разворот пути реквизита)", + "setup": "empty-config", + "preRun": [ + { + "script": "meta-compile/scripts/meta-compile", + "input": { "type": "Catalog", "name": "Спр", "attributes": ["Орг: CatalogRef.Спр"] }, + "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" } + } + ], + "params": { "objectPath": "Catalogs/Спр" }, + "input": { "modify": { "properties": { "DataLockFields": ["Орг"] } } } +} diff --git a/tests/skills/cases/meta-edit/modify-property-registereddocuments.json b/tests/skills/cases/meta-edit/modify-property-registereddocuments.json new file mode 100644 index 00000000..99bb771e --- /dev/null +++ b/tests/skills/cases/meta-edit/modify-property-registereddocuments.json @@ -0,0 +1,18 @@ +{ + "name": "modify-property: RegisteredDocuments (свойство-список DocumentJournal)", + "setup": "empty-config", + "preRun": [ + { + "script": "meta-compile/scripts/meta-compile", + "input": { "type": "Document", "name": "Расход" }, + "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" } + }, + { + "script": "meta-compile/scripts/meta-compile", + "input": { "type": "DocumentJournal", "name": "Журнал" }, + "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" } + } + ], + "params": { "objectPath": "DocumentJournals/Журнал" }, + "input": { "modify": { "properties": { "RegisteredDocuments": ["Document.Расход"] } } } +} diff --git a/tests/skills/cases/meta-edit/snapshots/modify-property-datalockfields/Catalogs/Спр.xml b/tests/skills/cases/meta-edit/snapshots/modify-property-datalockfields/Catalogs/Спр.xml new file mode 100644 index 00000000..a0f94440 --- /dev/null +++ b/tests/skills/cases/meta-edit/snapshots/modify-property-datalockfields/Catalogs/Спр.xml @@ -0,0 +1,134 @@ + + + + + + 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 + + + Catalog.Спр.Attribute.Орг + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + + Орг + + + ru + Орг + + + + + d5p1:CatalogRef.Спр + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + diff --git a/tests/skills/cases/meta-edit/snapshots/modify-property-datalockfields/Catalogs/Спр/Ext/ObjectModule.bsl b/tests/skills/cases/meta-edit/snapshots/modify-property-datalockfields/Catalogs/Спр/Ext/ObjectModule.bsl new file mode 100644 index 00000000..e69de29b diff --git a/tests/skills/cases/meta-edit/snapshots/modify-property-datalockfields/Configuration.xml b/tests/skills/cases/meta-edit/snapshots/modify-property-datalockfields/Configuration.xml new file mode 100644 index 00000000..199f22d9 --- /dev/null +++ b/tests/skills/cases/meta-edit/snapshots/modify-property-datalockfields/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-edit/snapshots/modify-property-datalockfields/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-edit/snapshots/modify-property-datalockfields/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/meta-edit/snapshots/modify-property-datalockfields/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-edit/snapshots/modify-property-datalockfields/Languages/Русский.xml b/tests/skills/cases/meta-edit/snapshots/modify-property-datalockfields/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/meta-edit/snapshots/modify-property-datalockfields/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-edit/snapshots/modify-property-registereddocuments/Configuration.xml b/tests/skills/cases/meta-edit/snapshots/modify-property-registereddocuments/Configuration.xml new file mode 100644 index 00000000..8a38ebf2 --- /dev/null +++ b/tests/skills/cases/meta-edit/snapshots/modify-property-registereddocuments/Configuration.xml @@ -0,0 +1,253 @@ + + + + + + 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-edit/snapshots/modify-property-registereddocuments/DocumentJournals/Журнал.xml b/tests/skills/cases/meta-edit/snapshots/modify-property-registereddocuments/DocumentJournals/Журнал.xml new file mode 100644 index 00000000..b8c30e7a --- /dev/null +++ b/tests/skills/cases/meta-edit/snapshots/modify-property-registereddocuments/DocumentJournals/Журнал.xml @@ -0,0 +1,198 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + + Журнал + + + ru + Журнал + + + + + + true + + Document.Расход + + false + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + + + + + + diff --git a/tests/skills/cases/meta-edit/snapshots/modify-property-registereddocuments/Documents/Расход.xml b/tests/skills/cases/meta-edit/snapshots/modify-property-registereddocuments/Documents/Расход.xml new file mode 100644 index 00000000..c6674026 --- /dev/null +++ b/tests/skills/cases/meta-edit/snapshots/modify-property-registereddocuments/Documents/Расход.xml @@ -0,0 +1,82 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Расход + + + ru + Расход + + + + true + + String + 11 + Variable + Year + true + true + + + + Document.Расход.StandardAttribute.Number + + Use + Begin + DontUse + Directly + + + + + + + Allow + Deny + AutoDelete + WriteSelected + AutoFill + + true + true + false + + Managed + Use + + + + + + Auto + DontUse + false + false + + + + diff --git a/tests/skills/cases/meta-edit/snapshots/modify-property-registereddocuments/Documents/Расход/Ext/ObjectModule.bsl b/tests/skills/cases/meta-edit/snapshots/modify-property-registereddocuments/Documents/Расход/Ext/ObjectModule.bsl new file mode 100644 index 00000000..e69de29b diff --git a/tests/skills/cases/meta-edit/snapshots/modify-property-registereddocuments/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-edit/snapshots/modify-property-registereddocuments/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/meta-edit/snapshots/modify-property-registereddocuments/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-edit/snapshots/modify-property-registereddocuments/Languages/Русский.xml b/tests/skills/cases/meta-edit/snapshots/modify-property-registereddocuments/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/meta-edit/snapshots/modify-property-registereddocuments/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file