Создание отчетов в системе Торнадо

advertisement
Оглавление
Оглавление .....................................................................................................................................1
Создание отчетов в Parus Tornado ...............................................................................................2
Создание шаблонов отчетов.........................................................................................................3
Структура отчета .................................................................................................................. 4
Компоненты ......................................................................................................................... 4
Свойства компонентов ........................................................................................................ 5
Определение источников данных ......................................................................................5
Добавление функции .......................................................................................................... 6
Источник данных ................................................................................................................. 8
Визуальное представление данных ...................................................................................9
Компоненты ........................................................................................................................10
DataBand .............................................................................................................................11
Текстовые поля ..................................................................................................................12
Загрузка отчета в систему ..................................................................................................13
Просмотр и печать отчета .................................................................................................15
Создание шаблона отчета с множеством данных ..........................................................16
Создание шаблона отчета с несколькими таблицами ....................................................18
Группировка записей при создании шаблона отчета .....................................................23
Сортировка записей внутри группы .................................................................................26
Работа с заголовком и подвалом данных ........................................................................29
Заголовок и подвал BandHeader и BandFooter ...............................................................29
Заголовок и подвал PageHeader и PageFooter ................................................................34
Заголовок и подвал ReportHeader и ReportFooter ..........................................................38
Создание шаблона отчета с горизонтальным размножением данных ........................41
1
Создание отчетов в Parus Tornado
Отчет – это упорядоченное представление данных, уже содержащихся в системе. Форма
отчета может быть установлена различными законодательными актами, либо самостоятельно
определена пользователем. Отчеты генерируются в виде электронных таблиц, формат которых
совместим с Microsoft Office Excel или Open Office.
Процесс создания отчетов можно разделить на два этапа:

Определение источников данных;

Визуальное представление данных.
В системе реализована возможность самостоятельно формировать шаблоны отчетов с
помощью Дизайнера отчетов (TornadoReportDesigner). После регистрации в системе шаблоны
отчетов хранятся в базе данных (БД).
2
Создание шаблонов отчетов
Шаблон отчета – файл Excel, служащий образцом при создании нового отчета. Он
определяет внешний вид нового отчета (группировка и сортировка данных, фильтры, раскраска и
т.д.).
Для создания шаблона отчета необходимо запустить Microsoft Excel, перейти к закладке
«Надстройки» и выбрать пункт меню Report designer>New report (см. Рисунок 1).
Рисунок 1. Надстройки
На экране появится новая книга Excel. Помимо основного поля Excel в левой части окна
появилась панель инструментов Tools со следующими закладками (см. Рисунок 2):

Структура отчета;

Свойства компонентов;

Компоненты.
3
Рисунок 2. Панель «Tools»
Структура отчета
На данной закладке отображается иерархическое
компонентов, из которых формируется отчет (см. Рисунок 3).
(древовидное) представление
Рисунок 3. Структура отчета
Компоненты
На данной закладке отображаются непосредственно компоненты, доступные для
формирования отчета.
4
Рисунок 4. Компоненты
Свойства компонентов
На данной закладке возможно редактирование свойств каждого из компонентов.
Рисунок 5. Свойства компонентов
Определение источников данных
Для того чтобы указать источник данных необходимо перейти к закладке «Структура
компонента» и выделить компонент [Document] (самый верхний компонент в дереве), затем на
закладке «Свойства компонентов» в поле Data Sources открыть редактор с помощью кнопки со
значком
. В открывшемся окне необходимо выбрать пункт меню Процедуры подготовки
данных (см. Рисунок 6).
5
Рисунок 6. Data sources
Для каждого источника данных помимо имени (см. Рисунок 7) можно задать еще две
процедуры подготовки данных: Code и Empty Dataset.
Рисунок 7. Name
Empty Dataset возвращает пустой Dataset, который содержит логическую структуру данных,
но не содержит самих данных. Это необходимо для механики хранимых отчетов. Code возвращает
Dataset с логической структурой данных, но уже с заполненными данными, по которым строится
отчет.
Для автоматизации процесса ввода кода на закладке «Свойства компонентов» в поле
Scripts следует открыть редактор с помощью кнопки со значком
. В открывшемся окне «Report
scripts editor» можно определить функции, которые в дальнейшем могут использоваться в
различных частях отчета.
Добавление функции
Для добавления функции в окне «Report scripts editor» в поле Functions следует в
контекстном меню выбрать пункт Add Function (см. Рисунок 8).
6
Рисунок 8. Add Function
Новой функции следует задать имя (см. Рисунок 9).
Рисунок 9
Написание функции выполняется в терминах языка C#. На примере (см. Рисунок 10)
показано, как создать DataSet с одной таблицей (MasterTable), которая будет содержать три поля
разных типов (ID – целочисленного типа, Name – строкового типа, Data – тип Дата/Время). Таким
образом, определилась логическая структура DataSet. После ввода функции следует нажать на
кнопку ОК, либо Cancel для закрытия окна без сохранения данных.
7
Рисунок 10 CreateDataSet
Источник данных
После добавления функции следует вызвать окно редактора DataSources и перейти к
закладке Empty Dataset, где можно указать результат работы добавленной функции.
Рисунок 11. Empty Dataset
На закладке Code требуется процедуру подготовки данных наполнить данными
(см. Рисунок 12). В итоге создается пустой DataSet (Шаг 1),в котором таблица заполняется одной
записью, состоящей из трех полей (Шаг 2), на выходе создается DataSet с одной записью (Шаг 3).
8
Рисунок 12. Code
После ввода следует нажать на кнопку ОК, либо Cancel для закрытия окна без сохранения
данных.
Этап определения источника данных выполнен. С помощью вышеописанных процедур
можно получит доступ к любым данным, содержащимся в системе (проводки, накладные и т.п.).
Визуальное представление данных
При визуализации данных используются все возможности Microsoft Excel (фон, шрифт,
границы, ориентация страницы и т.д.). После определения при помощи стандартных средств Excel
визуального представления данных (см. Рисунок 13) необходимо выполнить привязку данных,
определенных на первом этапе (см. раздел «Определение источников данных»), к ячейкам
Microsoft Excel.
Рисунок 13. Визуализация
9
Для этого следует перейти к закладке «Компоненты», выделить диапазон ячеек (Шаг 1) и
двойным щелчком мыши выбрать требуемый компонент (Шаг 2).
Рисунок 14. Привязка
На закладке «Структура отчета» можно увидеть подтверждение привязки, в дереве
компонентов появится новый компонент (см. Рисунок 15), привязанный к ранее выделенным
ячейкам, которые будут подсвечиваться при нажатии на него. Таким образом, визуально
представлено, к каким ячейкам относится каждый их компонентов.
Рисунок 15. Новый компонент
Компоненты
Рассмотрим возможность использования компонентов на примере готового шаблона
отчета (см. Рисунок 16).
Рисунок 16. Структура отчета
10
DataBand
Компонент DataBand предназначен для связывания значений из источника данных и
предоставления этих значений для своих дочерних элементов. В данном случае дочерними
элементами являются три текстовых поля. В свойствах компонента DataBand необходимо указать в
поле DataSourceName ссылку на источник данных (см. раздел «Источник данных»), значение
выбирается при нажатии кнопки со значком
из выпадающего списка. Также в поле
ParentRelationName следует установить, какое отношение из указного источника данных будет
использоваться. Отношением может выступать как имя таблицы, так и имя Relations в терминах
DataSet (связь между таблицами, определенными в данном DataSet).
Рисунок 17. Свойства DataBand
В данном случае в поле ParentRelationName мы указали имя таблицы MasterTable, эта та
таблица, которая определена в DataSet.
11
Рисунок 18. Data sources
Текстовые поля
Дочерними элементами DataBand являются текстовые поля (см. Рисунок 16), в которые
выводятся значения из таблицы, содержащейся в DataSources. Чтобы указать, какое именно поле
из источника данных необходимо выводить, следует выделить текстовое поле, затем перейти к
закладке «Свойства компонентов». Выделяем поле m_textID, затем переходим к закладке свойств.
Нам необходимо вывести поле «ID» из таблицы MasterTable. Для этого в поле Binding::Bindings
следует вызвать редактор при помощи кнопки со значком
Рисунок 19. Binding::Bindings
В открывшемся окне «Component Bindings» можно к каждому свойству компонента text
привязать различные значения (см. Рисунок 20). Указывается компонент, предоставляющий
данные (1), и имя поля, которое требуется вывести (2).
12
Рисунок 20. Component Bindings
Аналогичным образом выполняется
привязка
(m_DataBand["Name"], m_DataBand["Date"].ToString()).
остальных
текстовых
полей
После проведения вышеописанных действий необходимо сохранить шаблон отчета в
формате xml.
Загрузка отчета в систему
Для загрузки шаблона отчета в систему Parus Tornado необходимо воспользоваться
пунктом меню Администрирование>Отчеты.
13
Рисунок 21. Отчеты
Открывшееся окно «Просмотр отчетов» разделено на две области. Для добавления отчета
в контекстном меню верхней области окна необходимо выбрать пункт Добавить. На экране
появится окно «Регистрация отчета» (см. Рисунок 22), где требуется заполнить следующие поля:
Рисунок 22. Регистрация отчета

Наименование, Описание – данные вводятся вручную.

Файл – при нажатии кнопки Обзор следует выбрать сохраненный xml файл шаблона
отчета.
После заполнения полей следует нажать на кнопку Ок, либо Отмена для закрытия окна
без сохранения информации.
14
Примечание: При загрузке шаблона отчета в систему он должен быть закрыт в
Microsoft
Excel.
Просмотр и печать отчета
Для построения отчета и вывода его на печать следует в его контекстном меню выбрать
пункт Построить отчет. На экране появится окно «Параметры отчета» (см. Рисунок 23), где
можно просмотреть либо распечатать готовый отчет. Для просмотра следует нажать на кнопку
Просмотр, для печати на кнопку Печать, для закрытия окна на кнопку Закрыть. Если поставить
галочку в окошке «Закрыть по завершению», данное окно после просмотра или печати закроется
автоматически.
Рисунок 23. Параметры отчета
Мы получили построенный отчет (см. Рисунок 24) с данными, определенными в источнике
данных (см. раздел «Источник данных»), которые были выведены в соответствующие поля.
15
Рисунок 24. Результат 1
Создание шаблона отчета с множеством данных
Выше был рассмотрен простой пример, когда в источнике данных содержится одна
запись. В данном разделе рассмотрим пример, когда в источнике данных будет содержаться
некоторое количество записей.
Рассмотрим структуру отчета, где решается ситуация с выводом множества строк из
источника данных.
Рисунок 25. Структура отчета
В структуре отчета появился новый компонент DetailBand, который является дочерним
компонентом DataBand и родительским для текстовых полей. Основным предназначением
DetailBand является размножение себя и своих дочерних компонентов по количеству записей,
содержащихся в источнике данных, к которому он принадлежит.
16
Выставлять DetailBand специфические свойства не требуется, т.к. он берет данные из
родительского источника данных.
Таким образом, структура отчета состоит из следующих компонентов: Document, Page,
DataBand (см. Рисунок 26), DetailBand (см. Рисунок 27), 3 поля Text (см. Рисунок 28).
Рисунок 26. DataBand
Рисунок 27. DetailBand
Рисунок 28. Text
Рассмотрим изменения, произошедшие в источнике данных (см. раздел «Источник
данных»).
Рисунок 29. Data sources
17
Так же как и в предыдущем примере, мы получаем таблицу MasterTable, но в цикле
формируем уже несколько записей (см. Рисунок 29). Если требуется повторить блок программного
кода определенное число раз, оператор for подходит для этого лучше всего. Можно указать,
сколько раз должен повториться блок программного кода, а также условие окончания цикла.
Чтобы наглядно увидеть произошедшие изменения, загружаем шаблон отчета в систему
(см. раздел «Загрузка отчета в систему»), формируем отчет (см. Рисунок 30). Как видно, в отчете
отобразилось столько записей, сколько и было задано в источнике данных (см. Рисунок 29).
Таким образом, возможен вывод множественных записей из определенного источника
данных.
Рисунок 30. Результат 2
Создание шаблона отчета с несколькими таблицами
В большинстве случаев источник данных представляет собой не одну таблицу, а несколько,
связанных между собой. В данном разделе рассмотрим пример, когда в источнике данных будет
содержаться две связанные друг с другом таблицы.
В первую очередь изменится функция (см. раздел «Добавление функции»), которая теперь
будет выглядеть следующим образом (см. Рисунок 31):
18
Рисунок 31. CreateDataSet
Помимо определения источника данных и добавления основной таблицы MasterTable с
тремя текстовыми полями («ID», «Name», «Date») в функции появилась запись о добавлении
дочерней таблицы ChildTable.
ChildTable содержит следующие поля:

"MasterID", typeof(int) – используется для связи с родительской таблицей;

"ID", typeof(int) – ID самой таблицы;

"Description", typeof(string) – метаописание строкового поля;

"Amount", typeof(decimal) – цифровой формат.
Также определяется связь между таблицами по полю «ID» родительской таблицы и полю
«MasterID» дочерней таблицы.
Рисунок 32
Рассмотрим изменения, коснувшиеся процедуры подготовки данных SampleDataSources
(см. Рисунок 33), в данном случае необходимо заполнить две таблицы, что решается двумя
циклами:
19
Рисунок 33. SampleDataSource
В структуре отчета также произошли изменения (см. Рисунок 34):
Рисунок 34. Структура отчета
Присутствует верхнеуровневый компонент DataBand, привязанный так же, как и в
предыдущем примере, к источнику данных SampleDataSource, с родительской таблицей
MasterTable (см. раздел «DataBand»). DetailBand, который размножается по количеству записей в
родительской таблице, содержит помимо текстовых полей дочерний DataBand (m_DataBand1),
который выводит значения из дочерних таблиц.
Для дочернего DataBand необходимо в свойствах компонента указать в поле
DataSourceName ссылку на источник данных. Также в поле ParentRelationName следует
установить, какое отношение из указного источника данных будет использоваться. В качестве
источника данных мы определяем родительский DataBand (см. Рисунок 35) В ParentRelationName
20
задаем имя отношения, в котором осуществляется связь между родительской и дочерней
таблицей (см. Рисунок 32).
Рисунок 35. Свойства компонентов
m_DataBand1 также содержит свой DetailBand (m_DetailBand1), который будет
размножаться по количеству записей в дочерней таблице. В свою очередь m_ DetailBand1
содержит текстовые поля, в которых будут выводиться значения из дочерней таблицы. При
привязке текстовых полей у дочернего DataBand в качестве источника данных указывается
DataBand1 (см. Рисунок 36).
Рисунок 36. Component Bindings
21
Таким образом, структура отчета состоит из следующих компонентов:
Рисунок 37. Структура отчета
22
Чтобы наглядно увидеть произошедшие изменения, загружаем шаблон отчета в систему
(см. раздел «Загрузка отчета в систему») и формируем отчет (см. Рисунок 38). Как видно, в отчете
отобразилось 20 записей родительской таблицы и в каждой из них по пять записей дочерней
таблицы, что, собственно, и было указано в процедуре подготовки данных (см. Рисунок 33).
Рисунок 38. Результат 3
Группировка записей при создании шаблона отчета
При
построении
отчета
может
потребоваться
сгруппировать
записи
по
какому-либо признаку. В данном разделе рассмотрим пример построения шаблона отчета,
решающего данную ситуацию.
В структуре отчета по сравнения с предыдущим примером (см. раздел «Создание шаблона
отчета с несколькими таблицами») произошли изменения: верхнеуровневый компонент DataBand
заменил компонент GroupBand (см. Рисунок 39). GroupBand выполняет те же самые функции,
что и DataBand, но в отличие от последнего с помощью него можно группировать данные из
DataSource по различным полям, содержащимся в источнике данных.
23
Рисунок 39. Структура отчета
Группировка выполняется на закладке «Свойства компонентов», где в поле Grouping с
помощью кнопки со значком
следует открыть редактор. В открывшемся окне «Collection
editor» (см. Рисунок 40) указываются поля, по которым осуществляется группировка. В данном
случае определена группировка по полю Name, направление группировки по возрастанию
(Ascending). Добавление поля осуществляется при нажатии кнопки со значком
нажатии кнопки со значком
при нажатии кнопки со значком
, удаление при
. Направление группировки выбирается из выпадающего списка
.
Рисунок 40. Группировка
Остальные свойства компонента GroupBand остались такими же, как и у DataBand, который
он заменил. Привязка его дочерних компонентов осуществляется аналогично предыдущим
примерам. В свойствах Binding его дочерних текстовых полей будет указано
«m_GroupBand["Name"]» и «m_GroupBand["Date"].ToString()» соответственно.
Свойства компонента m_DataBand1 также претерпели изменения (см. Рисунок 41):
24
Рисунок 41. Свойства компонента m_DataBand1
Произошли изменения и в функции, которая теперь будет выглядеть следующим образом
(см. Рисунок 42):
Рисунок 42. CreateDataSet
Свойства остальных компонентов остались такими же, как и в предыдущем примере
(см. раздел «Создание шаблона отчета с несколькими таблицами»).
Чтобы наглядно увидеть произошедшие изменения, загружаем шаблон отчета в систему
(см. раздел «Загрузка отчета в систему») и формируем отчет (см. Рисунок 43, Рисунок 44, Рисунок
45). Как видно, в отчете отобразилось два заголовка с указанием имен (Иванов Иван Иванович,
Петров Петр Петрович) и под каждым заголовком записи, относящиеся к нему.
25
Рисунок 43 Результат 4
Рисунок 44. Результат 4
Рисунок 45 Результат 4
Сортировка записей внутри группы
Для того чтобы исключить возможность бессистемного вывода записей внутри группы в
Дизайнере отчетов помимо группировки присутствует возможность сортировки элементов.
Чтобы в дочернем DataBand отсортировать все записи по полю Description, следует в
свойствах m_DataBand1 в поле Sorting открыть редактор с помощью кнопки со значком
.
26
В открывшемся окне «Collection editor» указываются поля, по которым осуществляется сортировка
(см. Рисунок 46). Добавление поля осуществляется при нажатии кнопки со значком
при нажатии кнопки со значком
списка при нажатии кнопки со значком
, удаление
. Направление сортировки выбирается из выпадающего
.
Рисунок 46. Сортировка
Чтобы увидеть результат, сохраняем изменения, загружаем шаблон отчета в систему
(см. раздел «Загрузка отчета в систему») и формируем отчет. По сравнению с предыдущим
отчетом записи отсортированы по полю Описание (см. Рисунок 47). Однако записи поля ID
по-прежнему выводятся без сортировки.
Рисунок 47. Результат 5
27
Для того чтобы полностью отсортировать записи, можно задавать несколько полей
сортировки. В данном случае записи будут отсортированы по двум полям, сначала по полю
Description, затем по полю ID. Чтобы изменить порядок сортировки, следует воспользоваться
кнопками со значками
,
, передвигая выбранное поле на ту или иную позицию.
Рисунок 48. Сортировка нескольких полей
Чтобы увидеть результат, сохраняем изменения, загружаем шаблон отчета в систему
(см. раздел «Загрузка отчета в систему») и формируем отчет. По сравнению с предыдущим
отчетом записи отсортированы не только по полю Description, но и по полю ID (см. Рисунок 49).
Рисунок 49. Результат 6
28
Работа с заголовком и подвалом данных
Очень часто помимо вывода записей из источника данных их необходимо обрамить
шапками заголовка и подвала. Для решения этой задачи предназначены компоненты подвала
Footer (BandFooter, PageFooter, ReportFooter) и заголовка Header (BandHeader, PageHeader,
ReportHeader) (см. Рисунок 50).
Рисунок 50. Компоненты
Данные компоненты действуют на разных уровнях, первый уровень относится к DataBand
или GroupBand.
Заголовок и подвал BandHeader и BandFooter
Рассмотрим на примере возможность реализации обрамления контейнеров заголовком и
подвалом.
Основная структура компонентов повторяет структуру предыдущего шаблона
(см. раздел «Группировка записей при создании шаблона отчета»), но у дочернего DataBand
(m_DataBand1) добавлен заголовок и подвал (см. Рисунок 51).
29
Рисунок 51. Структура отчета
В заголовок можно включать текстовые поля для вывода, в данном случае текстовые поля
Name и Date как раз были перенесены в заголовок дочернего DataBand, чтобы на каждую группу
формировался заголовок с данными этих текстовых полей.
В подвал был помещен компонент с агрегативной функцией (m_AggregateValue), чтобы для
каждой группы посчитать сумму полей Amount числового типа decimal (см. Рисунок 52).
Рисунок 52
В свойствах компонента AggregateValue следует указать поле, по которому будет строиться
агрегативная функция (поле Field), и указать функцию агрегату (поле Function), на данный момент
поддерживается только одна функция Суммирование (см. Рисунок 53).
30
Рисунок 53. Свойства компонента m_AggregateValue
В остальном структура отчета и свойства компонентов не поменялись, поэтому сохраняем
изменения, загружаем шаблон отчета в систему (см. раздел «Загрузка отчета в систему») и
формируем отчет (см. Рисунок 54, Рисунок 55, Рисунок 56).
Рисунок 54. Результат 7
31
Рисунок 55. Результат 7
Рисунок 56. Результат 7
Как видно, для каждой группы вверху остались такие же заголовки, как и в предыдущем
примере (см. Рисунок 47), но посередине появились еще заголовки. Чтобы понять, откуда они
взялись, следует посмотреть, как данный отчет будет отображаться при печати. Поскольку все
записи, относящиеся как к первой, так и ко второй группе, не поместились на одну страницу, то в
начале каждой последующей страницы появился заголовок, поясняющий, куда относятся
непоместившиеся записи (см. Рисунок 57).
32
Рисунок 57. Предварительный просмотр
Перенос заголовков стал возможен благодаря свойствам BandHeader, которые регулируют
вывод отчета на разных страницах при печати. PrintOnEveryPage позволяет вывести заголовок на
каждой странице отчета. KeepTogether отвечает за связывания заголовка с данными,
т.е. предоставляет возможность блокировать такую ситуацию, когда заголовок напечатался на
одной странице, а все последующие данные на другой (см. Рисунок 58).
33
Рисунок 58. Свойства компонента m_BandHeader
Следует отметить, что подвал отобразился не на каждой странице отчета, такое поведение
также регулируется его настройками. PrintOnEveryPage позволяет выводить подвал на каждой
странице отчета. В нашем примере у этого свойства стоит значение False, что говорит о том, что
подвал будет выводится только на последней странице с относящимися к нему данными (см. ).
KeepTogether отвечает за связывания подвала с данными, т.е. предоставляет возможность
блокировать такую ситуацию, когда подвал напечатался на одной странице, а связанные с ним
данные на другой.
Рисунок 59. Свойства компонента m_BandFooter
Также из отчета видно, что в зеленом поле со статическом текстом «Итого» отобразилась
сумма полей Amount, чего мы и хотели добиться, использую компонент AggregateValue.
Заголовок и подвал PageHeader и PageFooter
В предыдущем примере (см. раздел «Заголовок и подвал BandHeader и BandFooter») были
использованы компоненты BandHeader и BandFooter, рассмотрим использование другой пары
компонентов заголовка и подвала PageHeader и PageFooter.
Данные компоненты являются заголовком и подвалом, относящимися к странице,
т.е. проявляются в контексте уже напечатанной страницы отчета.
34
Основная структура компонентов повторяет структуру предыдущего шаблона
(см. раздел «Заголовок и подвал BandHeader и BandFooter»), но добавились компоненты
PageHeader и PageFooter, расположенные на том же иерархическом уровне, что и GroupBand, и
являющиеся дочерними для страницы Page.
Рисунок 60. Структура отчета
Компоненты PageFooter и PageHeader обладают свойством Mode (см. Рисунок 61), которое
позволяет задавать различные варианты печати заголовка или подвала:

SinglePage – печать на одной единственной страницы, для PageHeader это будет первой
страницей, для PageFooter последней;

AllPage – печать на всех страница;

OddPage – печать только на нечетных страницах;

EvenPage – печать только на четных страницах.
Рисунок 61. Свойства компонента m_PageHeader
35
PageHeader и PageFooter могут иметь дочерние компоненты, в данном случае PageHeader
содержит текстовое поле m_TextStatic со статическим значением, а PageFooter содержит
текстовое поле m_TextPageNum, в котором будет выводиться номер страницы (см. Рисунок 62).
Рисунок 62
В системе Parus Tornado реализована возможность автоматической нумерации страниц,
для этого в свойстве Binding m_TextPageNum необходимо следующим образом выполнить
привязку данных (см. Рисунок 63):
Рисунок 63. Component Bindings
В остальном структура отчета и свойства компонентов не поменялись, поэтому сохраняем
изменения, загружаем шаблон отчета в систему (см. раздел «Загрузка отчета в систему»),
формируем отчет и смотрим, как данный отчет будет отображаться при печати (см. Рисунок 64,
Рисунок 65, Рисунок 66).
36
Рисунок 64. Результат 7. Страница № 1
Рисунок 65. Результат 7. Страница № 2
Рисунок 66. Результат 7. Страница № 3
При печати получится три страницы, при этом на каждой страницы присутствует заголовок
со статическим текстом и подвал с номером страницы. Таким образом, реализуется
автоматическая нумерация страниц, выведенных на печать, а также возможность обрамления
заголовком и подвалом информации на каждой странице.
37
Заголовок и подвал ReportHeader и ReportFooter
Рассмотрим использование оставшейся пары компонентов заголовка и подвала
ReportHeader и ReportFooter.
Данные компоненты являются заголовком и подвалом, относящимися ко всему отчету в
целом. Разберем на примере возможности их использования.
Основная структура компонентов повторяет структуру предыдущего шаблона
(см. раздел «Заголовок и подвал PageHeader и PageFooter»), но добавились компоненты
ReportFooter и ReportHeader, относящиеся к отчету (см. Рисунок 67).
Рисунок 67. Структура отчета
Благодаря свойствам PageBreakAfter у ReportHeader и ContinuousPrint у ReportFooter
появляется возможность регулировать следующие свойства вывода страниц на печать:

PageBreakAfter – перенос печати на следующую страницу после того, как будет окончена
печать заголовка отчета;

ContinuousPrint – печать подвала целиком на одной странице.
ReportHeader и ReportFooter могут иметь дочерние компоненты, в данном случае
ReportHeader содержит текстовое поле m_ReportStatic со статическим значением, а ReportFooter
содержит текстовое поле m_TextTotalPages, в котором будет выводиться общее количество
страниц при печати (см. Рисунок 68).
38
Рисунок 68
Для вывода количества страниц в свойстве Binding m_TextTotalPages необходимо
следующим образом выполнить привязку данных (см. Рисунок 69):
Рисунок 69. Component Bindings
В остальном структура отчета и свойства компонентов не поменялись, поэтому сохраняем
изменения, загружаем шаблон отчета в систему (см. раздел «Загрузка отчета в систему»),
формируем отчет и смотрим, как данный отчет будет отображаться при печати (см. Рисунок 70,
Рисунок 71, Рисунок 72).
39
Рисунок 70. Результат 8. Страница № 1
Рисунок 71. Результат 8. Страница № 2
Рисунок 72. Результат 8. Страница № 3
На первой странице появился заголовок отчета, на последующих страницах его нет,
а также на последней странице присутствует подвал отчета с общим количеством страниц.
Следует отметить, что если в структуре отчета присутствуют и подвал страницы и отчета, подвал
отчета всегда печатается раньше, чем подвал страницы.
40
Создание шаблона отчета с горизонтальным размножением
данных
При размножении записей, содержащихся в источнике данных, может потребоваться их
горизонтальное размещение, например, когда неизвестно конечное чисто столбцов таблицы.
В данном разделе рассмотрим пример построения шаблона отчета, решающего данную ситуацию.
Для реализации таблицы расширяющейся по горизонтали служат компоненты CrossTable
(см. Рисунок 73).
Рисунок 73. CrossTable
CrossTableBand действует по тому же принципу, что DataBand, т.е. предоставляет данные
из источника данных своим дочерним элементам, но меняет семантику отображения вложенных
компонентов DetailBand.
В структуре отчета по сравнения с предыдущим примером (см. раздел «Заголовок
и подвал ReportHeader и ReportFooter») произошли изменения (см. Рисунок 74):
Рисунок 74. Структура отчета
41
Место GroupBand из предыдущего примера занял компонент CrossTableBand, его свойства
задаются аналогично свойствам компонента GroupBand (см. раздел «Группировка записей при
создании шаблона отчета»):
Рисунок 75. Свойства компонентаm_CrossTableBand
Дочерними компонентами CrossTableBand являются:

CrossTableStaticColumn – статическая колонка, которая не будет размножаться в процессе
рендеринга отчета;

CrossTableDynamicColumn – динамическая колонка, которая будет размножена.
Рисунок 76
CrossTableStaticColumn имеет одно особенное свойство PrintOnCrossPage, которое отвечает
за печать статической колонки на каждой странице итогового отчета при смещении вправо, т.е.
если при смещении вправо был произведен выход за пределы страницы, будет сгенерирована
дополнительная страница, на каждой такой дополнительной странице будет сгенерирована
статическая колонка.
42
CrossTableBand задает группировку записей по вертикальной оси, в каждой из этих групп
содержится несколько записей, которые также требуется разбить на группы и каждую из них
вывести в отдельную колонку. Для этого в свойствах компонента CrossTableDynamicColumn в поле
Grouping указывается, на какие группы будет разбита выведенная информация (см. Рисунок 77).
В поле DataSourceName необходимо указать ссылку на источник данных, в данном случае
это родительский контейнер m_CrossTableBand, в поле ParentRelationName следует установить,
какое отношение из указного источника данных будет использоваться, мы указываем значение
Group, т.е. отношение сгруппированной информации.
Рисунок 77. Свойства компонента CrossTableDynamicColumn
Таким образом, CrossTableBand (см. Рисунок 78) осуществляет группировку по двум полям
«Name», «ID», на выходе получается несколько групп с записями из дочерних таблиц, дочернюю
таблицу в свою очередь группируем по полю Description.
Рисунок 78
Все остальные компоненты имеют свойства, уже рассмотренные выше, поэтому сохраняем
изменения, загружаем шаблон отчета в систему (см. раздел «Загрузка отчета в систему») и
формируем отчет (см. Рисунок 79).
43
Рисунок 79. Результат 9
Как видно, по вертикальной оси сгруппированы записи из родительской таблицы по
полю Name. По горизонтальной оси сгруппированы записи из дочерней таблицы по полю
Description. Значения из дочерней таблицы Amount выведены на пересечении строки и столбца.
Если посмотреть структуру шаблона отчета (см. Рисунок 80), будет видно, что компонент
m_TaxtAmount, отвечающий за вывод текста Amount из дочерней таблицы, находится в
m_DetailBand1 и в тоже время на пересечении m_CrossTableDynamicColumn. Благодаря такой
структуре шаблона и был реализован вышеописанный вывод данных.
Рисунок 80
Следует посмотреть, как данный отчет будет отображаться при печати (см. Рисунок 81,
Рисунок 82). Поскольку все колонки с данными не поместились на одной странице, то они
продолжились на следующей. Однако все заголовки и подвалы были построены только на первой
странице, это объясняется тем, что в системе Parus Tornado дополнительные страницы не
рассматриваются как полноценные и после печати могут быть подклеены к основной странице,
составляя с ней одно целое.
44
Рисунок 81. Результат 9. Страница № 1
Рисунок 82. Результат 9. Страница № 2
45
Download