7.1. Пример отчёта XLS

Рассмотрим устройство одного отчёта в приложении-примере Библиотека, исходный код которого доступен на GitHub.

Для использования отчётов в проекте, активируйте элемент reports в списке App components на экране редактирования свойств проекта (меню CUBAProject Properties) в CUBA Studio.

Для импорта отчёта откройте экран ReportsReports и нажмите кнопку Import. Выберите файл Reports.zip в корневом каталоге проекта. В таблице появятся два отчёта, один из которых – Books by author. Данный отчёт выводит список публикаций книг по автору, группируя их по названию книги и издателю. Формат вывода – XLS.

  1. Структура данных отчёта.

    sample1 structure
    Рисунок 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.

  2. Параметры отчёта.

    На вкладке Parameters and Formats объявлен один внешний параметр отчёта – Author:

    sample1 param
    Рисунок 60. Редактор внешнего параметра Author

    Этот параметр запрашивается у пользователя при запуске отчёта. Выбор автора производится через экран library$Author.browse, имеющийся в приложении.

  3. Шаблоны отчёта.

    На вкладке Templates определен один шаблон формата XLS, загруженный из файла BooksByAuthor.xls:

    sample1 template
    Рисунок 61. Редактор шаблона
  4. Локализация названия отчёта.

    На вкладке Localization задано название отчёта для русской локали:

    ru = Книги по автору

Вызовите отчёт на исполнение из общего списка в экране ReportsRun Reports.