gifts2017

Шкала в строке состояния

Опубликовал Ivon (Ivon) в раздел Программирование - Работа с интерфейсом

Простая шкала, не требующая дополнительных форм и элементов управления

Шкала прогресса нужна там, где есть массовая обработка данных. Ранее всегда просто выводил в строку статуса номер текущего объекта и количество объектов для обработки. Немного подумав, придумал вот это, просто вставьте процедуру в общий модуль и вызывайте оттуда (код простой, думаю, что разжевывать его не нужно):

Процедура ШкалаВСтрокеСостояния(ТекЗапись, Записей, ПоказыватьПроцент = Истина, ПоказыватьПозицию = Истина, СвойТекстВКонце = "") Экспорт
	Текст = СокрЛП(СвойТекстВКонце);
	Если НЕ Текст = "" Тогда Текст = " " + Текст; КонецЕсли;
	Точки = "....................................................................................................";
	Черточки = "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!";
	Процент = ТекЗапись/Записей * 100;
	Если ПоказыватьПроцент = Истина Тогда
		ПроцентТекст = Формат(Процент, "ЧДЦ=1; ЧН=0,0");
	Иначе
		ПроцентТекст = "";
	КонецЕсли;
	Если ПоказыватьПозицию = Истина Тогда
		Позиция = Формат(ТекЗапись, "ЧН=0; ЧГ=") + "/" + Формат(Записей, "ЧН=0; ЧГ=");
	Иначе
		Позиция = "";
	КонецЕсли;
	Шкала = Лев(Лев(Черточки, Цел(Процент)) + Точки, 100);
	Если ПоказыватьПозицию И ПоказыватьПроцент Тогда
		Состояние(Шкала + " (" + ПроцентТекст + "% - " + Позиция + ")" + Текст);
	ИначеЕсли ПоказыватьПозицию Тогда
		Состояние(Шкала + " (" + Позиция + ")" + Текст);
	ИначеЕсли ПоказыватьПроцент Тогда
		Состояние(Шкала + " (" + ПроцентТекст + "%)" + Текст);
	Иначе
		Состояние(Шкала + Текст);
	КонецЕсли;
КонецПроцедуры

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Даниил Матвеев (cargobird) 31.08.15 21:01
(0), еще бы пакетный вывод сюда (по 50, по 500 и т.д.). При большом количестве значений постоянный вывод информации в строку состояния замедляет работу, а так бы в самой процедуре решать, выводить на данном значении строку состояния или нет.
madonov; gubanoff; ogre2007; +3 Ответить 1
2. Виталий Барилко (Diversus) 31.08.15 22:50
Давно, давно делал обработку пример микрографики в динамическом списке
Советую использовать не восклицательный знак, а как в обработке красивые спецсимволы.
3. Ivon (Ivon) 31.08.15 22:51
(1) cargobird, Вообще это можно сделать и вне процедуры, а на процедуру подавать значения, кратные нужным. Хотя код несложный, можно самому доделать.
4. Ivon (Ivon) 31.08.15 22:53
(2) Diversus, Сама идея пришла спонтанно, изначально не было цели писать что-то в этом роде. Символы подбирал так, чтобы они в итоге сложились в прогресс-бар.
5. Алексей Ермилов (Alex_E) 31.08.15 23:17
Главное - это для обычного приложения, для управляемого символов придумывать не надо :-)
13jaguar; +1 Ответить
6. Сергей Головченко (rare-avis) 01.09.15 02:15
Клёво! Очень интересно наблюдать за появлением простых вещей - понимаешь, что она элементарная, и удивляешься - почему раньше до этого ни кто не додумался, в том числе и я. А потом начинается "copy-past"... На счет замедления правильно (и как было сказано, решается кратностью), но идея интересная.
altu71; adhocprog; +2 Ответить 2
7. Игорь Кахановский (IgorroPadavan) 01.09.15 07:32
Все гениальное- ПРОСТО!
Ничего сверхъестественного, но позитивно и информативно. Спасибо за идею, статью и код!
Обязательно буду использовать в личных наработках.
8. Даниил Матвеев (cargobird) 01.09.15 10:22
(1), Кого пакетный вывод интересует...
Процедура СчетчикВСостояние(Нумератор, Делитель = 500, Всего = 0) Экспорт
	// предназначена для вызова из любого цикла
	// выводит в строку состояния значение Нумератора, если Нумератор нацело делится на Делитель
	// когда задан параметр Всего дополнительно выводится текущий процент выполнения от Всего
	// обязательно! перед циклом задать значение нумератора равное 0 (Нумератор = 0;)
	// Вариант вызова 1: СчетчикВСостояние(Нумератор); - вывод в строке состояния числа с шагом 500
	// Вариант вызова 2: СчетчикВСостояние(Нумератор, 200); - вывод в строке состояния числа с шагом 200
	// Вариант вызова 3: СчетчикВСостояние(Нумератор, 300, ТЗ.Количество()); - вывод в строке состояния числа с шагом 300 и процента от количества строк ТЗ
	#Если Клиент Тогда
	Если Делитель < 0 Тогда
		Возврат;
	КонецЕсли;
	Нумератор = Нумератор + 1;
	Если Цел(Нумератор / Делитель) = Нумератор / Делитель Тогда
		Состояние(Строка(Нумератор) + ?(Всего = 0, "", " (" + Формат((Нумератор / Всего) * 100, "ЧДЦ=2") + "%)"));
	КонецЕсли;
	#КонецЕсли
КонецПроцедуры
...Показать Скрыть
9. Ivon (Ivon) 01.09.15 14:53
(8) cargobird,
я бы заменил
Цел(Нумератор / Делитель) = Нумератор / Делитель

на
Нумератор % Делитель = 0

И быстрее и правильнее.
ojiojiowka; cargobird; +2 Ответить 1
10. Даниил Матвеев (cargobird) 01.09.15 15:26
(9) Ivon, век живи, век учись, не видел такой конструкции, спасибо)
11. Иван Устьянцев (nSpirit2) 01.09.15 17:22
Я так понимаю это для обычного приложения ?
12. Руслан (lrs) 01.09.15 17:40
Вот ссылка на публикацию, на более изящное решение:
http://infostart.ru/public/59581/
13. Павел И. (3.14159) 01.09.15 18:06
когда-то давным-давно, еще на 1С7.7 глобальную функцию делал... только вместо точек и восклицаний использовал ||||-----------------
14. Ivon (Ivon) 01.09.15 18:38
(11) nSpirit2, Только для обычного.
15. Ivon (Ivon) 01.09.15 18:41
(12) lrs, Ваше решение выводит только индикатор и процент. В моем варианте можно выводить так же и другую информацию.
16. Леопольд Роскошный (ЛеваРоскошный) 02.09.15 11:10
(14) а кто подскажет, что с управляемым?
стандартную если честно даже включать не хочется ... сразу тормоза..
17. Тимур Муртазаев (Tilirxs) 03.09.15 00:26
18. Denis Michaylov (denis_aka_wolf) 03.09.15 05:46
(6) rare-avis, уже не один раз писалось и в различных обработках встречается
19. Ivon (Ivon) 03.09.15 10:28
(16) ЛеваРоскошный, Это только для толстого клиента. Для управляемых форм нужно придумывать что-то другое.
20. Алексей Ермилов (Alex_E) 03.09.15 10:46
(19) Ivon,
Для управляемых форм нужно придумывать что-то другое.
- там синтаксис помощник уже все придумал:
Глобальный контекст (Global context)
Состояние (Status)
Синтаксис:

Состояние(<ТекстСообщения>, <Прогресс>, <Пояснение>, <Картинка>)
- передаем в параметр <Прогресс> кратное 100 значение - получаем градусник в окне состояния...
FSmile; Rustig; +2 Ответить
21. Яков Коган (Yashazz) 03.09.15 11:59
(6), (7), вообще это лютый баян. Мы так ещё в ячейках таблиц значений на 7.7 делали имитацию прогресс-баров, вот как (13) пишет. Посему мне не вполне понятны восторги.
22. Иван Устьянцев (nSpirit2) 03.09.15 13:57
(21) Yashazz, А какже крутая анимация из Доса с меняющимися символами "-" " /" " |" " \" " -" вот это сила прогресбара
23. Дмитрий Неважнов (bsturtle) 03.09.15 15:57
24. г. Казань Рустем Гумеров (Rustig) 06.09.15 19:10
(21)
Посему мне не вполне понятны восторги

вполне понятны, если принимать людей такими какие они есть. пришло время, когда новое поколение не знает семерку... я начинал программировать в 2008 году и сразу на 8.1, так что я тоже отношу себя к новому поколению...
cargobird; +1 Ответить
25. Ivon (Ivon) 10.03.16 14:52