Создание SQL-запроса
Нажимаем пиктограмму
. Пиктограмма расположена на вкладке Design.Получаем диалог для создания запроса (DatasetandQueryDialog)
С помощью этого запроса выбираем поля type, subject, complect, id из таблицы f_dp_rkkbase.
Нажимаем кнопку ReadFields. В нижней части окна увидим отобранные поля. С помощью кнопок Up и Down можно менять порядок полей.
Если на вкладке DataPreview, нажать на кнопку RefreshPreviewData, то можно увидеть документы, которые будут попадать в отчет по запросу
Меняем порядок полей с помощь кнопок Up и Down
Сортировка данных
Можно выбрать поля, по которым будет производиться сортировка информации в отчете. В данном примере показано, как выбрать сортировку по полю id. Для этого на вкладке Outlineвыбираем SortFields
Появляется диалог NewSortFieldWizard, где выбираем поле id и нажимаем кнопку Finish
После того, как мы выбрали сортировку по полю id, предварительный просмотр будет выглядеть так:
Конфигурирование отчета
Для данного примера удалим некоторые секции. Это можно сделать следующим образом:
Щелкаем мышкой по секции, которую необходимо удалить. Слева появляется выделение секции. При нажатии на правую клавишу, появляется меню. Нажимаем Delete. Удаляем все секции, которые нам не нужны для данного примера.
Оставляем секции Title, Column Header и Detail1.
Для вывода информации в отчет в данном примере используются два основных компонента: Text Field (динамическое поле) и Static Text (статический текст). Динамическое поле используется для вывода значений параметров или полей источника данных, а статическое - для вывода постоянного текста.
Используем Static Text для формирования заголовка отчета. Для этого на вкладке Palette выбираем Static Text и мышкой перетаскиваем в секцию отчета Title
Двойным щелчком мышки открываем поле и вписываем текст «Заголовок простого отчета»
Далее открываем вкладку Properties для данного текста. Выбираем Appearance и устанавливаем координаты области размещения текста в секции Title.
В секции Location\Position Type указываем координаты x и y области, где будет размещаться текстпо отношению к верхней границе секции Title (Fix Relative To Top).
В секции Size определяем размер области размещения: W - ширина области, h - высота области. Единица измерения - пиксель (px). Размер области — фиксированный: StretchType -NoStretch.
Для форматирования текста открываем секцию labelStaticText
Выбираем шрифт текста, выравнивание и т.д.
Далее необходимо заполнить секции Column Header и Detail1. Это можно сделать разными способами. Сначала разместим поле id на форме отчета в секции Detail1 следующим образом:
- на вкладке Palette выделяем TextField и перетаскиваем мышкой в нужное место секции Detail1
- помещаем поле id на место TextField
Двойным щелчком мышки открываем Text Field. В открывшемся диалоге в Expression Editor вместо текста помещаем (двойным щелчком мыши) поле id - $F{id}.$F – обозначает поле.
Также, как и для статического текста определяем область размещения поля на форме отчета
Затем выбираем Text Field (для статического текста выбирали Static Text) и форматируем текст
При таком способе заполнения формы заголовок столбца необходимо заполнять дополнительно. Это можно сделать путем создания статического текста в секции Column Header.
Рассмотрим ещё один способ заполнения формы. Создадим столбец с заголовком «БД» и содержащим в секции Detail1 поле «complect». Для этого на вкладке «Outline» выбираем в секции Fields поле complect и перетаскиваем его в секцию Detail1
Далее форматируем заголовок столбца и его содержимое
Заполняем таким же образом столбцы «Тип документа» и «Заголовок»
Выбираем вкладку Preview и смотрим сформированный отчет
Чтобы создать границы строк и столбцов, необходимо создать границы ячеек. Для этого выделяем нужную ячейку и в свойствах ячейки (Properties) выбираем « Borders» и настраиваем границы (Рис. 2.4.3.2.15).
Настраиваем границы для всех ячеек
На вкладке
Preview смотрим результат
На вкладке Source можно увидеть код XML отчета.
Для отчета в этом примере он будет выглядеть так, как показано ниже.
Блок кода | ||||
---|---|---|---|---|
| ||||
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.0.4.final using JasperReports Library version 6.0.4 -->
<!-- 2015-08-09T07:26:52 -->
<jasperReportxmlns="http://jasperreports.sourceforge.net/jasperreports"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"name="Example1"pageWidth="595"pageHeight="842"columnWidth="555"leftMargin="20"rightMargin="20"topMargin="20"bottomMargin="20"uuid="4c68dd92-6073-4492-a024-c0af5108344f">
<propertyname="com.jaspersoft.studio.data.defaultdataadapter"value=" Cm Sochi JDBC on localhost"/>
<queryStringlanguage="SQL">
<![CDATA[Select
type, subject, complect, id
from
f_dp_rkkbase]]>
</queryString>
<fieldname="id"class="java.lang.Long"/>
<fieldname="type"class="java.lang.String"/>
<fieldname="subject"class="java.lang.String"/>
<fieldname="complect"class="java.lang.String"/>
<sortFieldname="id"/>
<background>
<bandsplitType="Stretch"/>
</background>
<title>
<bandheight="49"splitType="Stretch">
<textField>
<reportElementx="117"y="5"width="300"height="40"uuid="db72abba-b8f3-4702-88fa-9353e41e723d">
<propertyname="local_mesure_unitheight"value="pixel"/>
<propertyname="com.jaspersoft.studio.unit.height"value="px"/>
<propertyname="local_mesure_unitwidth"value="pixel"/>
<propertyname="com.jaspersoft.studio.unit.width"value="px"/>
</reportElement>
<textElementtextAlignment="Center"verticalAlignment="Middle">
<fontfontName="Times New Roman"size="14"isBold="true"/>
</textElement>
<textFieldExpression><![CDATA["Заголовок простого отчета"]]></textFieldExpression>
</textField>
</band>
</title>
<columnHeader>
<bandheight="42"splitType="Stretch">
<staticText>
<reportElementx="60"y="0"width="110"height="40"uuid="fd40d18b-aaac-4c07-a301-67494fe4bab3"/>
<boxpadding="3"topPadding="1"leftPadding="1"bottomPadding="1"rightPadding="1">
<topPenlineWidth="0.6"/>
<leftPenlineWidth="0.6"/>
<bottomPenlineWidth="0.6"/>
<rightPenlineWidth="0.6"/>
</box>
<textElementtextAlignment="Center"verticalAlignment="Middle"/>
<text><![CDATA[БД]]></text>
</staticText>
<staticText>
<reportElementx="170"y="0"width="146"height="40"uuid="21ca3a0d-6c34-41f6-b353-c9dba5b315cc"/>
<boxpadding="3">
<topPenlineWidth="0.6"/>
<leftPenlineWidth="0.6"/>
<bottomPenlineWidth="0.6"/>
<rightPenlineWidth="0.6"/>
</box>
<textElementtextAlignment="Center"verticalAlignment="Middle">
<fontfontName="Times New Roman"size="12"/>
</textElement>
<text><![CDATA[Тип документа]]></text>
</staticText>
<staticText>
<reportElementx="316"y="0"width="234"height="40"uuid="d562e6a7-bac9-4a1f-b6dc-4b6aeacaef5b"/>
<box>
<topPenlineWidth="0.6"/>
<leftPenlineWidth="0.6"/>
<bottomPenlineWidth="0.6"/>
<rightPenlineWidth="0.6"/>
</box>
<textElementtextAlignment="Center"verticalAlignment="Middle">
<fontfontName="Times New Roman"size="12"/>
</textElement>
<text><![CDATA[Заголовок]]></text>
</staticText>
<staticText>
<reportElementx="20"y="0"width="40"height="40"uuid="13d2281f-e5d5-4291-9833-bb1971ddbd67"/>
<boxtopPadding="3"leftPadding="3"bottomPadding="3"rightPadding="3">
<topPenlineWidth="0.6"/>
<leftPenlineWidth="0.6"/>
<bottomPenlineWidth="0.6"/>
<rightPenlineWidth="0.6"/>
</box>
<textElementtextAlignment="Center"verticalAlignment="Middle">
<fontsize="12"/>
</textElement>
<text><![CDATA[id]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<bandheight="40"splitType="Stretch">
<textField>
<reportElementx="20"y="0"width="40"height="40"uuid="6f2a3a63-d240-4844-8d67-7a553a5da3ac">
<propertyname="local_mesure_unitheight"value="pixel"/>
<propertyname="com.jaspersoft.studio.unit.height"value="px"/>
<propertyname="local_mesure_unitwidth"value="pixel"/>
<propertyname="com.jaspersoft.studio.unit.width"value="px"/>
</reportElement>
<boxtopPadding="3"leftPadding="3"bottomPadding="3"rightPadding="3">
<topPenlineWidth="0.6"/>
<leftPenlineWidth="0.6"/>
<bottomPenlineWidth="0.6"/>
<rightPenlineWidth="0.6"/>
</box>
<textElementtextAlignment="Center"verticalAlignment="Middle">
<fontfontName="Traditional Arabic"size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
</textField>
<textField>
<reportElementx="60"y="0"width="110"height="40"uuid="caff384d-e033-4e38-be01-969d93dacad7"/>
<boxtopPadding="3"leftPadding="3"bottomPadding="3"rightPadding="3">
<topPenlineWidth="0.6"/>
<leftPenlineWidth="0.6"/>
<bottomPenlineWidth="0.6"/>
<rightPenlineWidth="0.6"/>
</box>
<textElementtextAlignment="Left"verticalAlignment="Middle">
<fontfontName="Times New Roman"size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{complect}]]></textFieldExpression>
</textField>
<textField>
<reportElementx="170"y="0"width="146"height="40"uuid="b4a80027-8dfd-4987-890d-c616644894eb"/>
<boxtopPadding="3"leftPadding="3"bottomPadding="3"rightPadding="3">
<topPenlineWidth="0.6"/>
<leftPenlineWidth="0.6"/>
<bottomPenlineWidth="0.6"/>
<rightPenlineWidth="0.6"/>
</box>
<textElementverticalAlignment="Middle">
<fontfontName="Times New Roman"size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{type}]]></textFieldExpression>
</textField>
<textField>
<reportElementx="316"y="0"width="234"height="40"uuid="438487e5-c811-46fc-add4-1d43fd0d96b1"/>
<boxtopPadding="3"leftPadding="3"bottomPadding="3"rightPadding="3">
<topPenlineWidth="0.6"/>
<leftPenlineWidth="0.6"/>
<bottomPenlineWidth="0.6"/>
<rightPenlineWidth="0.6"/>
</box>
<textElementverticalAlignment="Middle">
<fontfontName="Times New Roman"size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{subject}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
|
Группировка данных
Создаем
отчет Example2 с источником данных Cm Sochi JDBC on localhost, тем же, что и в примере Example1. Информацию теперь будем получать из двух таблиц: f_dp_rkkbase и f_dp_rkk (Рис. 2.2.4.1.). Запрос будет выглядеть следующим образом:
Блок кода | ||
---|---|---|
| ||
Select
rkkbase.type, rkkbase.subject, rkkbase.complect, rkkbase.id,
rkk.regnumprist || rkk.regnumcnt || rkk.regnumfin as regNumber
from
f_dp_rkkbase rkkbase
join f_dp_rkk rkk on rkkbase.id=rkk.id |
Из таблицы f_dp_
id bigint NOT NULL,- числовойидентификаторобъекта
Из таблицы f_dp_rkkbase выбираем поля type, subject, complect, id. Из таблицы f_dp_rkk выбираем поля regnumprist, regnumcnt, regnumfin, если значение поля id в таблице f_dp_rkk совпадает со значением поля id в таблице f_dp_rkkbase.
Объединяем эти поля и получаем поле regNumber (rkk.regnumprist || rkk.regnumcnt || rkk.regnumfin as regNumber). Группировать информацию в отчете будем по полю complect, которое содержит алиас приложения.
Рис. 2.2.4.1. Запрос на отбор документов в отчет Example2.
Изменяем порядок полей. Поле complectдолжно быть первым в списке.Рис. 2.2.4.1. Порядок полей в шаблоне отчета.
Выбираем вкладку Datapreview (Рис. . 2.2.4.1) и обновляем информацию - RefreshPreviewData (Рис. . 2.2.4.2).Рис. 2.2.4.2. Документы, отобранные в отчет Example2.
Указываем, по каким полям будет производиться сортировка. Для этого выбираем вкладку Sorting(Рис. 2.2.4.2) и нажимаем кнопку Add. Появляется диалог NewSortFieldWizard (Рис. 2.2.4.3).Рис. 2.2.4.3. Выбор полей для сортировки
Выбираем поле complectи нажимаем кнопку Finish. Таким же образом добавим в сортируемые поля regnumber(Рис. 2.2.4.4).
Рис. 2.2.4.4. Поля для сортировки документов в отчете.
Форматируем шаблон как показано на рис. . 2.2.4.5.
Рис. 2.2.4.5. Отформатированный шаблон отчета.
5. Создание группы.
На вкладке Outline выбираем название отчета. По правой кнопке мышки получаем меню и выбираем пункт Create Group (Рис. 2.4.5.1).
Рис. 2.4.5.1. Создание группы.
Открывается диалог GroupBand (Рис. 2.2.5.2). Присваиваем группе название - DBи выбираем поле, по которому производим группировку - complect. Нажимаем кнопку Next.Рис. 2.4.5.2. Название группы.
В следующем диалоге указываем, что добавляем на форму секцию GroupHeader (Заголовок группировки) (Рис. 2.2.5.3).
Рис. 2.4.5.3. Добавление секции GroupHeader.
Нажимаем кнопку Finish. На форме появляется секция DB Group Header1 (Рис. 2.4.5.4).
Рис. 2.4.5.4. Секция DB Group Header 1.
Указываем, что в этой секции будет отображаться информация из поля complect-$F{complect} (Рис.2.4.5.5.).
Рис. 2.4.5.5. Секция DB Group Header 1 с полем -$F{complect}.
Далее форматируем секцию с заголовком группы (Рис.2.2.5.6).
Рис. 2.4.5.6. Форматирование секции с заголовком группы.
Указываем границы (Рис. 2.4.5.7)
Рис. 2.4.5.7. Границы секции
Выбираем цвет фона для секции. На вкладке Properties выбираем Appearance. Далее в секции Color выбираем поле BackColor и в открывшемся диалоге выбираем нужный цвет.
Рис. 2.4.5.8_а. Выбор фона для секции Group Header
Рис. 2.4.5.8_б. Выбор фона для секции Group Header
И в результате секция отображается, как показано на Рис. 2.2.5.9. Обратите внимание на поле Transparent. Оно не заполнено.
Рис. 2.2.5.9. Отчет с измененным фоном секции.
6. Встроенные переменные. Номер страницы.
Переменная — это вычисляемое в процессе формирования отчёта значение. Доступно большое количество системных переменных, таких как номер страницы, номер строки. Но разработчик шаблона также может создавать свои пользовательские переменные. При работе с переменными важно помнить, что они зависят от значения EvaluationTime при выводе.
#
Название переменной
Значение переменной
1
PAGE_NUMBER
Содержит номер текущей страницы данного отчета на момент времени
2
MASTER_CURRENT_PAGE
Содержит номер страницы «мастера»,в котором расположен отчет в момент времени. Актуально для подотчетов, чтобы узнать страницу в родительском отчете
3
MASTER_TOTAL _PAGES
Содержит количество страниц всего в мастере на момент времени
4
COLUMN_NUMBER
Содержит номер текущей колонки в отчете в момент времени. Следует иметь ввиду что, если элементы плохо выровнены в отчете, может показывать значения отличные от ожидаемых
5
REPORT_COUNT
6
PAGE_COUNT
Содержит число страниц в отчете на момент времени.
7
COLUMN_COUNT
Содержит число колонок в отчете на момент времени.
8
Name
Имя переменной
9
Value Class Name
Класс, используемый для хранения значения в переменной.
10
Calculation
Выбор из нескольких агрегатных функций, которые выполняются с каждой новой обрабатываемой записью. Суммы, средние, мин/макс.
11
Expression
Выражение, которое будет выполнено с новой обрабатываемой записью. Затем это значение будет применено к переменной через агрегатную функцию. Или старое значение будет перезаписано если не выбрано функции. Является выражением java.
12
Initial Value Expression
Значение на начало работы отчета. Или после сброса. Является Выражением java.
13
Increment type
15
Incrementer Factory Class Name
При желании вместо увеличении на 1 можно передать свой собственный класс инкрементора.
16
Reset type
Переменная сбросит свое значение и применит Initial Value Expression при данном изменении. Например можно считать сумму на каждой странице отдельно.
rkkbase выбираем поля type, subject, complect, id. Из таблицы f_dp_rkk выбираем поля regnumprist, regnumcnt, regnumfin, если значение поля id в таблице f_dp_rkk совпадает со значением поля id в таблице f_dp_rkkbase.
Объединяем эти поля и получаем поле regNumber (rkk.regnumprist || rkk.regnumcnt || rkk.regnumfin as regNumber). Группировать информацию в отчете будем по полю complect, которое содержит алиас приложения.
Изменяем порядок полей. Поле complectдолжно быть первым в списке.
Выбираем вкладку Datapreview и обновляем информацию - RefreshPreviewData
Указываем, по каким полям будет производиться сортировка. Для этого выбираем вкладку Sorting и нажимаем кнопку Add. Появляется диалог NewSortFieldWizard
Выбираем поле complect и нажимаем кнопку Finish. Таким же образом добавим в сортируемые поля regnumber
Форматируем шаблон
Создание группы
На вкладке Outline выбираем название отчета. По правой кнопке мышки получаем меню и выбираем пункт Create Group
Открывается диалог GroupBand. Присваиваем группе название - DB и выбираем поле, по которому производим группировку - complect. Нажимаем кнопку Next.
В следующем диалоге указываем, что добавляем на форму секцию GroupHeader (Заголовок группировки)
Нажимаем кнопку Finish. На форме появляется секция DB Group Header1
Указываем, что в этой секции будет отображаться информация из поля complect-$F{complect}
Далее форматируем секцию с заголовком группы
Указываем границы
Выбираем цвет фона для секции. На вкладке Properties выбираем Appearance. Далее в секции Color выбираем поле BackColor и в открывшемся диалоге выбираем нужный цвет.
И в результате секция отображается. Обратите внимание на поле Transparent. Оно не заполнено.
Добавления номера страницы
Добавим в отчет настройки, которые позволят при печати выводить номер страницы. Для этого вернем в отчет удаленную ранее секцию Page Footer. На вкладке Outline выбираем Page Footerи нажимаем Add Band
Рис. 2.4.6.1. Добавление в отчет секции Page Footer.
На форме появится секция
Рис.. 2.4.6.2. Добавление текстового поля.
Page Footer. Добавим в эту секцию текстовое поле/
Форматируем текстовое поле. Дважды щелкаем по выделенному полю и в открывшемся диалоге заполняем поле Expression
: $V{PAGE_NUMBER}
В этом выражении $V(PAGE_NUMBER) – встроенная
Рис. 2.4.6.3. Встраивание переменной в поле.
Нажимаем кнопку Finish. Форма будет выглядеть, как показано на рис. 2.4.6.4.
Рис. 2.4.6.4. Встроенная переменная - номер страницы.
переменная, которая выводит номер страницы в отчет.
Нажимаем кнопку Finish. Форма будет выглядеть:
В отчет будет выводиться номер страницы