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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.12.2005, 11:23   #1  
axaLearner is offline
axaLearner
Участник
 
88 / 17 (1) ++
Регистрация: 24.06.2004
Адрес: God knows
Cool Проблема с составлением Query
Создаю query:

Код:
    PurchLine               purchLine;
    InventTable             inventTable;
    InventDim               inventDim;

    QueryBuildDataSource    qbdsPurchTable,
                                         qbdsPurchLine,
                                         qbdsInventTable,
                                         qbdsInventTableModule,
                                         qbdsInventDim;

    Query                   query;
    QueryRun                queryRun;
    ;

    query = new Query();
    qbdsPurchTable = query.addDataSource(tableNum(PurchTable));
    qbdsPurchTable.addRange(fieldNum(PurchTable, DeliveryDate)).value(queryValue(30\11\2005));

    qbdsPurchLine = qbdsPurchTable.addDataSource(tableNum(PurchLine));
    qbdsPurchLine.joinMode(JoinMode::InnerJoin);
    qbdsPurchLine.fetchMode(QueryFetchMode::One2One);
    qbdsPurchLine.addLink(fieldNum(PurchTable, PurchId), fieldNum(PurchLine, PurchId));
    qbdsPurchLine.orderMode(OrderMode::GroupBy);
    qbdsPurchLine.addSelectionField(fieldNum(PurchLine, PurchQty), SelectionField::Sum);


    qbdsInventTable = qbdsPurchLine.addDataSource(tableNum(InventTable));
    qbdsInventTable.joinMode(JoinMode::InnerJoin);
    qbdsInventTable.fetchMode(QueryFetchMode::One2One);
    qbdsInventTable.addLink(fieldNum(PurchLine, ItemId), fieldNum(InventTable, ItemId));
    qbdsInventTable.orderMode(OrderMode::GroupBy);
    qbdsInventTable.addSortField(fieldNum(InventTable, ItemName));
    qbdsInventTable.addSortField(fieldNum(InventTable, ItemId));

    qbdsInventTableModule = qbdsInventTable.addDataSource(tableNum(inventTableModule));
    qbdsInventTableModule.joinMode(JoinMode::InnerJoin);
    qbdsInventTableModule.fetchMode(QueryFetchMode::One2One);
    qbdsInventTableModule.addLink(fieldNum(InventTable, ItemId), fieldNum(inventTableModule, ItemId));

    qbdsInventDim = qbdsPurchLine.addDataSource(tableNum(InventDim));
    qbdsInventDim.joinMode(JoinMode::InnerJoin);
    qbdsInventDim.fetchMode(QueryFetchMode::One2One);
    qbdsInventDim.addLink(fieldNum(PurchLine, InventDimId), fieldNum(InventDim, InventDimId));
    qbdsInventDim.orderMode(OrderMode::GroupBy);
    qbdsInventDim.addSortField(fieldNum(InventDim, InventDimId));



    queryRun = new QueryRun(query);
    while(queryRun.next())
    {
        purchLine   = queryRun.get(tableNum(PurchLine));
        inventTable = queryRun.get(tableNum(InventTable));
        inventDim   = queryRun.get(tableNum(InventDim));
        info(strfmt("%1 ~ %2 ~ %3 ~ %4", inventTable.ItemName, 
                                         inventTable.ItemId,
                                         purchLine.PurchQty,
                                         inventDim.inventDimId ));
    }
Проблема заключается в том, что в таком виде результат выборки получается без группировки по InventDim, если же закомментировать добавление в query InventTableModule, то группировка по InventDim работает, чего я , собственно, и хочу добиться. Смотрел получающийся в query запрос - все вроде нормально, а может я sql недостаточно хорошо знаю...
Старый 01.12.2005, 11:49   #2  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
в инвенттаблемодуле записи хранятся по 3 штуки на каждый итем ид. Для закупок, заказов и пермещений.
Если нужен отчет сколько штук товара закуплено на каждый склад по деливеридата- посмотрите лучше в сторону инвенттранс.
Старый 01.12.2005, 12:03   #3  
axaLearner is offline
axaLearner
Участник
 
88 / 17 (1) ++
Регистрация: 24.06.2004
Адрес: God knows
2 Recoilme
Прошу прощения что не сказал сразу, но этот запрос не представляет практической ценности, запрос, который я пытаюсь реализовать наполовину состоит из самописных таблиц, поэтому я составил для примера запрос из стандартных таблиц, чтобы этот код просто помещался в job и запускался. Меня интересует менно технологический аспект этого query.
Старый 01.12.2005, 12:13   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Подключайте к запросу сначала InventDim, а после него - InventTable и InventTableModule

Правда если у вас в запросе будет подключение к обеим таблицам на одном уровне, то скорее всего запрос будет работать неправильно
__________________
Axapta v.3.0 sp5 kr2
Старый 01.12.2005, 12:20   #5  
axaLearner is offline
axaLearner
Участник
 
88 / 17 (1) ++
Регистрация: 24.06.2004
Адрес: God knows
Мне сначала InventDim нельзя, потому что мне надо чтобы сортировка была в порядке: ItemName, InventDim, а, насколько я понял, порядок группировки (он же порядок сортировки), зависит от того, в каком порядке к query добавляются DataSource'ы
Старый 01.12.2005, 12:29   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Ну это ограничение можно обойти добавив еще один InventTable перед InventDim (без подключения к нему дополнительных таблиц). Правда запрос при этом усложняется.
__________________
Axapta v.3.0 sp5 kr2
Старый 01.12.2005, 12:34   #7  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Цитата:
сначала InventDim нельзя, потому что ..
Тогда так InventTableModule - InventTable - PurchLine - PurchTable - InventDim
Старый 01.12.2005, 13:33   #8  
axaLearner is offline
axaLearner
Участник
 
88 / 17 (1) ++
Регистрация: 24.06.2004
Адрес: God knows
Цитата:
InventTableModule - InventTable - PurchLine - PurchTable - InventDim
Спасибо Wamr, сработало. А если мне еще VendTable нужно к запросу добавить - что делать?
И не могли бы вы объяснить из каких принципов нужно выстраивать цепочку DataSource, или отправить к первоисточникам?
Старый 01.12.2005, 14:09   #9  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
InventTableModule - InventTable - PurchLine - InventDim - PurchTable - VendTable
(но не уверен, что будет вообще как-то работать)
Принцип - минимальное количество ветвлений. Если от ветвлений не уйти, то сначала "маленькая" (InventDim), потом "большая" (PurchTable - VendTable). Если outer или exists, то должен быть последним и единственным [для MS, так как для Oracle удавалось и больше]
И стараться не объединять больше 5 таблиц.
Старый 01.12.2005, 14:48   #10  
axaLearner is offline
axaLearner
Участник
 
88 / 17 (1) ++
Регистрация: 24.06.2004
Адрес: God knows
2 Wamr
Спасибо, работает. А можно еще вопрос: все эти "фичи" уходят корнями в парсинг query, который выполняет Axapta или это СУБД так себя ведет?
Старый 01.12.2005, 15:00   #11  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Аксаптовский парсер глючит.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX: QueryRun and Query Objects - Binding operation failed to allocate buffer space Blog bot DAX Blogs 0 03.04.2009 08:05
palleagermark: Sample union query from AX 2009 Blog bot DAX Blogs 0 11.07.2008 20:05
Проблема с Query в AOT radya DAX: Программирование 7 17.10.2007 17:28
Dynamics AX Geek: Using query() Blog bot DAX Blogs 0 28.10.2006 16:40
проблема с query EreminIgor DAX: Программирование 7 11.10.2004 16:57

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

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

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