Дерево страниц
Skip to end of metadata
Go to start of metadata

Описание действий по разработке отчетов

Оглавление

Статус

ГОТОВО

Комментарий

Создание 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). Размер области — фиксированный: Stretch Type -No Stretch.

Для форматирования текста открываем секцию label Static Text









Выбираем шрифт текста, выравнивание и т.д.

Далее необходимо заполнить секции  Column Header и Detail1. Это можно сделать разными способами. Сначала разместим поле id на форме отчета в секции Detail1 следующим образом:

  • на вкладке Palette выделяем Text Field и перетаскиваем мышкой в нужное место секции Detail1
  • помещаем поле id на место Text Field





Двойным щелчком мышки открываем  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_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 должно быть первым в списке.











Выбираем вкладку Data preview и обновляем информацию - Refresh Preview Data











Указываем, по каким полям будет производиться сортировка. Для этого выбираем вкладку Sorting и нажимаем кнопку Add. Появляется диалог   New Sort Field Wizard











Выбираем  поле complect и нажимаем кнопку Finish. Таким же образом добавим в сортируемые поля regnumber











Форматируем  шаблон


Создание группы

На вкладке Outline выбираем название отчета. По правой кнопке мышки получаем меню и выбираем пункт Create Group
















Открывается диалог  Group Band.  Присваиваем группе название - DB и выбираем поле, по которому производим группировку - complect.  Нажимаем кнопку Next.










В следующем диалоге указываем, что добавляем на форму секцию GroupHeader (Заголовок группировки)











Нажимаем кнопку Finish.  На форме появляется секция DB Group Header1









Указываем, что в этой секции будет отображаться информация из поля complect-$F{complect} 








Далее форматируем секцию с заголовком группы









Указываем границы












Выбираем цвет фона для секции.  На вкладке Properties выбираем Appearance.  Далее в секции Color  выбираем  поле BackColor и в открывшемся диалоге выбираем нужный цвет.



















И в результате секция отображается. Обратите внимание на поле Transparent. Оно не заполнено.

Добавления номера страницы

Добавим в отчет настройки, которые позволят при печати выводить номер страницы. Для этого вернем в отчет удаленную ранее секцию  Page Footer.  На вкладке Outline выбираем  Page Footerи нажимаем Add Band








На форме появится секция Page Footer. Добавим в эту секцию текстовое поле/








Форматируем текстовое поле. Дважды щелкаем по выделенному полю и в открывшемся диалоге заполняем поле Expression: $V{PAGE_NUMBER}

В этом выражении  $V(PAGE_NUMBER) – встроенная переменная, которая выводит номер страницы в отчет.












Нажимаем кнопку Finish. Форма будет выглядеть:








В отчет будет выводиться номер страницы


Использование выражений

Использование выражений рассмотрим на примере отчета Example3. Создадим отчет и в Dataset and Query Dialog создадим запрос







Информацию, как и в отчете Example2,  будем получать из двух таблиц: f_dp_rkkbase и  f_dp_rkk. Запрос будет выглядеть следующим образом:

Select
rkkbase.type, rkkbase.subject, rkkbase.complect, rkkbase.id, 
rkk.regnumprist || rkk.regnumcnt || rkk.regnumfin as regNumber,
rkk.regdate
from
f_dp_rkkbase rkkbase
join  f_dp_rkk rkk on rkkbase.id=rkk.id
where
rkkbase.complect in ('InputDocs','InternalDocs') 

Из таблицы  f_dp_rkkbase  выбираем  поля type, subject, complect, id, regdate.   Из таблицы  f_dp_rkk  выбираем  поля regnumprist, regnumcnt, regnumfin, если значение поля id в таблице f_dp_rkk  совпадает со значением  поля  id  в   таблице f_dp_rkkbase.

Объединяем эти поля и получаем поле regNumber (rkk.regnumprist || rkk.regnumcnt || rkk.regnumfin as regNumber).

В отчет отбираем только входящие и внутренние документы (where  rkkbase.complect in ('InputDocs','InternalDocs') ).\

Заполняем форму отчета








На вкладке Preview смотрим результат










Формируем колонку № п/п. Для того, чтобы в этой колонке печатались номера строк по порядку, делаем следующее. В секции Detail1 создаем текстовое поле. Дважды щелкаем по этому полю мышкой и получаем диалог Expression Editor – редактор выражений.












Для получения порядкового номера выбираем встроенную переменную $V(COLUMN_COUNT). $V – означает — переменная.

В колонке  «Номер», если документ  не зарегистрирован, будем печатать «Проект». Для этого   поле, где помещается Regnumber редактируем.















Здесь выражение ($F{regnumber} !=null ? $F{regnumber} : "Проект") означает следующее- если regnumber не равно null, то печатается регистрационный номер документа, иначе печатается «Проект».

Форматируем дату таким образом, чтобы получить формат «дд.мм.гггг». В данном случае время нам выводить не нужно.













Заголовок группировки редактируем так, чтобы вместо «InputDocs »  печаталось «Входящие документы», а вместо «Internaldocs» - «Внутренние документы» (Рис. 2.4.7.7).












Форма будет выглядеть







Отчет теперь будет выглядеть


Использование параметров

Добавим следующие параметры в отчет Example3:

  • RepTitle – c помощью этого параметра пользователь может менять заголовок отчета
  • Date.Start – начало периода регистрации документов, за который нужно выводить информацию в отчет
  • Date.End – конец  периода регистрации документов, за который нужно выводить информацию в отчет.

Создаем параметр RepTitle. Для этого на вкладке Outline выделяем Parameters и нажатием правой кнопки мыши получаем меню:








Выбираем Create Parameter. И создаётся параметр Parameter1















Щёлкаем правой кнопкой мыши и получаем меню.







В меню выбираем Show Propertiesи получаем диалог:










В поле Name – название параметра меняем “Parameter1” на “RepTitle”. В поле Class указываем java.lang.String – в параметре будет тип данных — строка.

Default Value Expression – значение параметра по умолчанию. Это значение можно будет поменять при запуске отчета на выполнение - Is For Prompting.

Редактируем на форме заголовок отчета. Выбираем параметр RepTitle.













Форма будет выглядеть







Создаем параметр Date.Start. Как и в предыдущем случае создаем параметр и редактируем его










Заполняем поля Name – название параметра Date.Start и поле Class – тип данных java.util.Date – Дата.

Подобным образом создаем параметр Date.End, но для этого параметра присваиваем значение по умолчанию — текущая дата.










Для того, чтобы присвоить значение по умолчанию, нажимаем на пиктограмму.  В открывшемся диалоге выбираем значение — встроенную функцию TODAY( ) - текущую дату











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






Добавляем в запрос - and (regDate between $P{Date.Start}and $P{Date.End}). Здесь $P – обозначает — параметр.  Чтобы в отчет не попадали проекты документов добавим в запрос:

and  rkk.regnumcnt is not null.

Открываем вкладку Preview . Предлагается ввести параметры отчета 













Значение по умолчанию для заголовка отчета изменяем на  «Список корреспонденции».

Дата окончания интервала  заполняется по умолчанию. Оставляем её без изменения. Для выбора даты начала интервала нажимаем на пиктограмму  , выбираем нужную дату и нажимаем пиктограмму.













Для продолжения выполнения отчета нажимаем пиктограмму  












Результат выполнения отчета


Использование подотчетов

Использование подотчетов рассмотрим на примере отчета Example4. Отчет создаем  в папке  Example4.

Создание основного отчета

Создадим сначала форму отчета







Этот отчет строится также, как и в примере Example3. Отличие состоит только в том, что в него отбираются только входящие документы -   where  rkkbase.complect in ('InputDocs').







Все элементы на форме отчета и параметры сформированы также, как и в отчете Example3.

Если построить этот отчет, то увидим результат


           








В основной отчет необходимо добавить  колонку, в которой будут отображаться адресаты документа. Причем адресатов может быть как один, так и несколько. Для этого в основной  отчет добавим колонку «Адресаты» и встроим в нее подотчет (subreport).

Создание подотчета (subreport)

В папке  Example4 создаем отчет Example4-sub  (Рис. ...).  В отчет добавляем поле adresseeи параметр Rkkid. Запрос для отбора документов в отчет


















В этом запросе вычисляются фамилии сотрудников — адресатов документа. Так как адресатов может быть несколько, используется функция используется функция STRING_AGG для объединения строк.

Форматируем текстовое поле adressee

На закладке  Appearance показываем размещение поля.















На закладке Borders форматируем границы поля в отчете. В   данном случае границы отсутствуют. 

В подотчет добавляем параметр Rkkid.

Добавление подотчета в основной отчет

Сначала изменяем форму основного отчета для того, чтобы вставить колонку «Адресаты»







Добавляем статический текст в заголовок столбца и форматируем










Далее в строке, где будут показаны адресаты, размещаем Frame. Для этого на закладке  Paletteвыделяем элемент  Frameи перетаскиваем мышкой в нужное место





Далее форматируем размещение фрейма на форме отчета и его границы






















Затем  выделяем мышкой элемент  Subreportна вкладке Palette (Рис. 2.4.9.14) и перетаскиваем  его в поле фрейма.


 






Появляется первое окно для настройки параметров подотчета. Предлагается выбрать существующий подотчет или разработать новый

















Выбираем ранее разработанный подотчет , для этого нажимаем кнопку  Select report file. Появляется окно для выбора файла (Рис. 2.4.9.16). 







Выбираем  Example4-sub.jasperиз папки Example/Example4














Далее нажимаем кнопку Nextи выбираем источник данных тот же, что и в основном отчете













Далее нажимаем кнопку Next и настраиваем параметры отчета













Нажимаем кнопку Add и получаем следующее окно для настройки параметров










Указываем параметр подотчета Rkkid. Нажимаем на кнопку редактироватьи получаем окно редактора выражений












В окне редактора выражений выбираем поле  idосновного отчета. Фактически в редакторе выражений мы связываем параметр подотчета — Rkkidи поле $F(id)в основном отчете.










Нажимаем кнопку ОК и получаем  окно с настроенными параметрами


Нажимаем кнопку Finish.

Примерное изображение формы отчета после нажатия кнопки Finish.







Далее отформатируем размещение подотчета на форме основного отчета









Результат построения отчета с подотчетом


Использование скриптлетов (Scriptlet)

В приведенном примере используется UtilScriptlet для формирования списка, состоящего из названий "Тип документа". Разработку отчета начнем с создания скриптлета UtilScriptlet.

















Скриптлет формирует список значений:

  • Письмо
  • Извещение
  • Служебная записка
  • Приказ
  • Докладная записка

Разработаем форму отчета, SQL-запрос.



















В свойствах отчета - вкладка Properties /Dataset заполняем поле Scriplet Class - UtilScriptlet. Сохраняем отчет.

В свойствах системного параметра  REPORT_SCRIPTLET в поле Class появляетсязначение UtilScriptlet

Создаем параметры DOC_Type. Name и Doctypes

Doctypes

В SQL-запрос добавляем

and rkkbase.type  in($P!{DocTypes}).

В запросе ($P!{DocTypes}) означает, что передаётся напрямую список отобранных при выполнении отчета значений.

  • Нет меток