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