Показать сообщение отдельно
Старый 05.06.2006, 12:48   #14  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от kashperuk
Давайте просто перейдем уже к более конкретным полям, запросам, таблицам.

И я обычно сначала группирую, а потом эти данные заполняю во временную таблицу. Иначе, какой из нее толк?

Обычно делается цикл по всем строкам нужным, и добавляются переменные, в которые суммируются необходимые группировки, и записываются и обнуляются при изменении поля, по которому группировка.

Тогда у нас сразу во временной таблице готовые данные получаются, и их тупо надо вывести в Эксель.
то есть Вы группировку делаете посредством аксаптовского запроса?? я в моем случае в запросе учитываю только фильтры, вот как на данный момент выглядит мой запрос:

q=new Query();
qr=new QueryRun(q);
qbds=qr.query().addDataSource(tablenum(InventTable));
qr.query().dataSourceTable(tablenum(InventTable)).relations(false);

q1=new Query();
qr1=new QueryRun(q1);
qbds1=qr1.query().addDataSource(tablenum(InventSum));
qbds1.addSortField(fieldnum(InventSum,InventDimId));
qbds1.addSortField(fieldnum(InventSum,LastUpdDatePhysical));
qbds1.orderMode(OrderMode::GroupBy);
qbds1.addSelectionField(fieldnum(InventSum,LastUpdDatePhysical),SelectionField::Max);
qbds1.addSelectionField(fieldnum(InventSum,InventDimId),SelectionField:atabase);
qbds1.addSelectionField(fieldnum(InventSum,ItemId),SelectionField:atabase);
qbds1.addSelectionField(fieldnum(InventSum,PostedQty),SelectionField::Sum);
qbds1.addSelectionField(fieldnum(InventSum,Received),SelectionField::Sum);
qbds1.addSelectionField(fieldnum(InventSum,Deducted),SelectionField::Sum);
qbds1.addSelectionField(fieldnum(InventSum,Picked),SelectionField::Sum);
qbds1.addSelectionField(fieldnum(InventSum,Registered),SelectionField::Sum);
qbds1.addSelectionField(fieldnum(InventSum,PostedValue),SelectionField::Sum);
qbds1.addRange(fieldnum(InventSum, ItemId));
qbds1.addRange(fieldnum(InventSum,LastUpdDatePhysical)).value(".."+Fdate.valueStr());
qr1.query().dataSourceTable(tablenum(InventSum)).addDataSource(tablenum(InventDim));
qr1.query().dataSourceTable(tablenum(InventDim)).joinMode(joinMODE::InnerJoin);
qr1.query().dataSourceTable(tablenum(InventDim)).addLink(fieldnum(InventDim,InventDimId),fieldnum(InventSum,InventDimId));

qr.query().dataSourceNo(1).clearRanges();
if (TMC.valueStr()!='')
qr.query().dataSourceNo(1).addRange(fieldnum(InventTable,ItemId)).value(TMC.valueStr());
if (GroupTMC.valueStr()!='')
qr.query().dataSourceNo(1).addRange(fieldnum(InventTable,ItemGroupId)).value(GroupTMC.valueStr());

qr.init(); //запрос по таблицам InventSum и InventTable
while (qr.next())
{
it = qr.get(tablenum(InventTable));
qr1.query().dataSourceNo(2).clearRanges();
qr1.query().dataSourceNo(1).FindRange(fieldnum(InventSum, ItemId)).value(it.ItemId);
//накладываем основные ограничения-фильтры для 2-го запроса (по склад. аналитикам)
if (Sklad.valueStr()!='')
qr1.query().dataSourceNo(2).addRange(fieldnum(InventDim,InventLocationId)).value(Sklad.valueStr());
if (MOL.valueStr()!='')
qr1.query().dataSourceNo(2).addRange(fieldnum(InventDim,InventMOLId)).value(MOL.valueStr());
if (Batch.valueStr()!='')
qr1.query().dataSourceNo(2).addRange(fieldnum(InventDim,InventBatchId)).value(Batch.valueStr());
//выполняем 2-ой запрос по складским аналитикам
qr1.init();
While (qr1.next())
{
..........
}

в данном случае тут 2 запроса, один по InventTable, результаты которого передаются во 2-ой запрос в качестве ограничения по таблице InventSum
За это сообщение автора поблагодарили: raniel (1).