Как заменить вызов типовой обработки на свою собственную в 1С без изменения конфигурации

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе сопровождения типовых конфигураций «1С:Предприятие 8.3» часто возникает ситуация, когда функционал стандартной обработки не удовлетворяет потребностям пользователей. При этом критически важно сохранить конфигурацию на поддержке, не внося изменения непосредственно в основную ветку разработки. Разберем подробно, как можно элегантно подменить типовую обработку на доработанную, используя современные механизмы платформы.

Метод 1. Использование расширений и аннотации &Вместо

Самый распространенный и гибкий способ — это использование механизма расширений конфигурации. Этот метод позволяет перехватить выполнение процедуры или функции в модуле типовой обработки и выполнить свой код. Проанализируем, как это реализовать на практике.

Рассмотрим алгоритм действий по шагам:

  1. Создание расширения. Если в базе еще нет расширения для доработок, создадим его через меню «Конфигурация» — «Расширения конфигурации».
  2. Добавление объекта в расширение. Найдем в дереве объектов основную обработку, логику которой нужно изменить. Нажмем правую кнопку мыши и выберем пункт «Добавить в расширение». Обратите внимание, что добавлять нужно не только саму обработку, но и конкретный метод (процедуру или функцию), который отвечает за выполнение нужных действий.
  3. Применение аннотации. В модуле расширения для выбранного метода автоматически будет создана заготовка с аннотацией &Вместо.

Посмотрим на пример кода, который полностью заменяет логику типовой процедуры:


&Вместо("ВыполнитьДействие")
Процедура Расш1_ВыполнитьДействие(Параметр1)
    // Вместо вызова стандартной логики, пишем свою
    Сообщить("Выполняется доработанная логика обработки!");
    
    // Если нам нужно вызвать свою форму вместо типовой:
    ОткрытьФорму("Обработка.ТиповаяОбработка.Форма.МояНоваяФорма");
КонецПроцедуры

Важный нюанс: если мы используем &Вместо и не вызываем метод ПродолжитьВызов(), то оригинальный код типовой конфигурации выполнен не будет. Это и есть «чистая» подмена. Однако помните, что количество и типы параметров в вашей процедуре расширения должны строго совпадать с оригиналом, иначе система выдаст ошибку при запуске.

Метод 2. Подмена основной формы через расширение

Если задача заключается не только в изменении алгоритмов, но и в полной переработке интерфейса, мы можем подменить основную форму обработки. Выясним, как это сделать программно-аппаратным способом в рамках расширения.

Рассмотрим последовательность действий:

  1. Добавляем типовую обработку в расширение.
  2. Внутри расширения создаем новую форму для этой обработки (например, с именем ФормаДоработанная).
  3. Переходим в свойства обработки внутри расширения.
  4. В поле «Основная форма» выбираем нашу новую форму ФормаДоработанная.

Теперь, когда в любом месте конфигурации будет вызываться команда ОткрытьФорму("Обработка.ИмяТиповойОбработки.Форма") без указания конкретного имени формы, система автоматически подставит форму из расширения. Это наиболее «безопасный» способ для обновлений, так как мы не вмешиваемся в код модулей напрямую.

Метод 3. Перехват команды открытия через модуль менеджера

Иногда вызов обработки инициируется программно через создание объекта. В этом случае мы можем расширить модуль менеджера обработки. Проанализируем ситуацию, когда нам нужно вмешаться в процесс формирования данных перед открытием.

Мы можем использовать аннотацию &После для процедур, подготавливающих данные. Например, в модуле менеджера часто встречаются экспортные процедуры инициализации параметров печати или заполнения. Рассмотрим пример:


&После("СформироватьПечатныеФормы")
Процедура Расш1_СформироватьПечатныеФормы(ПараметрыТиповые)
    // Здесь мы можем изменить результат работы типового кода
    // или перенаправить пользователя на другой алгоритм
    ПараметрыТиповые.Вставить("ИспользоватьСвойАлгоритм", Истина);
КонецПроцедуры

Метод 4. Использование механизмов БСП (Библиотека стандартных подсистем)

Если ваша конфигурация построена на базе БСП (как большинство современных решений 1С:ERP, УТ 11, БП 3.0), у нас есть еще один мощный инструмент — Дополнительные отчеты и обработки. Разберем этот вариант подробнее.

В справочнике «Дополнительные отчеты и обработки» можно зарегистрировать свою внешнюю обработку. В некоторых случаях типовой функционал позволяет переопределить стандартные команды через механизм МодификацияКонфигурацииПереопределяемый. Это требует написания небольшого кода в расширении, который будет подменять ссылки на команды в интерфейсе.

Основные преимущества использования БСП:

Риски и рекомендации при использовании &Вместо

Проанализируем возможные проблемы, с которыми можно столкнуться при использовании аннотации &Вместо. Во-первых, при обновлении конфигурации поставщиком может измениться количество аргументов в перехватываемой процедуре. В этом случае расширение «отвалится», и база не запустится в пользовательском режиме до тех пор, пока вы не приведете количество параметров в соответствие.

Во-вторых, следует учитывать приоритетность расширений. Если в системе установлено несколько расширений, влияющих на одну и ту же процедуру с аннотацией &Вместо, выполнится только одно — то, которое имеет более высокий приоритет (обычно последнее в списке или в зависимости от области применения).

Посмотрим на рекомендации по минимизации рисков:

  1. Старайтесь использовать &После или &Перед, если логика позволяет не заменять метод целиком.
  2. Если используете &Вместо, всегда проверяйте актуальность сигнатуры метода после каждого обновления конфигурации.
  3. Документируйте изменения в комментариях внутри расширения, чтобы другие разработчики понимали причину подмены типового функционала.

Подводя итог, можно сказать, что механизм расширений предоставляет исчерпывающий набор инструментов для подмены типовых обработок. Выбор конкретного метода зависит от того, что именно нужно изменить: визуальную часть (подмена формы), программный алгоритм (аннотация &Вместо) или способ вызова в интерфейсе (перехват команд).

← На главную