09.08.2007, 16:06 | #21 |
Участник
|
Цитата:
Но стандартный гарантировано работает в любой конфигурации. Зато свой самописный завсегда кажется более крсивым/удобным... |
|
09.08.2007, 16:18 | #22 |
Member
|
Может ты и прав. Так всегда. Кажется, что новое лучше. Не зря же говорят, что лучшее — враг хорошего.
__________________
С уважением, glibs® |
|
09.08.2007, 16:19 | #23 |
Moderator
|
glibs,
Цитата:
прогресс-бар в плане времени врет, и не может не врать
|
|
09.08.2007, 16:23 | #24 |
Moderator
|
mazzy,
Цитата:
Оценка времени делается в стандартном баре по первому прогресс-бару.
Первый прогресс-бар обычно отображает число выполненных задач Второй и последующие показывают прогресс каждой задачи. Операция состоит из двух действий: 1) Открыть excel файл 2) Обработать на ней определенные ячейки (n штук). Как я понимаю, ты предлагаешь вариант с двумя прогресс барами. Верхний состоит из 2 шагов, нижний из 0 и n на соответсвующих шагах. Чем мне это не нравится: 1) На шаге 1 - нижний прогресс бар не играет своей роли, поскольку там всего один шаг. Был документ закрыт - стал открыт. 2) Открытие документа - 5 секунд, обработка (шаг 2) - 5 минут. После первого шага верхний прогресс бар покажет 50% хотя работа только началась |
|
09.08.2007, 16:26 | #25 |
Moderator
|
Цитата:
А вообще говоря советую посмотреть и тщательно проанализировать форму tutorial_progress. Особенно трехуровневые
|
|
09.08.2007, 16:29 | #26 |
Moderator
|
Цитата:
Сообщение от mazzy
Сравни со стандартным
Вложение 2860 Но стандартный гарантировано работает в любой конфигурации. Зато свой самописный завсегда кажется более крсивым/удобным... |
|
09.08.2007, 16:48 | #27 |
Member
|
Т.е. исходной проблемой было таки вывести процент вместо времени? Я не пробовал, но верю в Аксапту. Думаю, что это на несколько минут работы.
Или топорный вариант. В моем стиле (не люблю без особой надобности корежить системные классы). Можно не устанавливать итог. А в тексте иногда можно написать что-то типа Удаление записей в любимой таблице. Запись 39284 из 5847847. Думаю, что все знают, но на всякий случай. Если итог не установить, то прогресс-бара не будет, а в окошке выведется только текст.
__________________
С уважением, glibs® |
|
09.08.2007, 16:52 | #28 |
Участник
|
я обычно, если проуесс состоит из нескольких фаз делаю два прогресс бара:
вверху по перечню фаз, внизу по обработке данных. |
|
09.08.2007, 16:55 | #29 |
Member
|
Ну зачем же? Я уже писал про программистов.
У меня сейчас "перед глазами" процесс импорта данных. Там два прогресс-бара. Верхний общий. Снизу идет уточняющий. В первом отображается прогресс по всему процессу импорта. Во втором — по импорту записей конкретной таблицы. Первый медленно но уверенно ползет вперед. Второй постоянно дергается. Кажется, есть еще примеры. Можно сделать первый общий, а остальные по очереди бегут с начала и до конца.
__________________
С уважением, glibs® |
|
09.08.2007, 17:02 | #30 |
Moderator
|
Цитата:
Т.е. исходной проблемой было таки вывести процент вместо времени?
Цитата:
вверху по перечню фаз, внизу по обработке данных.
|
|
09.08.2007, 17:03 | #31 |
Участник
|
По-моему у варианта, предложенного Андре есть преимущество, которого нет у стандартного прогресса - это не просто ход выполнения, но и протокол завершенных/незавершенных операций. Если операции независимые, то, в случае неудачи, можно установить вместо зеленой галочки красный крест и продолжить выполнение. После того как пользователь вернется, то увидит, что не прошла такая-то операция и ее надо повторить.
|
|
09.08.2007, 17:06 | #32 |
Moderator
|
Цитата:
Ну зачем же? Я уже писал про программистов.
У меня сейчас "перед глазами" процесс импорта данных. Там два прогресс-бара. Верхний общий. Снизу идет уточняющий. |
|
09.08.2007, 17:08 | #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). |
09.08.2007, 17:10 | #34 |
Moderator
|
Цитата:
По-моему у варианта, предложенного Андре есть преимущество, которого нет у стандартного прогресса - это не просто ход выполнения, но и протокол завершенных/незавершенных операций.
Согласен с тем, что в Аксапте таких задач менее 1%. |
|
09.08.2007, 17:10 | #35 |
Участник
|
Т.е. и стандартный infolog в топку?
|
|
09.08.2007, 17:17 | #36 |
Участник
|
|
|
09.08.2007, 17:27 | #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; } |
|
09.08.2007, 17:29 | #38 |
Moderator
|
Ура. Наконец то, конструктив.
mazzy, без обид, но я постоянно подчеркивал, что данная форма решение 1-2 частных задач. Это не универсальное решение. Это не замена стандартному прогресс бару. Это я к тому, что часть твоих справедливых замечаний, я не буду считать недостатком данного решения. Это не универсальный молоток и не серебрянная пуля. Цитата:
Заполняй первый, потом второй потом третий. Заполненные бары означают полностью выполненную работу. Просто вместо процентов будет зеленая полоска.
Цитата:
Форма всегда выполняется на клиенте. Т.е. будет гарантированный трафик между клиентом и сервером при каждом обращении к самодельному прогресс-бару.
Цитата:
Форма не создается в режимах: BenchmarkTool, веб-сессия, нет GUI (COM-коннектор, .NET-коннектор). Самодельный в этих режимах выдаст ошибки.
Цитата:
Стоит подумать на тему, почему этот гребанный стандартный прогресс-бар сделан так сложно. Ведь тебе именно это не нравится.
Цитата:
А сил на самодельный будет потрачено немало.
Цитата:
Стандартный объединяет все прогресс-бары в одном окне.
Цитата:
Пробелы не спроста?
Цитата:
Общая таблица?
Если разные пользователи создают один и тот же отчет, то что они увидят? Цитата:
Т.е. вызывающий метод должен считать проценты самостоятельно?
Цитата:
СУПЕРЛЯП: нет проверки на деление на ноль.
Цитата:
Если честно, то больше всего удивляет использование общей таблицы.
Неужели у вас никогда не бывает такого, что разные пользователи делают один и тот же отчет? |
|
09.08.2007, 17:33 | #39 |
Moderator
|
Цитата:
Вы никогда не делали прогресс-бар где-то в нутрях расчетов? Т.е. есть общий процесс, который сам по себе отображает какой-то прогресс. А внутри каким-нибудь побочным классом делается расчет какой-нибудь циферки, который в свою очередь требует прогресс-бара.
Потребность во вложенных прогресс-барах возникает тогда, когда разработчик не уверен, что его операция доползет до "счастливого конца" и хочет получить информацию о том, на какой стадии все завалилось. Но для решения этой задачи есть другие механизмы(например, логирование) - демонстрировать кишки своего механизма пользователю необязательно. |
|
09.08.2007, 17:38 | #40 |
Участник
|
А он еще и не работает?
А как же 20 минут? Цитата:
Цитата:
Цитата:
Только вместо ListView несколько контролов... А если, как говорил glibs, Total не устанавливать, то останется только текст. Вот так всегда... На самом интересном месте выясняется, что не Иван Иванович, а Петр Петрович не в среду, а в понедельник, и не продал, а купил... Какого черта беспокоится о юзабилити, если "Пользователи вообще ничего не увидят"? Либо я полный тормоз. |
|