---
name: cfe-patch-method
description: Генерация перехватчика процедуры в расширении 1С (CFE). Используй для Before/After-перехвата существующей процедуры без параметров у заимствованного объекта
argument-hint: -ExtensionPath <path> -ModulePath "Catalog.X.ObjectModule" -MethodName "ОбновитьДанные" -InterceptorType Before
allowed-tools:
  - Bash
  - Read
  - Glob
---

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

## MCP routing

- **Отдельной канонической операции генерации перехватчика нет.** Подготовленный
  BSL записывается через `unica.apply` операциями `code.insert` и `code.replace`
  по маршруту [code-patch](../code-patch/SKILL.md).
- У заимствованного объекта запись BSL также подключает модуль: недостающее
  состояние `PropertyState=Extended` добавляется в дескриптор той же
  транзакцией. Корректное состояние сохраняется без изменения, несовместимое
  вызывает отказ до записи. Вручную помечать поддержанный модуль в XML не нужно.
- Не зови внутренние адаптеры напрямую: они спрятаны за MCP `unica`.
- Готовность проверяет `unica.check`, результат читает `unica.view` по адресу.

Шаблоны этого навыка относятся к `Before`/`After` — `&Перед`/`&После`
существующей процедуры без параметров. Они не выводят автоматически подпись
функции или процедуры с параметрами и не описывают `&Вместо` или
`&ИзменениеИКонтроль`. Это граница шаблонов, а не ограничение записи BSL
через `unica.apply`.

## Порядок работы

1. Прочитай исходную процедуру через `unica.view`: проверь её подпись и
   контекст компиляции. Заимствуй объект в расширение по
   [cfe-borrow](../cfe-borrow/SKILL.md), если он ещё не заимствован.
2. Найди логический адрес модуля расширения. Подготовь BSL с нужным
   декоратором, префиксом имён этого расширения и контекстом исходной
   процедуры. В примерах ниже имена и префикс условные.
3. Получи план `unica.apply` с `at` и `ops`: новый перехватчик добавляет
   `code.insert`, существующий изменяет `code.replace` по его адресу в
   расширении. Проверь план BSL и, если состояния модуля ещё нет, добавление
   `PropertyState` в XML. Предпросмотр не записывает ни один файл.
4. Исполни сохранённый план вызовом только с `executionToken`. Прочитай
   результат через `unica.view`, выполни `unica.check` на модуле и на корне
   расширения (`ext:Configuration`, подставив имя своего набора).

`unica.check` проверяет исходники. Успешная структурная проверка не означает,
что перехватчик уже выполнен платформой в целевом сценарии.

## Примеры

### Перехват Перед в модуле объекта

Параметры иллюстрации; это не содержимое BSL-файла и не аргументы `unica.apply`:

```json
{
  "ExtensionPath": "src",
  "ModulePath": "Catalog.Контрагенты.ObjectModule",
  "MethodName": "ОбновитьДанные",
  "InterceptorType": "Before"
}
```

### Перехват обычной процедуры формы После на клиенте

Параметры иллюстрации; это не содержимое BSL-файла и не аргументы `unica.apply`:

```json
{
  "ExtensionPath": "src",
  "ModulePath": "Document.Заказ.Form.ФормаДокумента",
  "MethodName": "ОбновитьОтображение",
  "InterceptorType": "After",
  "Context": "НаКлиенте"
}
```

### Перехват процедуры общего модуля

Параметры иллюстрации; это не содержимое BSL-файла и не аргументы `unica.apply`:

```json
{
  "ExtensionPath": "src",
  "ModulePath": "CommonModule.ОбщийМодуль",
  "MethodName": "ОбновитьДанные",
  "InterceptorType": "Before"
}
```
## Генерируемый код (Before)

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