/cfe-patch-method - Генерация перехватчика метода
SkillDev toolsMethod 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.
No other account needed.
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 | Имя перехватываемого метода (обязат.) | - |
InterceptorType | Before / 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.ObjectModule | Catalogs/X/Ext/ObjectModule.bsl |
Catalog.X.ManagerModule | Catalogs/X/Ext/ManagerModule.bsl |
Catalog.X.Form.Y | Catalogs/X/Forms/Y/Ext/Form/Module.bsl |
CommonModule.X | CommonModules/X/Ext/Module.bsl |
Document.X.ObjectModule | Documents/X/Ext/ObjectModule.bsl |
Document.X.Form.Y | Documents/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