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

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

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

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

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