1С. Дополнительные реквизиты. Как получить доступ к событию «ПриИзменении» элемента формы дополнительного реквизита.

Получаем доступ к событиям элементов формы дополнительных реквизитов на примере конфигурации «Управление торговлей 11.2».

Допустим, для документа «Поступление услуг и прочих активов» у нас создан дополнительный реквизит «Не выгружать при синхронизации» с типом «Булево».  Задача: использовать событие элемента формы «При изменении».

Дополнительные реквизиты – штука тонкая. Они могут присутствовать на форме объекта, а могут и не присутствовать. Например, в конфигурации «Управление торговлей 11.2», когда мы открываем форму документа «Поступление услуг и прочих активов», дополнительные реквизиты там отсутствуют. Это можно видеть в отладчике. И только когда мы переходим на вкладку «Дополнительно», происходит отложенная инициализация формы и после этого дополнительные реквизиты появляются в форме.

В связи с таким поведением формы, нам придётся назначать обработчик для события элемента формы дополнительного реквизита программно. Сделаем это с помощью метода УстановитьДействие().

Как мы уже отметили, в УТ 11.2 в документе «Поступление услуг и прочих активов» дополнительные реквизиты появляются на форме при переходе на вкладку «Дополнительно». Переход обрабатывается в следующей процедуре, которая расположена в модуле формы документа:

&НаКлиенте
Процедура ГруппаСтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)

	// Текст процедуры

КонецПроцедуры

В этой процедуре дополнительные реквизиты уже должны появиться на форме. Воспользуемся отладчиком. Поставим точку останова в конце процедуры и запустим отладку. Создадим условия для захода в точку останова. Далее в «Табло» найдём элемент формы необходимого нам дополнительного реквизита. Примерный его вид и расположение:

ЭтаФорма.Элементы.ДополнительныйРеквизитЗначение_AFD1AFD8xC18C

Метод УстановитьДействие() выполняется в контексте «На сервере», поэтому мы не можем использовать его в процедуре ГруппаСтраницыПриСменеСтраницы(), так как её контекст – «На клиенте». Значит, в конце процедуры мы дописываем вызов своей, серверной, процедуры, которая, собственно, и будет устанавливать обработчик для события «ПриИзменении» элемента формы.

&НаКлиенте
Процедура ГруппаСтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)

	// Текст процедуры
	
	УстановитьДействиеДляДопРеквизита();
	
КонецПроцедуры

В модуле формы создаём серверную процедуру:

&НаСервере
Процедура УстановитьДействиеДляДопРеквизита()
		
	ЭтаФорма.Элементы.ДополнительныйРеквизитЗначение_AFD1AFD8xC18C.УстановитьДействие("ПриИзменении", "МойОбработчик");
	
КонецПроцедуры

В этой процедуре мы задали, что событие элемента формы «ПриИзменении» будет обрабатываться в процедуре с названием «МойОбработчик». Нам осталось только создать эту процедуру. Нужно учесть, что контекст её выполнения должен быть «На клиенте».

&НаКлиенте
Процедура МойОбработчик()
	
	// Текст процедуры
	
КонецПроцедуры

Вот вроде бы и всё.

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *