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

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

Ключ

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

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

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

Оглавление

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

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

Комментарий

Создание SQL-запроса

Нажимаем пиктограмму . Пиктограмма расположена на вкладке Design.

Получаем диалог для создания запроса (DatasetandQueryDialog)

Image Modified










С помощью этого запроса выбираем поля type, subject, complect, id из таблицы f_dp_rkkbase

Нажимаем кнопку ReadFields. В нижней части окна увидим отобранные поля. С помощью кнопок Up и Down можно менять порядок полей.

Image ModifiedImage Modified

Если на вкладке DataPreview, нажать на кнопку RefreshPreviewData, то можно увидеть документы, которые будут попадать в отчет по запросу

Image Modified

Меняем порядок полей с помощь кнопок Up и Down

Image Modified



Сортировка данных

Можно выбрать поля, по которым будет производиться сортировка информации в отчете. В данном примере показано, как выбрать сортировку по полю id. Для этого на вкладке Outlineвыбираем SortFields

Появляется диалог NewSortFieldWizard, где выбираем поле id и нажимаем кнопку Finish

Image Modified












После того, как мы выбрали сортировку по полю id, предварительный просмотр будет выглядеть так:

Image Modified

Конфигурирование отчета

Для данного примера удалим некоторые секции. Это можно сделать следующим образом:

Щелкаем мышкой по секции, которую необходимо удалить. Слева появляется выделение секции. При нажатии на правую клавишу, появляется меню. Нажимаем Delete. Удаляем все секции, которые нам не нужны для данного примера.

Image Modified









Оставляем секции Title, Column Header и Detail1.

Для  вывода информации в отчет в данном примере используются два основных компонента: Text Field (динамическое поле) и Static Text (статический текст). Динамическое поле используется для вывода значений параметров или полей источника данных, а статическое - для вывода постоянного текста.

Используем Static Text для формирования заголовка отчета. Для этого на вкладке Palette выбираем Static Text и мышкой перетаскиваем в секцию отчета Title 

Image Modified







Двойным щелчком мышки открываем поле и вписываем текст «Заголовок простого отчета»

Image Modified






Далее открываем вкладку Properties для данного текста.  Выбираем Appearance и устанавливаем координаты области размещения текста в секции Title.

Image Modified

В секции Location\Position Type указываем координаты x и y области, где будет размещаться текстпо отношению к верхней границе секции Title (Fix Relative To Top).

В секции Size определяем размер области размещения: W - ширина области, h - высота области. Единица измерения - пиксель (px). Размер области — фиксированный: StretchType -NoStretch.

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

Image Modified









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

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

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

Image Modified





Двойным щелчком мышки открываем  Text Field. В открывшемся диалоге  в Expression Editor вместо текста помещаем (двойным щелчком мыши) поле id - $F{id}.$F – обозначает поле.

Image Modified












Также, как и для статического текста определяем область размещения поля на форме отчета

Image Modified









Затем выбираем Text Field (для статического текста выбирали Static Text) и форматируем текст

Image Modified












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

Рассмотрим ещё один способ заполнения формы. Создадим столбец с заголовком «БД» и содержащим в секции Detail1 поле «complect». Для этого на вкладке «Outline» выбираем в секции Fields поле  complect и перетаскиваем его в секцию Detail1

Image Modified











Далее форматируем заголовок столбца и его содержимое

Image Modified


Image Modified










Заполняем таким же образом столбцы  «Тип документа» и «Заголовок»

Image Modified



   

 



Выбираем вкладку Preview и смотрим сформированный отчет 

Image Modified









Чтобы создать границы строк и столбцов, необходимо создать границы ячеек. Для этого выделяем нужную ячейку и в свойствах ячейки (Properties)  выбираем «  Borders» и настраиваем границы (Рис. 2.4.3.2.15).

Image Modified













Настраиваем границы для всех ячеек

Image Modified






На вкладке

«Preview» 

Preview смотрим результат

Image Modified










На вкладке 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>

4.

Группировка данных

.

Создаем

отчет  Example2с

отчет 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_

rkk:

 

id bigint NOT NULL,- числовойидентификаторобъекта
  • id_type integer,
  • regdate timestamp without time zone,
  • logging_process character varying(253),
  • regnumprist character varying(253), -префиксномерадокументаregnumcnt bigint,- номердокументаregnumfin character varying(253),-суффиксномерадокумента
  • regregistratorpid character varying(253),
  • certiscertified smallint NOT NULL,
  • certcertifiedpid character varying(253),
  •  certcertifieddt timestamp without time zone,
  • certcertifieddt_tz character varying(50),
  • certwhocancelpid character varying(253),
  • ctrldeadline timestamp without time zone,
  • ctrldateexecution timestamp without time zone,
  •  ctrlwhoexecpid character varying(253),
  • regregistrator bigint,
  • regregistrator_type integer,
  •  regisinprocess smallint NOT NULL,
  •  regisrejected smallint NOT NULL,
  • regrejectedreason text,
  •  regsendtoregpid character varying(253),
  •  regsendtodt timestamp without time zone,
  •  regsendtodt_tz character varying(50),
  • regregistereddt timestamp without time zone,
  •  regregistereddt_tz character varying(50),
  • hassign character varying(1),

     

    Из таблицы  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, которое содержит алиас приложения.

    Image Removed

    Рис. 2.2.4.1. Запрос на отбор документов в отчет Example2.

    Изменяем порядок полей. Поле complectдолжно быть первым в списке.

    Image Removed

    Рис. 2.2.4.1.  Порядок полей в шаблоне отчета.

    Выбираем вкладку Datapreview (Рис. .  2.2.4.1)  и обновляем информацию - RefreshPreviewData (Рис. .  2.2.4.2).

    Image Removed

    Рис. 2.2.4.2.  Документы, отобранные в отчет Example2.

    Указываем, по каким полям будет производиться сортировка. Для этого выбираем вкладку Sorting(Рис. 2.2.4.2) и нажимаем кнопку Add. Появляется диалог   NewSortFieldWizard (Рис. 2.2.4.3).

    Image Removed

    Рис. 2.2.4.3. Выбор полей для сортировки

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

    Image Removed

    Рис. 2.2.4.4. Поля для сортировки документов в отчете.

    Форматируем  шаблон как показано на рис. . 2.2.4.5.

    Image Removed

    Рис. 2.2.4.5. Отформатированный шаблон отчета.

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

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

    Image Removed

    Рис. 2.4.5.1. Создание группы.

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

    Image RemovedРис. 2.4.5.2. Название группы.

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

    Image RemovedРис. 2.4.5.3. Добавление секции GroupHeader.

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

    Image Removed

    Рис. 2.4.5.4. Секция DB Group Header 1.

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

    Image Removed

    Рис. 2.4.5.5. Секция DB Group Header 1 с полем -$F{complect}.

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

    Image Removed

    Рис. 2.4.5.6. Форматирование секции с заголовком группы.

    Указываем границы (Рис. 2.4.5.7)

    Image Removed

    Рис. 2.4.5.7.  Границы  секции

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

    Image Removed

    Рис. 2.4.5.8_а. Выбор фона для секции Group Header

    Image Removed

    Рис. 2.4.5.8_б. Выбор фона для секции Group Header

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

    Image Removed

    Рис. 2.2.5.9.  Отчет с измененным фоном секции.

    6. Встроенные переменные. Номер страницы.

    Переменная — это вычисляемое в процессе формирования отчёта значение. Доступно большое количество системных переменных, таких как номер страницы, номер строки.  Но разработчик шаблона также может создавать свои пользовательские  переменные. При работе с переменными важно помнить, что они зависят от значения EvaluationTime при выводе.

    #

    Название переменной

    Значение переменной

    1

    PAGE_NUMBER

    Содержит номер текущей страницы данного отчета на момент времени

    2

    MASTER_CURRENT_PAGE

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

    3

    MASTER_TOTAL _PAGES

    Содержит количество страниц всего в мастере на момент времени

    4

    COLUMN_NUMBER

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

    5

    REPORT_COUNT

    Содержит номер текущей обрабатываемой записи (номер строки) в момент времени. Эта переменная используется для нумерации строк в момент расчета Now и в качестве общего количества записей в отчете (кол-во документов всего например) в момент расчета Report.

    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

    К значению будет прибавлено 1 при обработке следующей выбранной итерации. Report – с каждой новой обрабатываемой записью, Page – с новой страницей, Column–с новой колонкой.

    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, которое содержит алиас приложения.

    Image Added











    Изменяем порядок полей. Поле complectдолжно быть первым в списке.

    Image Added











    Выбираем вкладку Datapreview и обновляем информацию - RefreshPreviewData

    Image Added











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

    Image Added











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

    Image Added











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

    Image Added


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

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


    Image Added















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

    Image Added










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

    Image Added











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

    Image Added









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

    Image Added








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

    Image Added









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

    Image Added












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

    Image Added











    Image Added









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

    Image Added

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

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

    (Рис. 2.4.6.1).

    Image Modified

    Рис. 2.4.6.1.  Добавление в отчет секции Page Footer.








    На форме появится секция

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

    Image Removed

    Рис.. 2.4.6.2.  Добавление текстового поля.

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

    Image Added








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

    Editor (Рис. 2.4.6.3).

    : $V{PAGE_NUMBER}

    В этом выражении  $V(PAGE_NUMBER) – встроенная

    переменная, которая выводит номер страницы в отчет.

    Image RemovedРис. 2.4.6.3.  Встраивание переменной в поле.

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

    Image Removed

    Рис. 2.4.6.4. Встроенная переменная - номер страницы.

    переменная, которая выводит номер страницы в отчет.

    Image Added












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

    Image Added








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

    (Рис. 2.2.6.5).

    Image Modified

    Рис. 2.4.6.5. В отчете печатаются номера страниц.


    7.

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

    .

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

    Image Modified

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









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

    Блок кода
    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.


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


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

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


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


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


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

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

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


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

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

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


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


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


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


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


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


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



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

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

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

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


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

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

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

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

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


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


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

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


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

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


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

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



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

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


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


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


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

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


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

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


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

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

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


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


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


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


    Рис. 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).


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


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

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


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


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


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


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



    Рис. 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.

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


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


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


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


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


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


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


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

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


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


    Рис. 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..

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


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

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


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


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

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

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

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

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


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

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



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

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


    Далее форматируем размещение фрейма на форме отчета и его границы, как показано на рисунках Рис. 2.4.9.12 и Рис.  2.4.9.13


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


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


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


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

     

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


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


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


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


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

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


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


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


    Далее нажимаем кнопку Next и настраиваем параметры отчета (Рис. 2.4.9.19).


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


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


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


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


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


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


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


    Нажимаем кнопку ОК и получаем  окно с настроенными параметрами (Рис.2.4.9.23)


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


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


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



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


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

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


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


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


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

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

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

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


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


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


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

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


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


    • В свойствах отчета - вкладка Properties /Dataset заполняем поле Scriplet Class  -UtilScriptlet (Рис. 2.4.10.3). Сохраняем отчет.
    • В свойствах системного параметра  REPORT_SCRIPTLET в поле Class появляетсязначение UtilScriptlet (Рис. 2.4.10.4)

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

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

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

    • Doctypes (Рис. 2.4.10.6)

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

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

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

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

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