Получаем доступ к событиям элементов формы дополнительных реквизитов на примере конфигурации "Управление торговлей 11.2".
Допустим, для документа "Поступление услуг и прочих активов" у нас создан дополнительный реквизит "Не выгружать при синхронизации" с типом "Булево". Задача: использовать событие элемента формы "При изменении".
Дополнительные реквизиты – штука тонкая. Они могут присутствовать на форме объекта, а могут и не присутствовать. Например, в конфигурации "Управление торговлей 11.2", когда мы открываем форму документа "Поступление услуг и прочих активов", дополнительные реквизиты там отсутствуют. Это можно видеть в отладчике. И только когда мы переходим на вкладку "Дополнительно", происходит отложенная инициализация формы и после этого дополнительные реквизиты появляются в форме.
В связи с таким поведением формы, нам придётся назначать обработчик для события элемента формы дополнительного реквизита программно. Сделаем это с помощью метода УстановитьДействие().
Как мы уже отметили, в УТ 11.2 в документе "Поступление услуг и прочих активов" дополнительные реквизиты появляются на форме при переходе на вкладку "Дополнительно". Переход обрабатывается в следующей процедуре, которая расположена в модуле формы документа:
&НаКлиенте Процедура ГруппаСтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница) // Текст процедуры КонецПроцедуры
В этой процедуре дополнительные реквизиты уже должны появиться на форме. Воспользуемся отладчиком. Поставим точку останова в конце процедуры и запустим отладку. Создадим условия для захода в точку останова. Далее в "Табло" найдём элемент формы необходимого нам дополнительного реквизита. Примерный его вид и расположение:
ЭтаФорма.Элементы.ДополнительныйРеквизитЗначение_AFD1AFD8xC18C
Метод УстановитьДействие() выполняется в контексте "На сервере", поэтому мы не можем использовать его в процедуре ГруппаСтраницыПриСменеСтраницы(), так как её контекст – "На клиенте". Значит, в конце процедуры мы дописываем вызов своей, серверной, процедуры, которая, собственно, и будет устанавливать обработчик для события "ПриИзменении" элемента формы.
&НаКлиенте Процедура ГруппаСтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница) // Текст процедуры УстановитьДействиеДляДопРеквизита(); КонецПроцедуры
В модуле формы создаём серверную процедуру:
&НаСервере Процедура УстановитьДействиеДляДопРеквизита() ЭтаФорма.Элементы.ДополнительныйРеквизитЗначение_AFD1AFD8xC18C.УстановитьДействие("ПриИзменении", "МойОбработчик"); КонецПроцедуры
В этой процедуре мы задали, что событие элемента формы "ПриИзменении" будет обрабатываться в процедуре с названием "МойОбработчик". Нам осталось только создать эту процедуру. Нужно учесть, что контекст её выполнения должен быть "На клиенте".
&НаКлиенте Процедура МойОбработчик() // Текст процедуры КонецПроцедуры
Вот вроде бы и всё.