Задача: Есть отчет, появляется окно выбора даты, выбираем дату, данные в отчете FastReport фильтруются по этой дате.
Пусть у нас есть таблица с данными tbl_frDate
И мы хотим создать отчет FastReport отфильтровав данные по дате, для этого мы создали SQ для получения данных
Параметр MyDate, мы используем для фильтрации, его и будем передавать в отчет
На основании sq создаем Dataset ds_frDate:
Создаем отчет FR, подключаем созданные Dataset
В самом дизайнере FR, для тестирования положим несколько Memo (предварительно добавив Master Data в дизайнер)
Далее, добавим обработчик события на OnPreview созданного нами отчета (fr_frDate)
Дату правильно всего передавать в атрибуты самого отчета 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 объявив ее следующим образом
Кстати, в самом дизайнере можем проверять значение следующим образом
[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);
}
Все сервисы в архиве