Расчет времени до завершения операции с отображением индикатора состояния

Это кусок кода для отображения стандартного прогрессбара в УТ 10 с информированием расчетного оставшегося времени.

Иногда приходится создавать отчеты, время формирования которых достигает существенного объема. Конечно первое что приходит на ум это оптимизация кода с целью уменьшения времени расчетов, но бывают случаи, когда это невозможно и поэтому нужно оповестить пользователя о примерном времени формирования отчета/данных.

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

Подходит для УТ 10, УПП и без труда может быть оптимизирован под любые другие конфигурации.

Позаботьтесь о пользователях, отпустите их выпить чашку кофе, пока выполняется обработка. 


ФормаИндикатора = ПолучитьОбщуюФорму("ХодВыполненияОбработкиДанных");
ФормаИндикатора.НаименованиеОбработкиДанных = "Чтение данных";
ФормаИндикатора.КомментарийОбработкиДанных = "Выполнение запроса";
ФормаИндикатора.Открыть();
ФормаИндикатора.ЭлементыФормы.Индикатор.МаксимальноеЗначение = Выборка.Количество();
ВсегоОбъектов =  Выборка.Количество() ;
текПроцент = 0 ;
минОсталось = 0 ;
Прогноз = 0;
ВремяСтарта = ТекущаяДата() ;
СуммаЗаказа = 0 ;
КолВоЗаказа = 0 ;
Товары.Очистить();
Пока Выборка.Следующий() Цикл
Ном = Ном +1 ;
//формула
//минОсталось = минПрошло*100/текПроцентОстаток
//где
//текПроцент =  текЭлемент*100/ВсегоОбъектов ;
текПроцент  = Ном * 100 / ФормаИндикатора.ЭлементыФормы.Индикатор.МаксимальноеЗначение ;
минПрошло   = (ТекущаяДата () - ВремяСтарта)  ;
Прогноз =    минПрошло*100/текПроцент ;
минОсталось = Окр(Прогноз - минПрошло,0);
ФормаИндикатора.ЭлементыФормы.Индикатор.Значение = Ном;
ФормаИндикатора.КомментарийОбработкиДанных = "Обработка элемента (" + Ном + " из " + ВсегоОбъектов + ") " + "Осталось: "+минОсталось+" сек.";
ФормаИндикатора.ЭлементыФормы.КомментарийЗначения.Значение = Строка(Выборка.Номенклатура);//+"  Прошло: "+Окр(минПрошло,1)+ " мин.";
КонецЦикла;
ФормаИндикатора.Закрыть()   ;

2 Comments

  1. rus128

    все гениальное — просто!

    Reply
  2. Stamper

    а замером производительности «проходились» по выполнению?

    по моему опыту операция обработки интерфейса (Сообщить, вывод на форме) раз в 10 медленнее операции какого-нибудь действия. не стало ли в разы медленнее, но с информацией? =)

    Reply

Leave a Comment

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