Кабинет
На этой странице

Рецепты

Расширение с перехватом метода

Цель — доработать поведение типового документа, не снимая конфигурацию с поддержки. Создать расширение, заимствовать документ РеализацияТоваровУслуг и перехватить его обработчик ОбработкаПроверкиЗаполнения своим методом с аннотацией &После.

обновлено 30.09.2026плагин 0.2.0 · EDT 2025.2Предложить правку или письмом

Предпосылки

  • Базовая конфигурация — проект УТ2020, в примерах он на поддержке поставщика: сам документ правится только через расширение.
  • Действует ключ или бесплатный доступ.
  • Имя проекта расширения, имя расширения и префикс — ваши: в примерах УТ2020.<Расширение> и <Префикс>_.

Шаги

1. Снапшот

snapshot_write
{ "operation": "create", "label": "до расширения" }

2. Проект расширения

project_write
{
  "operation": "create_extension",
  "project_name": "УТ2020.<Расширение>",
  "base_project": "УТ2020",
  "name_prefix": "<Префикс>_",
  "purpose": "Дополнение",
  "synonym": "<Синоним расширения>"
}

Расширение создаётся штатным сервисом EDT, как мастером «Новое расширение»: режим совместимости, язык и вариант встроенного языка берутся у базовой конфигурации. В ответе — 🟢 committed и имя нового проекта; дальше все вызовы с "project": "УТ2020.<Расширение>".

3. Заимствовать документ

metadata_action
{
  "project": "УТ2020.<Расширение>",
  "operation": "adopt",
  "fqn": "Document.РеализацияТоваровУслуг"
}

project — расширение, fqn — объект базовой конфигурации. Заимствование — законный способ дорабатывать объект, закрытый поставщиком.

4. Посмотреть исходный метод

code_read
{
  "project": "УТ2020",
  "module_fqn": "Document.РеализацияТоваровУслуг.ObjectModule",
  "operation": "method",
  "name": "ОбработкаПроверкиЗаполнения"
}

Чтение идёт из базовой конфигурации: агент видит сигнатуру и тело метода, который будет перехвачен.

5. Модуль объекта в расширении

code_action
{
  "project": "УТ2020.<Расширение>",
  "module_fqn": "Document.РеализацияТоваровУслуг.ObjectModule",
  "operation": "init_module"
}

Создаёт пустой модуль объекта заимствованного документа со стандартными областями.

6. Перехват — сначала предпросмотр

code_action
{
  "project": "УТ2020.<Расширение>",
  "module_fqn": "Document.РеализацияТоваровУслуг.ObjectModule",
  "operation": "add_hook",
  "kind": "После",
  "target_method": "ОбработкаПроверкиЗаполнения",
  "handler_name": "<Префикс>_ОбработкаПроверкиЗаполненияПосле",
  "body": "// дополнительная проверка расширения",
  "dry_run": true
}

Сигнатура обработчика читается из базовой конфигурации, аннотация &После("ОбработкаПроверкиЗаполнения") и параметры подставляются сами. Ответ 🔵 dry_run содержит Diff будущего текста и результат проверки синтаксиса; модуль не меняется. Повторите вызов без dry_run, чтобы записать. Для вида Вместо в тело автоматически добавляется вызов ПродолжитьВызов(…).

7. Убедиться, что перехват виден

code_graph
{
  "project": "УТ2020",
  "target": "Document.РеализацияТоваровУслуг.ObjectModule::ОбработкаПроверкиЗаполнения",
  "operation": "callers"
}

Граф вызовов проходит через границу проектов: перехват из расширения показан отдельным ребром со значком 🧩 и именем проекта расширения.

Проверка

  • validate с project: "УТ2020.<Расширение>" и fqn: "Документ.РеализацияТоваровУслуг" — ошибок нет.
  • В EDT модуль объекта документа в расширении содержит новый метод с аннотацией &После.
  • Проверка в работе — запустите сценарий записи документа в базе с расширением; при необходимости — Парная отладка.

Откат

snapshot_action
{ "operation": "restore", "snapshot_id": "<идентификатор снапшота из шага 1>" }

Откат возвращает файлы проектов, которые были в рабочей области на момент снапшота. Проект расширения, созданный после снапшота, откат не удаляет: если он не нужен, закройте его вызовом project_action с операцией detach и удалите его папку.

Нашли ошибку — предложите правку.обновлено 30.09.2026

Например: metadata_write, «порт занят», коллекционный адрес.

↑ ↓ выборEnter открыть/ или Ctrl K — открыть поиск