— Ничего не поделаешь, — возразил Кот. — Все мы здесь не в своем уме — и я, и ты, иначе бы ты сюда не попала. (с) Льюис Кэрролл

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

Опубликовал devSonia Апрель - 24 - 2013

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


  • Яндекс.Метрика Счетчик PR-CY.Rank