Отложенная обработка события элемента управления в форме

Обновлено: 17.01.2008

При работе форм иногда возникает необходимость выполнить длительное действие в ответ на какое-либо событие, полученное от пользователя (например: отображение остатков товаров на складах при позиционировании в списке справочника Товары). Однако, длительная операция, выполняемая в ответ на часто возникающее событие (например: на событие ПриАктивизацииСтроки списка), может серьезно осложнить работу с формой или даже сделать ее невозможной.

Решением данной проблемы может служить перенос выполнения длительной операции в явно вызываемое действие (например: перенос действия в обработчик события Выбор). Это позволит избавиться от задержек, связанных со случайным инициированием события, однако, данное решение требует явного действия от пользователя, что может негативно сказаться на скорости работы с формой.

Альтернативным способом решения проблемы может служить отложенное выполнение длительного действия в обработчике ожидания.

Пример: обновление информации об остатках товаров на складах при позиционировании в списке справочника Товары.

Копировать в буфер обмена
Процедура ОбработкаОжидания() Экспорт 
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	УчетНоменклатурыОстатки.Склад,
	|	УчетНоменклатурыОстатки.КоличествоОстаток
	|ИЗ
	|	РегистрНакопления.УчетНоменклатуры.Остатки(, Номенклатура = &Ссылка) КАК УчетНоменклатурыОстатки";
	Запрос.УстановитьПараметр("Ссылка", ЭлементыФормы.СправочникСписок.ТекущаяСтрока);
	Результат = Запрос.Выполнить().Выгрузить();
	ЭлементыФормы.Остатки.Значение = Результат; 
	ЭлементыФормы.Остатки.СоздатьКолонки();
КонецПроцедуры	

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

В данном примере в обработчике события ПриАктивизацииСтроки производится подключение обработчика ожидания ОбработкаОжидания(), в котором собственно и производится сбор информации об остатках товаров. Подключение обработчика выполняется таким образом, чтобы действие выполнилось приблизительно через 0.5 секунды после вхождения системы в состояние ожидания. Подключенный обработчик ожидания будет вызван один раз, а затем отключен до следующей обработки события ПриАктивизацииСтроки - это достигается установкой в значение Истина третьего параметра метода ПодключитьОбработчикОжидания().

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