05.06.2006, 13:26 | #21 |
Программатор
|
Запутался...
Может во временную таблицу склад запихать? |
|
05.06.2006, 13:42 | #22 |
Участник
|
Цитата:
Сообщение от sparur
таблицу отсортировать по укзанным полям, то было бы замечательно и дальше ваш метод бы подошел, НО я не знаю такой стандартной функции!!
Или сделать свою копию и ее изменить |
|
05.06.2006, 13:50 | #23 |
Участник
|
To sparur
Ответ на Ваш изначальный вопрос. Я для группировки данных использую класс RHolderData и его наследников. Для примера можно использовать любую из ОСВ, разработынные локализаторами. |
|
05.06.2006, 16:29 | #24 |
Участник
|
Даа, код у вас мягко говоря, плохо будет работать.
Не понял, почему нельзя было сразу заджойнить InventTable к двум другим. это раз. Второе - почему группировка по inventDimId - вы же получите совсем другую информацию. Хотя, конечно, если потом суммировать по временной таблице, может и сработает. Это 2. Совет: Посмотрите, как работает запрос "В наличии" (InventOnHandItem - Управление запасами\запросы\в наличии) - там запрос уж до боли похож на тот, который вам нужно бы построить. И макрос InventDimJoin - там идет связь с указанной таблицей (в вашем случае, InventSum) по номеру аналитики и фильтрация по складским аналитикам при указанных вами значениях - то есть то, что вам надо бы сделать. И хорошо бы для пользоватлей привентить стандартную форму Выбора Аналитики, как в запросе в Наличии (InventDimParm форма, вроде бы) |
|
05.06.2006, 16:32 | #25 |
Участник
|
Плюс необходимая вам сортировка по складу, т.д. появится автоматически при группировке по этим полям на inventDim (правда, если до этого нет группировки по ItemId)
|
|
06.06.2006, 09:06 | #26 |
Участник
|
Цитата:
Сообщение от kashperuk
Даа, код у вас мягко говоря, плохо будет работать.
Не понял, почему нельзя было сразу заджойнить InventTable к двум другим. это раз. |
|
06.06.2006, 11:54 | #27 |
Участник
|
Все дело в fetchMode
Попробуйте вот так static void Job1(Args _args) { Query q; QueryBuildDataSource qbdsISum; QueryBuildDataSource qbdsITable; QueryBuildDataSource qbdsIDim; ; 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); box::info(q.dataSourceNo(1).toString()); } |
|
|
За это сообщение автора поблагодарили: sparur (1). |
06.06.2006, 11:56 | #28 |
Участник
|
Цитата:
Сообщение от kashperuk
Даа, код у вас мягко говоря, плохо будет работать.
|
|
06.06.2006, 11:58 | #29 |
Участник
|
Цитата:
Сообщение от kashperuk
Все дело в fetchMode
Попробуйте вот так static void Job1(Args _args) { Query q; QueryBuildDataSource qbdsISum; QueryBuildDataSource qbdsITable; QueryBuildDataSource qbdsIDim; ; 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); box::info(q.dataSourceNo(1).toString()); } |
|
06.06.2006, 11:59 | #30 |
Программатор
|
qbdsITable.fetchMode(QueryFetchMode::One2One);
Это и есть чтото типа JOIN'ов. Попробуйте - может получится. |
|
06.06.2006, 12:02 | #31 |
Участник
|
Цитата:
Сообщение от kashperuk
Все дело в fetchMode
Попробуйте вот так static void Job1(Args _args) { Query q; QueryBuildDataSource qbdsISum; QueryBuildDataSource qbdsITable; QueryBuildDataSource qbdsIDim; ; 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); box::info(q.dataSourceNo(1).toString()); } |
|
06.06.2006, 12:03 | #32 |
Участник
|
Цитата:
Сообщение от Sada
qbdsITable.fetchMode(QueryFetchMode::One2One);
Это и есть чтото типа JOIN'ов. Попробуйте - может получится. |
|
06.06.2006, 12:10 | #33 |
Программатор
|
Напоминаем про зеленые квадратики по аватарой (не сочтите за флуд )
|
|
06.06.2006, 12:20 | #34 |
Участник
|
Цитата:
Сообщение от Sada
Напоминаем про зеленые квадратики по аватарой (не сочтите за флуд )
|
|
06.06.2006, 15:43 | #35 |
Участник
|
Ну, вообще, fetchMode - это не join - это то, как таблицы будут соединяться. Один ко многим или один к одному.
А вот само соединение происходит при указании relations(true) - при этом условие соединения подтягивается из сведений о таблицах и их полях. См. узел relations на таблицах и таблицы, указанные на EDT. (Типа ItemId ссылается на inventTable) Это аналогично написанию addLink() по этим полям. |
|
08.06.2006, 12:18 | #36 |
Участник
|
теперь, однако, встала проблема с группировкой и сортировкой данных в запросе... код мой громоздкий поэтому приводить не буду, скажу лишь следующее:
допустим надо мне сгруппировать по складу, в результате выполнения моего кода получается запрос вида: SELECT SUM(PostedQty), SUM(Received), SUM(Deducted), SUM(Picked), SUM(Registered), SUM(PostedValue) FROM InventSum GROUP BY InventSum.ItemId ASC, InventSum.InventDimId ASC WHERE ((LastUpdDatePhysical<=08.06.2006)) JOIN * FROM InventTable WHERE InventSum.ItemId = InventTable.ItemId JOIN * FROM InventDim GROUP BY InventDim.InventLocationId ASC WHERE InventSum.InventDimId = InventDim.inventDimId в результате которого у мну не получается никакой группировки...и тем более сортировки данных подскажите в чем трабл... |
|
08.06.2006, 12:27 | #37 |
Участник
|
yне надо группировать по InventSum.InventDimId - лучше выберите maxOf(InventSum.RecID)
|
|
08.06.2006, 12:30 | #38 |
Участник
|
Цитата:
Сообщение от belugin
yне надо группировать по InventSum.InventDimId - лучше выберите maxOf(InventSum.RecID)
|
|
08.06.2006, 12:43 | #39 |
Участник
|
после поправок с Вашей подсказки:
а именно добавления строки: qbdsISum.addSelectionField(fieldnum(InventSum,RecID),SelectionField::Max); и удаления группировки по InventDimID получил запрос вида: SELECT SUM(PostedQty), SUM(Received), SUM(Deducted), SUM(Picked), SUM(Registered), SUM(PostedValue) FROM InventSum GROUP BY InventSum.ItemId ASC WHERE ((LastUpdDatePhysical<=08.06.2006)) JOIN * FROM InventTable WHERE InventSum.ItemId = InventTable.ItemId AND ((ItemId = 10002000111)) JOIN * FROM InventDim GROUP BY InventDim.InventLocationId ASC WHERE InventSum.InventDimId = InventDim.inventDimId не пойму почему в запросе не появилось поле с RecID |
|
08.06.2006, 13:03 | #40 |
Участник
|
>>>а почему не надо то
а зачем надо >>> Selection по RecID в данном случае не нужен. |
|