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