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

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

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

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

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

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

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

 

3) в цикле:

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