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

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

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

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

25 Comments

  1. cargobird

    (0), еще бы пакетный вывод сюда (по 50, по 500 и т.д.). При большом количестве значений постоянный вывод информации в строку состояния замедляет работу, а так бы в самой процедуре решать, выводить на данном значении строку состояния или нет.

    Reply
  2. Diversus

    Давно, давно делал обработку пример микрографики в динамическом списке

    Советую использовать не восклицательный знак, а как в обработке красивые спецсимволы.

    Reply
  3. Ivon

    (1) cargobird, Вообще это можно сделать и вне процедуры, а на процедуру подавать значения, кратные нужным. Хотя код несложный, можно самому доделать.

    Reply
  4. Ivon

    (2) Diversus, Сама идея пришла спонтанно, изначально не было цели писать что-то в этом роде. Символы подбирал так, чтобы они в итоге сложились в прогресс-бар.

    Reply
  5. Alex_E

    Главное — это для обычного приложения, для управляемого символов придумывать не надо 🙂

    Reply
  6. rare-avis

    Клёво! Очень интересно наблюдать за появлением простых вещей — понимаешь, что она элементарная, и удивляешься — почему раньше до этого ни кто не додумался, в том числе и я. А потом начинается «copy-past»… На счет замедления правильно (и как было сказано, решается кратностью), но идея интересная.

    Reply
  7. Igorro82IT

    Все гениальное- ПРОСТО!

    Ничего сверхъестественного, но позитивно и информативно. Спасибо за идею, статью и код!

    Обязательно буду использовать в личных наработках.

    Reply
  8. cargobird

    (1), Кого пакетный вывод интересует…

    Процедура СчетчикВСостояние(Нумератор, Делитель = 500, Всего = 0) Экспорт
    // предназначена для вызова из любого цикла
    // выводит в строку состояния значение Нумератора, если Нумератор нацело делится на Делитель
    // когда задан параметр Всего дополнительно выводится текущий процент выполнения от Всего
    // обязательно! перед циклом задать значение нумератора равное 0 (Нумератор = 0;)
    // Вариант вызова 1: СчетчикВСостояние(Нумератор); — вывод в строке состояния числа с шагом 500
    // Вариант вызова 2: СчетчикВСостояние(Нумератор, 200); — вывод в строке состояния числа с шагом 200
    // Вариант вызова 3: СчетчикВСостояние(Нумератор, 300, ТЗ.Количество()); — вывод в строке состояния числа с шагом 300 и процента от количества строк ТЗ
    #Если Клиент Тогда
    Если Делитель < 0 Тогда
    Возврат;
    КонецЕсли;
    Нумератор = Нумератор + 1;
    Если Цел(Нумератор / Делитель) = Нумератор / Делитель Тогда
    Состояние(Строка(Нумератор) + ?(Всего = 0, «», » (» + Формат((Нумератор / Всего) * 100, «ЧДЦ=2») + «%)»));
    КонецЕсли;
    #КонецЕсли
    КонецПроцедуры

    Показать

    Reply
  9. Ivon

    (8) cargobird,

    я бы заменил

    Цел(Нумератор / Делитель) = Нумератор / Делитель

    на

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

    И быстрее и правильнее.

    Reply
  10. cargobird

    (9) век живи, век учись, не видел такой конструкции, спасибо)

    Reply
  11. nSpirit2

    Я так понимаю это для обычного приложения ?

    Reply
  12. lrs

    Вот ссылка на публикацию, на более изящное решение:

    http://infostart.ru/public/59581/

    Reply
  13. 3.14159

    когда-то давным-давно, еще на 1С7.7 глобальную функцию делал… только вместо точек и восклицаний использовал ||||——————

    Reply
  14. Ivon

    (11) nSpirit2, Только для обычного.

    Reply
  15. Ivon

    (12) lrs, Ваше решение выводит только индикатор и процент. В моем варианте можно выводить так же и другую информацию.

    Reply
  16. hillsnake

    (14) а кто подскажет, что с управляемым?

    стандартную если честно даже включать не хочется … сразу тормоза..

    Reply
  17. Tilirxs

    Супер, Спасибо помогло

    Reply
  18. denis_aka_wolf

    (6) rare-avis, уже не один раз писалось и в различных обработках встречается

    Reply
  19. Ivon

    (16) ЛеваРоскошный, Это только для толстого клиента. Для управляемых форм нужно придумывать что-то другое.

    Reply
  20. Alex_E

    (19)

    Для управляемых форм нужно придумывать что-то другое.

    — там синтаксис помощник уже все придумал:

    Глобальный контекст (Global context)

    Состояние (Status)

    Синтаксис:

    Состояние(<ТекстСообщения>, <Прогресс>, <Пояснение>, <Картинка>)

    — передаем в параметр <Прогресс> кратное 100 значение — получаем градусник в окне состояния…

    Reply
  21. Yashazz

    (6), (7), вообще это лютый баян. Мы так ещё в ячейках таблиц значений на 7.7 делали имитацию прогресс-баров, вот как (13) пишет. Посему мне не вполне понятны восторги.

    Reply
  22. nSpirit2

    (21) Yashazz, А какже крутая анимация из Доса с меняющимися символами «-» » /» » |» » » » -» вот это сила прогресбара

    Reply
  23. bsturtle

    красавчик

    Reply
  24. Rustig

    (21)

    Посему мне не вполне понятны восторги

    вполне понятны, если принимать людей такими какие они есть. пришло время, когда новое поколение не знает семерку… я начинал программировать в 2008 году и сразу на 8.1, так что я тоже отношу себя к новому поколению…

    Reply
  25. Ivon

    (22) nSpirit2,

    Добавлю в код.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *