|
![]() |
#1 |
Участник
|
Цитата:
Сообщение от Sada
Покажите ваш ужасный запрос (если конечно это не секрет). А мы посмотрим, что там не так или так
![]() ![]() q = new Query(); qbdsISum = q.addDataSource(tableNum(InventSum)); qbdsITable = qbdsISum.addDataSource(tableNum(InventTable)); qbdsITable.fetchMode(QueryFetchMode::One2One); qbdsITable.relations(true); qbdsIDim = qbdsISum.addDataSource(tableNum(InventDim)); qbdsIDim.fetchMode(QueryFetchMode::One2One); qbdsIDim.relations(true); //указываем поля, необходимые нам в результате запроса qbdsISum.addSelectionField(fieldnum(InventSum,LastUpdDatePhysical),SelectionField::Max); qbdsISum.addSelectionField(fieldnum(InventSum,InventDimId),SelectionField:database); qbdsISum.addSelectionField(fieldnum(InventSum,ItemId),SelectionField:database); qbdsISum.addSelectionField(fieldnum(InventSum,PostedQty),SelectionField::Sum); qbdsISum.addSelectionField(fieldnum(InventSum,Received),SelectionField::Sum); qbdsISum.addSelectionField(fieldnum(InventSum,Deducted),SelectionField::Sum); qbdsISum.addSelectionField(fieldnum(InventSum,Picked),SelectionField::Sum); qbdsISum.addSelectionField(fieldnum(InventSum,Registered),SelectionField::Sum); qbdsISum.addSelectionField(fieldnum(InventSum,PostedValue),SelectionField::Sum); //добавляем ограничение по таблице InventSum qbdsISum.addRange(fieldnum(InventSum,LastUpdDatePhysical)).value(".."+Fdate.valueStr()); //добавляем ограничение по таблице InventTable qbdsITable.addRange(fieldnum(InventTable,ItemId)); qbdsITable.addRange(fieldnum(InventTable,ItemGroupId)); //добавляем ограничение по таблице InventDim qbdsIDim.addRange(fieldnum(Inventdim, InventLocationId)); qbdsIDim.addRange(fieldnum(Inventdim, InventMOLId)); qbdsIDim.addRange(fieldnum(Inventdim, InventBatchId)); //забиваем значение ограничений(фильтров) if (TMC.valueStr()!="") qbdsITable.FindRange(fieldnum(InventTable,ItemId)).value(TMC.valueStr()); if (GroupTMC.valueStr()!="") qbdsITable.FindRange(fieldnum(InventTable,ItemGroupId)).value(GroupTMC.valueStr()); if (Sklad.valueStr()!="") qbdsIDim.FindRange(fieldnum(InventDim,InventLocationId)).value(Sklad.valueStr()); if (MOL.valueStr()!="") qbdsIDim.FindRange(fieldnum(InventDim,InventMOLId)).value(MOL.valueStr()); if (Batch.valueStr()!="") qbdsIDim.FindRange(fieldnum(InventDim,InventBatchId)).value(Batch.valueStr()); qbdsISum.addSortField(fieldnum(InventSum,ItemId)); qbdsISum.orderMode(OrderMode::GroupBy); //делаем группировку for (i=LevelСount-1;i>=0;i--) //for (i=0;i<LevelСount;i++) { level=SelList.getItem(i).data(); [tableid,fieldid]=conpeek(groupfields,level); switch (tableid) { case tableNum(InventTable): switch (fieldid) { case fieldNum(InventTable,ItemId): qbdsITable.addSortField(fieldid); qbdsITable.orderMode(OrderMode::GroupBy); //qbdsITable.addSortIndex(indexnum(InventTable,ItemIdx)); break; case fieldNum(InventTable,ItemGroupId): qbdsITable.addSortField(fieldid); qbdsITable.orderMode(OrderMode::GroupBy); //qbdsITable.addSortIndex(indexnum(InventTable,GroupItemIdx)); break; } break; case tablenum(InventDim) : qbdsISum.addSortField(fieldNum(InventSum,InventDimId)); qbdsISum.orderMode(OrderMode::GroupBy); switch (fieldId) { case fieldNum(InventDim,InventLocationId): qbdsIDim.addSortField(fieldid); qbdsIDim.orderMode(OrderMode::GroupBy); //qbdsIDim.addSortIndex(indexnum(InventDim,LocationIdIdx)); break; case fieldNum(InventDim,InventMOLId): qbdsIDim.addSortField(fieldid); qbdsIDim.orderMode(OrderMode::GroupBy); //qbdsIDim.addSortIndex(indexnum(InventDim,InventMOLIdIdx)); break; case fieldNum(InventDim,InventBatchId): qbdsIDim.addSortField(fieldid); qbdsIDim.orderMode(OrderMode::GroupBy); //qbdsIDim.addSortIndex(indexnum(InventDim,BatchIdIdx)); break; } break; } } здесь ситуация следующая: есть список (ListView) в котором хранятся поля, по которым надо группировать, в каждом элементе ListView в поле data хранится контейнер с идентификатором Таблицы и идентификатором поля. Собственно конструкции switch и обеспечивают вытягивание из data этого контейнера и точно определяют по каким полям и из каких таблиц надо делать группировки!! вот такие пироги... смотрите |
|