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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Комментарии

  • pavlo 18.09.2018 13:59
    У меня по второму варианту не получилось. При такой настройке появилась колонка построчно со словами названия колонки ресурса.

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

     
  • Altavista- 17.09.2018 20:51
    Не бесспорное решение: 1. В регистр логичнее добавить 2й ресурс ("вТрансфертныхЦенах"); 2. РС "Наценки"? Однозначно, нет. Это реквизит справочника; 3. Реквизита "Контрагент" в условии задачи тоже нет и ...

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

     
  • Андрей 02.08.2018 09:55
    Большое спасибо! По "Варианту 2": в выбранных полях группировки колонок (у меня их несколько) кроме поля самой колонки пришлось добавить и ресурс.

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