|
![]() |
#1 |
NavAx
|
В-третьих, использовать sum() и group by.
В-четвертых, перенести генератор из DAX 4. |
|
|
За это сообщение автора поблагодарили: gl00mie (2). |
![]() |
#2 |
Member
|
Цитата:
Сообщение от raz
В-четвертых, перенести генератор из DAX 4.
Там одно только сокращение выбираемых для каждой записи полей само по себе уже даст ощутимый прирост производительности. Но в 4.0 был реализован комплекс мер по повышению производительности. Глупо было бы не перенести. Тем более, что там функционал развивают.
__________________
С уважением, glibs® |
|
![]() |
#3 |
Участник
|
Цитата:
Но гораздо больший прирост даст отсутствие перехваченного метода postload, а следовательно запрос будет целиком исполняться на SQL-сервере ![]() |
|
![]() |
#4 |
Member
|
Цитата:
Сообщение от mazzy
...
запрос будет целиком исполняться на SQL-сервере ...
__________________
С уважением, glibs® |
|
![]() |
#5 |
Участник
|
текстовая строка "Select <Бла-бла-бла> from <Бла-бла-бла> ...", которая выполняется НА СЕРВЕРЕ.
поскольку у таблицы LedgerTrans переопределен метод postLoad, то умная Аксапта не посылает SQL-серверу запрос с просьбой посуммировать, а выбирает все записи по одной, применяет к каждой метод postLoad и суммирует сама. Поэтому для таблиц с перехваченным postLoad гораздо важнее сократить объем выборки, нежели делать агрегирование (raz, к великому сожалению для таблицы LeagerTrans ваш совет не очень помогает. Вот для других таблиц - да, очень полезный совет). Так вот. Русские отчеты написаны неправильно. Они не учитывают "особенность" таблицы LedgerTrans и суммируют "от начала времен". Что приводит к выборке в Аксапту каждой проводки из LedgerTrans, которая попадает в условие. Еще раз советую посмотреть как с этим вопросом справились в буржуйских финансовых отчетах. В буржуйских из LedgerTrans никогда не выбирается больше финансового периода - Большинство данных берется из промежуточных итогов. (надо также помнить, что финансовый период безболезненно можно разбить на несколько в случае чего) |
|
![]() |
#6 |
NavAx
|
Цитата:
X++: static void Job1(Args _args) { ledgertrans lt; ; select sum(amountmst) from lt where lt.AccountNum == "zzz"; print(lt.AmountMST); pause; } Последний раз редактировалось raz; 07.11.2008 в 09:48. |
|
Теги |
ledgertrans, отчет, производительность, ax3.0, финансовые движения |
|
|