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

SkillAI & models

This skill gives your AI working knowledge of method interceptors in 1C configuration extensions (CFE). Once added, your AI can wrap a borrowed object's method with code that runs before, after, or instead of the original, and re-check the wrapper against the original after the main configuration is updated.

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

After adding the skill, tell your AI which borrowed method you want to intercept and whether the new code should run before, after, or instead of the original. It will then write the wrapper for your extension.

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

What your AI can do with it

  • Intercept a method of a borrowed object in a 1C extension
  • Add code that runs before the original method
  • Add code that runs after the original method
  • Replace the original method's code with your own
  • Check a wrapper against the original after the main configuration is updated

What this skill tells your AI

The instructions your AI receives, as published by desko77/claude-code-skills-1c 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
61
Forks
14
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
x-1c-cfe-patch-method
Source
github.com/desko77/claude-code-skills-1c