Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.
Информация
iconfalse

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

панель
titleОглавление

Оглавление

Свойства страницы
Статус

Статус
colourYellowGreen
titleВ РАБОТЕГОТОВО

Комментарий

Создание 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 отчета.

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

Блок кода
languagexml
collapsetrue
<?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.). Запрос будет выглядеть следующим образом:

Блок кода
languagesql
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должно быть первым в списке.











Выбираем вкладку 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








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








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

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












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








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


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

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

Image Modified







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

Блок кода
languagesql
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') ).\

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

, как показано на рис. 2.4.7.2.

Image Modified

Рис. 2.4.7.2. Форма отчета Example3.








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

. Отчет будет выглядеть так, как показано на рис. 2.4.7.3.

Image Modified

Рис. 2.4.7.3.  Отчет Example3.










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

, как показано на рис. 2.2.7.4.

Image Removed

Рис. 2.4.7.4. Добавление переменной для получения  порядкового номера.

Для получения 

.

Image Added












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

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

Regnumber  редактируем, как показано на рис. 2.4.7.5 .

Image Removed

Рис. 2.4.7.5 . Редактирование колонки, где отображается номер документа.

Здесь выражение  

Regnumber редактируем.

Image Added















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

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

(Рис. 2.4.7.6)Заголовок группировки редактируем

. В данном случае время нам выводить не нужно.

Image Modified

Рис. 2.4.7.6.   Форматирование даты.













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

Image Modified

Рис. 2.4.7.7. Выражение для вывода заголовка группировки.












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

, как показано на рис. 2.4.7.8.

Image Modified

Рис. 2.4.7.8.  Форма отчета Example3.







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

, как показано на рис. 2.4.7.9.

Image Removed

Рис. 2.4.7.9. Отчет Example3.\

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

Параметры — это входные аргументы. Их значения неизменны во всём отчёте.

Параметры используются при формировании отчета, для отбора в отчет определённых документов. В качестве параметров могут быть, например:

  • Интервал дат -в отчет должны попадать документы, зарегистрированные в определенный период времени
  • Место регистрации - в отчет должны попадать документы, зарегистрированные в определённом подразделении
  • Подпись - в отчет должны попадать документы, подписанные определённым руководителем
  • Cписок переменных, полей, передаваемых в подотчет в качестве входных параметров (Subreport parameters)

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

- RepTitle – c помощью этого параметра пользователь может менять заголовок отчета

- Date.Start – начало периода регистрации документов, за который нужно выводить информацию в отчет

- Date.End – конец  периода регистрации документов, за который нужно выводить информацию в отчет.

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

Image Removed

Рис. 2.4.8.1. Добавление параметра в отчет.

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

Image Removed

Рис. 2.4.8.2. Создание параметра.

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

Image Removed

Рис. 2.4.8.3.  Свойства параметра.

В меню выбираем  ShowPropertiesи получаем диалог, показанный на рис. 2.4.8.4.

Image Removed

Рис. 2.4.8.4. Переименование параметра.

В поле Name – название параметра меняем   “Parameter1” на  “RepTitle”.   В поле Classуказываем java.lang.String – в параметре будет тип данных — строка.DefaultValueExpression – значение параметра по умолчанию. Это значение можно будет поменять при запуске отчета на выполнение - Is For Prompting.

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

Image Removed

Рис.2.4.8.5. Редактирование заголовка  отчета.

Форма будет выглядеть, как показано на рис.2.4.8.6..

Image Removed

Рис. 2.4.8.6. Форма отчета с параметром $P{RepTitle}.

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

Image Removed

Рис. 2.4.8.7. Редактирование параметра Date.Start .

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

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

Image Removed

Рис.  2.4.8.8. Редактирование параметра  Date.End.

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

Image Removed

Рис. 2.4.8.9.  Присвоение значения по умолчанию.

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

Image RemovedРис. 2.4.8.10. Запрос с параметрами.

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

and  rkk.regnumcnt is not null.

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

Image Removed

Рис. 2.4.8.11.  Ввод параметров отчета.

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

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

Image Removed

Рис. 2.4.8.11. Выбор даты начала интервала..

Для продолжения выполнения отчета нажимаем пиктограмму Image Removed (Рис. 2.4.8.12)

Image Removed

Рис. 2.4.8.12. Запустить выполнение отчета.

Результат выполнения отчета на рис. 2.4.8.12-а

Image Removed

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

9. Использование подотчетов (Subreport).

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

SubreportExpression– используется для задания выражения класса объекта, возвращающего элемент Jasper. В случае, если результатом выражения является строка, Jasperreports будет искать файл по указанному в строке пути относительно .jrxml файла.

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

Connection Expression – указывает выражение, используемое для получения подключения к БД через объект java.sql.Connection. По умолчанию используется тоже подключение, что и основной отчет.

Subreport parameters– список переменных, полей, передаваемых в подотчет в качестве входных параметров.

Subreportreturnvalues– список локальных переменных, которые примут значения из подотчета.

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

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

            Создадим сначала форму отчета, как показано на рис. 2.4.9.1.

Image Removed

Рис.2.4.9.1          Подготовка основного отчета.

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

Image Removed

Рис. . 2.4.9.2.   Запрос для отбора документов в отчет.

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

Если построить этот отчет, то увидим результат, показанный на рис. 2.4.9.3.

Image Removed

Рис. 2.4.9.3. Результат построения основного отчета без подотчета (subreport).

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

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

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

Image Removed

Рис.  2.4.9.4.   Отчет (подотчет) Example4-sub в папке Example4.

Image Removed

Рис. 2.4.9.5.     Запрос в подотчете Example4-sub.

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

Структура таблицы so_beard:

id bigint NOT NULL,-числовойидентификаторобъекта
  • id_type integer,
  • created_date timestamp without time zone NOT NULL,
  • updated_date timestamp without time zone NOT NULL,
  • created_by bigint,
  • created_by_type integer,
  • updated_by bigint,
  • updated_by_type integer,
  • status bigint,
  • status_type integer,
  • access_object_id bigint,
  • migrationid character varying(48),
  • migrationisabsent smallint NOT NULL,
  • orgname character varying(253),
  • hierparent bigint,
  • hierparent_type integer,
  • isactive smallint NOT NULL,
  • isnotvacancy smallint,
  • cmjunid character varying(48) NOT NULL,
  • orig_type bigint NOT NULL,
  • orig_shortname character varying(253) NOT NULL,-фамилия и инициалы сотрудника
  • orig_postname character varying(253),
  • orig_departmentname character varying(253),
  • eff_type bigint,
  • eff_shortname character varying(253),
  • eff_postname character varying(253),
  • eff_departmentname character varying(253)
  • Структура таблицы f_dp_inputrkk_addressee:

    id bigint NOT NULL,-числовойидентификаторобъекта
  • id_type integer,
  • created_date timestamp without time zone NOT NULL,
  • updated_date timestamp without time zone NOT NULL,
  • created_by bigint,
  • created_by_type integer,
  • updated_by bigint,
  • updated_by_type integer,
  • status bigint,
  • status_type integer,
  • access_object_id bigint,
  • addressee bigint,- числовойид. объектачитайсотрудника») втаблице so_beard
  • addressee_type integer,
  • idx bigint NOT NULL,
  • owner bigint NOT NULL,- числовойид. объектачитайдокумента») втаблице f_dp_rkkbase
  • owner_type integer NOT NULL
  • Форматируем текстовое поле adressee, как показано на рисунках  Рис.2.4.9.6. и Рис.2.4.9.7..

    Image Removed

    Рис.2.4.9.6.    Закладка Appearanceполяadressee.

    Image Added


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

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

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

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

    Image Added








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

    Image Added















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

    Image Added







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

    Image Added










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

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

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

    Image Added













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

    Image Added







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

    Image Added










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

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

    Image Added










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

    Image Added











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

    Image Added






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

    and  rkk.regnumcnt is not null.

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

    Image Added













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

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

    Image Added













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

    Image Added












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

    Image Added


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

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

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

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

    Image Added







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

    Image Added







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

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

    Image Added


               








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

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

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

    Image Added









    Image Added










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

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

    Image Added

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

    Image Modified

    Рис. 2.4.9.7.   Закладка Bordersполяadressee.На закладке 















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

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

    Image Modified

    Рис. 2.4.9.8.   Параметр  Rkkidв подотчете.

    9.3.

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

    .

    Сначала изменяем форму основного отчета

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

    Image Removed

    Рис. 2.4.9.9. Изменение  формы, для вставки дополнительной колонки.

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

    Image Added







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

    его как показано на рис. 2.4.9.10.

    Image Modified

    Рис.  2.4.9.10.  Форматирование текста заголовка  столбца «Адресаты».










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

    место  (Рис. 2.4.9.11).

    Image Removed

    Рис.  2.4.9.11.   Размещение фрейма в строке отчета.

    место

    Image Added





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

    , как показано на рисунках Рис. 2.4.9.12 и Рис.  2.4.9.13

    Image Modified

    Рис.  2.4.9.12.  Размещение фрейма на форме отчета.











    Image Modified

    Рис. 2.4.9.13.    Форматирование границ фрейма.












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

    поле фрейма.

    Image Removed

    Рис.   2.4.9.14.    Элемент Subreport на вкладке Palette.

    поле фрейма.

    Image Added


     






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

    (Рис.2.4.9.15.).

    Image Modified

    Рис. 2.4.9.15.   Выбираем ранее разработанный подотчет.

















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

    Image Modified

    Рис. 2.4.9.16. Окно для выбора файла.







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

    Image Modified

    Рис. 2.4.9.17.     Окно с выбранным подотчетом.














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

    и в основном отчете (Рис. 2.4.9.18).

    Image Removed

    Рис. 2.4.9.18.  Выбор источника данных.

    и в основном отчете

    Image Added













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

    (Рис. 2.4.9.19).

    Image Modified

    Рис. 2.4.9.19.  Настройка параметров отчета.













    Нажимаем кнопку Add

     и получаем следующее окно для настройки параметров (Рис. 2.4.9.20).

    Image Removed

    Рис. 2.4.9.20.  Окно для  указания параметра подотчёта.

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

    Image Added










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

    (Рис. 2.4.9.21)

    Image Modified

    Рис. 2.4.9.21. Окно редактора выражений.












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

    Image Modified

    Рис. 2.4.9.22. Окно с выбранным параметром выражения.










    Нажимаем кнопку ОК и получаем 

    окно с настроенными параметрами (Рис.2.4.9.23)

    Image Removed

    Рис. 2.4.9.23. Настроенные параметры подотчета.

    окно с настроенными параметрами

    Image Added


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

    На рис. 2.4.9.24  показано примерное

    Image Removed

    Рис. 2.4.9.24.Форма основного отчета с подотчетом до форматирования размещения подотчета.

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

    Image Removed

    Рис.2.4.9.25. Форма основного отчета с подотчетом.

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

    .

    .

    Image Added







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

    Image Added









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

    показан на рис.  2.4.9.2.6 .

    Image Modified

    Рис. 2.4.9.2.6.   Отчет с заполненным столбцом «Адресаты»

    10.


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

    ).            Скриптлеты - это классы Java, которые предоставляют JasperReports дополнительные функции. Мы можем использовать скриптлеты, когда выражения отчета не могут выполнять более сложные операции.

    )

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

                Описание некоторых скриптлетов, разработанных для отчетов CompanyMedia приведено в разделе "Часто применяемые скриптлеты и их описание ".

    Image Modified

    Рис. 2.4.10.1.  Скриптлет  UtilScriptlet.

















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

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

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

    Image Removed

    Рис. 2.4.10.2. SQL-запрос отчета.

    Image Removed

    Рис. 2.4.10.3. Отображение формы и свойств отчета Example3LP в JasperSoft Studio.

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

    Image Added










    Image Added










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

    Class 

    Class - UtilScriptlet

    (Рис

    .

    2.4.10.3).

    Сохраняем отчет.

    В свойствах системного параметра  REPORT_SCRIPTLET в поле

    Class появляетсязначение UtilScriptlet (Рис. 2.4.10.4)
  • Image Removed

    Рис. 2.4.10.4. Свойства параметра REPORT_SCRIPTLET.

  • Создаем параметры DOC_Type. Name и Doctypes (Рис. 2.4.10.5)
  • Image Removed
    Рис. 2.4.10.5. Свойства параметра

    Class появляетсязначение UtilScriptlet
    Image Added

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

    .

    и Doctypes
    Image Added

    Doctypes

    (Рис. 2.4.10.6)


    Image Modified

    Рис. 2.4.10.6. Свойства параметра DOC_Type. Name.

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

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

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

    .Более подробно формирование списка, передаваемого в отчет, будет рассмотрено в разделе 3 (Включение отчетов в систему Company Media)

    .