![]() |
#25 |
Участник
|
посмотрите, поиграйтесь orderMode(0) или orderMode(1) для обеих таблиц.
Обратите внимание, какие параметры и когда передаются между клиентом и сервером. Обратите внимание, как соптимизировали трафик в 3.0. Что мешало в старой версии? В старой версии жутко мешал qbds.sortClear(). В целом был взят метод Максима. Единственно, что было исправлено в его методе, ставим Count(RecID) не только в первой таблице, но и во всех остальных. Что получаем? countTotal всегда достаточно быстро возвращает ОБЩЕЕ количество ЗАПИСЕЙ. countLoops всегда достаточно быстро возвращает количество ГРУППИРОВОК. интересно поведение countLoops, когда начинаете играться с OrderMode в проверочном примере. (для того, чтобы получить полную картину, раскоментарьте метод info в CountPrim) Так, если оба OrderMode = 0, то CountLoop = 4110. Правильно все количество записей, вычисляется на сервере, сама Аксапта получает управление только один раз. Если OrderMode = 1,0, то CountLoop = 5. Это количетсво группировок по типам счетов. Все правильно. У меня есть проводки по всем типам счетов, кроме загловков, итогов. Если OrderMode = 0,1, то CountLoop = 116. Это количество различных дат в таблице финансовых проводок. Если же OrderMode = 1,1, то CountLoop = 272. Это количество дат внутри каждого типа счета. Т.е. можно теперь можно делать следующее (причем progress bar будет работать правильно для любого запроса!) Код: SysOperationProgress progress = new SysOperationProgress(); progress.setTotal(SysQuery::countLoops(qr)); while( qr.next() ){ // ...do somthing... progress.incCount(); } wamr, я правильно понял идею насчет loops? |
|