From 02e9053d00bf515ee1685484da36b39fa03b3c3f Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Fri, 17 Apr 2026 14:08:27 +0300 Subject: [PATCH] =?UTF-8?q?feat(cf-validate,cfe-validate,epf-validate):=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B0=20=D0=BF?= =?UTF-8?q?=D0=BB=D0=B0=D1=82=D1=84=D0=BE=D1=80=D0=BC=D1=8B=208.5=20(issue?= =?UTF-8?q?=20#13)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `CompatibilityMode`, `ConfigurationExtensionCompatibilityMode`: добавлен `Version8_5_1` - `InterfaceCompatibilityMode`: расширен до полного списка из 7 значений (Version8_2, Version8_2EnableTaxi, Taxi, TaxiEnableVersion8_2, TaxiEnableVersion8_5, Version8_5EnableTaxi, Version8_5) — заодно учтены недостающие 8.2-значения - Принимается `version="2.21"` в заголовке MetaDataObject - cf-edit/reference.md: обновлена таблица допустимых значений Genrators (form-compile, form-add, cfe-borrow и др.) уже подхватывают версию формата через Detect-FormatVersion — не трогаем. Closes #13 Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/skills/cf-edit/reference.md | 4 ++-- .../skills/cf-validate/scripts/cf-validate.ps1 | 12 ++++++------ .claude/skills/cf-validate/scripts/cf-validate.py | 15 +++++++++------ .../skills/cfe-validate/scripts/cfe-validate.ps1 | 10 +++++----- .../skills/cfe-validate/scripts/cfe-validate.py | 13 ++++++++----- .../skills/epf-validate/scripts/epf-validate.ps1 | 6 +++--- .../skills/epf-validate/scripts/epf-validate.py | 6 +++--- 7 files changed, 36 insertions(+), 30 deletions(-) diff --git a/.claude/skills/cf-edit/reference.md b/.claude/skills/cf-edit/reference.md index aaa6d99e..57a8c0f9 100644 --- a/.claude/skills/cf-edit/reference.md +++ b/.claude/skills/cf-edit/reference.md @@ -13,7 +13,7 @@ ### Enum | Свойство | Допустимые значения | |----------|---------------------| -| `CompatibilityMode` | `Version8_3_20` ... `Version8_3_27`, `DontUse` | +| `CompatibilityMode` | `Version8_3_20` ... `Version8_3_28`, `Version8_5_1`, `DontUse` | | `ConfigurationExtensionCompatibilityMode` | то же | | `DefaultRunMode` | `ManagedApplication`, `OrdinaryApplication`, `Auto` | | `ScriptVariant` | `Russian`, `English` | @@ -21,7 +21,7 @@ | `ObjectAutonumerationMode` | `NotAutoFree`, `AutoFree` | | `ModalityUseMode` | `DontUse`, `Use`, `UseWithWarnings` | | `SynchronousPlatformExtensionAndAddInCallUseMode` | `DontUse`, `Use`, `UseWithWarnings` | -| `InterfaceCompatibilityMode` | `Taxi`, `TaxiEnableVersion8_2`, `Version8_2` | +| `InterfaceCompatibilityMode` | `Version8_2`, `Version8_2EnableTaxi`, `Taxi`, `TaxiEnableVersion8_2`, `TaxiEnableVersion8_5`, `Version8_5EnableTaxi`, `Version8_5` | | `DatabaseTablespacesUseMode` | `DontUse`, `Use` | | `MainClientApplicationWindowMode` | `Normal`, `Fullscreen`, `Kiosk` | diff --git a/.claude/skills/cf-validate/scripts/cf-validate.ps1 b/.claude/skills/cf-validate/scripts/cf-validate.ps1 index ad13c404..9ecba1d4 100644 --- a/.claude/skills/cf-validate/scripts/cf-validate.ps1 +++ b/.claude/skills/cf-validate/scripts/cf-validate.ps1 @@ -1,4 +1,4 @@ -# cf-validate v1.1 — Validate 1C configuration root structure +# cf-validate v1.2 — Validate 1C configuration root structure # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -145,17 +145,17 @@ $childTypeDirMap = @{ # Valid enum values for Configuration properties $validEnumValues = @{ - "ConfigurationExtensionCompatibilityMode" = @("DontUse","Version8_1","Version8_2_13","Version8_2_16","Version8_3_1","Version8_3_2","Version8_3_3","Version8_3_4","Version8_3_5","Version8_3_6","Version8_3_7","Version8_3_8","Version8_3_9","Version8_3_10","Version8_3_11","Version8_3_12","Version8_3_13","Version8_3_14","Version8_3_15","Version8_3_16","Version8_3_17","Version8_3_18","Version8_3_19","Version8_3_20","Version8_3_21","Version8_3_22","Version8_3_23","Version8_3_24","Version8_3_25","Version8_3_26","Version8_3_27","Version8_3_28") + "ConfigurationExtensionCompatibilityMode" = @("DontUse","Version8_1","Version8_2_13","Version8_2_16","Version8_3_1","Version8_3_2","Version8_3_3","Version8_3_4","Version8_3_5","Version8_3_6","Version8_3_7","Version8_3_8","Version8_3_9","Version8_3_10","Version8_3_11","Version8_3_12","Version8_3_13","Version8_3_14","Version8_3_15","Version8_3_16","Version8_3_17","Version8_3_18","Version8_3_19","Version8_3_20","Version8_3_21","Version8_3_22","Version8_3_23","Version8_3_24","Version8_3_25","Version8_3_26","Version8_3_27","Version8_3_28","Version8_5_1") "DefaultRunMode" = @("ManagedApplication","OrdinaryApplication","Auto") "ScriptVariant" = @("Russian","English") "DataLockControlMode" = @("Automatic","Managed","AutomaticAndManaged") "ObjectAutonumerationMode" = @("NotAutoFree","AutoFree") "ModalityUseMode" = @("DontUse","Use","UseWithWarnings") "SynchronousPlatformExtensionAndAddInCallUseMode" = @("DontUse","Use","UseWithWarnings") - "InterfaceCompatibilityMode" = @("Taxi","TaxiEnableVersion8_2","Version8_2") + "InterfaceCompatibilityMode" = @("Version8_2","Version8_2EnableTaxi","Taxi","TaxiEnableVersion8_2","TaxiEnableVersion8_5","Version8_5EnableTaxi","Version8_5") "DatabaseTablespacesUseMode" = @("DontUse","Use") "MainClientApplicationWindowMode" = @("Normal","Fullscreen","Kiosk") - "CompatibilityMode" = @("DontUse","Version8_1","Version8_2_13","Version8_2_16","Version8_3_1","Version8_3_2","Version8_3_3","Version8_3_4","Version8_3_5","Version8_3_6","Version8_3_7","Version8_3_8","Version8_3_9","Version8_3_10","Version8_3_11","Version8_3_12","Version8_3_13","Version8_3_14","Version8_3_15","Version8_3_16","Version8_3_17","Version8_3_18","Version8_3_19","Version8_3_20","Version8_3_21","Version8_3_22","Version8_3_23","Version8_3_24","Version8_3_25","Version8_3_26","Version8_3_27","Version8_3_28") + "CompatibilityMode" = @("DontUse","Version8_1","Version8_2_13","Version8_2_16","Version8_3_1","Version8_3_2","Version8_3_3","Version8_3_4","Version8_3_5","Version8_3_6","Version8_3_7","Version8_3_8","Version8_3_9","Version8_3_10","Version8_3_11","Version8_3_12","Version8_3_13","Version8_3_14","Version8_3_15","Version8_3_16","Version8_3_17","Version8_3_18","Version8_3_19","Version8_3_20","Version8_3_21","Version8_3_22","Version8_3_23","Version8_3_24","Version8_3_25","Version8_3_26","Version8_3_27","Version8_3_28","Version8_5_1") } # --- 1. Parse XML --- @@ -203,8 +203,8 @@ if ($root.NamespaceURI -ne $expectedNs) { $version = $root.GetAttribute("version") if (-not $version) { Report-Warn "1. Missing version attribute on MetaDataObject" -} elseif ($version -ne "2.17" -and $version -ne "2.20") { - Report-Warn "1. Unusual version '$version' (expected 2.17 or 2.20)" +} elseif ($version -ne "2.17" -and $version -ne "2.20" -and $version -ne "2.21") { + Report-Warn "1. Unusual version '$version' (expected 2.17, 2.20 or 2.21)" } # Must have Configuration child diff --git a/.claude/skills/cf-validate/scripts/cf-validate.py b/.claude/skills/cf-validate/scripts/cf-validate.py index 0c04ce77..023628bd 100644 --- a/.claude/skills/cf-validate/scripts/cf-validate.py +++ b/.claude/skills/cf-validate/scripts/cf-validate.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# cf-validate v1.1 — Validate 1C configuration XML structure +# cf-validate v1.2 — Validate 1C configuration XML structure # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills """Validates Configuration.xml: root structure, InternalInfo, properties, ChildObjects, languages.""" import sys, os, argparse, re @@ -82,7 +82,7 @@ VALID_ENUM_VALUES = { 'Version8_3_11', 'Version8_3_12', 'Version8_3_13', 'Version8_3_14', 'Version8_3_15', 'Version8_3_16', 'Version8_3_17', 'Version8_3_18', 'Version8_3_19', 'Version8_3_20', 'Version8_3_21', 'Version8_3_22', 'Version8_3_23', 'Version8_3_24', 'Version8_3_25', - 'Version8_3_26', 'Version8_3_27', 'Version8_3_28', + 'Version8_3_26', 'Version8_3_27', 'Version8_3_28', 'Version8_5_1', ], 'DefaultRunMode': ['ManagedApplication', 'OrdinaryApplication', 'Auto'], 'ScriptVariant': ['Russian', 'English'], @@ -90,7 +90,10 @@ VALID_ENUM_VALUES = { 'ObjectAutonumerationMode': ['NotAutoFree', 'AutoFree'], 'ModalityUseMode': ['DontUse', 'Use', 'UseWithWarnings'], 'SynchronousPlatformExtensionAndAddInCallUseMode': ['DontUse', 'Use', 'UseWithWarnings'], - 'InterfaceCompatibilityMode': ['Taxi', 'TaxiEnableVersion8_2', 'Version8_2'], + 'InterfaceCompatibilityMode': [ + 'Version8_2', 'Version8_2EnableTaxi', 'Taxi', 'TaxiEnableVersion8_2', + 'TaxiEnableVersion8_5', 'Version8_5EnableTaxi', 'Version8_5', + ], 'DatabaseTablespacesUseMode': ['DontUse', 'Use'], 'MainClientApplicationWindowMode': ['Normal', 'Fullscreen', 'Kiosk'], 'CompatibilityMode': [ @@ -100,7 +103,7 @@ VALID_ENUM_VALUES = { 'Version8_3_11', 'Version8_3_12', 'Version8_3_13', 'Version8_3_14', 'Version8_3_15', 'Version8_3_16', 'Version8_3_17', 'Version8_3_18', 'Version8_3_19', 'Version8_3_20', 'Version8_3_21', 'Version8_3_22', 'Version8_3_23', 'Version8_3_24', 'Version8_3_25', - 'Version8_3_26', 'Version8_3_27', 'Version8_3_28', + 'Version8_3_26', 'Version8_3_27', 'Version8_3_28', 'Version8_5_1', ], } @@ -228,8 +231,8 @@ def main(): version = root.get('version', '') if not version: r.warn('1. Missing version attribute on MetaDataObject') - elif version not in ('2.17', '2.20'): - r.warn(f"1. Unusual version '{version}' (expected 2.17 or 2.20)") + elif version not in ('2.17', '2.20', '2.21'): + r.warn(f"1. Unusual version '{version}' (expected 2.17, 2.20 or 2.21)") # Must have Configuration child cfg_node = None diff --git a/.claude/skills/cfe-validate/scripts/cfe-validate.ps1 b/.claude/skills/cfe-validate/scripts/cfe-validate.ps1 index 2d5672f9..1caf02bc 100644 --- a/.claude/skills/cfe-validate/scripts/cfe-validate.ps1 +++ b/.claude/skills/cfe-validate/scripts/cfe-validate.ps1 @@ -1,4 +1,4 @@ -# cfe-validate v1.3 — Validate 1C configuration extension structure (CFE) +# cfe-validate v1.4 — Validate 1C configuration extension structure (CFE) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -145,10 +145,10 @@ $childTypeDirMap = @{ # Valid enum values for extension properties $validEnumValues = @{ - "ConfigurationExtensionCompatibilityMode" = @("DontUse","Version8_1","Version8_2_13","Version8_2_16","Version8_3_1","Version8_3_2","Version8_3_3","Version8_3_4","Version8_3_5","Version8_3_6","Version8_3_7","Version8_3_8","Version8_3_9","Version8_3_10","Version8_3_11","Version8_3_12","Version8_3_13","Version8_3_14","Version8_3_15","Version8_3_16","Version8_3_17","Version8_3_18","Version8_3_19","Version8_3_20","Version8_3_21","Version8_3_22","Version8_3_23","Version8_3_24","Version8_3_25","Version8_3_26","Version8_3_27","Version8_3_28") + "ConfigurationExtensionCompatibilityMode" = @("DontUse","Version8_1","Version8_2_13","Version8_2_16","Version8_3_1","Version8_3_2","Version8_3_3","Version8_3_4","Version8_3_5","Version8_3_6","Version8_3_7","Version8_3_8","Version8_3_9","Version8_3_10","Version8_3_11","Version8_3_12","Version8_3_13","Version8_3_14","Version8_3_15","Version8_3_16","Version8_3_17","Version8_3_18","Version8_3_19","Version8_3_20","Version8_3_21","Version8_3_22","Version8_3_23","Version8_3_24","Version8_3_25","Version8_3_26","Version8_3_27","Version8_3_28","Version8_5_1") "DefaultRunMode" = @("ManagedApplication","OrdinaryApplication","Auto") "ScriptVariant" = @("Russian","English") - "InterfaceCompatibilityMode" = @("Taxi","TaxiEnableVersion8_2","Version8_2") + "InterfaceCompatibilityMode" = @("Version8_2","Version8_2EnableTaxi","Taxi","TaxiEnableVersion8_2","TaxiEnableVersion8_5","Version8_5EnableTaxi","Version8_5") } # --- 1. Parse XML --- @@ -196,8 +196,8 @@ if ($root.NamespaceURI -ne $expectedNs) { $version = $root.GetAttribute("version") if (-not $version) { Report-Warn "1. Missing version attribute on MetaDataObject" -} elseif ($version -ne "2.17" -and $version -ne "2.20") { - Report-Warn "1. Unusual version '$version' (expected 2.17 or 2.20)" +} elseif ($version -ne "2.17" -and $version -ne "2.20" -and $version -ne "2.21") { + Report-Warn "1. Unusual version '$version' (expected 2.17, 2.20 or 2.21)" } # Must have Configuration child diff --git a/.claude/skills/cfe-validate/scripts/cfe-validate.py b/.claude/skills/cfe-validate/scripts/cfe-validate.py index 5818b109..ef71a2d6 100644 --- a/.claude/skills/cfe-validate/scripts/cfe-validate.py +++ b/.claude/skills/cfe-validate/scripts/cfe-validate.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# cfe-validate v1.3 — Validate 1C configuration extension XML structure (CFE) +# cfe-validate v1.4 — Validate 1C configuration extension XML structure (CFE) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills """Validates extension Configuration.xml: root, InternalInfo, extension properties, ChildObjects, borrowed objects.""" import sys, os, argparse, re @@ -82,11 +82,14 @@ VALID_ENUM_VALUES = { 'Version8_3_11', 'Version8_3_12', 'Version8_3_13', 'Version8_3_14', 'Version8_3_15', 'Version8_3_16', 'Version8_3_17', 'Version8_3_18', 'Version8_3_19', 'Version8_3_20', 'Version8_3_21', 'Version8_3_22', 'Version8_3_23', 'Version8_3_24', 'Version8_3_25', - 'Version8_3_26', 'Version8_3_27', 'Version8_3_28', + 'Version8_3_26', 'Version8_3_27', 'Version8_3_28', 'Version8_5_1', ], 'DefaultRunMode': ['ManagedApplication', 'OrdinaryApplication', 'Auto'], 'ScriptVariant': ['Russian', 'English'], - 'InterfaceCompatibilityMode': ['Taxi', 'TaxiEnableVersion8_2', 'Version8_2'], + 'InterfaceCompatibilityMode': [ + 'Version8_2', 'Version8_2EnableTaxi', 'Taxi', 'TaxiEnableVersion8_2', + 'TaxiEnableVersion8_5', 'Version8_5EnableTaxi', 'Version8_5', + ], } EXPECTED_NS = 'http://v8.1c.ru/8.3/MDClasses' @@ -213,8 +216,8 @@ def main(): version = root.get('version', '') if not version: r.warn('1. Missing version attribute on MetaDataObject') - elif version not in ('2.17', '2.20'): - r.warn(f"1. Unusual version '{version}' (expected 2.17 or 2.20)") + elif version not in ('2.17', '2.20', '2.21'): + r.warn(f"1. Unusual version '{version}' (expected 2.17, 2.20 or 2.21)") # Must have Configuration child cfg_node = None diff --git a/.claude/skills/epf-validate/scripts/epf-validate.ps1 b/.claude/skills/epf-validate/scripts/epf-validate.ps1 index 91872cef..eafb7e68 100644 --- a/.claude/skills/epf-validate/scripts/epf-validate.ps1 +++ b/.claude/skills/epf-validate/scripts/epf-validate.ps1 @@ -1,4 +1,4 @@ -# epf-validate v1.1 — Validate 1C external data processor / report structure +# epf-validate v1.2 — Validate 1C external data processor / report structure # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # Works for both EPF (ExternalDataProcessor) and ERF (ExternalReport) — auto-detects param( @@ -184,8 +184,8 @@ if ($root.NamespaceURI -ne $expectedNs) { $version = $root.GetAttribute("version") if (-not $version) { Report-Warn "1. Missing version attribute on MetaDataObject" -} elseif ($version -ne "2.17" -and $version -ne "2.20") { - Report-Warn "1. Unusual version '$version' (expected 2.17 or 2.20)" +} elseif ($version -ne "2.17" -and $version -ne "2.20" -and $version -ne "2.21") { + Report-Warn "1. Unusual version '$version' (expected 2.17, 2.20 or 2.21)" } # Detect type: ExternalDataProcessor or ExternalReport diff --git a/.claude/skills/epf-validate/scripts/epf-validate.py b/.claude/skills/epf-validate/scripts/epf-validate.py index 7bcc5f9d..d04749a7 100644 --- a/.claude/skills/epf-validate/scripts/epf-validate.py +++ b/.claude/skills/epf-validate/scripts/epf-validate.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# epf-validate v1.1 — Validate 1C external data processor / report structure +# epf-validate v1.2 — Validate 1C external data processor / report structure # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # Works for both EPF (ExternalDataProcessor) and ERF (ExternalReport) — auto-detects @@ -165,8 +165,8 @@ def main(): version = root.get("version", "") if not version: report_warn("1. Missing version attribute on MetaDataObject") - elif version not in ("2.17", "2.20"): - report_warn(f"1. Unusual version '{version}' (expected 2.17 or 2.20)") + elif version not in ("2.17", "2.20", "2.21"): + report_warn(f"1. Unusual version '{version}' (expected 2.17, 2.20 or 2.21)") # Detect type child_elements = []