![]() |
#21 |
Участник
|
Цитата:
![]() Но стандартный гарантировано работает в любой конфигурации. Зато свой самописный завсегда кажется более крсивым/удобным... |
|
![]() |
#22 |
Member
|
Может ты и прав. Так всегда. Кажется, что новое лучше. Не зря же говорят, что лучшее — враг хорошего.
__________________
С уважением, glibs® |
|
![]() |
#23 |
Moderator
|
glibs,
Цитата:
прогресс-бар в плане времени врет, и не может не врать
|
|
![]() |
#24 |
Moderator
|
mazzy,
Цитата:
Оценка времени делается в стандартном баре по первому прогресс-бару.
Первый прогресс-бар обычно отображает число выполненных задач Второй и последующие показывают прогресс каждой задачи. Операция состоит из двух действий: 1) Открыть excel файл 2) Обработать на ней определенные ячейки (n штук). Как я понимаю, ты предлагаешь вариант с двумя прогресс барами. Верхний состоит из 2 шагов, нижний из 0 и n на соответсвующих шагах. Чем мне это не нравится: 1) На шаге 1 - нижний прогресс бар не играет своей роли, поскольку там всего один шаг. Был документ закрыт - стал открыт. 2) Открытие документа - 5 секунд, обработка (шаг 2) - 5 минут. После первого шага верхний прогресс бар покажет 50% хотя работа только началась ![]() |
|
![]() |
#25 |
Moderator
|
Цитата:
А вообще говоря советую посмотреть и тщательно проанализировать форму tutorial_progress. Особенно трехуровневые
|
|
![]() |
#26 |
Moderator
|
Цитата:
Сообщение от mazzy
![]() Сравни со стандартным
![]() Вложение 2860 Но стандартный гарантировано работает в любой конфигурации. Зато свой самописный завсегда кажется более крсивым/удобным... |
|
![]() |
#27 |
Member
|
Т.е. исходной проблемой было таки вывести процент вместо времени? Я не пробовал, но верю в Аксапту. Думаю, что это на несколько минут работы.
Или топорный вариант. В моем стиле (не люблю без особой надобности корежить системные классы). Можно не устанавливать итог. А в тексте иногда можно написать что-то типа Удаление записей в любимой таблице. Запись 39284 из 5847847. Думаю, что все знают, но на всякий случай. Если итог не установить, то прогресс-бара не будет, а в окошке выведется только текст.
__________________
С уважением, glibs® |
|
![]() |
#28 |
Участник
|
я обычно, если проуесс состоит из нескольких фаз делаю два прогресс бара:
вверху по перечню фаз, внизу по обработке данных. |
|
![]() |
#29 |
Member
|
Ну зачем же? Я уже писал про программистов.
У меня сейчас "перед глазами" процесс импорта данных. Там два прогресс-бара. Верхний общий. Снизу идет уточняющий. В первом отображается прогресс по всему процессу импорта. Во втором — по импорту записей конкретной таблицы. Первый медленно но уверенно ползет вперед. Второй постоянно дергается. Кажется, есть еще примеры. Можно сделать первый общий, а остальные по очереди бегут с начала и до конца.
__________________
С уважением, glibs® |
|
![]() |
#30 |
Moderator
|
Цитата:
Т.е. исходной проблемой было таки вывести процент вместо времени?
Цитата:
вверху по перечню фаз, внизу по обработке данных.
|
|
![]() |
#31 |
Участник
|
По-моему у варианта, предложенного Андре есть преимущество, которого нет у стандартного прогресса - это не просто ход выполнения, но и протокол завершенных/незавершенных операций. Если операции независимые, то, в случае неудачи, можно установить вместо зеленой галочки красный крест и продолжить выполнение. После того как пользователь вернется, то увидит, что не прошла такая-то операция и ее надо повторить.
|
|
![]() |
#32 |
Moderator
|
Цитата:
Ну зачем же? Я уже писал про программистов.
У меня сейчас "перед глазами" процесс импорта данных. Там два прогресс-бара. Верхний общий. Снизу идет уточняющий. |
|
![]() |
#33 |
Участник
|
Цитата:
Сообщение от Андре
![]() Я этот прогресс-бар стандартный использую в сотне мест в своем модуле и отказываться от него не собираюсь. Еще я мерял траффик - в разных конфигурациях. Мне бы было спокойнее если бы я нашел проблемы с моим прогресс баром, но я их не обнаружил. Поэтому если ты видишь конкретные ляпы в такой реализации - буду рад услышать.
Наоборот, огромное спасибо. Я только хотел сказать, что стоит сначала разобраться в стандартном функционале. Про ляпы ниже. Цитата:
Сообщение от Андре
![]() Кстати, на мой взгляд, стандартный функционал с прогресс барами в количестве > 3 уже воспринимается с усилием. И это у меня, человека, который большое количество времени использует различные гаджеты. Поэтому делать форму состоящую из 5 прогресс баров, скачущих "хаотичным образом" одновременно для среднестатистического бух-ра я никогда рекомендовать не буду.
Заполняй первый, потом второй потом третий. Заполненные бары означают полностью выполненную работу. Просто вместо процентов будет зеленая полоска. ![]() Теперь ляпы. Форма всегда выполняется на клиенте. Т.е. будет гарантированный трафик между клиентом и сервером при каждом обращении к самодельному прогресс-бару. Форма не создается в режимах: BenchmarkTool, веб-сессия, нет GUI (COM-коннектор, .NET-коннектор). Самодельный в этих режимах выдаст ошибки. см. SysOperationProgress.allowFormSetup() // не забудь посмотреть в родителя И вообще стоит подумать на тему, почему стандартный прогресс-бар сделали классом, а не формой. А они всегда выполняются на клиенте ![]() Цитата:
Сообщение от Андре
![]() Метод отображающий прогресс операции:
X++: void setPercent(int _idx, str _percent) { FormListItem item; ; item = listCtrl.getItem(_idx); if (WinApi::getTickCount() - timer > 500) { if (pulse) item.image(1); else item.image(2); pulse = !pulse; timer = WinApi::getTickCount(); listCtrl.setItem(item); listCtrl.setText(item.idx(), _percent, 1); WinApi::updateWindow(element.hWnd()); } } Отвечаем. В гребанном стандартном прогресс-баре отделена логика и представление. В стандартном сами хранимые числа получаются в одном месте, а отображаются они в другом. В самодельном конечно же все проще. Просто в самодельном прогресс-баре бизнес-логика и логика представления/отображения находятся в одном месте. Я не говорю, что это плохо. В каких-то случаях это может быть и хорошо. Но... Рано или поздно самодельный превратится в такой же сложный как и стандартный... А сил на самодельный будет потрачено немало. Самодельный прогресс-бар может быть только один. Если внутри кто-то не знает о внешнем самодельном прогресс-баре, то на экране появится два окошка, три окошка и т.д. Стандартный объединяет все прогресс-бары в одном окне. Внутренний метод НЕ должен знать о внешнем стандартном прогрес-баре. Он просто создает свой, и стандартный код подцепляет его полоску к уже существующим. В самодельном будет несколько окон. Опять же не говорю, что это плохо ![]() Цитата:
Цитата:
Если разные пользователи создают один и тот же отчет, то что они увидят? Цитата:
Сообщение от Андре
![]() X++: num = this.total(); cnt = 0; while select valuesSetup where valuesSetup.ReportType == report.ReportType { this.processCellSetup(valuesSetup.SheetName, valuesSetup.ExcelLabel); cnt++; progressBar.setPercent(2, strfmt('%1', cnt/num * 100) + '%'); // отображаем процесс длиетльной операции } progressBar.setFinalStatus(2); // мы сделали третью задачу СУПЕРЛЯП: нет проверки на деление на ноль. Если честно, то больше всего удивляет использование общей таблицы. Неужели у вас никогда не бывает такого, что разные пользователи делают один и тот же отчет? |
|
|
За это сообщение автора поблагодарили: Андре (5). |
![]() |
#34 |
Moderator
|
Цитата:
По-моему у варианта, предложенного Андре есть преимущество, которого нет у стандартного прогресса - это не просто ход выполнения, но и протокол завершенных/незавершенных операций.
Согласен с тем, что в Аксапте таких задач менее 1%. |
|
![]() |
#35 |
Участник
|
Цитата:
![]() |
|
![]() |
#36 |
Участник
|
|
|
![]() |
#37 |
Участник
|
И в самом деле...
И все-таки меня удивляют две вещи: 1. это конечно же общие таблицы. 2. то, что вы так настойчиво хотите сделать ОДНО окно. Вы никогда не делали прогресс-бар где-то в нутрях расчетов? Т.е. есть общий процесс, который сам по себе отображает какой-то прогресс. А внутри каким-нибудь побочным классом делается расчет какой-нибудь циферки, который в свою очередь требует прогресс-бара. Если будет ОДНО окно, то нужно протаскивать ссылку на него до самых внутренних методов и сторонних классов. А стандарт здорово облегчает жизнь. Достаточно создать новый прогресс, а стандарт сам прилепит к существующему окошку. Неужели никогда не делали? Ну, что-нибудь в виде X++: static void Job1(Args _args) { SysOperationProgress progress1; SysOperationProgress progress2; int i; int total ; progress1 = SysOperationProgress::newGeneral('','',100); progress1.setText('Задача 1'); progress1.update(true); // принудительно заставляем показать окно sleep(1000); // происходит какая-то длительная операция progress1.setCount(100); // 100% :) progress1.update(true); // принудительно заставляем показать окно total = 100000; progress2 = SysOperationProgress::newGeneral('','',total); progress2.setText('Задача 2'); progress2.update(true); // принудительно заставляем показать окно for(i=0; i<total; ++i) { progress2.incCount(); } progress2.update(true); // принудительно заставляем показать окно pause; } |
|
![]() |
#38 |
Moderator
|
Ура. Наконец то, конструктив.
mazzy, без обид, но я постоянно подчеркивал, что данная форма решение 1-2 частных задач. Это не универсальное решение. Это не замена стандартному прогресс бару. Это я к тому, что часть твоих справедливых замечаний, я не буду считать недостатком данного решения. Это не универсальный молоток и не серебрянная пуля. Цитата:
Заполняй первый, потом второй потом третий. Заполненные бары означают полностью выполненную работу. Просто вместо процентов будет зеленая полоска.
Цитата:
Форма всегда выполняется на клиенте. Т.е. будет гарантированный трафик между клиентом и сервером при каждом обращении к самодельному прогресс-бару.
Цитата:
Форма не создается в режимах: BenchmarkTool, веб-сессия, нет GUI (COM-коннектор, .NET-коннектор). Самодельный в этих режимах выдаст ошибки.
Цитата:
Стоит подумать на тему, почему этот гребанный стандартный прогресс-бар сделан так сложно. Ведь тебе именно это не нравится.
Цитата:
А сил на самодельный будет потрачено немало.
Цитата:
Стандартный объединяет все прогресс-бары в одном окне.
Цитата:
Пробелы не спроста?
Цитата:
Общая таблица?
Если разные пользователи создают один и тот же отчет, то что они увидят? Цитата:
Т.е. вызывающий метод должен считать проценты самостоятельно?
Цитата:
СУПЕРЛЯП: нет проверки на деление на ноль.
Цитата:
Если честно, то больше всего удивляет использование общей таблицы.
Неужели у вас никогда не бывает такого, что разные пользователи делают один и тот же отчет? |
|
![]() |
#39 |
Moderator
|
Цитата:
Вы никогда не делали прогресс-бар где-то в нутрях расчетов? Т.е. есть общий процесс, который сам по себе отображает какой-то прогресс. А внутри каким-нибудь побочным классом делается расчет какой-нибудь циферки, который в свою очередь требует прогресс-бара.
Потребность во вложенных прогресс-барах возникает тогда, когда разработчик не уверен, что его операция доползет до "счастливого конца" и хочет получить информацию о том, на какой стадии все завалилось. Но для решения этой задачи есть другие механизмы(например, логирование) - демонстрировать кишки своего механизма пользователю необязательно. |
|
![]() |
#40 |
Участник
|
А он еще и не работает?
А как же 20 минут? ![]() Цитата:
Цитата:
![]() Цитата:
Только вместо ListView несколько контролов... А если, как говорил glibs, Total не устанавливать, то останется только текст. Вот так всегда... На самом интересном месте выясняется, что не Иван Иванович, а Петр Петрович не в среду, а в понедельник, и не продал, а купил... Какого черта беспокоится о юзабилити, если "Пользователи вообще ничего не увидят"? Либо я полный тормоз. |
|
Теги |
benchmark, progress bar, интерфейс, как правильно, crm2011 |
|
![]() |
||||
Тема | Ответов | |||
ProgressBar | 7 | |||
ProgressBar в StatusBar(е) | 8 | |||
Как запустить свой класс при входе пользователя в систему? | 2 | |||
Как сказать форме подогнать свой размер | 10 | |||
Как создать свой Web-портал? | 4 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|