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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Комментарии

  • Moby 05.07.2018 11:51
    Спасибо! По "Варианту 2" заработало только после добавления ресурса в выбранные поля группировки строк. Не помню что до этого менял, может ресурс там и был когда-то.

    Подробнее...

     
  • MariNew 20.06.2018 15:36
    Отлично!!! У меня получилось!!!! СПАСИБО!

    Подробнее...

     
  • Ирина 09.06.2018 13:05
    Спасибо большое! Пригодилось.

    Подробнее...