<< All versions

Skill v1.0.1

Automated scan100/100
ingvarconsulting/unica/cfe-patch-method

+1 new

──Details
PublishedAugust 11, 2026 at 07:23 AM
Content Hashsha256:4e2039bd0e37dad0...
Git SHA9d2cfeb3a576
Bump Typepatch
Compare with v1.0.0
──Files
Files (1 file, 8.4 KB)
SKILL.md8.4 KBactive
SKILL.md · 187 lines · 8.4 KB

version: "1.0.1" 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

  • Preferred path: use MCP unica tool unica.cfe.patch_method; unica owns XML/JSON DSL work and refreshes related workspace caches after mutations.
  • Do not call internal MCP/CLI adapters directly. They are hidden behind unica and synchronized by the orchestrator.
  • Execution path: call MCP unica tool unica.cfe.patch_method; skill-local operation scripts are not part of the workflow.
  • For mutating operations, pass dryRun: false only when the user explicitly requested the change; otherwise keep the default dry run.

Генерирует .bsl файл с декоратором &Перед или &После для заимствованного объекта расширения. Создаёт файл или дописывает в существующий и в той же атомарной транзакции помечает соответствующее свойство модуля как xr:State=Extended в XML-дескрипторе. Для заимствованной формы это состояние уже создаёт cfe.borrow, поэтому повторная XML-запись идемпотентна.

Предусловие

Объект должен быть заимствован в расширение (/cfe-borrow) и зарегистрирован в его Configuration.xml. Для формы также обязательны заимствованные wrapper и Form.xml. Инструмент использует непустой NamePrefix расширения для имени процедуры и отказывает до записи, если ownership или профиль 2.20 не подтверждены.

Если дескриптор уже содержит несовместимое или дублирующее состояние того же свойства, инструмент отказывает до записи BSL. При конкурентном изменении дескриптора или модуля транзакция также завершается без частичной публикации.

Текущий v1 поддерживает только существующую процедуру без параметров. Он не читает исходный модуль базовой конфигурации и поэтому не доказывает наличие и сигнатуру метода. Перед вызовом нужно самостоятельно убедиться, что MethodName — реальная процедура без параметров. Функции, параметры, ModificationAndControl, Around и специальные form-handler semantics будут спроектированы отдельно.

Параметры

ПараметрОписаниеПо умолчанию
ExtensionPathПуть к расширению (обязат.)—
ModulePathПуть к модулю (обязат.)—
MethodNameИмя перехватываемой процедуры без параметров (обязат.)—
InterceptorTypeBefore / After (обязат.)—
ContextЯвная директива контекста, если она допустима для роли модулясм. ниже
IsFunctionЗарезервировано; в v1 допускается только falsefalse

Контекст

  • Для ObjectModule, ManagerModule, RecordSetModule и

ValueManagerModule параметр Context не указывается, директива не генерируется.

  • Для CommonModule отсутствие Context сохраняет контексты, заданные

свойствами модуля. НаСервере допустимо только при Server=true, а НаКлиенте — при включённом клиентском контексте.

  • Для модуля формы по умолчанию используется НаСервере; также допустимы

НаКлиенте и НаСервереБезКонтекста.

Формат ModulePath

Ниже приведены только репрезентативные примеры. Точная матрица EDT 8.3.27, принятая текущей грамматикой, содержит 51 допустимое сочетание типа и роли модуля. Они сводятся к шести физическим BSL-компоновкам: CommonModule, ObjectModule, ManagerModule, RecordSetModule, Form и ValueManagerModule.

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
Constant.X.ValueManagerModuleConstants/X/Ext/ValueManagerModule.bsl
Document.X.ObjectModuleDocuments/X/Ext/ObjectModule.bsl
Document.X.Form.YDocuments/X/Forms/Y/Ext/Form/Module.bsl

Таблица не является полным перечнем 51 пути. Роли доступны только для типов, где они объявлены платформой 8.3.27.

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

InterceptorTypeДекораторНазначение
Before&ПередКод до вызова оригинального метода
After&ПослеКод после вызова оригинального метода

MCP вызов

json
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "unica.cfe.patch_method",
"arguments": {
"cwd": "<workspace>",
"ExtensionPath": "src/extensions/MyExtension",
"ModulePath": "Catalog.Контрагенты.ObjectModule",
"MethodName": "ОбновитьДанные",
"InterceptorType": "Before",
"IsFunction": false,
"dryRun": false
}
}
}

Примеры

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

json
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "unica.cfe.patch_method",
"arguments": {
"cwd": "<workspace>",
"ExtensionPath": "src",
"ModulePath": "Catalog.Контрагенты.ObjectModule",
"MethodName": "ОбновитьДанные",
"InterceptorType": "Before",
"dryRun": false
}
}
}

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

json
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "unica.cfe.patch_method",
"arguments": {
"cwd": "<workspace>",
"ExtensionPath": "src",
"ModulePath": "Document.Заказ.Form.ФормаДокумента",
"MethodName": "ОбновитьОтображение",
"InterceptorType": "After",
"Context": "НаКлиенте",
"dryRun": false
}
}
}

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

json
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "unica.cfe.patch_method",
"arguments": {
"cwd": "<workspace>",
"ExtensionPath": "src",
"ModulePath": "CommonModule.ОбщийМодуль",
"MethodName": "ОбновитьДанные",
"InterceptorType": "Before",
"dryRun": false
}
}
}

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

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