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