24.02.2008, 14:13 | #1 |
Участник
|
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 |
MCTS
|
Закомментируйте строку
X++: // qbsInventTrans.addSelectionField(fieldnum(InventTrans,ItemId)); X++: new DEV_QueryBrowser().run(new Query(query));
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
27.02.2008, 12:24 | #3 |
Участник
|
Это я так понимаю в 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 |
Участник
|
UP-ну разок.
|
|
02.03.2008, 15:47 | #5 |
Участник
|
Извините что долго не отвечал. Просто увлекался другими проблемами (тоже Axapta )
Да действительно у меня работа в 3-ке. Я попробую ваш код сегодня (сейчас доступ к Axapta нет). Я тоже пробовал штук QueryBrowser который Russland рекомендовал, очень полезный. Спасибо. Но у меня тоже страно получилось.
|
|
02.03.2008, 16:34 | #6 |
Участник
|
А теперь, если так
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)); } } } Мне кажется, что что - то неправильно имеено в кускочке кода 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 |
Участник
|
В АХ 5 Queries в АОТ были изменены, и теперь в них возможно добавлять группировку и сортировку ТОЛЬКО на уровне всего запроса (причем можно и то, и то).
Соответственно, в форме запроса можно менять сортировку, и она выводится в соответствии с вашими ожиданиями. А про ваш запрос - мне это очень похоже на какой-то глюк - я много раз писал запросы такого рода - и всегда работало. |
|
04.03.2008, 14:22 | #8 |
Участник
|
Можете пробовать такой на своем AX. Я очень надеюсь, что это не глюк, а какая-то ошибка которую я допустил . Спасибо.
|
|
04.03.2008, 15:33 | #9 |
Участник
|
Если это ко мне, то см. 3ье сообщение в теме. У меня это воспроизвести не получится из-за изменений, сделанных в 4.0
|
|