При разработке расширений конфигураций разработчики часто сталкиваются с ситуацией, когда типовой обработчик события формы требуется доработать точечно с сохранением контроля над изменениями в будущих релизах. Однако при попытке добавить процедуру как обработчик события вариант «Вызывать вместо (с контролем)» в мастере платформы оказывается недоступным. Выясним причину такого поведения платформы 1С и разберем правильный способ решения этой задачи.
Проанализируем архитектурное устройство механизмов расширения кода в платформе 1С:Предприятие. В платформе разделены два принципиально разных уровня модификации логики:
&Перед, &После или &Вместо. Платформа управляет очередью вызовов обработчиков на уровне интерфейсного каркаса, поэтому сравнение текста процедуры с эталоном здесь изначально не заложено.&ИзменениеИКонтроль проверяет совпадение немодифицированных строк исходной процедуры с типовой конфигурацией с помощью инструкций препроцессора #Вставка и #Удаление.Попытка вручную прописать директиву &ИзменениеИКонтроль над процедурой, которая в свойствах формы зарегистрирована именно как перехват события, приведет к конфликту логики платформы: система не сможет корректно валидировать неизменность оригинального кода при обновлении или обработает вызов некорректно.
Если нам необходимо точечно изменить код типового события формы и контролировать его обновление, рассмотрим пошаговый алгоритм правильной реализации:
В модуле формы расширения платформа автоматически сгенерирует заготовку процедуры с директивой &ИзменениеИКонтроль и полным телом исходного метода. Посмотрим на пример оформления такого кода:
&Вместо("ПриСозданииНаСервере")
&ИзменениеИКонтроль("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Типовой неизменяемый код процедуры
Элементы.ГруппаРеквизитов.Видимость = Истина;
#Вставка
// Наша доработка в расширении
Элементы.ДополнительноеПоле.Доступность = Ложь;
#КонецВставки
КонецПроцедуры
Разберем, как отработает платформа при наступлении события в пользовательском режиме:
&ИзменениеИКонтроль, платформа исполняет модифицированный код из модуля расширения.Таким образом, логика события отрабатывает штатно, а разработчик получает полноценный контроль над изменениями кода.
При использовании данного подхода обратим внимание на следующие правила: