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

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

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

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

В чем же дело?

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

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

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

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

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

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


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

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

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

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

fixin

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

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

1 комментарий

  1. NetCl:

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

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

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