gifts2017

Небольшой пакет функций для использования в обработках (8.x)

Опубликовал - - (Rebelx) в раздел Программирование - Практика программирования

В состав пакета входит небольшое число функций, предназначенных для индикации и протоколирования выполняемых операций (в том числе иерархических).
Данный пакет не притендует на уникальность, "нетленку" и пр., однако я использую его во всех своих творениях. Пакет предназначен для использования в основном в обработках, выполняющих длительные операции.
Тексты функций и пример использования: http://infostart.ru/profile/18122/projects/2824/

Первый набор функций - флаги начала / окончания процессов:
Функция НачалоПроцесса(НаименованиеПроцесса = "", ОбработчикПрерывания = "", ПараметрыОбработчика = Неопределено)
Процедура ОкончаниеПроцесса()

Как следует из названия - первая функция предназначена для обозначения начала процесса. При этом, при вызове из формы возможно передать либо код, который должен выполниться после прерывания процесса пользователем (по ctrl+break) - стоку кода, либо наименование функции и массив параметров. Вторая функция - обозначает конец процесса. Эти функции используют стек процессов, т.е. на каждое начало процесса необходимо обозначить его окончание. При прерыванни процесса вызываются обработчики прерывания для всего стека процессов.

Второй набор - процедуры для визуализации процесса выполнения операций:
Функция мСоздатьПрогрессор(Описание="", ВсегоШагов=0, НеВычислятьВремя=Ложь, ЭлементФормы=Неопределено, Кратность = 1)
Процедура мОбновитьПрогрессор(прогрессор, ДопИнформация="")

Предназначены для вывода информации (%, счетчик, оставшееся время) в строку состояния, либо в указанный элемент формы.

Третий набор - служебные функции, среди которых следует отметить:
Процедура мСообщить(Сообщение, Знач Важность = Неопределено)

Процедура повторяет по назначению встроенную "Сообщить", с тем отличием, что учитывает уровень процесса.

Также используется переменная:
Перем мИмяФайлаЛога;

При указании имени файла, функция мСообщить() будет дублировать сообщения в указанный файл


Пример использования процедур (результаты - на скриншотах):
Процедура ОсновныеДействияФормыТест(Кнопка)
	Процесс = НачалоПроцесса("Вход в процедуру", "ЭлементыФормы.СтрокаПрогрессора.Заголовок = """"");
	ОбщийПрогрессор = мСоздатьПрогрессор(Процесс.Наименование, 3, , ЭлементыФормы.СтрокаПрогрессора);
	Для н = 0 по 3 Цикл
		мОбновитьПрогрессор(ОбщийПрогрессор, "Шаг №: " + н);
		мСообщить("	Шаг внешнего цикла №: " + н);
		Процесс = НачалоПроцесса("Вложенный цикл");
		Прогрессор = мСоздатьПрогрессор("Тест прогрессора", 5);
		Для к = 0 по 5 Цикл
			мОбновитьПрогрессор(Прогрессор);
			мСообщить("	Шаг внутреннего цикла №: " + к);
			Пауза(2);
		КонецЦикла;
		ОкончаниеПроцесса();
	КонецЦикла;
	ОкончаниеПроцесса();
	ЭлементыФормы.СтрокаПрогрессора.Заголовок = "";
КонецПроцедуры


Тексты функций и пример использования: http://infostart.ru/profile/18122/projects/2824/

Далее результаты использования:


Пример вложеных сообщений и двух прогрессоров

Пример реакции на прерывание пользователем (элемент формы выделен, т.к. очищен автоматически после прерывания)

См. также

Подписаться Добавить вознаграждение
Комментарии
1. - - (Rebelx) 21.11.08 20:31
не, ну не успел положить, уже плюсуют :)
2. Артур Аюханов (artbear) 24.11.08 08:48
ИМХО - в названии или описании нужно упомянуть, что это для 8 или 8.1
3. - - (Rebelx) 25.11.08 12:29
4. fixin 26.11.08 07:49
Кривовато, если уж использовать пакет функий, то зачем оформлять отступы пробелами? Программа сама должна считать уровнь и вставлять нужное число табов.
5. - - (Rebelx) 26.11.08 10:42
(4) как это не странно, но эти функции так и делают