Итоги, связанные с бэндами

<< Click to Display Table of Contents >>

Navigation:  Создание отчетов > Источники данных, переменные и функции > Функции и расчет итогов > Итоги >

Итоги, связанные с бэндами

Для того чтобы рассчитать и отобразить итог, следует разместить текстовый компонент в отчете, вызвать редактор и перейти на вкладку Итог :
 
itogi_ne_svyazannye_s_bendami
 
img1Поле выражения. В этом поле указывается выражение расчета итогов. Выражение можно указать вручную, либо оно будет сформировано автоматически, в зависимости от других параметров.

img_2Поле Итоговая функция. В данном поле выбирается функция расчета итогов.

img_3В данном поле определяется бэнд Данные, по которому будет рассчитан итог.

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

img_5При помощи переключателей, устанавливается объект расчета итогов:

strel11Отчет, т.е. итог будет рассчитан по всему отчету.

strel11Колонка, т.е. итог будет рассчитан по каждой колонке в отчете.

strel11Страница, т.е. итог будет рассчитан по каждой странице построенного отчета.
 

img_6Параметр расчета нарастающего итога. Если флажок установлен, то итог будет рассчитан как нарастающий. Если же флажок снят, то расчет итогов будет только по объекту (отчет, колонка, страница).

img_7Параметр Условие. Если флажок установлен, то при расчете итогов будет учитываться условие. Если же флажок снят, то расчет итогов будет без учета условия.

img_8Поле, в котором указывается выражение условия.

 

cross12

 

По умолчанию, функции для расчета итогов, возвращают значение типа Decimal (за исключением функций Count и CountDistinct). Однако, также можно производить расчеты с использованием и других двух типов данных - Double и Int64. Для того чтобы функция возвращала результат расчета, используя тип данных Double, добавьте латинскую букву D в верхнем регистре к названию функции. Для расчетов с использованием типа Int64 необходимо добавить латинскую букву I в верхнем регистре. Такое разделение позволят избежать потерь при расчетах итогов.

 

Функция

Тип возвращаемого значения

Sum()

Decimal

SumD()

Double

SumI()

Int64

 

warning16ОБРАТИТЕ ВНИМАНИЕ: Буквы I, D можно добавлять к любым функциям за исключением двух: Count и CountDistinct. Эти функции всегда возвращают тип Int64.

 

 

cross12

 

При использовании языка программирования C#, все функции следует писать строго с соблюдением регистра.

 

strel11Sum(expression) - расчет суммы по автоматически определяемому объекту.

strel11Sum(band, expression) - расчет суммы по определенному объекту.

strel11SumIf(band, expression, condition) - расчет суммы по объекту с условием.

 

strel11expression – выражение для расчета;

strel11band – название бэнда для выполнения расчета;

strel11condition – условие включения выражения в расчет.

 

В случае с расчетами по Странице или контейнеру, синтаксис тот же за исключением добавления латинской буквы c как префикса к имени функции:

strel11 cSum(expression) - расчет суммы по странице или контейнеру;

strel11cSum(band, expression) - расчет суммы по странице или контейнеру и объекту на ней;

strel11 cSumIf(band, expression, condition) - расчет суммы по странице или контейнеру и объекту на ней, по определенному условию.

 

Для расчета итогов по колонке, к имени функции добавляется префикс col:

strel11colSum(expression) - расчет суммы по колонке;

strel11colSum(band, expression) - расчет суммы по колонке и объекту в ней;

strel11colSumIf(band, expression, condition) - расчет суммы по колонке и объекту в ней, по определенному условию.

 

Функция Count отличается от остальных функций тем, что она не имеет выражения для расчета. Синтаксис для этой функции приведен ниже.

strel11Count() - рассчитает количество строк;

strel11CountIf(condition) - рассчитает количество строк по условию;

strel11Count(band) - рассчитает количество строк по объекту;

strel11CountIf(band, condition) - рассчитает количество строк по объекту и условию;

strel11cCount() - рассчитает количество строк по странице или контейнеру;

strel11cCount (band) - рассчитает количество строк по странице (контейнеру) и объекту на ней;

strel11cCountIf(band, condition) - рассчитает количество строк по странице (контейнеру) и объекту на ней, по определенному условию;

strel11colCount() - рассчитает количество строк по колонке;

strel11colCount (band) - рассчитает количество строк по колонке и определенному объекту в этой колонке;

strel11colCountIf(band, condition) - рассчитает количество строк по колонке и определенному объекту в этой колонке, по определенному условию.

 

 

cross12

 

Обычно компоненты, в текстовом выражении которых указан вызов функции, располагаются на итоговых бэндах или на бэнде Данные (Data). В редакторе отчетов есть несколько видов итоговых бэндов:

strel11ReportSummaryBand - бэнд используется для вывода итогов по всему отчету;

strel11PageFooterBand - бэнд используется для вывода итогов по странице;

strel11FooterBand - бэнд используется для вывода итогов по списку;

strel11GroupFooterBand - бэнд используется для вывода итогов по группе.

strel11ColumnFooterBand - бэнд используется для вывода итогов по колонке.

 

Расположение компонентов с функциями на любом из указанных выше бэндов позволяет генератору отчетов точно определить, к какому бэнду Данные относится эта функция. Также компонент с функций можно разместить и на самом бэнде Data. В этом случае на каждой строке данных будет выведен результат расчета функции по всем строкам.

 

Если же требуется вывести итог, например, на бэнде Заголовок данных (Header), то это выполняется при помощи скрипта. Однако в редактор отчетов компонент с функцией может быть расположен на любом бэнде отчета.

 

warning16ОБРАТИТЕ ВНИМАНИЕ: Компоненты с функциями можно размещать в любом месте отчета.

 

Также допускается размещение компонента с функцией на странице и на других страницах шаблона отчета. К примеру, можно рассчитывать сумму значений по списку и вывести его в заголовке списка. Еще один пример, рассчитать количество строк в списке и вывести это значение в начале страницы. При этом, есть ограничение: необходимо указать бэнд Данные, по которому будет рассчитываться результат:

 

strel11{Sum(DataBand1, Products. UnitsInStock)}. В этом случае, будет рассчитана сумма значений колонки Products.UnitsInStock для каждой строки бэнда DataBand1.

strel11{Count(DataBand1)}. В этом случае будет, рассчитано количество строк бэнда DataBand1 .

 

 

cross12

 

Для расчета итогов, в выражении можно не указывать дополнительные аргументы. Например, для функции Count необязательно или можно задать для функции Sum только один аргумент - выражение, которое должно быть рассчитано. Все это возможно, если генератор отчетов может определить, к какому бэнду Data относятся эти функции.

 

warning16ОБРАТИТЕ ВНИМАНИЕ:Генератор отчетов может определить взаимосвязь функции и конкретного бэнда Данные, если компонент с этой функцией располагается на связанных бэндах с этим бэндом Данные. Иначе говоря, компонент с функцией расположен на бэндах заголовков и итогов, которые относятся к этому бэнду Данные.

 

В противном случае, в аргументах следует указать источник данных или бэнд Данные, по которому необходимо рассчитать итог. В выражениях может быть указано:
strel11Просто объект, значения которого будут рассчитываться - {Sum(DataSource.Column)}

strel11Объект и различные математические операции с ним - {100 + Sum(DataSource.Column) * 2}

 

cross12

 

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

 

strel11{cCount(DataBand1)} - генератор отчетов рассчитает количество строк на одной странице или панели.

 

informationПримечание: Расчет итогов по странице идет по такому же принципу, как и для панели.

 

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

 

На одной странице или панели может использоваться любое количество агрегатных функций. MasterReport не налагает никаких ограничений на это. Допускается комбинирование итогов по странице с условием. К примеру:

 

strel11{сCountIf(DataBand1, Products.UnitsInStock = 0)} - генератор рассчитает количество элементов на этой странице равных нулю.

 

cross12

 

Для того чтобы рассчитать итог по колонке необходимо добавить префикс col (от слова column) в нижнем регистре к названию функции. К примеру:

 

strel11{colCount()} - генератор отчетов рассчитает количество строк по каждой колонке.

 

warning16ОБРАТИТЕ ВНИМАНИЕ: Расчет итогов по колонке в MasterReport имеет одно ограничение. Итоги можно рассчитывать только по колонкам на странице. Рассчитывать итоги по колонкам на бэнде Data не допускается.

 

При расчете итогов по колонке желательно, текстовый компонент с функцией размещать на бэндах ColumnHeader, ColumnFooter, Header или Footer. Можно рассчитывать неограниченное количество итогов по колонке. Каких-либо ограничений не накладывается. Также допускается комбинирование итогов по колонке с условием:

 

strel11{colCountIf(DataBand1, Products.UnitsInStock = 0)} - генератор отчетов рассчитает количество строк в каждой колонке, где условие выполниться.

 

 

При помощи MasterReport можно произвести расчет функций в коде событий отчета. Это предоставляет возможность вычислять более сложные функции. Также при этом, можно обращаться к рассчитываемому значению из кода в процессе расчет и влиять на этот процесс. Для того чтобы произвести такой расчет необходимо создать переменную в словаре данных, которая будет хранить значение функции.

 

informationПримечание: Не допускается использование переменных, объявленных в коде, для хранения результата расчета функций. Необходимо использовать переменные из словаря данных.

 

При создании переменной указывается тип данных переменной, к примеру, Decimal, и первоначальное значение, к примеру, 0. Затем следует, у бэнда Данные в событии Rendering указать выражение для приращения переменной. К примеру, если необходимо посчитать сумму значений по полю Products.UnitPrice , то выражение будет следующего вида:

strel11Variable += Products.ItemsInStock;

 

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

strel11{Variable}

 

Также, необходимо у текстового компонента с выражением {Variable}, установить свойство Process At в значение End of Report . Это необходимо, чтобы генератор отчетов рассчитал значение переменной после обработки остальных компонентов.

 

cross12

 

Иногда при расчете итогов, необходимо считать определенные значения. В этом случае, задается условие в функции расчета итогов. Например, необходимо просуммировать значения, которые больше нуля. Для добавления условия к функции расчета итогов, следует к названию функции добавить суфикс If латинскими буквами, и дополнительный аргумент с условием:

 

strel11{SumIf(Products.UnitsInStock, Products.UnitsInStock > 1)}. В этом случае, будет рассчитана сумма значений Products.UnitsInStock, которые больше 1.

strel11{CountIf(Products.UnitsInStock == 0)}. В этом случае, будет рассчитано количество строк, с нулевым значением в колонке UnitsInStock

 

informationПримечание: Если необходимо произвести расчет с использованием типа Double или Int64, то сначала добавляем латинскую букву D или I, а затем слово If. К примеру: {SumDIf(Products.UnitsInStock, Products.UnitsInStock > 0)}.

 

cross12

 

warning16ОБРАТИТЕ ВНИМАНИЕ: При построении отчета, в тот момент, когда определяется размер компонента, результат расчета функции итога еще неизвестен. Это следует учитывать при установке автоматического изменения размеров для компонентов, в которых производиться расчет итогов. В противном случае, может возникнуть ситуация, когда размер компонента не будет корректным по отношению к результату расчета функции итога.

 

 

Бэнд Данные в отчете можно выключить различными способами. Например, он может быть выключенным по определенному условию или иметь нулевую высоту. По умолчанию, при построении отчета генератор отчетов не будет учитывать выключенные бэнды Данные и обрабатывать их . Однако, если необходимо по выключенному бэнду Данные произвести расчет итогов, то следует, у этого бэнда свойство Вычислять невидимые установить в значение true. В этом случае, в отчете будут выводиться только включенные бэнды Data, а расчет итогов выполниться с учетом выключенного бэнда Данные.

 

cross12

 

При расчете итогов в иерархических отчетах есть особенности вычисления результата. Рассмотрим пример на основе Master-Detail отчета. Предположим в отчете выводится список продуктов по категориям. Категории, в данном случае, это master записи, а продукты - detail:

 

itogi_ne_svyazannye_s_bendami7

 

Допустим, необходимо посчитать количество продуктов, которое выводится в отчете. Если добавить бэнд Итог данных с функцией Count() к бэнду со списком продуктов (detail записи), то по каждой категории (master записи) будет произведен расчет итога:

 

itogi_ne_svyazannye_s_bendami5

 

Если же добавить бэнд Итог данных с функцией Count() к бэнду с категориями, то результатом будет количество master записей в отчете, т.е. число категорий. Однако, в Master-Detail отчете можно рассчитать итоги и сразу для всех detail записей. В этом случае, необходимо указать названия обоих (master и detail) бэндов в функции через двоеточие: Count(MasterBand: DetailBand).

 

itogi_ne_svyazannye_s_bendami8

 

Итогом функции Count(MasterBand:DetailBand) является число продуктов по всем категориям.