Управление заголовком в группированных отчетах

Управление заголовком в группированных отчетах

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

Значения фильтров, по котором выполняется группировка, может возвращаться как в самом основном потоке отчета, так и в специально созданном потоке. Первая ситуация характерна для печатных представлений форматов экранных форм, вторая - для отчетов.

Если значения фильтров можно получить из основного потока, то для формирования группированного печатного представления достаточно:

  • в атрибуте «FilterNDataSet» указать название потока,

  • в атрибуте «FilterNFieldName» указать название поля, из которого будут получены значения фильтра.

  • атрибуту «FilterNFromCurrentRecord» присвоить значение «True»,

  • атрибуту «FilterNCaption» присвоить, если необходимо, значение для заголовка фильтра.

При использовании специального потока со значениями фильтра требуется на вкладке «Code»:

  • Создать глобальную переменную, например, FilterString, и обработчик события OnBeforePrint для компонента TssPageHeader.

    В обработчике события необходимо предусмотреть фильтрацию специальных потоков по признаку группировки из основного потока, а также перезагрузку данных компонента TssPageHeader.

var FilterString: String ='';

procedure TssPageHeader2OnBeforePrint(Sender: TfrxComponent);                                              
begin
  if TssFastReportDataSet(MasterData1.DataSet).DisplayText('stor_ID') <> FilterStore then begin
     FilterStore := TssFastReportDataSet(MasterData1.DataSet).DisplayText('stor_ID');
// Фильтрация складов                                                      
     TssFastReportDataSet(Report.GetDataSet('Stores')) := 'SELECT FROM Main WHERE stor_ID='+FilterStore;
// Фильтрация юридических лиц                                                                      
     TssFastReportDataSet(Report.GetDataSet('OwnFirms')) := 'SELECT FROM Main WHERE stor_ID='+FilterStore;  
// Обновление данных в компоненте заголовка страниц
     TssPageHeader2.ReloadData;
  end;            
end;