Последовательность событий установки флажка и активизации строки. УФ

В процессе работы с проектом, разбираясь в чужом коде, обнаружил странную проблему — если поставить галочку, то отрабатывает логика не текущей строки, а предыдущей, которая была активна до установки галочки.

Например, при работе в списке групп при пометке группы показываются все товары из этой группы. А получалось, что я ставлю пометку на новую группу, а показываются товары той группы, в которой была строка списка групп до установки пометки.

Проверка отладчиком показала, что сначала вызывается событие активизации строки, а потом только событие изменения поля — так и должно быть.

В чем же дело?

Оказалось, что активизация строки обрабатывается не сразу, а через подключение обработчика ожидания. Я сталкивался с таким подходом и сам его применял в управляемых формах. Правда, зачем, не помню — но что-то там не все хорошо с работой непосредственно в событии активизации строки.

Тогда я сделал аналогично — в событии при изменения поля тоже подключил обработчик. Если время срабатывания одинаковое, то обработчики вызываются в том порядке, в каком были подключены.

После этого глюк исчез. Код такой:

Потом ОбработатьАктивизациюСтроки, ОбработатьГруппыПометка

&НаКлиенте
Процедура ГруппыПриАктивизацииСтроки(Элемент)
	ПодключитьОбработчикОжидания("ОбработатьАктивизациюСтроки", 0.3, Истина);
КонецПроцедуры

&НаКлиенте
Процедура ГруппыПометкаПриИзменении(Элемент)
	ЭтаФорма.ПодключитьОбработчикОжидания("ОбработатьГруппыПометка", 0.3, Истина);
КонецПроцедуры


//--------------------------------------------------------------------------------

&НаКлиенте
Процедура ОбработатьАктивизациюСтроки()
  //Действия по активизации строки	
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьГруппыПометка()
	//Действия при установке пометки
КонецПроцедуры

Думаю 0.3 можно заменить на 0.1, но изначально стояло 0.3, решил не трогать то, что работает.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

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

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