вернулся вчера опять к теме, переменил методу executeQuery(). Теперь выглядит вот-так:
X++:
public void executeQuery()
{
Query query = new Query();
QueryRun queryRun;
QueryBuildDatasource dsForInventTrans = query.addDataSource(tablenum(InventTrans));
QueryBuildDatasource dsForInventTransPosting = dsForInventTrans.addDataSource(tablenum(InventTransPosting));
QueryBuildRange rangeForItemId = dsForInventTrans.addRange(fieldnum(InventTrans,ItemId));
QueryBuildRange rangeForPeriod = dsForInventTransPosting.addRange(fieldnum(InventTransPosting, TransDate));
;
dsForInventTransPosting.relations(true);
dsForInventTransPosting.joinMode(JoinMode::InnerJoin);
rangeForItemId.enabled(true);
rangeForPeriod.enabled(true);
rangeForItemId.value(itemIdFilter);
rangeForPeriod.value(SysQuery::range(StartDate, EndDate));
//ItemId
dsForInventTrans.addSortField(fieldnum(inventTrans, itemId));
dsForInventTrans.addSelectionField(fieldnum(InventTrans, Qty), SelectionField::Sum);
dsForInventTrans.addSelectionField(fieldnum(InventTrans, CostAmountPosted), SelectionField::Sum);
dsForInventTrans.orderMode(OrderMode::GroupBy);
//Dimension
dsForInventTransPosting.addSortField(fieldId2Ext(fieldnum(InventTransPosting, Dimension), 1));
dsForInventTransPosting.addSelectionField(fieldId2Ext(fieldnum(InventTransPosting, Dimension), 1));
dsForInventTransPosting.orderMode(OrderMode::GroupBy);
this.query(query);
super();
}
Это SQL-запрос:
X++:
SELECT SUM(Qty), SUM(CostAmountPosted) FROM InventTrans GROUP BY InventTrans.ItemId ASC WHERE ((ItemId = N'M0003')) JOIN Dimension[1] FROM InventTransPosting GROUP BY InventTransPosting.Dimension[1] ASC WHERE InventTrans.InventTransId = InventTransPosting.InventTransId AND ((TransDate>={ts '2008-10-01 00:00:00.000'} AND TransDate<={ts '2009-10-14 00:00:00.000'}))
Вроде все правильно, но подразделение остается пустым. Если делаю refresh - F5, то показываются подразделения. Вернее, то одно на все строки, то другое, хотя их несколько. Где я ошибаюсь?