AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.10.2024, 19:57   #1  
SuperStar88 is offline
SuperStar88
Участник
 
82 / 10 (1) +
Регистрация: 11.08.2017
? AX 2009 ProgressBar из нескольких полос. Отображение времени
Есть два прогресс-бара. 1-й отображает основные операции (расчёт того, расчёт сего и экспорт в Эксель), а при экспорте в Эксель формируется 2-й прогресс-бар.
И получается, что в 1-м - TotalCount = 4, а во 2-м - TotalCount допустим 5000.

Первый дошел до последнего пункта и отображает, что осталось 10 секунд, а потом сидишь и смотришь как 4-6 часов продвигается нижний прогресс-бар. При этом отображает, что осталось те же 10 секунд.

Можно ли это как-то пофиксить? Рисую их через стандартный SysOperationProgress
X++:
void run()
{
     simpleProgress = SysOperationProgress::newGeneral(#aviUpdate, this.caption(), 4);

     simpleProgress.setText("Операция 1");
     simpleProgress.incCount();
     simpleProgress.update(true);
     this.calc1();

     .....

     simpleProgress.setText("Экспорт в Эксель");
     simpleProgress.incCount();
     simpleProgress.update(true);
     this.exportExcel();
}

void exportExcel()
{
     excelProgress = SysOperationProgress::newGeneral('', '', totalRows);

     while select inventTable
     {
           excelProgress.setText(strFmt("Номенклатура %1", inventTable.ItemId));
           excelProgress.incCount();
           excelProgress.update(true);
 
           ....
     }
}

Последний раз редактировалось SuperStar88; 20.10.2024 в 20:01.
Старый 21.10.2024, 01:06   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,312 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Что-то по коду не вижу, чтобы использовался ProgressBar из двух полос. Если делать progressBar из двух полос, то тогда и метод newGeneral должен получить параметр 2 (количество полос) и у incCount-а должно быть 2 параметра - один - приращение (=1), а другой (второй) - номер полосы. Ну и это очевидно должен быть один объект (т.е. в методе экспорта в Excel не должен инициализироваться второй экземпляр ProgressBar
__________________
Возможно сделать все. Вопрос времени
Старый 21.10.2024, 10:56   #3  
SuperStar88 is offline
SuperStar88
Участник
 
82 / 10 (1) +
Регистрация: 11.08.2017
Я имел ввиду, что когда я в другом методе добавляю ещё один ProgressBar, то он же прикрепляется к первому второй строкой, если ещё один - то третей и т.д.

Пробовал делать и сразу двойной SysOperationProgress::newMultiBar(...), но количество элементов для второго я сразу не знаю, а только после расчётов. И как-то оно получилось без второй полосы, а только текст добавился
Старый 21.10.2024, 12:19   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,696 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
progress.setTotal() - установка общего количества элементов. Можно это делать и в процессе работы

progress.setCount() - это установка количества выполненных шагов, если оно отлично от приращения 1 через progress.incCount(). Тоже бывает полезно

X++:
excelProgress.setTotal(totalRows, 2);  // Установить общее количество для полосы 2
excelProgress.setCount(0, 2);  // Установить количество пройденных шагов 0 для полосы 2
excelProgress.update(true);  // обновить картинку немедленно

while select inventTable
{
           excelProgress.setText(strFmt("Номенклатура %1", inventTable.ItemId));
           excelProgress.incCount(1,2);
}
Но, в общем случае, корректно изменить отображение оставшегося времени вряд ли получится. Это значение рассчитывается исходя из ранее выполненных шагов.

Ну, и так, для справки...

progress.update() - это обновление "картинки". Этот метод вызывается автоматически внутри метода incCount(), поэтому специально его вызывать не надо.

Обновление "картинки" делается с некоторой периодичностью, чтобы не тормозить процесс обработки. Но если "картинку" надо обновить "вот прям счаз", то вызывают метод update() с параметром true. В общем случае, такая необходимость возникает только при изменении настроек прогресса. Например, когда вызвали setTotal(). А внутри цикла это делать не надо.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 21.10.2024, 17:41   #5  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,312 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от SuperStar88 Посмотреть сообщение
Я имел ввиду, что когда я в другом методе добавляю ещё один ProgressBar, то он же прикрепляется к первому второй строкой, если ещё один - то третей и т.д.

Пробовал делать и сразу двойной SysOperationProgress::newMultiBar(...), но количество элементов для второго я сразу не знаю, а только после расчётов. И как-то оно получилось без второй полосы, а только текст добавился
Понятно. Но для второго и не нужно знать сразу количество элементов.Метод setTotal можно вызвать в любой момент. Только ему нужно указать номер полосы (вторая в Вашем случае). И тогда он будет работать только для нужной полосы.
__________________
Возможно сделать все. Вопрос времени
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axforum blogs: Квест: Подружим Dynamics Ax 2009 Sp1 RU7 c SharePoint Foundation 2010 Blog bot DAX Blogs 4 16.10.2017 17:50
2009 AX, Вставка в grid нескольких изображений Mutnyi DAX: Программирование 17 17.09.2014 15:51
axinthefield: Compatibility Testing for Microsoft Dynamics AX Blog bot DAX Blogs 0 23.06.2012 02:26
emeadaxsupport: Overview of AX build numbers Blog bot DAX Blogs 3 24.05.2012 19:44
Генератор скриптов конвертации базы Axapta 3.0 в базу AX 2009 gl00mie DAX: Программирование 1 14.08.2011 20:05
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:28.