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