Мастер создания отчетов - это визуальный инструмент, который позволяет быстро создавать структуру данных и шаблон отчета. Для вызова мастера в экране Reports нажмите Create -> Using wizard.

Мастер позволяет создавать отчеты трех типов:
- Отчет по отдельному экземпляру сущности.
- Отчет по списку экземпляров сущности.
- Отчет по списку экземпляров сущности, выбранных при помощи запроса.
Процесс создания любого отчета состоит из трех этапов:
- Выбор основных свойств отчета.
- Редактирование регионов отчета.
- Сохранение отчета.
Созданный отчет можно доработать обычным способом в редакторе, и запустить либо через общий список отчетов, либо с помощью действий TablePrintFormAction
и EditorPrintFormAction
.
Рассмотрим работу мастера на примере тестового приложения Библиотека, доступного для загрузки по нажатию на кнопку Samples в окне выбора проекта CUBA Studio.
=== Отчет по экземпляру сущности
Допустим, что мы хотим получить сведения об отдельно взятом издании книги, то есть экземпляре сущности library$BookPublication
.
Для этого необходимо запустить мастер создания отчетов и на первом этапе указать детали отчета:
- Entity - сущность, по экземпляру которой будет создаваться отчет -
library$BookPublication
. - Format of template file - формат шаблона, по которому будет создаваться отчет - DOCX. Доступны также форматы XSLX и PDF.
- Report name - имя, под которым будет сохранен отчет -
Publication details
.
Затем нужно выбрать тип построения отчета - Report for single entity. Этот тип построения означает, что отчет будет создаваться по одной сущности.

После этого необходимо нажать на кнопку Next и в отобразившемся окне выбрать атрибуты сущности BookPublication
и связанных с ней сущностей, которые будут включены в отчет (Publication.Book.Name
, Publication.Publisher.Name
, Publication.Year
и Publication.City.Name
). Для этого выбираем их в левой колонке и переносим в правую колонку нажатием на кнопку или двойным кликом.
Атрибуты будут отображаться в отчете в том порядке, в котором они выбраны на этом этапе. Для того чтобы изменить порядок отображения,
перемещайте атрибуты при помощи кнопок /
.

После нажатия на кнопку ОК произойдет переход ко второму этапу - редактированию регионов отчета.
Отобразишийся экран содержит список именованных регионов - полос шаблона отчета, в которых будут отображаться данные. Мастер позволяет добавить в шаблон несколько регионов, позволяющих отображать разные наборы данных в виде простого текста.
При необходимости набор атрибутов сущности, загружаемых в регион шаблона отчета, можно отредактировать, нажав на ссылку со списком атрибутов в описании региона. Также можно добавить новый регион, нажав на кнопку Add simple region.
Если в сущности есть атрибуты-коллекции, появится также кнопка Add tabulated region, позволяющая добавить регион для отображения данных в виде таблицы.
В обоих случаях отобразится окно выбора атрибутов сущности library$BookPublication
, позволяющее добавить или удалить атрибуты из набора.

На этом этапе можно посмотреть, как отчет будет выглядеть с текущим набором данных, нажав на кнопку Run и выбрав экземпляр сущности library$BookPublication
.

После настройки регионов можно переходить к третьему этапу - сохранению отчета. На этом этапе можно просмотреть готовый шаблон отчета, изменить название и формат файла вывода. Доступны три типа: DOCX, HTML, PDF.

После нажатия на кнопку Save откроется стандартный редактор отчета, в котором при необходимости можно произвести более тонкую настройку шаблона и структуры данных. После завершения редактирования нажмите Save and close в редакторе отчета.
Отчет будет добавлен в группу отчетов General в браузере отчетов, откуда его можно запустить кнопкой Run.

Дополнительно мы можем сделать так, чтобы чтобы отчет о деталях публикации запускался из браузера публикаций. Для этого необходимо
добавить в XML-дескрипторе bookpublication-browse.xml
к таблице публикаций кнопку Print details для запуска отчета:
<groupTable id="bookPublicationTable" ... <buttonsPanel> ... <button id="printDetails" caption="msg://printDetails"/>
После чего необходимо добавить к ней в контроллере экрана действие TablePrintFormAction
для запуска отчета:
@Inject private Button printDetails; @Override public void init(Map<String, Object> params) { TablePrintFormAction action = new TablePrintFormAction("report", this, bookPublicationTable); bookPublicationTable.addAction(action); printDetails.setAction(action); }
После этого можно запускать отчет по любой публикации, выбирая ее в таблице и нажимая на кнопку Print details

Готовый отчет выглядит следующим образом:

=== Отчет по списку экземпляров сущности
Мастер отчетов позволяет создавать два вида отчетов по списку экземпляров сущности:
- отчет по вручную выбранным экземплярам определенной сущности;
- отчет по экземплярам сущности, удовлетворяющим некоторому запросу.
Рассмотрим первый тип отчета. Допустим, что нам необходимо получить список экземпляров книг, находящихся в библиотеке (сущность
library$BookInstance
) с их названиями и отделами библиотеки, в которых они находятся.
На первом этапе необходимо указать детали отчета:
- Entity - сущность, по списку экземпляров которой будет создаваться отчет -
library$BookInstance
. - Format of template file - формат вывода отчета - XSLX.
- Report name - имя отчета -
Book items location
.
Затем нужно выбрать тип построения отчета - Report for list of entities и нажать Next.

В соответствии с условием задачи, в окне выбора атрибутов необходимо выбрать BookItem.Publication.Book.Name
, BookItem.LibraryDepartment.Name
.

Нажмем ОК для перехода ко второму этапу - редактированию регионов отчета.
Шаблон отчета по списку сущностей может содержать только один регион, выводящий данные в виде таблицы. Добавлять новые регионы нельзя, но можно отредактировать набор данных в существующем, нажав на ссылку со списком атрибутов, либо удалить существующий регион и создать его заново, для чего наверху станет активной кнопка Add tabulated region.
В данном случае, менять ничего не нужно. Нажмем Next -> Save для сохранения отчета. В редакторе отчетов отчет будет выглядеть следующим образом:

После сохранения отчет можно запускать из браузера отчетов.
Дополнительно мы можем добавить кнопку запуска отчета в экран просмотра экземпляров книг, открывающийся из браузера публикаций
по кнопке Show items. Для этого установим в XML-дескрипторе экрана bookinstance-browse.xml
для таблицы экземпляров книг (bookInstancesTable
) атрибут multiselect=true
и добавим код кнопки:
<table id="bookInstanceTable" multiselect="true"> ... <buttonsPanel> ... <button id="printList" caption="msg://printList"/>
После этого инжектируем в контроллере компонент Button
:
@Inject private Button printList;
После этого внутри переопределенного метода init()
добавим следующий код:
TablePrintFormAction action = new TablePrintFormAction("report", this, bookInstanceTable); bookInstanceTable.addAction(action); printList.setAction(action);
Теперь отчет можно запускать из браузера экземпляров книг, выбирая экземпляры для отчета в таблице и нажимая на кнопку Print list. Опция Print selected экспортирует выбранные экземпляры, опция Print all - все экземпляры, выбранные текущим фильтром.

Готовый отчет будет выглядеть следующим образом:

=== Отчет по экземплярам сущности, отобранным при помощи запроса
Теперь рассмотрим второй тип отчета - отчет по списку сущностей, выбранных с помощью запроса. Для этого усложним задачу: отчет должен содержать в себе список экземпляров книг (с именами и названиями отделов), добавленных после определенной даты.
Как и в предыдущем случае, начнем с того, что зададим детали отчета:
- Entity - сущность, по списку экземпляров которой будет создаваться отчет -
library$BookInstance
. - Format of template file - формат вывода отчета - XSLX.
- Report name - имя отчета -
Recently added book items.
Затем нужно выбрать тип построения отчета - Report for list of entities, selected by query.

Выбранный тип отчета позволит нам автоматически отобрать список сущностей, соответствующих определенному запросу. Для того чтобы задать этот запрос, необходимо нажать на ссылку Set query, появившуюся внизу.
Отобразится окно выбора условий запроса, которое во многом аналогично соотвествующему окну универсального фильтра. Оно позволяет добавлять условия, объединять их в группы AND/OR и настраивать их параметры.
Для добавления нового условия запроса нужно нажать на кнопку Add. Отобразится окно выбора атрибутов сущности library$BookInstance
, в котором необходимо выбрать атрибут Created at
. Атрибут будет добавлен в дерево условий запроса и в панели справа отобразятся его свойства. Выберем оператор запроса (>=
).

После сохранения запроса необходимо нажать Next и перейти к выбору атрибутов сущности library$BookInstance
, которые будут включены в отчет. В соответствии с условием задачи, перенесем в правую колонку атрибуты BookItem.Publication.Book.Name
, BookItem.LibraryDepartment.Name
. Нажмем ОК для перехода ко второму этапу.

Нажмем Next -> Save для сохранения отчета. В отобразившемся редакторе готовый отчет будет выглядеть следующим образом:

В редакторе можно усложить структуру отчета, добавив новые полосы и наборы данных, а также настроить дизайн шаблона отчета, сделать локализацию отчета или определить настройки прав доступа.
К примеру, перейдем на вкладку Parameters and Values. В списке Parameters выберем и изменим имя параметра запроса: Date
вместо стандартного CreateTs1
.

Наконец, добавим в экран просмотра списка отделов библиотеки кнопку Report, позволяющую запустить данный отчет.
Для этого внесем в XML-дескриптор экрана librarydepartment-browse.xml
реализацию кнопки:
<table id="libraryDepartmentTable" ... <buttonsPanel id="buttonsPanel"> ... <button id="reportBtn" caption="msg://reportBtn"/> </buttonsPanel> </table>
После чего в контроллере инжектируем компонент Button
:
@Inject private Button reportBtn;
и в переопределенном методе зададим для кнопки действие RunReportAction
:
reportBtn.setAction(new RunReportAction("report", this));
В браузере отделов библиотеки появится кнопка Report, по нажатию на которую открывается список всех доступных в системе отчетов. Для того чтобы запустить наш отчет, необходимо выбрать в списке Recently added book items, указать дату и нажать Run report.

Готовый отчет выглядит следующим образом:
