Skip to content
alyn
Nikolay-Shirokov

Cfe Patch Method skill

Генерация и актуализация перехватчика метода в расширении 1С (CFE). Используй когда нужно перехватить метод заимствованного объекта — вставить код до, после, вместо оригинала, изменить его тело (ИзменениеИКонтроль) — или актуализировать перехватчик после изменения оригинала

$npx skills add Nikolay-Shirokov/cc-1c-skills --skill cfe-patch-method
View this skill on GitHubNikolay-Shirokov/cc-1c-skills/.claude/skills/cfe-patch-method/SKILL.md
Pack stars
774
Pack installs
4.4k
Alyn Score
59/99
Updated
8 h ago
License
MIT
– views – installs via Alyn

Nikolay-Shirokov

Cfe Patch Method

Install Cfe Patch Method

Pick your agent. Every command is ready to paste.

$npx skills add Nikolay-Shirokov/cc-1c-skills --skill cfe-patch-method

The open skills CLI detects your agents (Claude Code, Cursor, Codex and 70+ more) and installs to the right folder. Add -g to install globally.

01

Install it

Run the command above, or upload the folder in Claude.

02

Ask naturally

Describe the task. Your agent loads cfe-patch-method when the request matches its description.

03

Name it if needed

If it does not trigger, say “use the cfe-patch-method skill”. In Codex, type $cfe-patch-method.

The skill itself

SKILL.md

FolderGitHub

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

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

Предусловие

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

Авто-определение ConfigPath

Если пользователь не указал -ConfigPath — попробуй определить автоматически:

  1. Прочитай .v8-project.json из корня проекта
  2. Разреши целевую базу (по имени, ветке или default — алгоритм из /db-list)
  3. Если у базы есть поле configSrc — используй как -ConfigPath
  4. Если configSrc нет — спроси у пользователя

Параметры

Параметр Описание По умолчанию
ExtensionPath Путь к расширению (обязат.) —
ConfigPath Путь к конфигурации-источнику обязат., кроме случая, когда ModulePath — путь к файлу
ModulePath Логическое имя (Тип.Имя.Модуль) или путь к файлу модуля .bsl обязат. для генерации
MethodName Имя перехватываемого метода обязат. для генерации
InterceptorType Before / After / Instead / ModificationAndControl обязат. для генерации
Check Проверить контролируемые методы на дрейф (только отчёт) —
Actualize Актуализировать дрейфнувшие контролируемые методы —

Формат 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
CommonForm.X CommonForms/X/Ext/Form/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 и других типов.

Вместо логического имени в ModulePath можно передать путь к файлу модуля-источника .bsl — тогда -ConfigPath указывать не нужно (оригинал читается прямо из этого файла). Путь модуля расширения определяется от типовой папки в пути автоматически.

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

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

Маркеры #Вставка / #Удаление (для ModificationAndControl)

&ИзменениеИКонтроль вставляет в перехватчик копию тела оригинала. Дальше отредактируй тело под свою доработку, помечая каждое изменение — платформа так отличает твою правку от неизменного оригинала:

  • Добавляешь код → оберни его #Вставка … #КонецВставки.
  • Удаляешь код оригинала → оберни удаляемые строки #Удаление … #КонецУдаления, но сами строки оставь между маркерами (платформа сверяет их с оригиналом).
  • Заменяешь → #Удаление старое #КонецУдаления сразу за ним #Вставка новое #КонецВставки.

Пример:

&ИзменениеИКонтроль("ПриЗаписи")
Процедура Расш_ПриЗаписи(Отказ)
	СуммаДокумента = РассчитатьСумму();
#Вставка
	// доработка: округляем
	СуммаДокумента = Окр(СуммаДокумента, 2);
#КонецВставки
#Удаление
	Записать();
#КонецУдаления
#Вставка
	ЗаписатьСПроверкой(Отказ);
#КонецВставки
КонецПроцедуры

Правила:

  • Маркеры — на отдельной строке с 0-й колонки (без отступа), даже внутри отступов и текста запроса (|…).
  • Незамеченные (unmarked) строки должны совпадать с оригиналом дословно — это и есть «контроль». Дословно — включая комментарии, регистр и пробелы внутри строки (Х = Х + 1 ≠ Х=Х+1); свободны только отступ и пустые строки. Если оригинал в конфигурации-источнике изменится, unmarked-контекст разойдётся → метод потребует актуализации (см. ниже; проверить пачкой — -Check).
  • Меняешь только свои #Вставка/#Удаление; чужой оригинал не трогай.

Актуализация

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

  • Проверить — -Check: отчёт по всем контролируемым методам расширения, ничего не пишет (exit 1, если есть дрейф или конфликт).
  • Актуализировать — -Actualize: переносит правки (#Вставка/#Удаление) на новый оригинал по всему расширению. Сузить область: -ModulePath — один модуль, + -MethodName — один метод. Для одного метода то же делает повторный вызов с -InterceptorType ModificationAndControl.

Статусы в выводе:

  • [АКТУАЛЕН] — оригинал не менялся, правок нет;
  • [АКТУАЛИЗИРОВАН] — тело обновлено по новому оригиналу, правки сохранены (в выводе — сводка);
  • [АКТУАЛИЗИРОВАН-ЧАСТИЧНО] — часть правок не удалось разместить (якорь изменился в новом оригинале). Они помечены // [РЕСИНК-КОНФЛИКТ] в модуле и не потеряны; путь к merge-воркспейсу — в выводе (начни с index.md, дальше по каждому конфликту его conflict.md, размести блоки вручную в .bsl расширения);
  • [ПЕРЕНЕСЕНО В ОСНОВНУЮ] — правка уже есть в новом оригинале (вставленный код внесён вендором) или удаляемый блок уже вырезан. Правка неактуальна — убирается из тела, дублировать/конфликтовать не нужно. Если так со всеми правками метода — перехватчик можно удалить. -Check этим не роняет exit.

Повторный вызов Before/After/Instead для уже перехваченного метода дубль не создаёт ([ПРОПУЩЕН]).

-Check смотрит исходники. Вердикт платформы — уже после загрузки в базу: /db-cfe-admin check.

Команда

powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/cfe-patch-method.ps1" -ExtensionPath src\cfe\extname -ConfigPath src\cf -ModulePath "Catalog.Контрагенты.ObjectModule" -MethodName "ПриЗаписи" -InterceptorType Before

Примеры

# Код перед записью
... -ExtensionPath src\cfe\extname -ConfigPath src\cf -ModulePath "Catalog.Контрагенты.ObjectModule" -MethodName "ПриЗаписи" -InterceptorType Before

# Перехват После на форме
... -ExtensionPath src\cfe\extname -ConfigPath src\cf -ModulePath "Document.Заказ.Form.ФормаДокумента" -MethodName "ПослеЗаписиНаСервере" -InterceptorType After

# Замена функции (ПродолжитьВызов)
... -ExtensionPath src\cfe\extname -ConfigPath src\cf -ModulePath "CommonModule.ОбщийМодуль" -MethodName "ПолучитьДанные" -InterceptorType Instead

# ИзменениеИКонтроль — копия тела для правки маркерами
... -ExtensionPath src\cfe\extname -ConfigPath src\cf -ModulePath "Document.РеализацияТоваров.ObjectModule" -MethodName "ОбработкаПроведения" -InterceptorType ModificationAndControl

# ModulePath как путь к файлу модуля-источника (без -ConfigPath)
... -ExtensionPath src\cfe\extname -ModulePath "src\cf\CommonModules\ОбщийМодуль\Ext\Module.bsl" -MethodName "ПолучитьДанные" -InterceptorType Instead

# Проверить все контролируемые методы расширения на дрейф
... -ExtensionPath src\cfe\extname -ConfigPath src\cf -Check

# Актуализировать дрейфнувшие контролируемые методы пачкой
... -ExtensionPath src\cfe\extname -ConfigPath src\cf -Actualize

Верификация

/cfe-validate <ExtensionPath> -ConfigPath <ConfigPath>

Tips for Cfe Patch Method

  • • Start a fresh session after installing so your agent picks up the new skill.
  • • This skill ships scripts. Read them before the first run, and run it in a project without secrets first.
  • • It is part of a pack with 30 skills. Install only the ones you need with --skill to keep triggers precise.
  • • If two skills overlap, mention the one you want by name.

Questions about Cfe Patch Method

What does the Cfe Patch Method skill do?

Генерация и актуализация перехватчика метода в расширении 1С (CFE). Используй когда нужно перехватить метод заимствованного объекта — вставить код до, после, вместо оригинала, изменить его тело (ИзменениеИКонтроль) — или актуализировать перехватчик после изменения оригинала

How do I install Cfe Patch Method?

Run "npx skills add Nikolay-Shirokov/cc-1c-skills --skill cfe-patch-method" in your project. The skills CLI installs it for Claude Code, Cursor, Codex and 70+ other agents. In Claude on the web, upload the skill folder as a ZIP under Customize > Skills.

Does Cfe Patch Method work in Cursor and Codex?

Yes. Cfe Patch Method uses the open SKILL.md format, so it works in Claude Code, Claude, Cursor, OpenAI Codex, Gemini CLI, GitHub Copilot and other agents that support agent skills.

Is Cfe Patch Method free?

Cfe Patch Method is open source on GitHub under the MIT license. It is free to install; check the license before commercial use.

Who made Cfe Patch Method?

Cfe Patch Method is published by Nikolay-Shirokov in the Nikolay-Shirokov/cc-1c-skills repository, together with 29 other skills.

Similar skills. From other creators.