/cfe-patch-method - Генерация перехватчика метода

SkillDev tools

Method hooks in a 1C extension (CFE). Use when you need to intercept a method of a borrowed object — code before, after, or instead of the original — or to verify against the original after the main configuration is updated.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the /cfe-patch-method - Генерация перехватчика метода skill

What this skill tells your AI

The instructions your AI receives, as published by desko77/cursor-1c-skills in skills/1c-cfe-patch-method/SKILL.md and read by ahel’s review.

Генерирует .bsl файл с декоратором перехвата для заимствованного объекта расширения. Создает файл, дописывает в существующий регион или, если перехватчик &ИзменениеИКонтроль уже стоит, сверяет его с оригиналом и переносит правки в новую редакцию метода.

Предусловие

Объект должен быть заимствован в расширение (/cfe-borrow). Скрипт читает NamePrefix из Configuration.xml расширения для формирования имени процедуры.

Параметры

ПараметрОписаниеПо умолчанию
ExtensionPathПуть к расширению (обязат.)-
ModulePathПуть к модулю (обязат.)-
MethodNameИмя перехватываемого метода (обязат.)-
InterceptorTypeBefore / After / Instead / ModificationAndControlобязателен вне -Check и -Actualize
ConfigPathИсходники основной конфигурации: оттуда берутся сигнатура, тело и директива компиляции-
ContextДиректива контекста модуля формыиз оригинала, иначе НаКлиенте
IsFunctionМетод - функция (когда ConfigPath не задан)false
CheckСверить перехватчики &ИзменениеИКонтроль со всеми оригиналами, ничего не записываяfalse
ActualizeТо же плюс перенос правок в новую редакцию оригиналовfalse

ModulePath принимается и как имя объекта (CommonModule.X), и как путь к файлу модуля (CommonModules/X/Ext/Module.bsl).

Формат ModulePath

ModulePathФайл
Catalog.X.ObjectModuleCatalogs/X/Ext/ObjectModule.bsl
Catalog.X.ManagerModuleCatalogs/X/Ext/ManagerModule.bsl
Catalog.X.Form.YCatalogs/X/Forms/Y/Ext/Form/Module.bsl
CommonModule.XCommonModules/X/Ext/Module.bsl
Document.X.ObjectModuleDocuments/X/Ext/ObjectModule.bsl
Document.X.Form.YDocuments/X/Forms/Y/Ext/Form/Module.bsl

Аналогично для Report, DataProcessor, InformationRegister и других типов.

Типы перехвата

InterceptorTypeДекораторНазначение
Before&ПередКод до вызова оригинального метода
After&ПослеКод после вызова оригинального метода
Instead&ВместоЗамена метода с явным ПродолжитьВызов
ModificationAndControl&ИзменениеИКонтрольКопия тела метода с маркерами #Вставка/#Удаление

Before и After к функции неприменимы: перехватчик обязан вернуть значение. Скрипт определяет вид метода по оригиналу и отказывает.

Сигнатура, тело и директива компиляции берутся из ConfigPath: платформа связывает перехватчик с оригиналом по имени и списку параметров. Охватывающее условие препроцессора (#Если Сервер Тогда) переносится в модуль расширения.

Сверка с оригиналом

После обновления основной конфигурации тело метода в ней меняется, а копия в &ИзменениеИКонтроль остается прежней. Повторный вызов с тем же методом пересобирает копию из новой редакции оригинала, размещая правки по двустороннему якорю - соседним строкам сверху и снизу.

ИсходЧто произошло
[АКТУАЛЕН]Оригинал не менялся, файл не тронут
[АКТУАЛИЗИРОВАН]Копия пересобрана, правки размещены по якорям
[ПЕРЕНЕСЕНО В ОСНОВНУЮ]Правки попали в основную конфигурацию, из расширения убраны
[АКТУАЛИЗИРОВАН-ЧАСТИЧНО]Якорь исчез: блок вынесен в конец тела с маркером [РЕСИНК-КОНФЛИКТ]

Комментарий разработчика рядом с поглощенным кодом в основную конфигурацию не переносится - об этом сообщается отдельной строкой.

-Check обходит все расширение и завершается ненулевым кодом при дрейфе, ничего не записывая - пригодно для проверки перед сборкой. -Actualize делает то же с записью.

Команда

powershell.exe -NoProfile -File skills/1c-cfe-patch-method/scripts/cfe-patch-method.ps1 -ExtensionPath src -ModulePath "Catalog.Контрагенты.ObjectModule" -MethodName "ПриЗаписи" -InterceptorType Before

Примеры

# Перехват &Перед на сервере
... -ExtensionPath src -ModulePath "Catalog.Контрагенты.ObjectModule" -MethodName "ПриЗаписи" -InterceptorType Before

# Перехват &После на клиенте
... -ExtensionPath src -ModulePath "Document.Заказ.Form.ФормаДокумента" -MethodName "ПослеЗаписиНаСервере" -InterceptorType After -Context "НаКлиенте"

# ИзменениеИКонтроль для функции
... -ExtensionPath src -ModulePath "CommonModule.ОбщийМодуль" -MethodName "ПолучитьДанные" -InterceptorType ModificationAndControl -ConfigPath C:\cfsrc\erp

# Сверка всех контролируемых методов после обновления конфигурации
... -ExtensionPath src -ConfigPath C:\cfsrc\erp -Check

# Сверка с переносом правок в новую редакцию
... -ExtensionPath src -ConfigPath C:\cfsrc\erp -Actualize

Генерируемый код (Before)

&НаСервере
&Перед("ПриЗаписи")
Процедура Расш1_ПриЗаписи
	// TODO: код перед вызовом оригинального метода
КонецПроцедуры

Signals

GitHub stars
57
Forks
13
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
x-1c-cfe-patch-method-desko77
Source
github.com/desko77/cursor-1c-skills