Отчёты
Разработка

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

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