Добрый день, необходим совет.
дело в следующем: заказчик захотел форму в которой будет отображаться расход по подразделениям, центрам, целям (физически). Форма выглядит следующим образом:
У формы три DataSources: InventTrans, InventTransPosting, InventDim.
Я сделал на Datasource InventTrans методу SetupRange (посмотрел в smmActivities), вот код:
X++:
public void setupRanges()
{
;
dsForInventTrans = InventTrans_ds.query().dataSourceTable(tablenum(InventTrans));
if(!dsForInventDim)
dsForInventDim = dsForInventTrans.addDataSource(tablenum(InventDim));
else inventTrans_DS.query().dataSourceTable(tablenum(InventDim));
dsForInventDim.relations(true);
dsForInventDim.joinMode(JoinMode::ExistsJoin);
if(!dsForInventTransPostingPhysical)
dsForInventTransPostingPhysical = dsForInventTrans.addDataSource(tablenum(inventTransPosting));
else inventTrans_ds.query().dataSourceTable(tablenum(inventTransPosting));
dsForInventTransPostingPhysical.relations(true);
dsForInventTransPostingPhysical.joinMode(JoinMode::ExistsJoin);
rangeForItemId = SysQuery::findOrCreateRange(dsForInventTrans, fieldnum(InventTrans, itemId));
rangePeriod = SysQuery::findOrCreateRange(dsForInventTransPostingPhysical, fieldnum(InventTransPosting, TransDate));
}
executeQuery на етом же DataSource :
X++:
public void executeQuery()
{
InventSum inventSum;
InventTable inventTable;
;
inventTrans_DS.setupRanges();
// Enable/Disable ranges
if (ItemId && department.value() == true)
{
rangeForItemId.enabled(true);
rangePeriod.enabled(true);
rangeForItemId.value(itemIdFilter);
rangePeriod.value(SysQuery::range(StartDate, EndDate));
dsForInventTrans.addSortField(fieldnum(inventTrans, itemId));
dsForInventTrans.addSortField(fieldId2Ext(fieldnum(InventTransPosting, Dimension), 1));
dsForInventTrans.orderMode(OrderMode::GroupBy);
}
super();
}
и вот SQL-запрос, который формируется:
X++:
SELECT * FROM InventTrans GROUP BY InventTrans.ItemId ASC, InventTrans.InvoiceId ASC WHERE ((ItemId = N'M0001')) EXISTS JOIN * FROM InventDim WHERE InventTrans.inventDimId = InventDim.inventDimId EXISTS JOIN * FROM InventTransPosting WHERE InventTrans.InventTransId = InventTransPosting.InventTransId AND ((TransDate>={ts '2008-09-01 00:00:00.000'} AND TransDate<={ts '2009-09-28 00:00:00.000'}))
по каким-то причинам не происходит группировка по InventTransPosting.Dimension[1]. Если у кого-нибудь есть идеи, буду благодарен.
P.S. Группировка по Центру и Цели происходит таким-же образом? и как мне лучще всего выяснить Кол-во и Цену?