<< Click to Display Table of Contents >> Navigation: Проект > Документы объектов > Генератор отчетов > Проектирование отчетов > Функции и расчет итогов > Итоги > Итоги связанные с бэндами |
Для того чтобы рассчитать и отобразить итог, следует разместить текстовый компонент в отчете, вызвать редактор и перейти на вкладку Итог:
Поле выражения. В этом поле указывается выражение расчета итогов. Выражение можно указать вручную, либо оно будет сформировано автоматически, взависимости от других параметров.
Поле Итоговая функция. В данном поле выбирается функция расчета итогов.
В данном поле определяется бэнд Данные, по которому будет расчитан итог.
В данном поле определяется колонка данных, значения которой будут использоваться для рассчета итога.
При помощи переключателей, устанавливается объект рассчета итогов:
Отчет, т.е. итог будет рассчитан по всему отчету.
Колонка, т.е. итог будет рассчитан по каждой колонке в отчете.
Страница, т.е. итог будет рассчитан по каждой странице построенного отчета.
Параметр рассчета нарастающего итога. Если флажок установлен, то итог будет рассчитан как нарастающий. Если же флажок снят, то рассчет итогов будет только по объекту (отчет, колонка, страница).
Параметр Условие. Если флажок установлен, то при рассчете итогов будет учитываться условие. Если же флажок снят, то рассчет итогов будет без учета условия.
Поле, в котором указывается выражение условия.
По умолчанию, функции для рассчета итогов, возвращают значение типа Decimal (за исключением функций Count и CountDistinct). Однако, также можно производить расчеты с использованием и других двух типов данных - Double и Int64. Для того чтобы функция возвращала результат расчета, используя тип данных Double, добавьте латинскую букву D в верхнем регистре к названию функции. Для расчетов с использованием типа Int64 необходимо добавить латинскую букву I в верхнем регистре. Такое разделение позволят избежать потерь при расчетах итогов.
|
При использовании языка программирования C#, все функции следует писать строго с соблюдением регистра.
В случае с расчетами по Странице или контейнеру, синтаксис тот же за исключением добавления латинской буквы c как префикса к имени функции:
Для расчета итогов по колонке, к имени функции добавляется префикс col:
Функция Count отличается от остальных функций тем, что она не имеет выражения для расчета. Синтаксис для этой функции приведен ниже.
|
Обычно компоненты, в текстовом выражении которых указан вызов функции, располагаются на итоговых бэндах или на бэнде Данные (Data). В редакторе отчетов есть несколько видов итоговых бэндов:
Расположение компонентов с функциями на любом из указанных выше бэндов позволяет генератору отчетов точно определить, к какому бэнду Данные относится эта функция. Также компонент с функций можно разместить и на самом бэнде Data. В этом случае на каждой строке данных будет выведен результат расчета функции по всем строкам.
Если же требуется вывести итог, например, на бэнде Заголовок данных (Header), то это выполняется при помощи скрипта. Однако в редактор отчетов компонент с функцией может быть расположен на любом бэнде отчета.
Также допускается размещение компонента с функцией на странице и на других страницах шаблона отчета. К примеру, можно рассчитывать сумму значений по списку и вывести его в заголовке списка. Еще один пример, рассчитать количество строк в списке и вывести это значение в начале страницы. При этом, есть ограничение: необходимо указать бэнд Данные, по которому будет рассчитываться результат:
|
Для расчета итогов, в выражении можно не указывать дополнительные аргументы. Например, для функции Count необязательно или можно задать для функции Sum только один аргумент - выражение, которое должно быть рассчитано. Все это возможно, если генератор отчетов может определить, к какому бэнду Data относятся эти функции.
В противном случае, в аргументах следует указать источник данных или бэнд Данные, по которому необходимо рассчитать итог. В выражениях может быть указано:
|
Для того чтобы рассчитать итог по странице или панели следует к добавить латинскую букву c в нижнем регистре, как префикс к названию функции:
При расчете итогов по панели или по странице, желательно указывать бэнд Data, по которому производится расчет агрегатной функции. Это необходимо, потому что на одной странице может находиться более одного бэнда Data.
На одной странице или панели может использоваться любое количество агрегатных функций. MasterReport не налагает никаких ограничений на это. Допускается комбинирование итогов по странице с условием. К примеру:
|
Для того чтобы рассчитать итог по колонке необходимо добавить префикс col (от слова column) в нижнем регистре к названию функции. К примеру:
При расчете итогов по колонке желательно, текстовый компонент с функцией размещать на бэндах ColumnHeader, ColumnFooter, Header или Footer. Можно рассчитывать неограниченное количество итогов по колонке. Каких-либо ограничений не накладывается. Также допускается комбинирование итогов по колонке с условием:
|
При помощи MasterReport можно произвести расчет функций в коде событий отчета. Это предоставляет возможность вычислять более сложные функции. Также при этом, можно обращаться к рассчитываемому значению из кода в процессе рассчет и влиять на этот процесс. Для того чтобы произвести такой расчет необходимо создать переменную в словаре данных, которая будет хранить значение функции.
При создании переменной указывается тип данных переменной, к примеру, Decimal, и первоначальное значение, к примеру, 0. Затем следует, у бэнда Данные в событии Rendering указать выражение для приращения переменной. К примеру, если необходимо посчитать сумму значений по полю Products.UnitPrice, то выражение будет следующего вида:
Для того, чтобы отобразить результат рассчета, следует в шаблоне отчета разместить текстовый компонент с выражением:
Также, необходимо у текстового компонента с выражением {Variable}, установить свойство Process At в значение End of Report. Это необходимо, чтобы генератор отчетов рассчитал значение переменной после обработки остальных компонентов. |
Иногда при рассчете итогов, необходимо считать определенные значения. В этом случае, задается условие в функции рассчета итогов. Например, необходимо просуммировать значения, которые больше нуля. Для добавления условия к функции рассчета итогов, следует к названию функции добавить суфикс If латинскими буквами, и дополнительный аргумент с условием:
|
|
Бэнд Данные в отчете можно выключить различными способами. Например, он может быть выключенным по определенному условию или иметь нулевую высоту. По умолчанию, при построении отчета генератор отчетов не будет учитывать выключенные бэнды Данные и обрабатывать их. Однако, если необходимо по выключенному бэнду Данные произвести рассчет итогов, то следует, у этого бэнда свойство Вычислять невидимые установить в значение true. В этом случае, в отчете будут выводиться только включенные бэнды Data, а рассчет итогов выполниться с учетом выключенного бэнда Данные. |
При расчете итогов в иерархических отчетах есть особенности вычисления результата. Рассмотрим пример на основе Master-Detail отчета. Предположим в отчете выводится список продуктов по категориям. Категории, в данном случае, это master записи, а продукты - detail:
Допустим, необходимо посчитать количество продуктов, которое выводится в отчете. Если добавить бэнд Итог данных с функцией Count() к бэнду со списком продуктов (detail записи), то по каждой категории (master записи) будет произведен рассчет итога:
Если же добавить бэнд Итог данных с функцией Count() к бэнду с категориями, то результатом будет количество master записей в отчете, т.е. число категорий. Однако, в Master-Detail отчете можно рассчитать итоги и сразу для всех detail записей. В этом случае, необходимо указать названия обоих (master и detail) бэндов в функции через двоеточие: Count(MasterBand: DetailBand).
Итогом функции Count(MasterBand:DetailBand) является число продуктов по всем категориям.
|