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