Добрый день!
Подскажите, пожалуйста, как реализовать следующий отчет в FastReport:
есть таблица tbl_Contracts:
есть таблица tbl_Payments:
___________________________________________________________________
| 1 | 100 р. | 01.01.2000
| 1 | 200 р. | 15.01.2000
| 1 | 500 р. | 25.02.2000
| 2 | 150 р. | 13.01.2000
| 2 | 250 р. | 13.02.2000
Нужно вот такой отчет:
... | ID договора | Сумма платежей за месяц первого платежа | ...
Т.е. если у нас у договора Дата первого платежа 01.01.2000 - то первым платежом считать все оплаты за январь, и в отчете вывести сумму всех платежей за январь одной строчкой.
Мне кажется как-то можно использовать Expressions у поля, но я могу ошибаться.
Заранее спасибо!
Нравится
Здравствуйте, Алексей.
Как вариант, Вы можете в sq выбрать дату платежа в формате "месяц.год" и в отчете использовать группировку (http://www.community.terrasoft.ua/forum/topic/8512) платежей по дате. А группировать Вы будете суммы платежей, что-то вроде:
[SUM(<ds_ReportPayments."PaymentAmount">,mdPayment)]
Максим, спасибо! Так все получилось. Но есть одна проблема - как избавиться от ненужных записей теперь? (выводимых в отчете)
Т.е. чтобы записи с другими месяцами не выводились в отчет, а выводилась ТОЛЬКО группа, у которой месяц и год = месяц и год поля "Дата первого платежа"? Что посоветуете?
Т.е. если совсем просто как сделать так, чтобы выводились только те записи, у которых, например, "Дата первого платежа" = '01.01.2013' ?
Здравствуйте, Алексей.
Воспользуйтесь фильтрами. В sq добавьте колонку даты платежа, добавьте это поле в ds отчета и в дизайнере воспользуйтесь функцией определения фильтра (Ctrl+R) и задайте фильтрацию по дате первого платежа.
Максим, здравствуйте.
Я сделал по-другому - в обработчике события MasterData1OnBeforePrint написал следующий код:
if (<TSDataset1."OPLATA_DATE_MONTH"> = <TSDataset1."FirstPaymentDate_MONTH">) and (<TSDataset1."OPLATA_DATE_MONTH"> <> '') and (<TSDataset1."OPLATA"> <> 0) then begin MasterData1.Visible := true; GroupHeader2.Visible := true; GroupFooter2.Visible := true; end else begin MasterData1.Visible := false; GroupHeader2.Visible := false; GroupFooter2.Visible := false; end;
и это оказалось именно тем, что было нужно! Может, поможет, кому-нибудь.