AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 24.02.2008, 14:13   #1  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Join Date: 12.12.2006
Location: Москва
Cоздание запроса с агрегатом
Написал такой запрос в X++

X++:
static void Job103(Args _args)
{
    InventDim            inventDim;
    InventTrans          inventTrans;
    Query                query;
    QueryBuildDataSource qbsInventTrans, qbsInventDim;
    QueryBuildLink       qbl;
    QueryRun             queryRun;
    QueryBuildRange      qbrInventSizeId, qbrStatusIssue, qbrTransType, qbrItemId;
    Qty                  mQty;
    ;

 //   inventDim = this.inventDim();
    query  = new Query();

    qbsInventDim   =  query.addDataSource(tablenum(InventDim));

    qbsInventTrans =  qbsInventDim.addDataSource(tablenum(InventTrans));
   
  //  qbsInventTrans =  qbsInventDim.addDataSource(tablenum(InventTrans));

    qbsInventTrans.relations(true);

    qbsInventTrans.clearLinks();

    qbsInventTrans.addLink(fieldnum(InventDim,inventDimId),fieldnum(InventTrans,inventDimId));

    qbsInventTrans.joinMode(JoinMode::InnerJoin);



    qbrTransType = qbsInventTrans.addRange(fieldnum(InventTrans,TransType));
    qbrTransType.value(queryvalue(InventTransType::Sales));

    qbrStatusIssue = qbsInventTrans.addRange(fieldnum(InventTrans,StatusIssue));
    qbrStatusIssue.value(queryValue(StatusIssue::OnOrder));



    qbsInventDim.orderMode(OrderMode::GroupBy);
    qbsInventDim.addSortField(fieldnum(InventDim,InventSizeId));


    qbsInventTrans.orderMode(OrderMode::GroupBy);
    qbsInventTrans.addSortField(fieldnum(InventTrans,ItemId));
    qbsInventTrans.addSelectionField(fieldnum(InventTrans,ItemId));
    qbsInventTrans.addSelectionField(fieldnum(InventTrans,Qty),SelectionField::Sum);

    queryRun = new QueryRun(query);

    if(queryRun.prompt())
     {
        while(queryRun.next())
         {
            inventTrans = queryRun.get(tablenum(InventTrans));
            inventDim   = queryRun.get(tablenum(InventDim));
            info(strFmt('%1 %2 %3', inventTrans.ItemId, inventDim.InventSizeId, inventTrans.Qty));
         }
     }


}
Когда запускается, в диалоговом окне Запрос в закладке СОРТИРОВКА имеется только поле Размер в таблице Складская аналитика, а поле Номенклатура в таблице Складские проводки отсутствует, в результате выводится только агрегатная сумма для размера, а не для номенклатуры и размера ...

Подскажите пожалуйста, в чем проблема ?

Заранее спасибо.
Old 25.02.2008, 11:38   #2  
Russland is offline
Russland
MCTS
Russland's Avatar
MCBMSS
 
267 / 116 (4) +++++
Join Date: 17.10.2005
Location: Донеччина, Україна
Закомментируйте строку
X++:
//    qbsInventTrans.addSelectionField(fieldnum(InventTrans,ItemId));
и пользуйтесь QueryBrowser

X++:
new DEV_QueryBrowser().run(new Query(query));
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Old 27.02.2008, 12:24   #3  
kashperuk is offline
kashperuk
Участник
kashperuk's Avatar
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Join Date: 30.05.2004
Location: Atlanta, GA, USA
Это я так понимаю в 3ке у вас так?

Я поузнавал по этому поводу. Вот что выяснилось:

Quote:
Adding Sort Fields
===============
Not supported when group by fields exist; this change was made in Ax 4.0.


Visiblity of Sort Fields
=================
The sorting tab will only show fields for data sources where the orderMode property is set to OrderBy (or fields added via the addOrderByField). This is new to 5.0.

If you want to provide the user with the ability to change the sort order, add the group by fields to the order by list as well.
Ex:
qbsInventDim.addOrderByField(fieldnum(InventDim, InventSizeId));
qbsInventTrans.addOrderByField(fieldnum(InventTrans, ItemId));

Also change the code that uses orderMode(OrderMode::GroupBy) / addSortField(...) to addGroupBy(...). Mixing the orderMode with addOrderByField / addGroupByField is not recommended.
Ex.
replace ...
qbsInventDim.orderMode(OrderMode::GroupBy);
qbsInventDim.addSortField(fieldnum(InventDim, InventSizeId));
with ...
qbdsInventDim.addGroupByField(fieldnum(InventDim, InventSizeId));
Итого, у меня ваш код вообще не отображает полей на закладке сортировки.
Если же переписать чегео addGroupByField (новая фишка в 5ке), то поля отображаются, но удалять/добавлять новые нельзя.

Интересно, кто что думает по-поводу таких изменений, и вообще на связанные темы
Old 27.02.2008, 17:47   #4  
kashperuk is offline
kashperuk
Участник
kashperuk's Avatar
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Join Date: 30.05.2004
Location: Atlanta, GA, USA
UP-ну разок.
Old 02.03.2008, 15:47   #5  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Join Date: 12.12.2006
Location: Москва
Извините что долго не отвечал. Просто увлекался другими проблемами (тоже Axapta )

Да действительно у меня работа в 3-ке. Я попробую ваш код сегодня (сейчас доступ к Axapta нет).

Я тоже пробовал штук QueryBrowser который Russland рекомендовал, очень полезный. Спасибо. Но у меня тоже страно получилось.
  1. При запуске моего кода выводятся в info сгруппированные по размерам, а не по номенклатурам. При этом QueryBrowser показывает сгруппированные по номенклатурам и размерам.
  2. Я создал такой же запрос но в AOT. Проверка по QueryBrowser показывает что SQL для этого запроса и для запроса в коде одинаковый. Но запуск AOT-запроса показывает то что я хотел, то есть сгруппированные данные по номенклатурам и размерам.
Old 02.03.2008, 16:34   #6  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Join Date: 12.12.2006
Location: Москва
А теперь, если так

X++:
static void Job103(Args _args)
{
    InventDim            inventDim;
    InventTrans          inventTrans;
    Query                query;
    QueryBuildDataSource qbsInventTrans, qbsInventDim;
    QueryBuildLink       qbl;
    QueryRun             queryRun;
    QueryBuildRange      qbrInventSizeId, qbrStatusIssue, qbrTransType, qbrItemId;
    Qty                  mQty;
    ;

    query  = new Query();

    qbsInventTrans = query.addDataSource(tablenum(InventTrans));

    qbsInventDim   = qbsInventTrans.addDataSource(tablenum(InventDim));

    qbsInventDim.relations(true);

    qbrTransType = qbsInventTrans.addRange(fieldnum(InventTrans,TransType));
    qbrTransType.value(queryvalue(InventTransType::Sales));

    qbrStatusIssue = qbsInventTrans.addRange(fieldnum(InventTrans,StatusIssue));
    qbrStatusIssue.value(queryValue(StatusIssue::OnOrder));

    qbsInventDim.orderMode(OrderMode::GroupBy);
    qbsInventDim.addSortField(fieldnum(InventDim, InventSizeId));


    qbsInventTrans.orderMode(OrderMode::GroupBy);
    qbsInventTrans.addSortField(fieldnum(InventTrans, ItemId));
    
    qbsInventTrans.addSelectionField(fieldnum(InventTrans,Qty),SelectionField::Sum);
    qbsInventTrans.addSelectionField(fieldnum(InventTrans,ItemId));

    queryRun = new QueryRun(query);

    if(queryRun.prompt())
     {
        while(queryRun.next())
         {
            
            
            inventTrans = queryRun.get(tablenum(InventTrans));
            inventDim   = queryRun.get(tablenum(InventDim));
            info(strFmt('%1 %2 %3', inventTrans.ItemId, inventDim.InventSizeId, inventTrans.Qty));
         }
     }

}
Т.е, просто изменение порядок таблицы InventTrans и InventDim в запросе, то выводятся сгруппированные данные по номенклатурам, а не по номенклатурам и размерам.

Мне кажется, что что - то неправильно имеено в кускочке кода

X++:
    if(queryRun.prompt())
     {
        while(queryRun.next())
         {
            
            
            inventTrans = queryRun.get(tablenum(InventTrans));
            inventDim   = queryRun.get(tablenum(InventDim));
            info(strFmt('%1 %2 %3', inventTrans.ItemId, inventDim.InventSizeId, inventTrans.Qty));
         }
Или я что - то ещё не понимаю ? Почему выводятяся только сгруппированные данные именно по полю родительского источника данных ?

Last edited by longson; 02.03.2008 at 16:36.
Old 02.03.2008, 23:58   #7  
kashperuk is offline
kashperuk
Участник
kashperuk's Avatar
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Join Date: 30.05.2004
Location: Atlanta, GA, USA
В АХ 5 Queries в АОТ были изменены, и теперь в них возможно добавлять группировку и сортировку ТОЛЬКО на уровне всего запроса (причем можно и то, и то).
Соответственно, в форме запроса можно менять сортировку, и она выводится в соответствии с вашими ожиданиями.

А про ваш запрос - мне это очень похоже на какой-то глюк - я много раз писал запросы такого рода - и всегда работало.
Old 04.03.2008, 14:22   #8  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Join Date: 12.12.2006
Location: Москва
Можете пробовать такой на своем AX. Я очень надеюсь, что это не глюк, а какая-то ошибка которую я допустил . Спасибо.
Old 04.03.2008, 15:33   #9  
kashperuk is offline
kashperuk
Участник
kashperuk's Avatar
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Join Date: 30.05.2004
Location: Atlanta, GA, USA
Quote:
Originally Posted by longson View Post
Можете пробовать такой на своем AX. Я очень надеюсь, что это не глюк, а какая-то ошибка которую я допустил . Спасибо.
Если это ко мне, то см. 3ье сообщение в теме. У меня это воспроизвести не получится из-за изменений, сделанных в 4.0
Tags
ax2009, ax3.0, ax4.0

 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Подготовка запроса(ламерские вопросы продолжаются) HorrR DAX: Программирование 4 08.07.2008 13:23
Изменить план выполнения запроса Sequel DAX: Администрирование 2 29.05.2008 15:46
Оптимизация запроса oleg_e DAX: Программирование 16 11.01.2008 10:22
Теория: Создание отчета в виде Запроса Arahnid DAX: Программирование 6 14.11.2007 16:37
Ускорение выполнения запроса Oracle + MS Axapta Горбунов Дмитрий DAX: Программирование 17 15.11.2005 18:13

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 01:48.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.