|
|
#1 |
|
Участник
|
Создаю 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 ));
} |
|
|
|
|
#2 |
|
злыдень
|
в инвенттаблемодуле записи хранятся по 3 штуки на каждый итем ид. Для закупок, заказов и пермещений.
Если нужен отчет сколько штук товара закуплено на каждый склад по деливеридата- посмотрите лучше в сторону инвенттранс. |
|
|
|
|
#3 |
|
Участник
|
2 Recoilme
Прошу прощения что не сказал сразу, но этот запрос не представляет практической ценности, запрос, который я пытаюсь реализовать наполовину состоит из самописных таблиц, поэтому я составил для примера запрос из стандартных таблиц, чтобы этот код просто помещался в job и запускался. Меня интересует менно технологический аспект этого query. |
|
|
|
|
#4 |
|
Участник
|
Подключайте к запросу сначала InventDim, а после него - InventTable и InventTableModule
Правда если у вас в запросе будет подключение к обеим таблицам на одном уровне, то скорее всего запрос будет работать неправильно
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#5 |
|
Участник
|
Мне сначала InventDim нельзя, потому что мне надо чтобы сортировка была в порядке: ItemName, InventDim, а, насколько я понял, порядок группировки (он же порядок сортировки), зависит от того, в каком порядке к query добавляются DataSource'ы
|
|
|
|
|
#6 |
|
Участник
|
Ну это ограничение можно обойти добавив еще один InventTable перед InventDim (без подключения к нему дополнительных таблиц). Правда запрос при этом усложняется.
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#7 |
|
----------------
|
Цитата:
сначала InventDim нельзя, потому что ..
|
|
|
|
|
#8 |
|
Участник
|
Цитата:
InventTableModule - InventTable - PurchLine - PurchTable - InventDim
И не могли бы вы объяснить из каких принципов нужно выстраивать цепочку DataSource, или отправить к первоисточникам? |
|
|
|
|
#9 |
|
----------------
|
InventTableModule - InventTable - PurchLine - InventDim - PurchTable - VendTable
(но не уверен, что будет вообще как-то работать) Принцип - минимальное количество ветвлений. Если от ветвлений не уйти, то сначала "маленькая" (InventDim), потом "большая" (PurchTable - VendTable). Если outer или exists, то должен быть последним и единственным [для MS, так как для Oracle удавалось и больше] И стараться не объединять больше 5 таблиц. |
|
|
|
|
#10 |
|
Участник
|
2 Wamr
Спасибо, работает. А можно еще вопрос: все эти "фичи" уходят корнями в парсинг query, который выполняет Axapta или это СУБД так себя ведет? |
|
|
|
|
#11 |
|
----------------
|
Аксаптовский парсер глючит.
|
|
|
|
|
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|