FastReport: как вывести итоги в заголовок группы?

Многие разработчики пользуются компонентами FastReport в своих программах. Но есть в них некоторые моменты, которые нельзя сделать примитивным образом, используя только визуальный редактор. Один из примеров — это подсчет и отображение итогов по группе в заголовке этой группы. Публикую небольшой мануал, с помощью которого можно быстро и легко сделать это.

Допустим, итог надо посчитать по MasterData, который формируется на основе Query, группируется по полю group, а сумма считается по полю summ.

  1. Настраиваем формирование отчета в два прохода (Отчет — Настройки — Основные — Свойства — Два прохода).
  2. Вставляем пустое поле в GroupHeader, назовем его MemoTotal.
  3. Создадим обработчик события OnBeforePrint для GroupFooter, пропишем в нем следующий код:
    [code] Set( //Устанавливаем значение переменной отчета (фактически — создаем эту
    //переменную)
    <Query."group">, //Имя переменной — это значение поля, по которому производится
    //группировка, по-другому — номер группы
    FloatToStr(SUM(<Query."summ">,MasterData)) //А значение — преобразованный в
    //строку результат работы
    //агрегатной функции SUM над
    //необходимым полем
    );[/code]
  4. Для бэнда GroupHeader также создаем обработчик для OnBeforePrint:
    [code]
    if Engine.FinalPass then //Если идет финальный проход по отчету
    MemoTotal.Text := Get(<Query."group">); //То в нужное поле отправляем значение
    //Соответствующей переменной
    [/code]

Небольшая модификация кода, а именно добавление обработчика onAfterPrint для MasterData и реализация в нем необходимого алгоритма, позволяет производить расчет произвольных нестандартных итогов в отчетах.

Tags: , ,

Leave a Reply