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