1CLenta.ru  

Переопределение процедур и функций в расширении конфигурации

Настройка системы     15.01.2018 13:55     32930

Основная информация о механизме расширений описана в статье Расширения конфигураций 1С для платформы 8.3.6.

Переопределение процедур и функций (событий)


При переопределении событий, имя процедуры состоит из:
Расш1_ (Наименование расширения)
ПриОткрытии (Наименование переопределяемого события)
Перед, После, Вместо (Порядок выполнения)

&НаКлиенте
Процедура Расш1_ПриОткрытииПеред(Отказ)
//Программный код
//Программный код
//Программный код
КонецПроцедуры

&НаКлиенте
Процедура Расш1_ПриОткрытииПосле(Отказ)
//Программный код
//Программный код
//Программный код
КонецПроцедуры

&НаКлиенте
Процедура Расш1_ПриОткрытииВместо(Отказ)
//Программный код
//Программный код
//Программный код
КонецПроцедуры


Переопределение процедур и функций (не событий)


Начиная с версии платформы 8.3.9 в расширениях модулей стало доступно переопределение процедур и функций. Для переопределения существуют специальные конструкции (Аннотации) встроенного языка, которые задают порядок вызова методов.

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

&Перед - означает что процедура "РассчитатьОстаткиСвоя" будет выполнена перед вызовом "РассчитатьОстатки".
&Перед("РассчитатьОстатки")
Процедура РассчитатьОстаткиСвоя()
//Программный код
//Программный код
//Программный код
КонецПроцедуры

&После - означает что процедура "РассчитатьОстаткиСвоя" будет выполнена после вызова "РассчитатьОстатки".
&После("РассчитатьОстатки")
Процедура РассчитатьОстаткиСвоя()
//Программный код
//Программный код
//Программный код
КонецПроцедуры

&Вместо - означает что процедура "РассчитатьОстаткиСвоя" будет выполнена вместо "РассчитатьОстатки".
&Вместо("РассчитатьОстатки")
Процедура РассчитатьОстаткиСвоя()
//Программный код
//Программный код
//Программный код
КонецПроцедуры

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

&Вместо("РассчитатьОстатки")
Функция РассчитатьОстаткиСвоя(Параметр)
Значение = ПродолжитьВызов(Параметр)
//Программный код
//Программный код
//Программный код
Возврат Значение;
КонецФункции

Комментарии (1)

1. BatiaevYuri  31.08.2023 16:10  
Добрый день! Подскажите разницу, точнее правильно ли я понимаю использование метода ПродолжитьВызов()
&Вместо("СформироватьДвиженияСторноНаСервере")
Процедура Расш1_СформироватьДвиженияСторноНаСервере()
// ... наш код... // это типа &Перед?
ПродолжитьВызов();
КонецПроцедуры

&Вместо("СформироватьДвиженияСторноНаСервере")
Процедура Расш1_СформироватьДвиженияСторноНаСервере()
ПродолжитьВызов();
// ... наш код... // это типа &После?
КонецПроцедуры

&Вместо("СформироватьДвиженияСторноНаСервере")
Процедура Расш1_СформироватьДвиженияСторноНаСервере()
// ... наш код... // это типа &Вместо?
КонецПроцедуры


&Вместо("СформироватьДвиженияСторноНаСервере")
Процедура Расш1_СформироватьДвиженияСторноНаСервере()
// ... наш код... // это типа &Перед?
ПродолжитьВызов(); // это выполняется типовой код
// ... наш код... // это типа &После?
КонецПроцедуры