привет

Немного альтернативной истории — Да, победили, и что толку? — вздыхал Саня. — Столько крови пролили, в половине Европы социализм установили. Теперь нам никогда не войти в европейскую семью народов, мы не уважали их ценности. А знаешь, сколько немок изнасиловали наши солдаты, когда заняли Берлин? Миллион! Это же ужасно! Саня, либеральный сетевой журналист, отлично...

Далее

#котозависимость Та же проблема...

Далее

Креатив в Магнитогорске Как и раньше продолжаю замечать необычные вещи, когда гуляю по городу. Некоторые кеативные люди заставляют улыбаться. Лифт, на котором можно отправиться в "Ж". Магазин, в котором продается самая не свежая выпечка в городе.

Далее

С днем рождения меня! https://www.youtube.com/watch?v=DL3pP7FsRGE

Далее

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

Рубрика : handmade, Программизмы

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

Прокомментировать