28.09.2009, 12:26 | #1 |
Участник
|
Статистика по каждому коду номенклатуры. Как правильно построить Query?
Добрый день, необходим совет.
дело в следующем: заказчик захотел форму в которой будет отображаться расход по подразделениям, центрам, целям (физически). Форма выглядит следующим образом: У формы три 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)); } 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(); } 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'})) P.S. Группировка по Центру и Цели происходит таким-же образом? и как мне лучще всего выяснить Кол-во и Цену? |
|