Как посчитать в отчете сумму в поле

Добрый день!

Подскажите, пожалуйста, как реализовать следующий отчет в FastReport:

есть таблица tbl_Contracts:

... | ID договора | Дата первого платежа | ...

есть таблица tbl_Payments:

 ... | ID договора     |   Сумма платежа      | Дата платежа | ...
___________________________________________________________________
     |        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 у поля, но я могу ошибаться.

Заранее спасибо!

Нравится

4 комментария

Здравствуйте, Алексей.

Как вариант, Вы можете в 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;

и это оказалось именно тем, что было нужно! Может, поможет, кому-нибудь.

Показать все комментарии