본문으로 건너뛰기
cccskills
무료GitHub에 공개

cfe-patch-method

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

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(3)

  • SKILL.md12.4 KB
  • scripts/cfe-patch-method.ps165.0 KB
  • scripts/cfe-patch-method.py65.2 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

/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Имя перехватываемого методаобязат. для генерации
InterceptorTypeBefore / After / Instead / ModificationAndControlобязат. для генерации
CheckПроверить контролируемые методы на дрейф (только отчёт)—
ActualizeАктуализировать дрейфнувшие контролируемые методы—

Формат 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
CommonForm.XCommonForms/X/Ext/Form/Module.bsl
Document.X.ObjectModuleDocuments/X/Ext/ObjectModule.bsl
Document.X.Form.YDocuments/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>

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

cf-edit

무료

Точечное редактирование конфигурации 1С. Используй когда нужно изменить свойства конфигурации, добавить или удалить объект из состава, настроить роли по умолчанию, поменять раскладку панелей, настроить начальную страницу

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Nikolay-Shirokov/cc-1c-skills7182026년 10월 22일 업데이트

cf-info

무료

Анализ структуры конфигурации 1С — свойства, состав, счётчики объектов. Используй для обзора конфигурации — какие объекты есть, сколько их, какие настройки

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Nikolay-Shirokov/cc-1c-skills7182026년 10월 22일 업데이트

cf-init

무료

Создать пустую конфигурацию 1С (scaffold XML-исходников). Используй когда нужно начать новую конфигурацию с нуля

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Nikolay-Shirokov/cc-1c-skills7182026년 10월 22일 업데이트

Валидация конфигурации 1С. Используй после создания или модификации конфигурации для проверки корректности

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Nikolay-Shirokov/cc-1c-skills7182026년 10월 22일 업데이트

Заимствование объектов из конфигурации 1С в расширение (CFE). Используй когда нужно перехватить метод, изменить форму или добавить реквизит к существующему объекту конфигурации

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Nikolay-Shirokov/cc-1c-skills7182026년 10월 22일 업데이트

cfe-diff

무료

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

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Nikolay-Shirokov/cc-1c-skills7182026년 10월 22일 업데이트

Nikolay-Shirokov의 스킬 모두 보기

이 스킬의 문제 신고