Фильтрация связаного датасета в отчете FastReport?

Добрый день! Подскажите как реализовать следующий функционал. Нужно реализовать отчет который состоит из одного главного датасета и двух подчиненных. Делаю следующим образом.

1. Создаю главный датасет в котором указываю поле по которому будет фильтрация в подчиненных
2. Создаю подчиненные датасеты и в них создаю фильтр с таким же именем.
Все работает но мне нужно еще в подчиненых датасетах установить фильтры по дате за определенный период из окна фильтрации. Делаю следующим образом

var CentrIncomDataset = dlData.Dataset;
                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

Но фильтр не отрабатывает. Если его включить в конструкторе то происходит ошибка.
Подскажите как реализовать?

Нравится

1 комментарий

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

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