08.06.2006, 13:09 | #41 |
Участник
|
Цитата:
Сообщение от belugin
>>>а почему не надо то
а зачем надо Цитата:
Сообщение от belugin
>>> Selection по RecID
в данном случае не нужен. |
|
08.06.2006, 13:28 | #42 |
Программатор
|
Покажите ваш ужасный запрос (если конечно это не секрет). А мы посмотрим, что там не так или так
|
|
08.06.2006, 13:36 | #43 |
Участник
|
надо группировать InventDim по складу - это уже есть. А вот как вы собираетесь одновременно группировать по складу и читать зругие поля???
>>>а зачем тогда советовали?? это нужно былобы если бы InventSum был не 1 таблицей в запросе |
|
08.06.2006, 13:45 | #44 |
Участник
|
Цитата:
Сообщение от 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 этого контейнера и точно определяют по каким полям и из каких таблиц надо делать группировки!! вот такие пироги... смотрите |
|
08.06.2006, 13:48 | #45 |
Участник
|
Цитата:
Сообщение от belugin
надо группировать InventDim по складу - это уже есть. А вот как вы собираетесь одновременно группировать по складу и читать зругие поля???
qr.init(); i=3; while (qr.next()) { rec=qr.get(tablenum(Inventsum)); qty = rec.PostedQty + rec.Received + rec.Registered - rec.Deducted - rec.Picked; kolvo = rec.PostedValue; TB.appendText(InventTable::find(rec.ItemId).ItemName+'\t'+InventDim::find(rec.InventDimId).InventLocationId+'\t'+int2str(kolvo)+'\t'+int2str(qty)); TB.toClipboard(); TB.delete(1,strlen(tb.getText())); Rng = sheet.range('A'+int2str(i)); Rng.pasteSpecial(1); i++; } если е делать группировку в запросе по InventDimId, то вместо InventLocationId будет пустота!! а как только добавляем эту группировку - сразу имеем доступ к др. полям таблицы InventDim |
|
08.06.2006, 13:51 | #46 |
Участник
|
InventDim::find(rec.InventDimId).InventLocationId
--> inventDim=qr.get(tablenum(InventDim); inventDim.InventLocationID |
|
08.06.2006, 14:01 | #47 |
Участник
|
Цитата:
Сообщение от belugin
InventDim::find(rec.InventDimId).InventLocationId
--> inventDim=qr.get(tablenum(InventDim); inventDim.InventLocationID |
|
08.06.2006, 14:10 | #48 |
Участник
|
Цитата:
Сообщение от Sada
Покажите ваш ужасный запрос (если конечно это не секрет). А мы посмотрим, что там не так или так
|
|
08.06.2006, 14:11 | #49 |
Программатор
|
Посмотрел...доволен
|
|
08.06.2006, 14:15 | #50 |
Участник
|
Цитата:
Сообщение от Sada
Посмотрел...доволен
|
|
08.06.2006, 14:32 | #51 |
Участник
|
уже разобрался спасибо... осталось выяснить вопрос с сортировкой...будет ли автоматическая сортировка по тем же полям, что выбраны в группировке
|
|
08.06.2006, 14:36 | #52 |
Участник
|
да. посмотрите запросы которые посылаются на сервер
|
|
08.06.2006, 14:45 | #53 |
Участник
|
Цитата:
Сообщение от belugin
да. посмотрите запросы которые посылаются на сервер
вопрос как придти к такой сортировке |
|
08.06.2006, 15:31 | #54 |
Участник
|
Цитата:
Сообщение от belugin
да. посмотрите запросы которые посылаются на сервер
В связи с тем что группировка/СОРТИРОВКА по ItemID всегда идет первая, то в результате запроса неполучается добиться например той же группировки по складам, в которых будет группировка по номенклатуре!! Всегда получается что сортировка идет по ItemId...похоже без временной таблицы все таки не обойтись... |
|
08.06.2006, 16:23 | #55 |
Участник
|
Да, с сортировками у вас будут проблемы
В принципе, их можно сделать, но даже извратом все равно не всегда удастся получить желаемый результат. Я, когда нужна была сортировка по аналитиками складским прежде, чем по номенклатуре, менял порядок добавления запросов - то есть ставил первым InventDim, а потом уже другие. Когда нужно сортировать было по наименованию номенклатуры, первым делал InventTable Потом мы от этого отказались Добавили только наименование - и я имею в виду - именно добавили - в InventSum И пользователи довольны, и реляционные формы не очень много нарушили Вообще, много, но это уже менее важно. |
|
08.06.2006, 17:19 | #56 |
Участник
|
Вот, посмотрите еще след. пост:
Сортировка в запросе "В Наличии" |
|
08.06.2006, 18:30 | #57 |
Участник
|
Цитата:
Сообщение от kashperuk
Добавили только наименование - и я имею в виду - именно добавили - в InventSum
И пользователи довольны, и реляционные формы не очень много нарушили Вообще, много, но это уже менее важно. |
|
08.06.2006, 18:32 | #58 |
Участник
|
Цитата:
Сообщение от kashperuk
Вот, посмотрите еще след. пост:
Сортировка в запросе "В Наличии" |
|
08.06.2006, 20:55 | #59 |
Участник
|
Цитата:
Сообщение от sparur
То есть?? не понял что Вы имеете ввиду под этими словами??
|
|
09.06.2006, 07:13 | #60 |
Участник
|
Цитата:
Сообщение от kashperuk
В смысле добавили поле ItemName в InventSum и синхронизируем когда надо.
|
|