4.2. Отчет по списку экземпляров сущности
Мастер отчетов позволяет создавать два вида отчетов по списку экземпляров сущности:
-
отчет по вручную выбранным экземплярам определенной сущности;
-
отчет по экземплярам сущности, удовлетворяющим некоторому запросу.
Рассмотрим первый тип отчета. Допустим, что нам необходимо получить список экземпляров книг, находящихся в библиотеке (сущность 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", bookInstanceTable);
bookInstanceTable.addAction(action);
printList.setAction(action);
Теперь отчет можно запускать из браузера экземпляров книг, выбирая экземпляры для отчета в таблице и нажимая на кнопку Print list. Опция Print selected экспортирует выбранные экземпляры, опция Print all - все экземпляры, выбранные текущим фильтром.

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