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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.02.2008, 14:13   #1  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Регистрация: 12.12.2006
Адрес: Москва
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));
         }
     }


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

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

Заранее спасибо.
Старый 25.02.2008, 11:38   #2  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Закомментируйте строку
X++:
//    qbsInventTrans.addSelectionField(fieldnum(InventTrans,ItemId));
и пользуйтесь QueryBrowser

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

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

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

Цитата:
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ке), то поля отображаются, но удалять/добавлять новые нельзя.

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

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

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

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));
         }
Или я что - то ещё не понимаю ? Почему выводятяся только сгруппированные данные именно по полю родительского источника данных ?

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

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

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Подготовка запроса(ламерские вопросы продолжаются) 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

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

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

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