Публикация

Передача параметра в отчет FastReport и фильтрация

Задача: Есть отчет, появляется окно выбора даты, выбираем дату, данные в отчете FastReport фильтруются по этой дате.

Пусть у нас есть таблица с данными tbl_frDate

SELECT * FROM tbl_frDate

1
И мы хотим создать отчет FastReport отфильтровав данные по дате, для этого мы создали SQ для получения данных
2

3

4

5

6

Параметр MyDate, мы используем для фильтрации, его и будем передавать в отчет

На основании sq создаем Dataset ds_frDate:
7

Создаем отчет FR, подключаем созданные Dataset
8
В самом дизайнере FR, для тестирования положим несколько Memo (предварительно добавив Master Data в дизайнер)

9
Далее, добавим обработчик события на OnPreview созданного нами отчета (fr_frDate)
10

Дату правильно всего передавать в атрибуты самого отчета ReportPreviewer.Report
В событии fr_frDateOnPrepare мы еще не видим данные с окна фильтрации,а вот в fr_frDateOnPreview видим,

function fr_frDateOnPreview(ReportPreviewer) {
 var DatasetNameStr = "ds_frDate"; //датасет в котором мы хотим делать фильтр по дате (необходимо помнить о том, что у отчета может быть несколько датасетов)
 var str = ReportPreviewer.DatasetUSIList.CommaText; //в строчке ReportPreviewer.DatasetUSIList.CommaText передаются USI датасетов, через запятую
 var ReportDatasetUSI =  str.substr(str.indexOf(DatasetNameStr), DatasetNameStr.length);
 var Dataset = ReportPreviewer.DatasetByUSI(ReportDatasetUSI);

                var val = GetAttribute(ReportPreviewer.Report,'TestDate');
                ApplyDatasetFilter(Dataset, 'MyDate', val, true);
}

Саму переменную, мы также можем получить в FastReport объявив ее следующим образом
11

12

Кстати, в самом дизайнере можем проверять значение следующим образом

[IIF(TSDataset1."MyDate"> TestDate>,TSDataset1."MyDate">,'')]

Как прикрепить окно фильтрации к отчету описано в инструкции Создать свое окно фильтрации для отчета.doc

В самом окне фильтрации параметр передаем так:

//-----------------------------------------------------------------------------
// wnd_FilterWindowTestScript
//-----------------------------------------------------------------------------

function SaveDatePeriod() {
        var ReportPreviewer = Self.Attributes('ReportPreviewer');
                ReportPreviewer.Report.Attributes('TestDate')  = edtDate.Value;
}  


function btnCancelOnClick(Control) {
         Self.Close();
}    


function btnOKOnClick(Control) {
                SaveDatePeriod();      
                SendNotify(Self, MSG_OK);
}

Все сервисы в архиве

Нравится

Поделиться

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

pls password для frpar.rar

Добрый день!

Файл без пароля.

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