7.1. Пример отчёта XLS
Рассмотрим устройство одного отчёта в приложении-примере Библиотека, исходный код которого доступен на GitHub.
Для использования отчётов в проекте, активируйте элемент reports в списке App components на экране редактирования свойств проекта (меню CUBA → Project Properties) в CUBA Studio.
Для импорта отчёта откройте экран Reports → Reports и нажмите кнопку Import. Выберите файл Reports.zip в корневом каталоге проекта. В таблице появятся два отчёта, один из которых – Books by author. Данный отчёт выводит список публикаций книг по автору, группируя их по названию книги и издателю. Формат вывода – XLS.
-
Структура данных отчёта.
Рисунок 59. Структура данных отчёта Books by authorРассмотрим полосы отчёта.
-
Полоса header – заголовок отчёта. Содержит набор данных с Groovy-скриптом, выводящим значения внешних параметров отчёта:
[['authorName' : (params['author'].firstName + ' ' + params['author'].lastName)]]
-
Полоса book выводит книги путем выполнения следующего SQL-запроса:
select b.name as book_name, b.id as book_id from library_book b join library_book_author_link ba on ba.book_id = b.id join library_author a on a.id = ba.author_id where a.id = ${author}
В данном запросе используется внешний параметр отчёта –
author
. Параметр имеет тип Entity, однако в SQL-запросах его можно напрямую сравнивать с полями-идентификаторами сущностей, преобразование будет выполнено автоматически. -
Вложенная в book полоса publisher выводит издателей книги путем выполнения следующего SQL-запроса:
select p.name as publisher, bp.year, p.id as publisher_id from library_book_publication bp join library_publisher p on p.id = bp.publisher_id where bp.book_id = ${book.book_id}
В данном запросе в качестве параметра используется поле родительской полосы –
book_id
. Таким образом осуществляется связь между родительской и дочерней полосами. -
Вложенная в publisher полоса publication выводит издания книги путем выполнения следующего SQL-запроса:
select ld.name as department, count(bi.id) as amount from library_book_instance bi join library_book_publication bp on bp.id = bi.book_publication_id join library_library_department ld on ld.id = bi.library_department_id where bp.publisher_id = ${publisher.publisher_id} and bp.book_id = ${book.book_id} group by ld.name
В данном запросе в качестве параметров используются поля обоих родительских полос –
book_id
иpublisher_id
.
-
-
Параметры отчёта.
На вкладке Parameters and Formats объявлен один внешний параметр отчёта –
Author
:Рисунок 60. Редактор внешнего параметра AuthorЭтот параметр запрашивается у пользователя при запуске отчёта. Выбор автора производится через экран
library$Author.browse
, имеющийся в приложении. -
Шаблоны отчёта.
На вкладке Templates определен один шаблон формата XLS, загруженный из файла BooksByAuthor.xls:
Рисунок 61. Редактор шаблона -
Локализация названия отчёта.
На вкладке Localization задано название отчёта для русской локали:
ru = Книги по автору
Вызовите отчёт на исполнение из общего списка в экране Reports → Run Reports.