Индикатор состояния выполнения обработки и остаточное время в строке состояния

Публикация № 1075822

Программирование - Работа с интерфейсом

4
Подходит для обычного приложения, но можно логику использовать для УФ, однако код придется несколько переделать. Удобно при выполнении больших обработок данных, когда требуется визуально отслеживать ход выполнения и оставшееся время.

1) на форму добавляем элемент Индикатор

2) в модуле перед циклом:

		ЭтаФорма.ЭлементыФормы.Индикатор1.Значение = 0;
		ЭтаФорма.ЭлементыФормы.Индикатор1.МаксимальноеЗначение = Выборка.Количество();
		ВремяНачала = ТекущаяДата();
		ПотраченоВремени = 0;
		ВремяЗамера = ТекущаяДата();

 

3) в цикле:

Если ЭтаФорма.ЭлементыФормы.Индикатор1.Значение = 0 Тогда
Выводить = Истина;
КонецЕсли; 
				
ЭтаФорма.ЭлементыФормы.Индикатор1.Значение = ЭтаФорма.ЭлементыФормы.Индикатор1.Значение + 1;
		
ОбщееВремяВыполнения = ТекущаяДата() - ВремяНачала; 
Если ТекущаяДата()-ВремяЗамера >= 30 Тогда
Выводить = Истина;
ВремяЗамера = ТекущаяДата();	
КонецЕсли; 
ВремяВыполненияОдного = ОбщееВремяВыполнения / ЭтаФорма.ЭлементыФормы.Индикатор1.Значение;		  		
Осталось = (ЭтаФорма.ЭлементыФормы.Индикатор1.МаксимальноеЗначение - ЭтаФорма.ЭлементыФормы.Индикатор1.Значение)*ВремяВыполненияОдного; 
Если Осталось>60 Тогда //
Если Выводить Тогда
СообщениеОсталось = Строка(Цел(Осталось/60))+ " мин., "+ Строка(Окр(60*(Осталось/60 - Цел(Осталось/60)),-1))+ " сек.";
Выводить = Ложь;
КонецЕсли; 
Иначе
СообщениеОсталось = Строка(Цел(Осталось))+" сек"; 
КонецЕсли; // 
Состояние(" "+Строка(ЭтаФорма.ЭлементыФормы.Индикатор1.Значение)+"  из "+Строка(ЭтаФорма.ЭлементыФормы.Индикатор1.МаксимальноеЗначение)+ ". Начало в "+Строка(ВремяНачала)+
". Осталось "+СообщениеОсталось); 


Да, не забываем указывать Прерывание:

	Пока Выборка.Следующий() Цикл
        ОбработкаПрерыванияПользователя();
    КонецЦикла;

Но только внутри выполняемого цикла. Примечание: данный метод работает только в клиентском приложении. При попытке вызова в фоновом задании произойдет Исключительная ситуация!

4

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. Pixar0000 18.06.19 16:44 Сейчас в теме
мне интересно, а зачем такой индикатор и чем он отличается от стандартных подходов?
2. myxins1989 47 19.06.19 09:07 Сейчас в теме
Код придется несколько переделать? Да у него совершенно другая логика. И добавлять по одному, зачем? Можно просто максимальное значение поставить 100, а индикатор вычислять делением текущего значения на максимальное. Хотя в целом подход понятен после статьи про оптимизацию, у которой даже комменты закрыты.
3. slayer-ekb 13 20.06.19 09:53 Сейчас в теме
Оставьте свое сообщение