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

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

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

Почему модуль обработки в расширении изначально пустой

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

В расширяющем модуле мы можем объявлять свои методы и перехватывать вызовы типовых процедур и функций с помощью специальных аннотаций.

Перехват логики кнопки с помощью аннотации &Вместо (режим совместимости 8.3.10 и выше)

Начиная с режима совместимости 8.3.10 (а для некоторых модулей с 8.3.9), платформа 1С предоставляет полноценный механизм перехвата процедур и функций. Чтобы изменить поведение кнопки формы или метода модуля обработки, выполним следующие шаги:

  1. Добавим требуемую форму обработки в расширение конфигурации.
  2. В дереве метаданных основной конфигурации откроем форму и найдем процедуру, отвечающую за нажатие кнопки (обработчик команды).
  3. Установим курсор на имя процедуры и воспользуемся контекстным меню, выбрав пункт Добавить в расширение, либо нажмем комбинацию клавиш Alt + Shift + F2.
  4. Конфигуратор предложит выбрать режим вызова: &Перед, &После или &Вместо. Для полной замены алгоритма выберем &Вместо.

Посмотрим на пример сформированного кода в расширяющем модуле формы:


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

Обратим внимание на ключевые особенности перехвата:

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

Варианты решения при режиме совместимости 8.3.8 и ниже

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

В этом случае задачу подмены логики кнопки можно решить альтернативными способами:

  1. Подмена команды на заимствованной форме:

    Заимствуем форму обработки в расширение. Создаем в расширении собственную команду с новым алгоритмом. Далее в свойствах типовой кнопки на форме меняем привязку к свойству ИмяКоманды на нашу новую команду либо скрываем оригинальную кнопку (Видимость = Ложь) и размещаем на форме новую кнопку.

  2. Подключение через механизм дополнительных отчетов и обработок (БСП):

    Если конфигурация использует Библиотеку Стандартных Подсистем, сохраняем встроенную обработку как внешний файл с расширением .epf. Вносим необходимые правки в код кнопки, прописываем экспортную функцию СведенияОВнешнейОбработке() и регистрируем файл в справочнике ДополнительныеОтчетыИОбработки. Это позволяет полностью переопределить работу функционала без изменения конфигурации.

  3. Точечное включение возможности изменения:

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

← На главную