При доработке типовых конфигураций, если требуется откорректировать функционал типовых процедур и функций, можно: либо внести изменения в типовой код процедуры или функции, оставив комментарий, либо воспользоваться механизмом расширения.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// ТИПОВОЙ КОД
// ....
// начала фрагмента 13.12.2020
// мой программный код
// конец фрагмента 13.12.2020
КонецПроцедуры
Когда выйдет новая версия типовой конфигурации, то возникнет необходимость обновления продуктивной информационной базы на эту новую версию. Если изменения вносились напрямую в типовую процедуру и функции, то потребуется перенести изменения в новую версию типовой процедуры или функции.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// ТИПОВОЙ КОД НОВОЙ ВЕРСИИ КОНФИГУРАЦИИ
// ....
// начала фрагмента 13.12.2020
// мой программный код
// конец фрагмента 13.12.2020
КонецПроцедуры
Если изменения были внесены через расширение, то есть вероятность, что оно может не заработать по причине отсутствия или изменения элементов типовой конфигурации, используемых в расширении. Здесь может потребоваться время для адаптации расширения под новую версию конфигурации.
В своей практике для подмены типовых процедур и функций в модулях управляемых форм я использую подмену типовых обработчиков через функцию УстановитьДействие()
Это позволяет разделить модуль управляемой формы на 2 блока:
- типовой программный код,
- новый программный код.
Такое разделение программного кода позволяет существенно снизить время обновления при выходе новой версии конфигурации, поскольку в типовых процедурах и функциях сохраняется типовой код, и при обновлении релиза просто принимается новый типовой код "как есть", а новый программный код типовой релиз не затрагивает.
При этом если требуется внести новый функционал в типовой обработчик события перед или после этого обработчика, то типовой код вообще не потребует корректировки. Если нужно заменить типовой обработчик, то аналогично - типовой обработчик не потребует корректировки. Изменение программного кода типового обработчика потребуется в случае, если изменение было выполнено в середине.
// ТИПОВОЙ ПРОГРАММНЫЙ КОД
// ...
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// ...
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
// ...
КонецПроцедуры
&НаСервере
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
// ...
КонецПроцедуры
// НОВЫЙ ПРОГРАММНЫЙ КОД
// процедура переопределение типового обработчика события "ПриСозданииНаСервере" формы
&НаСервере
Процедура нов_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// программный код ПОСЛЕ типовой функции
// ...
КонецПроцедуры
// процедура переопределение типового обработчика события "ПослеЗаписиНаСервере" формы
&НаСервере
Процедура нов_ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
// программный код ПЕРЕД типовой функцией
// ...
ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи);
КонецПроцедуры
&НаСервере
Процедура нов_ПередЗаписью(Отказ, ПараметрыЗаписи)
// типовой обработчик не вызываем
//ПередЗаписью(Отказ, ПараметрыЗаписи)
КонецПроцедуры
// процедура переопределяет типовые обработчики формы
&НаСервере
Процедура нов_УстановитьНовыеОбработчикиФормы()
Если Не ЭтаФорма.Параметры.Свойство("ДополнительныеПараметры") Тогда
Возврат;
КонецЕсли;
ОбработчикиФормы = Новый Массив;
ОбработчикиФормы.Добавить("ПриСозданииНаСервере");
ОбработчикиФормы.Добавить("ПослеЗаписиНаСервере");
ОбработчикиФормы.Добавить("ПередЗаписью");
Для каждого ОбработчикФормы Из ОбработчикиФормы Цикл
УстановитьДействие(ОбработчикФормы, "нов_" + ОбработчикФормы);
КонецЦикла;
КонецПроцедуры
// переопределение типовых обработчиков формы
нов_УстановитьНовыеОбработчикиФормы();