06.05.2004, 17:38 | #1 |
Участник
|
Не удается разобраться с query
Нужно получить данные из SalesPickingListJournalLine сгруппировать по ItemId, получить сумму по InventQty и вывести в отчет:
- - ItemGroup (из InventTable) - - ItemId - - Name - - Qty Практически то что нужно и получил, но появились дублирующие строки: - - ItemId1 - - Name1 - - Qty1 - - ItemGroup1 - - ItemId1 - - Name1 - - Qty1 - - ItemId2 - - Name2 - - Qty2 - - ItemGroup2 - - ItemId2 - - Name2 - - Qty2 как от них избавиться? PHP код:
|
|
07.05.2004, 10:11 | #2 |
Участник
|
И еще один вопрос вдогонку.
Не удается вытащить поля _tmp, например, _tmp.ItemId, если по Itemid не было сделано каких либо операций (addSortField или SelectionField::Sum). С чем это связано? |
|
07.05.2004, 11:08 | #3 |
----------------
|
Посмотри запрос, который формирует Аксапта к SQL серверу - это помогает понять, что происходит.
Перед qr = .. можно добавить info(qbd.toString()); |
|
07.05.2004, 11:20 | #4 |
Участник
|
Цитата:
Изначально опубликовано Wamr
Посмотри запрос, который формирует Аксапта к SQL серверу - это помогает понять, что происходит. Перед qr = .. можно добавить info(qbd.toString()); С виду же все вроде правильно: SELECT SUM(InventQty) FROM SalesPickingListJournalLine WHERE ((SalesId = ZKZ000226 OR SalesId = ZKZ000227)) JOIN * FROM InventTable GROUP BY InventTable.ItemGroupId ASC WHERE SalesPickingListJournalLine.Itemid = InventTable.ItemId |
|
07.05.2004, 11:23 | #5 |
Участник
|
Впрочем я похоже сильно протормозил - все в порядке, данные выбираются те что надо не понятно только почему я не могу их вытащить - мой второй вопрос. Не подскажите в чем дело?
|
|
07.05.2004, 11:48 | #6 |
Участник
|
Не знаю - вот этот код у меня лично все вытаскивает.
Во-первых между таблицами запроса нет relation в AOT поэтому лучше пользоваться AddLink. Во-вторых: вы агрегируете поля первого источника данных, а пытаетесь взять одно из полей второго, а где его агрегация ? querybuildDATASOURCE QBD, qbi; query query = NEW QUERY(); QUERYRUN qr; SalesPickingListJournalLine _TMP; INVENTTABLE _tmpGr; ItemId ItemId; ItemName ItemName; ItemGroupiD ItemGroup; STR 10 QTY; ; qbd = query.adddatasource(tableNum(SalesPickingListJournalLine)); qbd.orderMode(OrderMode::GroupBy); qbd.addSortField(fieldNum(SalesPickingListJournalLine, ItemId)); qbd.addSortField(fieldNum(SalesPickingListJournalLine, Name)); qbd.addSelectionField(fieldNum(SalesPickingListJournalLine,InventQty), SelectionField::Sum); qbi = qbd.addDataSource(tableNum(InventTable)); //qbi.relations(true); qbi.addLink(fieldNum(SalesPickingListJournalLine, itemid), fieldNum(inventTable, itemid)); qbi.joinMode(JoinMode::INNERJOIN); qbi.fetchMode(0); qbi.orderMode(OrderMode::GroupBy); qbi.addSortField(fieldNum(inventTable, ItemGroupId)); qr = new QueryRun(query); while (qr.next()) { _tmp = qr.get(TableNum(SalesPickingListJournalLine)); _tmpGr = qr.get(TableNum(InventTable)); ItemId = _tmp.ItemId; ItemName = _tmp.Name; ItemGroup = _tmpGr.ItemGroupId; qty = num2str(_tmp.InventQty, 12, 2, 2, 3); info(ItemId); info(ItemName); info(ItemGroup); info(qty); info('-----------------------------'); } |
|
07.05.2004, 12:23 | #7 |
----------------
|
Цитата:
Изначально опубликовано Pegiy
И еще один вопрос вдогонку. Не удается вытащить поля _tmp, например, _tmp.ItemId, если по Itemid не было сделано каких либо операций (addSortField или SelectionField::Sum). С чем это связано? Так что Аксапта тут не виновата |
|
11.05.2004, 16:14 | #8 |
Участник
|
[QUOTE]Изначально опубликовано andreynikolai
Не знаю - вот этот код у меня лично все вытаскивает. Во-первых между таблицами запроса нет relation в AOT поэтому лучше пользоваться AddLink. Вот здесь не совсем понятно. Ведь я настраиваю связь в Query отчета, указываю по каким полям. Все равно надо строить связь? Во-вторых: вы агрегируете поля первого источника данных, а пытаетесь взять одно из полей второго, а где его агрегация ? Да, потерял при копировании. Конечно же она там есть И все-таки ваш запрос у меня не работает, точнее работает но не группируют так как хотелось бы мне - по ItemGroupId, а внутри группы по ItemId. C подсчтетом суммы для ItemId. И если не затруднит. Еще вот такой вопрос: Если я хочу вызвать отчет из диалога с возможностью фильтрации по опрделенным полям, я перекрываю метод dialog() класса откуда идет вызов отчета? |
|
11.05.2004, 16:48 | #9 |
Участник
|
Как работает связка класс-отчет (версия 2.5) можно посмотреть
на стандартном примере. Класс VendBalanceTurnoverRegister_RU (оборотно-сальдовая ведемость по поставщику). |
|
11.05.2004, 16:49 | #10 |
Участник
|
Цитата:
Изначально опубликовано Pegiy
И все-таки ваш запрос у меня не работает, точнее работает но не группируют так как хотелось бы мне - по ItemGroupId, а внутри группы по ItemId. C подсчтетом суммы для ItemId. Остался вопрос только фильтрации пользователем - как ей управлять, полями и значениями по умолчанию |
|