From 10ca8ac873ae1deaf71a8e95793bbfbf93cb9271 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sat, 25 Jul 2026 17:54:20 +0300 Subject: [PATCH] =?UTF-8?q?fix(cf-init,cf-edit):=20=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=81=D0=B8=D1=8F=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D0=B0?= =?UTF-8?q?=20=D0=B2=D1=8B=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8=20=E2=80=94?= =?UTF-8?q?=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=20=D0=B8=20?= =?UTF-8?q?=D0=BD=D0=B0=D1=81=D0=BB=D0=B5=D0=B4=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Версию формата задаёт ПЛАТФОРМА выгрузки, а не режим совместимости: одна и та же БП с режимом Version8_3_24 даёт 2.17 на платформе 8.3.24 и 2.20 на 8.3.27. - cf-init: параметр -FormatVersion (2.17|2.20|2.21, дефолт 2.17 — читается всеми платформами). Конфигурация создаётся с нуля, наследовать не от чего; выводить версию из CompatibilityMode было бы неверно. Без параметра нельзя было собрать 2.20-проект — в том числе для тестовых фикстур. - cf-edit: шаблон Ext/HomePageWorkArea.xml нёс жёстко вписанный version="2.17", то есть в 2.20-конфигурации создавал файл чужой версии. Теперь наследует версию из редактируемого Configuration.xml (образец — cfe-init, который так уже умеет). epf-init/erf-init/cfe-init не трогаем: у первых двух наследовать не от чего (внешние объекты живут вне конфигурации), cfe-init уже наследует от базовой конфигурации корректно. Регресс cf-init 6/6, cf-edit 12/12 — ps1 и py. Co-Authored-By: Claude Opus 5 (1M context) --- .claude/skills/cf-edit/scripts/cf-edit.ps1 | 9 +++++++-- .claude/skills/cf-edit/scripts/cf-edit.py | 8 ++++++-- .claude/skills/cf-init/scripts/cf-init.ps1 | 13 +++++++++---- .claude/skills/cf-init/scripts/cf-init.py | 9 ++++++--- 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/.claude/skills/cf-edit/scripts/cf-edit.ps1 b/.claude/skills/cf-edit/scripts/cf-edit.ps1 index e62e947c..60107d6e 100644 --- a/.claude/skills/cf-edit/scripts/cf-edit.ps1 +++ b/.claude/skills/cf-edit/scripts/cf-edit.ps1 @@ -1,4 +1,4 @@ -# cf-edit v1.10 — Edit 1C configuration root (Configuration.xml) +# cf-edit v1.11 — Edit 1C configuration root (Configuration.xml) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)][Alias('Path')][string]$ConfigPath, @@ -167,6 +167,11 @@ $script:xmlDoc = New-Object System.Xml.XmlDocument $script:xmlDoc.PreserveWhitespace = $true $script:xmlDoc.Load($resolvedPath) +# Версия формата редактируемой конфигурации — создаваемые рядом файлы (Ext/HomePageWorkArea.xml) +# должны нести ту же версию, иначе в проекте окажутся файлы разных версий формата. +$script:formatVersion = $script:xmlDoc.DocumentElement.GetAttribute("version") +if (-not $script:formatVersion) { $script:formatVersion = "2.17" } + $script:addCount = 0 $script:removeCount = 0 $script:modifyCount = 0 @@ -864,7 +869,7 @@ function Do-SetHomePage($valArg) { $hpXml = @" - + $tmpl $leftXml $rightXml diff --git a/.claude/skills/cf-edit/scripts/cf-edit.py b/.claude/skills/cf-edit/scripts/cf-edit.py index ba0452d8..62b88c47 100644 --- a/.claude/skills/cf-edit/scripts/cf-edit.py +++ b/.claude/skills/cf-edit/scripts/cf-edit.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# cf-edit v1.10 — Edit 1C configuration root (Configuration.xml) +# cf-edit v1.11 — Edit 1C configuration root (Configuration.xml) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -410,6 +410,10 @@ def main(): tree = etree.parse(resolved_path, xml_parser) xml_root = tree.getroot() + # Версия формата редактируемой конфигурации — создаваемые рядом файлы (Ext/HomePageWorkArea.xml) + # должны нести ту же версию, иначе в проекте окажутся файлы разных версий формата. + format_version = xml_root.get('version') or '2.17' + add_count = 0 remove_count = 0 modify_count = 0 @@ -959,7 +963,7 @@ def main(): '\r\n' + f'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="{format_version}">\r\n' f'\t{tmpl}\r\n' f'{left_xml}\r\n' f'{right_xml}\r\n' diff --git a/.claude/skills/cf-init/scripts/cf-init.ps1 b/.claude/skills/cf-init/scripts/cf-init.ps1 index 54b20dee..732e30cb 100644 --- a/.claude/skills/cf-init/scripts/cf-init.ps1 +++ b/.claude/skills/cf-init/scripts/cf-init.ps1 @@ -1,4 +1,4 @@ -# cf-init v1.2 — Create empty 1C configuration scaffold +# cf-init v1.3 — Create empty 1C configuration scaffold # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -7,7 +7,12 @@ param( [string]$OutputDir = "src", [string]$Version, [string]$Vendor, - [string]$CompatibilityMode = "Version8_3_24" + [string]$CompatibilityMode = "Version8_3_24", + # Версия формата выгрузки (MDClasses). Её задаёт ПЛАТФОРМА, которой выгружают, и от режима + # совместимости она не зависит: 8.3.24 пишет 2.17, 8.3.27 — 2.20. Дефолт консервативный — + # 2.17 читается всеми поддерживаемыми платформами. + [ValidateSet("2.17", "2.20", "2.21")] + [string]$FormatVersion = "2.17" ) $ErrorActionPreference = "Stop" @@ -73,7 +78,7 @@ $versionXml = if ($Version) { [System.Security.SecurityElement]::Escape($Version # --- Configuration.xml --- $cfgXml = @" - + @@ -175,7 +180,7 @@ $cfgXml = @" # --- Languages/Русский.xml --- $langXml = @" - + Русский diff --git a/.claude/skills/cf-init/scripts/cf-init.py b/.claude/skills/cf-init/scripts/cf-init.py index d9339251..214d334a 100644 --- a/.claude/skills/cf-init/scripts/cf-init.py +++ b/.claude/skills/cf-init/scripts/cf-init.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# cf-init v1.2 — Create empty 1C configuration scaffold +# cf-init v1.3 — Create empty 1C configuration scaffold # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills """Generates minimal XML source files for a 1C configuration.""" import sys, os, argparse, uuid @@ -24,6 +24,9 @@ def main(): parser.add_argument('-Version', dest='Version', default='') parser.add_argument('-Vendor', dest='Vendor', default='') parser.add_argument('-CompatibilityMode', dest='CompatibilityMode', default='Version8_3_24') + # Версия формата выгрузки (MDClasses) — её задаёт ПЛАТФОРМА, а не режим совместимости: + # 8.3.24 пишет 2.17, 8.3.27 — 2.20. Дефолт консервативный: 2.17 читается всеми платформами. + parser.add_argument('-FormatVersion', dest='FormatVersion', default='2.17', choices=['2.17', '2.20', '2.21']) args = parser.parse_args() name = args.Name @@ -96,7 +99,7 @@ def main(): \t\t\t\n""" cfg_xml = f''' - + \t \t\t {contained_objects}\t\t @@ -168,7 +171,7 @@ def main(): # --- Languages/Русский.xml --- lang_xml = f''' - + \t \t\t \t\t\tРусский