Перейти к содержанию

Итоговые значения: различия между версиями

Материал из Химсофт Вики
 
(не показаны 3 промежуточные версии этого же участника)
Строка 110: Строка 110:
Однако часто необходимо напечатать итог, например, в '''заголовке группы'''. Если попытаться это сделать, мы увидим нулевое значение. В этот момент итог еще не начинал вычисляться, его значение будет готово в подвале группы.
Однако часто необходимо напечатать итог, например, в '''заголовке группы'''. Если попытаться это сделать, мы увидим нулевое значение. В этот момент итог еще не начинал вычисляться, его значение будет готово в подвале группы.


Для решения этой проблемы дизайнер предлагает механизм "отложенной" печати. Объект <code>Текст</code> имеет свойство <code>ProcessAt</code>, которое может принимать одно из следующих значений:
Для решения этой проблемы дизайнер предлагает механизм "отложенной" печати - объект <code>Текст</code> имеет свойство <code>ProcessAt</code>, которое может принимать одно из следующих значений:


{|class="wikitable" style="background-color: #fff;"
{|class="wikitable" style="background-color: #fff;"
Строка 142: Строка 142:
===Пример===
===Пример===


Положим на заголовок группы объект "Текст", который печатает итог по группе. Свойство ProcessAt установим в GroupFinished:
Разместим в заголовке группы объект <code>Текст</code>, который печатает итог по группе. Свойство <code>ProcessAt</code> установим в <code>GroupFinished</code>


[[Файл: create_total_8.png|center|border]]
[[Файл: create_total_8.png|center|border]]


При запуске отчета произойдет следующее:
При запуске отчета произойдет следующее:
*будет напечатан заголовок группы. При этом FastReport напечатает нулевой (неправильный) итог и запомнит это место в готовом отчете;
*будет напечатан заголовок группы; при этом дизайнер напечатает нулевой (неправильный) итог и запомнит это место в готовом отчете;
*будут напечатаны все строки данных группы;
*будут напечатаны все строки данных группы;
*будет напечатан подвал группы. В этот момент FastReport возьмет ранее запомненный объект и обработает его еще раз, на этот раз с правильным значением итога.
*будет напечатан подвал группы; в этот момент дизайнер возьмет ранее запомненный объект и обработает его еще раз, на этот раз с правильным значением итога.


Готовый отчет выглядит так:
Готовый отчет выглядит так:
Строка 155: Строка 155:
[[Файл: create_total_9.png|center|border|400px]]
[[Файл: create_total_9.png|center|border|400px]]


Аналогичным образом можно печатать итог по всему отчету в его заголовке (установите ProcessAt = ReportFinished) или итог по странице в заголовке страницы (ProcessAt = PageFinished).
Аналогичным образом можно печатать:
*итог по всему отчету в его заголовке (установить <code>ProcessAt = ReportFinished</code>);
*итог по странице в заголовке страницы (установить <code>ProcessAt = PageFinished</code>).


Механизм отложенной печати не работает, если включен файловый кэш (меню "Отчет|Свойства...", флажок "Использовать файловый кэш").
<div style="background-color: #e7f3ff; border-left: 5px solid #2196f3; padding: 15px; margin: 10px 0;">
'''Примечание'''
 
Механизм отложенной печати не работает, если включен файловый кэш:
*меню <code>Отчет|Свойства...</code>, флажок <code>Использовать файловый кэш</code>.
</div>

Текущая версия от 07:35, 19 октября 2026

Общие сведения

В большинстве отчетов надо выводить некую итоговую информацию: сумма по группе, количество строк в списке и т.п.

В дизайнере для этих целей существуют так называемые итоговые значения - с их помощью можно подсчитать функцию от определенного значения по диапазону данных.

Параметры итоговых значений

  • тип итоговой функции;
  • диапазон данных, для которого будет вычисляться функция; он задается следующим образом:
  • указывается бэнд Данные, для каждой строки которого будет вычисляться функция;
  • указывается бэнд, на котором будет печататься итог (после печати этого бэнда значение итога сбрасывается).
  • выражение, которое надо вычислять (для функции Количество выражение не указывается);
  • выражение–условие - функция будет вычисляться, если это условие выполняется (этот параметр задавать не обязательно).

Список итоговых функций

Функция Описание
Сумма Вычисляет сумму указанного выражения для диапазона данных.
Минимум Вычисляет минимальное значение указанного выражения для диапазона данных.
Максимум Вычисляет максимальное значение указанного выражения для диапазона данных.
Среднее Находит среднее значение указанного выражения для диапазона данных.
Количество Возвращает количество строк в диапазоне.
Количество разных Возвращает количество разных строк в диапазоне.

Создание итога

  • допустим, есть две таблицы – LaboratoryFilter (Фильтр лабораторий) и Indicators (Показатели);
  • таблицы связаны таким образом (с помощью структуры бэндов и фильтра показателей), что возможно создать отчет типа главный-подчиненный, который печатает список показателей для каждой лаборатории:
  • готовый отчет выглядит следующим образом:
  • добавим итог в этот отчет, который будет печатать общее количество показателей для каждой лаборатории - счетчик поля ind_name;
  • итог будет печататься в бэнде - подвале данных;
  • для создания итогового значения
  • в окне Данные нужно нажать кнопку Действия и выбрать пункт меню Новый итог...;
  • другой способ – щелкнуть правой кнопкой мыши на элементе Итоги в дереве данных и выбрать пункт меню Новый итог...;
  • появится окно редактора итогового значения:
  • отредактировать итоговое значение:
  • указать имя итога (например, Total);
  • выбрать итоговую функцию - в данном случае функция Количество;
  • указать диапазон данных, для которого будет вычисляться итог (в поле Вычислять для каждой строки бэнда выбирать бэнд Данные, в котором печатается список индикаторов; в поле Печатать итог на бэнде выбрать бэнд, в котором будет печататься итог – подвал бэнда Данные;
  • закрыть редактор итога кнопкой ОК.
  • новый итог появится в окне Данные;
  • теперь его можно перетащить в отчет:
  • если запустить отчет на выполнение, появится следующее:

Вычисление итога по условию

В предыдущем примере итог вычислялся для всего диапазона данных.

Возможно ограничить диапазон, указав условие в редакторе итога.

Итог будет вычисляться только для тех строк диапазона, для которых условие вернет истину (true).

Например, мы можем указать следующее условие:

Это будет означать, что в итоговый подсчет количества индикаторов будут включаться только те индикаторы, в названии которых содержится строка концентрация.

Печать нарастающего итога

В нашем примере итоги сбрасывались после печати бэнда Подвал данных.

Это происходило потому, что мы указали в редакторе, что итог необходимо сбрасывать после печати этого бэнда. Таким образом, каждая категория продуктов печатала свои собственные значения итогов.

Если выключить флажок Сбрасывать после печати, итог не будет сбрасываться после печати. Это так называемый нарастающий итог.

Если необходимо печатать два вида итогов одновременно - обычные итоги и нарастающие, нужно создать еще один итог с аналогичными настройками, и выключить флажок Сбрасывать после печати.

Итоги по странице

Для того чтобы создать итог, который будет печататься в подвале страницы:

  • нужно указать бэнд - подвал страницы - в поле Печатать на бэнде.

Печать итога в заголовке

Обычно итоговые значения печатаются на бэндах-подвалах (подвал данных, подвал группы, и т.п.). Это естественный порядок печати: в этот момент итог уже вычислен и готов к применению.

Однако часто необходимо напечатать итог, например, в заголовке группы. Если попытаться это сделать, мы увидим нулевое значение. В этот момент итог еще не начинал вычисляться, его значение будет готово в подвале группы.

Для решения этой проблемы дизайнер предлагает механизм "отложенной" печати - объект Текст имеет свойство ProcessAt, которое может принимать одно из следующих значений:

Значение Описание
Default Обычный режим, значение по умолчанию.
ReportFinished Значение объекта обновляется при завершении отчета.
ReportPageFinished Значение объекта обновляется при завершении всех бэндов на странице отчета.
PageFinished Значение объекта обновляется печати подвала страницы.
ColumnFinished Значение объекта обновляется при печати подвала колонки.
DataFinished Значение объекта обновляется при печати подвала данных.
GroupFinished Значение объекта обновляется при печати подвала группы.

Пример

Разместим в заголовке группы объект Текст, который печатает итог по группе. Свойство ProcessAt установим в GroupFinished

При запуске отчета произойдет следующее:

  • будет напечатан заголовок группы; при этом дизайнер напечатает нулевой (неправильный) итог и запомнит это место в готовом отчете;
  • будут напечатаны все строки данных группы;
  • будет напечатан подвал группы; в этот момент дизайнер возьмет ранее запомненный объект и обработает его еще раз, на этот раз с правильным значением итога.

Готовый отчет выглядит так:

Аналогичным образом можно печатать:

  • итог по всему отчету в его заголовке (установить ProcessAt = ReportFinished);
  • итог по странице в заголовке страницы (установить ProcessAt = PageFinished).

Примечание

Механизм отложенной печати не работает, если включен файловый кэш:

  • меню Отчет|Свойства..., флажок Использовать файловый кэш.