Фильтрация связаного датасета в отчете 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 отчета следующий код
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);
В данном случае при вызове отчета ему передаются в атрибутах дата начала периода, ID состояния, и ID центра дохода после чего применяются фильтры