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

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

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

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

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

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

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

 

3) в цикле:

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


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

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

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

2

См. также

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

Избранное Подписка Сортировка: Древо
В этой теме еще нет сообщений.
Оставьте свое сообщение