mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-17 00:05:17 +03:00
fix(cfe-borrow): не затирать существующий Module.bsl при повторном заимствовании формы
Повторный borrow формы записывал пустой Module.bsl безусловно → терялся пользовательский код, добавленный в модуль формы (аналог IngvarConsulting/unica#4, воспроизведено: 150→3 байта). Теперь пустой модуль создаётся только если файла ещё нет; существующий сохраняется ("Preserved existing Module.bsl"). Дополняет идемпотентность re-borrow (форма-обёртка/uuid уже были закрыты в v1.5). Тест form-bindings усилен: между первым и вторым заимствованием в модуль пишется код (writeFile), idempotent:true теперь проверяет его сохранность побайтно. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
param(
|
param(
|
||||||
[Parameter(Mandatory)][string]$ExtensionPath,
|
[Parameter(Mandatory)][string]$ExtensionPath,
|
||||||
@@ -882,14 +882,19 @@ function Borrow-Form {
|
|||||||
[System.IO.File]::WriteAllText($formXmlFile, $formXmlSb.ToString(), $enc)
|
[System.IO.File]::WriteAllText($formXmlFile, $formXmlSb.ToString(), $enc)
|
||||||
Info " Created: $formXmlFile"
|
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"
|
$moduleDir = Join-Path $formXmlDir "Form"
|
||||||
if (-not (Test-Path $moduleDir)) {
|
if (-not (Test-Path $moduleDir)) {
|
||||||
New-Item -ItemType Directory -Path $moduleDir -Force | Out-Null
|
New-Item -ItemType Directory -Path $moduleDir -Force | Out-Null
|
||||||
}
|
}
|
||||||
$moduleBslFile = Join-Path $moduleDir "Module.bsl"
|
$moduleBslFile = Join-Path $moduleDir "Module.bsl"
|
||||||
[System.IO.File]::WriteAllText($moduleBslFile, "", $enc)
|
if (Test-Path $moduleBslFile) {
|
||||||
Info " Created: $moduleBslFile"
|
Info " Preserved existing Module.bsl"
|
||||||
|
} else {
|
||||||
|
[System.IO.File]::WriteAllText($moduleBslFile, "", $enc)
|
||||||
|
Info " Created: $moduleBslFile"
|
||||||
|
}
|
||||||
|
|
||||||
# 7. Register form in parent object ChildObjects
|
# 7. Register form in parent object ChildObjects
|
||||||
Register-FormInObject $typeName $objName $formName
|
Register-FormInObject $typeName $objName $formName
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/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
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
@@ -1483,12 +1483,16 @@ def main():
|
|||||||
save_text_bom(form_xml_file, "".join(parts))
|
save_text_bom(form_xml_file, "".join(parts))
|
||||||
info(f" Created: {form_xml_file}")
|
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")
|
module_dir = os.path.join(form_xml_dir, "Form")
|
||||||
os.makedirs(module_dir, exist_ok=True)
|
os.makedirs(module_dir, exist_ok=True)
|
||||||
module_bsl_file = os.path.join(module_dir, "Module.bsl")
|
module_bsl_file = os.path.join(module_dir, "Module.bsl")
|
||||||
save_text_bom(module_bsl_file, "")
|
if os.path.isfile(module_bsl_file):
|
||||||
info(f" Created: {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
|
# 7. Register form in parent object ChildObjects
|
||||||
register_form_in_object(type_name, obj_name, form_name)
|
register_form_in_object(type_name, obj_name, form_name)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Заимствование формы: вырезание привязок (Multiple*/Footer) + идемпотентность повторного заимствования",
|
"name": "Заимствование формы: вырезание привязок (Multiple*/Footer) + идемпотентность (модуль и uuid не затираются при повторе)",
|
||||||
"preRun": [
|
"preRun": [
|
||||||
{
|
{
|
||||||
"script": "meta-compile/scripts/meta-compile",
|
"script": "meta-compile/scripts/meta-compile",
|
||||||
@@ -34,6 +34,12 @@
|
|||||||
{
|
{
|
||||||
"script": "cfe-borrow/scripts/cfe-borrow",
|
"script": "cfe-borrow/scripts/cfe-borrow",
|
||||||
"args": { "-ExtensionPath": "{workDir}/ext", "-ConfigPath": "{workDir}", "-Object": "Catalog.Товары.Form.ФормаЭлемента", "-BorrowMainAttribute": "Form" }
|
"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.ФормаЭлемента" },
|
"params": { "extensionPath": "ext", "object": "Catalog.Товары.Form.ФормаЭлемента" },
|
||||||
|
|||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
&НаСервере
|
||||||
|
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||||||
|
// пользовательский код — не должен затираться повторным заимствованием
|
||||||
|
КонецПроцедуры
|
||||||
Reference in New Issue
Block a user