1

次のコードは、Req Trans テーブルでクエリを作成して、アイテム/サイトごとに統合された数量を表示します。

query = new Query();
dsReqTrans = query.addDataSource(tablenum(ReqTrans));

dsReqTrans.addRange(fieldnum(ReqTrans, ReqPlanId)).value(_reqPlanId);
dsReqTrans.addRange(fieldnum(ReqTrans, RefType)).value(enum2str(_reqRefType));

dsReqTrans.addGroupByField(fieldnum(ReqTrans, ItemId));
dsReqTrans.addSelectionField(fieldnum(ReqTrans, Qty),  SelectionField::Sum);

dsInventDim = dsReqTrans.addDataSource(tablenum(InventDim));
dsInventDim.joinMode(JoinMode::InnerJoin);
dsInventDim.relations(false);
dsInventDim.addLink(fieldnum(ReqTrans, CovInventDimId), fieldnum(InventDim, InventDimId));

dsInventDim.addGroupByField(fieldnum(InventDim, InventSizeId));
dsInventDim.addGroupByField(fieldnum(InventDim, InventSiteId));

rangeInventSiteId = dsInventDim.addRange(fieldnum(InventDim, InventSiteId));
rangeInventSiteId.value(_parmSiteId);

これは非常にうまく機能します。アイテム/サイトごとに数量列の合計を取得します。

ただし、ItemGroupId に範囲も追加したい場合。このために、次のように InventTable にリンクする必要があります。

dsInventTable = dsReqTrans.addDataSource(tablenum(InventTable));
dsInventTable.joinMode(JoinMode::InnerJoin);
dsInventTable.relations(false);
dsInventTable.addLink(fieldnum(ReqTrans, ItemId), fieldnum(InventTable, ItemId));

dsInventTable.addRange(fieldnum(InventTable, ItemGroupId)).value(_parmItemGroupId);

このデータ ソースを追加すると、InventDim へのリンクが壊れます。アイテム/サイトごとにグループ化するのではなく、アイテムのみでグループ化されたすべてのサイトのすべてのアイテム数量の合計を取得します。

これはなぜですか?

4

1 に答える 1

3

基本的に、同じデータ ソースに対して 2 つの内部結合を行うことはできません (可能ですが、機能しません)。

AX 2012 を使用している場合は、代わりにInventTableデータ ソースを次の場所に追加できます。InventDim

dsInventTable = dsInventDim.addDataSource(tablenum(InventTable));
dsInventTable.joinMode(JoinMode::ExistsJoin);
dsInventTable.relations(false);
// OBS 3 arguments next:
dsInventTable.addLink(fieldnum(ReqTrans, ItemId), fieldnum(InventTable, ItemId), dsReqTrans.name()); 
dsInventTable.addRange(fieldnum(InventTable, ItemGroupId)).value(_parmItemGroupId);

以前のバージョンでは、最初に入れましInventTableた ( から 1 つのフィールドでグループ化することを忘れないでくださいInventTable):

query = new Query(); 
dsInventTable = dsReqTrans.addDataSource(tablenum(InventTable)); 
dsInventTable.addGroupByField(fieldnum(InventTable, ItemId)); // You have to group/sum something
dsReqTrans = dsInventTable.addDataSource(tablenum(ReqTrans)); 
dsReqTrans.joinMode(JoinMode::InnerJoin); 
dsReqTrans.relations(false); 
dsReqTrans.addLink(fieldnum(InventTable, ItemId).fieldnum(ReqTrans, ItemId));
...
于 2012-04-24T11:37:46.543 に答える