gifts2017

Индикация процесса выполнения в управляемых формах для БСП без изменения конфигурации

Опубликовал Angry (Angry) в раздел Обработки - Универсальные обработки

Шаблон обработки, который покажет как сделать удобный для пользователя индикатор текущего выполнения длительной операции. При этом не потребует от Вам глубоких знаний в работе фоновых заданий.

Обработка сделана как шаблон, по мотивам http://infostart.ru/public/159607/ 

В отличии от предшественников данная обработа имеет преимущества:

1) Работает в последних версиях БСП, в УТ 11.1.2+ в частности

2) Оповещения отрабатывают через заданный промежуток времени, а не как в других наработках индикация выполнения расчитывала на удачливость программиста, который может угадать, а может и нет с количеством оповещений.

3) Фоновое задание не остается безконтрольно повисшим на сервере. При закрытии формы проверяется и в случае необходимости происходит завершение задания.

Скачать файлы

Наименование Файл Версия Размер
Обработка 95
.epf 9,82Kb
23.08.13
95
.epf 9,82Kb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Сергей (seermak) 26.08.13 09:04
ПодключитьОбработчикОжидания(<ИмяПроцедуры>, <Интервал>, <Однократно>)
=Подключает вызов указанной процедуры модуля управляемого приложения (модуля обычного приложения) или глобального общего модуля через определенный интервал времени. Вызов будет осуществляться только в "состоянии покоя", то есть в тот момент, когда программа не выполняет никаких действий.= т.е. при выполнении длительной процедуры вся эта конструкция работать не будет т.к. "состояние покоя" не предвидится, а запускать обработку как игрушку....
2. Angry (Angry) 27.08.13 02:23
(1) seermak, Эта обработка ориентирована на выполнение основной части в фоне на сервере. Потому клиент как раз таки будет простаивать.
В файловом варианте к стати надо потестить, особенно на 8.3
3. Александр Космачев (greystone) 04.08.14 14:30
&НаКлиенте
Процедура ВывестиПрогрессБар() //Индикатор


//&НаКлиенте
	//Перем ТекАдрессПрогрессБара;
		
	//&НаКлиенте
	//Процедура СоздатьДокументыКорректировкаДолга(Команда)
	//	
	//	СтруктураПрогресса = Новый Структура("ТекТекст, ТекПрогресс, ТекПояснение", "начало выполнения обработки", 0, "");
	//	ТекАдрессПрогрессБара = ПоместитьВоВременноеХранилище(СтруктураПрогресса, УникальныйИдентификатор);
	//	ПодключитьОбработчикОжидания("ВывестиПрогрессБар", 1);
	//	
	//	ЕстьОшибки = СоздатьДокументыКорректировкаДолгаНаСервере(ТекАдрессПрогрессБара);
	//	Если ЕстьОшибки Тогда
	//		Предупреждение("Есть ошибки. Не все документы сформированы", 15);
	//	КонецЕсли;
	//	
	//	ОтключитьОбработчикОжидания("ВывестиПрогрессБар");
	//	
	//КонецПроцедуры

	//&НаСервере
	//Функция СоздатьДокументыКорректировкаДолгаНаСервере(ТекАдрессПрогрессБара)
	//	
	//	Сообщение = Новый СообщениеПользователю;
	//	Сообщение.Текст = "Начали создавать документы!";
	//	//Сообщение.Поле = "Создание документов";
	//	Сообщение.Сообщить();
	//	
	//	ЕстьОшибки = Ложь;

	//	КолвоВсего = ТаблицаКорректировкиДолга.Количество();
	//	ВремяНачала = ТекущаяДата();
	//	Ном = 0;
	//	
	//	...........


	//	Ном = Ном + 1;
	//	ТекПрогресс = Ном / (КолвоВсего/100);
	//	ВремяПромежутокВсего = (ТекущаяДата() - ВремяНачала) /  Ном * КолвоВсего;
	//	ТекСообщение = "Обрабатано: " + Стр.Контрагент;
	//	ТекПояснение = "Время окончания: " + (ВремяНачала + ВремяПромежутокВсего);
	//	СтруктураПрогресса = Новый Структура("ТекТекст, ТекПрогресс, ТекПояснение", ТекСообщение, ТекПрогресс, ТекПояснение);
	//	ПоместитьВоВременноеХранилище(СтруктураПрогресса, ТекАдрессПрогрессБара);
	//	
	//	Сообщение = Новый СообщениеПользователю;
	//	Сообщение.Текст = "Закончили создавать документы!";
	//	Сообщение.Поле = "Создание документов";
	//	Сообщение.Сообщить();
	//	
	//	Возврат ЕстьОшибки;
	//	
	//	
	//КонецФункции
	
	СтруктураПрогресса = ПолучитьИзВременногоХранилища(ТекАдрессПрогрессБара);
	Состояние(СтруктураПрогресса.ТекТекст, СтруктураПрогресса.ТекПрогресс, СтруктураПрогресса.ТекПояснение);
	
КонецПроцедуры
...Показать Скрыть
4. Александр Космачев (greystone) 07.08.14 11:10
на клиенте обработчик ожидания и правда не работает,
но на клиенте ещё проще

КонечнаяСтрока = ВысотаШапки + 1;    
	КолвоВсего = ВходExcel.Sheets(НомерЛиста).UsedRange.Rows.Count();
	ВремяНачала = ТекущаяДата();
	
	Пока КонечнаяСтрока < КолвоВсего + 1  Цикл     

             .................код
                КонечнаяСтрока = КонечнаяСтрока + 1;
		ВремяПромежутокВсего = (ТекущаяДата() - ВремяНачала) /  КонечнаяСтрока * КолвоВсего;		           
		ТекПрогресс = КонечнаяСтрока / (КолвоВсего/100);
		ТекСообщение = "Обрабатано: " + КонечнаяСтрока + " из " + КолвоВсего;
		ТекПояснение = "Время окончания: " + (ВремяНачала + ВремяПромежутокВсего);
		Состояние(ТекСообщение, ТекПрогресс, ТекПояснение);
		
	КонецЦикла;
...Показать Скрыть
5. Angry (Angry) 07.08.14 12:29
(4) greystone, Но при этом программа как бы подвиснет, а при запуске в фоне, можете продолжить работать, при этом видите прогресс задачи.
6. Novichok (Novichok777) 17.07.15 09:04
Обработка сыровата. При нажатии на кнопку "Завершить" выпадает сообщение
"{Форма.Форма.Форма(137)}: Значение не является значением объектного типа (Отменить)
Задание.Отменить();"
Индикация процесса, дойдя до 9%, так и висит, ничего дальше не происходит, помогает только "крест".
Окно с процессом появляется на секунду и исчезает примерно на 1 мин, не очень удобно, хорошо бы видеть процесс постоянно, но это видимо особенности клиент-серверной платформы 1с.
Проверялось на базе БП 3.0 (MS SQL), БСП 2.2.5.32 (файловый) платформа 8.3.6.2014, режим "тонкий клиент".
7. Angry (Angry) 17.07.15 15:40
(6) Novichok777, Да БСП с того времени далеко ушел, наверно пора актуализировать, с текущими версиями может и глючить.
Да в платформе окно с индикацией прогресса плавно тухнет и нет возможности им управлять. Единственный способ - это сделать более частое обновление прогресса, оно настраивается в коде..
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа