Фильтрация связаного датасета в отчете FastReport?
Добрый день! Подскажите как реализовать следующий функционал. Нужно реализовать отчет который состоит из одного главного датасета и двух подчиненных. Делаю следующим образом.
1. Создаю главный датасет в котором указываю поле по которому будет фильтрация в подчиненных
2. Создаю подчиненные датасеты и в них создаю фильтр с таким же именем.
Все работает но мне нужно еще в подчиненых датасетах установить фильтры по дате за определенный период из окна фильтрации. Делаю следующим образом
var NewPhoneDataset = GetSingleItemByCode('ds_GetCountPhoneByCentrIncoment','GetCountPhoneNew');
var NewPhoneQueryParam = NewPhoneDataset.SelectQuery.Parameters;
var Report = GetSingleItemByCode('fr_EnterPhoneReport');//сервис отчета
var ReportPreviewer = GetSingleItemByCode('wnd_BaseFastReportPreview');
var ReportPreviewerComponent = ReportPreviewer.Attributes('ReportPreviewer')
SetAttribute(ReportPreviewer, 'Report', Report);
SetParameterValue(NewPhoneQueryParam,'StartDate',StartDate);
SetParameterValue(NewPhoneQueryParam,'EndDate',EndDate);
EnableDatasetFilters(NewPhoneDataset, true, 'CreatedOn');
ReportPreviewer.Build();
ReportPreviewer.Prepare();
ReportPreviewerComponent.DatasetByUSI('ds_EnterPhoneReport') = CentrIncomDataset;//TODO
ReportPreviewerComponent.DatasetByUSI('ds_GetCountPhoneByCentrIncomentNew') = NewPhoneDataset;//TODO
Но фильтр не отрабатывает. Если его включить в конструкторе то происходит ошибка.
Подскажите как реализовать?
Нравится
Все вопрос закрыт. Реализовал следующим образом. Повесил обработчик на событие OnPrepare отчета следующий код
[javascript]
var Dataset = ReportPreviewer.DatasetByComponentName("ds_GetCountPhoneByCentrIncomentNew");
var DatasetSw = ReportPreviewer.DatasetByComponentName("ds_GetCountPhoneByCentrIncomentSw");
var FinishStateID = GetAttribute(ReportPreviewer.Report,'FinishStateID');
var WorkStateID = GetAttribute(ReportPreviewer.Report,'WorkStateID');
var StartDate = GetAttribute(ReportPreviewer.Report,'StartDate');
var EndDate = GetAttribute(ReportPreviewer.Report,'EndDate');
var CentrIncomentID = GetAttribute(ReportPreviewer.Report,'CentrIncomentID');
if (!IsEmptyValue(CentrIncomentID))
{
var MasterDataset = ReportPreviewer.DatasetByComponentName("ds_EnterPhoneReport");
ApplyDatasetFilter(MasterDataset, 'CentrIncomentID', CentrIncomentID, true);
}
EnableDatasetFilters(Dataset,true,'PeriodCreatedOn');
ApplyDatasetFilter(Dataset, 'StartDate', StartDate, true);
ApplyDatasetFilter(Dataset, 'EndDate', EndDate, true);
ApplyDatasetFilter(DatasetSw, 'StateID', WorkStateID, true);
EnableDatasetFilters(DatasetSw,true,'PeriodDataSwithOn');
ApplyDatasetFilter(DatasetSw, 'StartDate', StartDate, true);
ApplyDatasetFilter(DatasetSw, 'EndDate', EndDate, true);
ApplyDatasetFilter(DatasetSw, 'StateID',FinishStateID , true);
[/javascript]
В данном случае при вызове отчета ему передаются в атрибутах дата начала периода, ID состояния, и ID центра дохода после чего применяются фильтры