Рецепты
Расширение с перехватом метода
Цель — доработать поведение типового документа, не снимая конфигурацию с поддержки. Создать расширение, заимствовать документ РеализацияТоваровУслуг и перехватить его обработчик ОбработкаПроверкиЗаполнения своим методом с аннотацией &После.
Предпосылки
- Базовая конфигурация — проект
УТ2020, в примерах он на поддержке поставщика: сам документ правится только через расширение. - Действует ключ или бесплатный доступ.
- Имя проекта расширения, имя расширения и префикс — ваши: в примерах
УТ2020.<Расширение>и<Префикс>_.
Шаги
1. Снапшот
{ "operation": "create", "label": "до расширения" }2. Проект расширения
{
"operation": "create_extension",
"project_name": "УТ2020.<Расширение>",
"base_project": "УТ2020",
"name_prefix": "<Префикс>_",
"purpose": "Дополнение",
"synonym": "<Синоним расширения>"
}Расширение создаётся штатным сервисом EDT, как мастером «Новое расширение»: режим совместимости, язык и вариант встроенного языка берутся у базовой конфигурации. В ответе — 🟢 committed и имя нового проекта; дальше все вызовы с "project": "УТ2020.<Расширение>".
3. Заимствовать документ
{
"project": "УТ2020.<Расширение>",
"operation": "adopt",
"fqn": "Document.РеализацияТоваровУслуг"
}project — расширение, fqn — объект базовой конфигурации. Заимствование — законный способ дорабатывать объект, закрытый поставщиком.
4. Посмотреть исходный метод
{
"project": "УТ2020",
"module_fqn": "Document.РеализацияТоваровУслуг.ObjectModule",
"operation": "method",
"name": "ОбработкаПроверкиЗаполнения"
}Чтение идёт из базовой конфигурации: агент видит сигнатуру и тело метода, который будет перехвачен.
5. Модуль объекта в расширении
{
"project": "УТ2020.<Расширение>",
"module_fqn": "Document.РеализацияТоваровУслуг.ObjectModule",
"operation": "init_module"
}Создаёт пустой модуль объекта заимствованного документа со стандартными областями.
6. Перехват — сначала предпросмотр
{
"project": "УТ2020.<Расширение>",
"module_fqn": "Document.РеализацияТоваровУслуг.ObjectModule",
"operation": "add_hook",
"kind": "После",
"target_method": "ОбработкаПроверкиЗаполнения",
"handler_name": "<Префикс>_ОбработкаПроверкиЗаполненияПосле",
"body": "// дополнительная проверка расширения",
"dry_run": true
}Сигнатура обработчика читается из базовой конфигурации, аннотация &После("ОбработкаПроверкиЗаполнения") и параметры подставляются сами. Ответ 🔵 dry_run содержит Diff будущего текста и результат проверки синтаксиса; модуль не меняется. Повторите вызов без dry_run, чтобы записать. Для вида Вместо в тело автоматически добавляется вызов ПродолжитьВызов(…).
7. Убедиться, что перехват виден
{
"project": "УТ2020",
"target": "Document.РеализацияТоваровУслуг.ObjectModule::ОбработкаПроверкиЗаполнения",
"operation": "callers"
}Граф вызовов проходит через границу проектов: перехват из расширения показан отдельным ребром со значком 🧩 и именем проекта расширения.
Проверка
validateсproject: "УТ2020.<Расширение>"иfqn: "Документ.РеализацияТоваровУслуг"— ошибок нет.- В EDT модуль объекта документа в расширении содержит новый метод с аннотацией
&После. - Проверка в работе — запустите сценарий записи документа в базе с расширением; при необходимости — Парная отладка.
Откат
{ "operation": "restore", "snapshot_id": "<идентификатор снапшота из шага 1>" }Откат возвращает файлы проектов, которые были в рабочей области на момент снапшота. Проект расширения, созданный после снапшота, откат не удаляет: если он не нужен, закройте его вызовом project_action с операцией detach и удалите его папку.