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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.04.2006, 14:57   #11  
Roman777 is offline
Roman777
NavAx
Аватар для Roman777
NavAx Club
 
320 / 64 (3) ++++
Регистрация: 10.02.2005
Адрес: г. Москва
Я все-таки настаиваю на обязательности связки InventSerial.itemId = InventSum.itemId по той причине, что в таблице InventSerial уникальность поддерживается совокупностью полей ItemId и inventSerialId, и предлагаю свой вариант решения:

PHP код:
    Query                   query;
    
QueryRun                qr;
    
QueryBuildDataSource    qbdsSum;
    
QueryBuildDataSource    qbdsDim;
    
QueryBuildDataSource    qbdsSerial;
    
QueryBuildRange         qbrItemSerial;
    ;

    
query       =   new Query();
    
qbdsSum     =   query.addDataSource(tableNum(InventSum));
    
qbdsSum.orderMode(OrderMode::GroupBy);
    
qbdsSum.addSortField(fieldnum(InventSumitemId));
    
qbdsSum.addSelectionField(fieldnum(InventSumitemId));
    
qbdsSum.addSelectionField(fieldnum(InventSumPostedQty), Selectionfield::Sum);
    
qbdsSum.addSelectionField(fieldnum(InventSumPostedValue), Selectionfield::Sum);

    
qbdsDim     =   qbdsSum.addDataSource(tableNum(InventDim));
    
qbdsDim.orderMode(OrderMode::GroupBy);
    
qbdsDim.addSortField(fieldnum(InventDiminventDimId));
    
qbdsDim.addSortField(fieldnum(InventDiminventSerialId));
    
qbdsDim.addSelectionField(fieldnum(InventDiminventDimId));
    
qbdsDim.addSelectionField(fieldnum(InventDiminventSerialId));
    
qbdsDim.joinMode(JoinMode::InnerJoin);
    
qbdsDim.fetchMode(0);
    
qbdsDim.addLink(fieldNum(InventSuminventDimId), fieldNum(InventDiminventDimId));
    
qbdsDim.addRange(fieldNum(InventDiminventSerialId)).value(SysQuery::valueNotEmptyString());

    
qbdsSerial  =   qbdsDim.addDataSource(tableNum(InventSerial));
    
qbdsSerial.orderMode(OrderMode::GroupBy);
    
qbdsSerial.addSortField(fieldNum(InventSerialProdDate));
    
qbdsSerial.addSelectionField(fieldNum(InventSerialProdDate));
    
qbdsSerial.joinMode(JoinMode::InnerJoin);
    
qbdsSerial.fetchMode(0);
    
qbdsSerial.addLink(fieldNum(InventDimInventSerialId), fieldNum(InventSerialInventSerialId));
    
qbrItemSerial qbdsSerial.addRange(fieldNum(InventSerialitemId));
    
qbrItemSerial.value(strfmt("(%1) = %2.%3"fieldstr(InventSerialitemId), qbdsSum.name(), fieldstr(InventSumitemId)));

    
qr = new QueryRun(query);
    while (
qr.next())
    {
        
// тут обработка результатов запроса...
    

Примечание: Так как я меня в таблице InventSerial не оказалось поля AdvertAction, я заменил его на ProdDate, но сути это не меняет.

А вот что выдал трассировщик SQL по этому вопросу:
Код:
SELECT SUM(A.POSTEDQTY),SUM(A.POSTEDVALUE),A.ITEMID,B.INVENTDIMID,B.INVENTSERIALID,C.PRODDATE FROM INVENTSUM A,INVENTDIM B,INVENTSERIAL C WHERE (A.DATAAREAID='zkr') AND ((B.DATAAREAID='zkr') AND ( NOT ((B.INVENTSERIALID=' ')) AND (A.INVENTDIMID=B.INVENTDIMID))) AND ((C.DATAAREAID='zkr') AND ((C.ITEMID=A.ITEMID) AND (B.INVENTSERIALID=C.INVENTSERIALID))) GROUP BY A.ITEMID,B.INVENTDIMID,B.INVENTSERIALID,C.PRODDATE ORDER BY A.ITEMID,B.INVENTDIMID,B.INVENTSERIALID,C.PRODDATE OPTION(FAST 16)
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как собрать запрос? moid DAX: Программирование 11 02.07.2007 12:07
Почему join запрос разбивается на подзапросы!? 3oppo DAX: Программирование 59 28.06.2007 11:52
Не работает запрос на нескольких компаниях Bega DAX: Программирование 3 16.09.2005 10:21
Подскажите пожалуйста, как реализовать запрос через QueryBuild vesna DAX: Программирование 3 24.02.2005 06:52
Можно ли в аксапте реализовать такой SQL запрос: Sergey_1972 DAX: Программирование 14 18.03.2004 16:33

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

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

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