02.03.2006, 13:13 | #1 |
Участник
|
Запрос в отчёте
У меня следующая задача. В отчёте сгрупировать строки по определённым полям и вывести сумму одного из полей.
Для этого я переопределяю метод init в Query: Код: public void init() { Query q; QueryBuildDatasource qbds; super(); q = this.query(); qbds = q.dataSourceTable(tablenum(LedgerJournalTrans)); qbds.orderMode(OrderMode::GROUPBY); qbds.addSortField(fieldnum(LedgerJournalTrans, TransDate)); qbds.addSortField(fieldnum(LedgerJournalTrans, CurrencyCode)); qbds.addSelectionField(fieldnum(LedgerJournalTrans, InvoiceAmountCur), SelectionField::SUM); } SELECT SUM(InvoiceAmountCur), SUM(InvoiceAmountCur), SUM(InvoiceAmountCur) FROM LedgerJournalTrans GROUP BY LedgerJournalTrans.OffsetAccountType DESC, LedgerJournalTrans.OffsetAccount DESC, LedgerJournalTrans.TransDate DESC, LedgerJournalTrans.CurrencyCode DESC, LedgerJournalTrans.Txt ASC, LedgerJournalTrans.AmountCurDebit ASC, LedgerJournalTrans.AmountCurCredit ASC, LedgerJournalTrans.PaymentStatus ASC WHERE ((JournalNum = ПА00005)) И в итоге ничего запрос не возвращает. Не подскажите в чём дело? Как правильно нужно делать. Или другие варианты решения подобной задачи. |
|
02.03.2006, 13:52 | #2 |
Microsoft Dynamics
|
А какие еще таблицы входят в этот запрос, кроме LedgerJournalTrans? Вероятно, LedgerJournalTrans с чем-то еще поджойнена....
|
|
02.03.2006, 14:00 | #3 |
Участник
|
Нет, там только эта таблица. Я переделываю стандартный отчёт CustVendPaymJournal.
|
|
02.03.2006, 14:13 | #4 |
Участник
|
А если добавить:
qbds.addSelectionField(fieldnum(LedgerJournalTrans, TransDate)); qbds.addSelectionField(fieldnum(LedgerJournalTrans, CurrencyCode)); |
|
02.03.2006, 14:19 | #5 |
Участник
|
то получается запрос(это я в дебаге смотрю):
SELECT SUM(InvoiceAmountCur), TransDate, CurrencyCode, SUM(InvoiceAmountCur), TransDate, CurrencyCode, SUM(InvoiceAmountCur), TransDate, CurrencyCode FROM LedgerJournalTrans GROUP BY LedgerJournalTrans.OffsetAccountType DESC, LedgerJournalTrans.OffsetAccount DESC, LedgerJournalTrans.TransDate DESC, LedgerJournalTrans.CurrencyCode DESC, LedgerJournalTrans.Txt ASC, LedgerJournalTrans.AmountCurDebit ASC, LedgerJournalTrans.AmountCurCredit ASC, LedgerJournalTrans.PaymentStatus ASC WHERE ((JournalNum = ПА00005)) и в итоге опять ничего не возвращается... |
|
02.03.2006, 14:27 | #6 |
Участник
|
А если super() убрать и поменять на q.addDataSource?
|
|
02.03.2006, 14:35 | #7 |
Участник
|
Вот так?
Код: Query q; QueryBuildDatasource qbds; // super(); q = this.query(); q.addDataSource(tablenum(LedgerJournalTrans)); qbds = q.dataSourceTable(tablenum(LedgerJournalTrans)); qbds.orderMode(OrderMode::GroupBy); ... Нет, не помогает, тоже самое... |
|
02.03.2006, 15:07 | #8 |
Участник
|
a
q = this.query(); поменять на q = new query(); |
|
02.03.2006, 15:15 | #9 |
Участник
|
а такой запрос у вас нормальные данные возвращает?
SELECT TransDate, CurrencyCode, SUM(AmountCurDebit) FROM LedgerJournalTrans GROUP BY TransDate, CurrencyCode |
|
02.03.2006, 15:29 | #10 |
NavAx
|
Когда отчеты работают через классы, то Query отчета строится по дизайну Query в отчете (тафтология), при этом метод init не вызывается. Попробуте в классе отчета перекрыть инициализацию Query отчета.
ЗЫ. Зделайте поиск по классам, ищите метод initQuery(). Последний раз редактировалось raz; 02.03.2006 в 15:33. |
|