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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.08.2009, 12:32   #1  
VORP is offline
VORP
Участник
Аватар для VORP
 
146 / 95 (4) ++++
Регистрация: 26.05.2006
Как работает queryRun
Доброго дня,

у меня имеет место странное поведение запроса. Ситуация следующая- есть код:
X++:
        q = new Query(inventSum_ds.queryRun().query());
        qbds = q.dataSourceTable(tablenum(InventDim));
        qbds.findRange(fieldnum(InventDim, InventLocationId)).value(_inventLocationId);
        qbds.findRange(fieldnum(InventDim, InventReserveCode)).value(_reserveCode);
 
        qr = new Queryrun(q);
        while(qr.next())
        {
            inventSumLocal = qr.get(tablenum(InventSum));            
        }
Query инициализируется долго, но в результате, если посмотреть профайлер SQL получается следующий результат:

SELECT
SUM(A.POSTEDQTY),SUM(A.POSTEDVALUE),SUM(A.PHYSICALVALUE),SUM(A.DEDUCTED),SUM(A.REGISTERED),SUM(A.RECEIVED),
SUM(A.PICKED),SUM(A.RESERVPHYSICAL),SUM(A.RESERVORDERED),SUM(A.ONORDER),SUM(A.ORDERED),SUM(A.ARRIVED),SUM(A.QUOTATIONRECEIPT),
SUM(A.QUOTATIONISSUE),SUM(A.PHYSICALINVENT),SUM(A.AVAILPHYSICAL),
SUM(A.AVAILORDERED),A.ITEMID,
B.INVENTCOLORID,B.INVENTLOCATIONID,B.INVENTBATCHID,B.WMSLOCATIONID,B.WMSPALLETID,B.INVENTSERIALID,B.INVENTGTDID_RU,
B.INVENTRESPPERS,B.INVENTPOSTINGPROFILE,B.INVENTDIMDEFECT,B.INVENTRESERVECODE
FROM INVENTSUM A,INVENTDIM B,WMSLOCATION C
WHERE((A.DATAAREAID='pld')AND((A.CLOSED=0)AND(A.ITEMID='000007')))AND((B.DATAAREAID='pld')AND
(((((B.INVENTLOCATIONID='1001')AND(B.INVENTRESERVECODE='All'))AND(B.INVENTCOLORID='Черный/бордо'))AND(B.INVENTDIMDEFECT='ОК'))AND(A.INVENTDIMID=B.INVENTDIMID)))AND
((C.DATAAREAID='pld')AND(((C.LOCATIONTYPE=0)AND(B.INVENTLOCATIONID=C.INVENTLOCATIONID))AND(B.WMSLOCATIONID=C.WMSLOCATIONID)))
GROUPBY
A.ITEMID,B.INVENTCOLORID,B.INVENTLOCATIONID,B.INVENTBATCHID,B.WMSLOCATIONID,B.WMSPALLETID,B.INVENTSERIALID,
B.INVENTGTDID_RU,B.INVENTRESPPERS,B.INVENTPOSTINGPROFILE,B.INVENTDIMDEFECT,B.INVENTRESERVECODE
ORDERBY
A.ITEMID,B.INVENTCOLORID,B.INVENTLOCATIONID,B.INVENTBATCHID,B.WMSLOCATIONID,B.WMSPALLETID,B.INVENTSERIALID,
B.INVENTGTDID_RU,B.INVENTRESPPERS,B.INVENTPOSTINGPROFILE,B.INVENTDIMDEFECT,B.INVENTRESERVECODE

Другими словами, складские остатки по заданному складу в ячейках хранения.
Проблема в том, что SQL query через queryAnalyzer или запрос переписанный через while select выдают одну строку, тогда как проход while(qr.next())выполняется два раза, хотя получаемые значения не изменяются. Что интересно, так это то, что в форме данный запрос отрабатывает правильно.

Возникает вопрос, как с этим бороться и как вообще работает queryRun.

Спасибо!
Теги
query, queryrun, баг, запрос (query), crm2011

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX: QueryRun and Query Objects - Binding operation failed to allocate buffer space Blog bot DAX Blogs 0 03.04.2009 08:05
Простой QueryRun не работает miklenew DAX: Программирование 13 20.01.2009 14:17
OZKA's DAX Journal: Join между временной и постоянной таблицей через QueryRun. Blog bot DAX Blogs 12 14.01.2009 17:34
как работает QueryRun.reset() ??? 6apcyk DAX: Программирование 1 08.10.2005 22:10
Как же все-таки организованиы Query и QueryRun? VIS DAX: Программирование 4 03.07.2003 15:22

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

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

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