diff --git a/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 b/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 index 90c9d492..e64bbae7 100644 --- a/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 +++ b/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 @@ -1,4 +1,4 @@ -# cfe-borrow v1.5 — Borrow objects from configuration into extension (CFE) +# cfe-borrow v1.6 — Borrow objects from configuration into extension (CFE) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)][string]$ExtensionPath, @@ -882,14 +882,19 @@ function Borrow-Form { [System.IO.File]::WriteAllText($formXmlFile, $formXmlSb.ToString(), $enc) Info " Created: $formXmlFile" - # 6. Create empty Module.bsl + # 6. Create empty Module.bsl — but NEVER overwrite an existing one (re-borrow must + # not clobber user code added to the form module). $moduleDir = Join-Path $formXmlDir "Form" if (-not (Test-Path $moduleDir)) { New-Item -ItemType Directory -Path $moduleDir -Force | Out-Null } $moduleBslFile = Join-Path $moduleDir "Module.bsl" - [System.IO.File]::WriteAllText($moduleBslFile, "", $enc) - Info " Created: $moduleBslFile" + if (Test-Path $moduleBslFile) { + Info " Preserved existing Module.bsl" + } else { + [System.IO.File]::WriteAllText($moduleBslFile, "", $enc) + Info " Created: $moduleBslFile" + } # 7. Register form in parent object ChildObjects Register-FormInObject $typeName $objName $formName diff --git a/.claude/skills/cfe-borrow/scripts/cfe-borrow.py b/.claude/skills/cfe-borrow/scripts/cfe-borrow.py index 61a73b13..137dd561 100644 --- a/.claude/skills/cfe-borrow/scripts/cfe-borrow.py +++ b/.claude/skills/cfe-borrow/scripts/cfe-borrow.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# cfe-borrow v1.5 — Borrow objects from configuration into extension (CFE) +# cfe-borrow v1.6 — Borrow objects from configuration into extension (CFE) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -1483,12 +1483,16 @@ def main(): save_text_bom(form_xml_file, "".join(parts)) info(f" Created: {form_xml_file}") - # 6. Create empty Module.bsl + # 6. Create empty Module.bsl — but NEVER overwrite an existing one (re-borrow must + # not clobber user code added to the form module). module_dir = os.path.join(form_xml_dir, "Form") os.makedirs(module_dir, exist_ok=True) module_bsl_file = os.path.join(module_dir, "Module.bsl") - save_text_bom(module_bsl_file, "") - info(f" Created: {module_bsl_file}") + if os.path.isfile(module_bsl_file): + info(" Preserved existing Module.bsl") + else: + save_text_bom(module_bsl_file, "") + info(f" Created: {module_bsl_file}") # 7. Register form in parent object ChildObjects register_form_in_object(type_name, obj_name, form_name) diff --git a/tests/skills/cases/cfe-borrow/form-bindings.json b/tests/skills/cases/cfe-borrow/form-bindings.json index 48d37e2a..6e580e5b 100644 --- a/tests/skills/cases/cfe-borrow/form-bindings.json +++ b/tests/skills/cases/cfe-borrow/form-bindings.json @@ -1,5 +1,5 @@ { - "name": "Заимствование формы: вырезание привязок (Multiple*/Footer) + идемпотентность повторного заимствования", + "name": "Заимствование формы: вырезание привязок (Multiple*/Footer) + идемпотентность (модуль и uuid не затираются при повторе)", "preRun": [ { "script": "meta-compile/scripts/meta-compile", @@ -34,6 +34,12 @@ { "script": "cfe-borrow/scripts/cfe-borrow", "args": { "-ExtensionPath": "{workDir}/ext", "-ConfigPath": "{workDir}", "-Object": "Catalog.Товары.Form.ФормаЭлемента", "-BorrowMainAttribute": "Form" } + }, + { + "writeFile": { + "path": "ext/Catalogs/Товары/Forms/ФормаЭлемента/Ext/Form/Module.bsl", + "content": "&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t// пользовательский код — не должен затираться повторным заимствованием\nКонецПроцедуры" + } } ], "params": { "extensionPath": "ext", "object": "Catalog.Товары.Form.ФормаЭлемента" }, diff --git a/tests/skills/cases/cfe-borrow/snapshots/form-bindings/Ext/Catalogs/Товары/Forms/ФормаЭлемента/Ext/Form/Module.bsl b/tests/skills/cases/cfe-borrow/snapshots/form-bindings/Ext/Catalogs/Товары/Forms/ФормаЭлемента/Ext/Form/Module.bsl index e69de29b..6bb0b68a 100644 --- a/tests/skills/cases/cfe-borrow/snapshots/form-bindings/Ext/Catalogs/Товары/Forms/ФормаЭлемента/Ext/Form/Module.bsl +++ b/tests/skills/cases/cfe-borrow/snapshots/form-bindings/Ext/Catalogs/Товары/Forms/ФормаЭлемента/Ext/Form/Module.bsl @@ -0,0 +1,4 @@ +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + // пользовательский код — не должен затираться повторным заимствованием +КонецПроцедуры \ No newline at end of file