Сегодня мы рассмотрим непростой отчёт с бэнд-ориентированным подходом, который обычно используется в FastReport. Например, отчет по продажам с разбивкой по годам, кварталам и месяцам, в котором требуется вывести три таблицы с данными, но они должны быть расположены не сверху вниз - а слева направо. К счастью, мы можем сделать такой отчёт в FastReport .NET, используя несколько объектов “Матрица”.
Итак, в первую очередь рассмотрим данные. Они сгенерированы случайным образом, по определённому шаблону:
В базе хранятся данные по импорту фруктов из разных стран, разбитые по месяцам. У каждой записи есть поле “amount”, где хранится количество импортированных фруктов.
Мы будем использовать объект Матрица для вывода данных. Перейдем же к его настройкам:
Название страны и тип фрукта будут нашими строками, в рядах будет разбивка по годам, кварталам и месяцам, и, наконец, количество фруктов будет ячейками матрицы.
Итак, мы указали, какие данные будут использованы в матрице. Включим границы для всех ячеек, и настроим параметры страницы. А чтобы наш отчёт находился на одном листе - включим “неограниченная высота” и “неограниченная ширина”. После этого подготовим отчёт, который будет иметь вид:
Данные продолжаются вправо для 2018 и 2019 годов.
Итак, в первую очередь заметим, что для всех столбцов автоматически были добавлены итоги. Если они не нужны, то их можно удалить, что мы и сделаем. Чтобы вместо пустых ячеек отображались нули - нужно задать свойство NullValue у ячейки. По итогу в ней должен появиться 0. Кроме того, отключим у таблицы авторазмер и настроим результат:
Наша задача - сделать статистику с помощью нескольких матриц:
1) По годам;
2) По кварталам;
3) По месяцам.
Копируем матрицу и располагаем две её копии рядом с оригиналом. Включаем “дополнительное место в дизайнере”, чтобы всё поместилось. Заметьте, что при копировании матрицы она отвязывается от данных и нужно будет выбрать требуемую таблицу данных в свойстве DataSource.
Удалим ненужные поля из матриц и расположим их поближе друг к другу:
Попробуем подготовить такой отчёт:
Как вы видите в отчёте есть несколько проблем:
1) Из-за разной высоты заголовков матрицы выводятся неодинаковым образом;
2) Страны и виды фруктов повторяются во второй и третьей матрицах.
Увеличим высоту ряда “Год” в первой и второй матрицах. Чтобы выбрать ряд, вы можете навести мышь на левую часть матрицы. Когда мышь будет над одним из рядов, она превратится в чёрную стрелку вправо. Кроме этого, вы можете выбрать ряд в дереве отчёта:
И теперь все заголовки одной и той же высоты:
Матрицы в FastReport позволяют “скрыть” колонку или ряд, уменьшив их размер до нуля. В нашем случае нам нужно скрыть “название стран” с “фруктами” во второй и третьей матрицах. Выберем колонку, и уменьшим её свойство Width (ширина) до нуля:
После повторения этой манипуляции несколько раз, а также после сдвига матриц вплотную друг к другу, мы получаем такой шаблон:
Заметьте, это всё ещё три отдельные матрицы, а не одна. Но благодаря тому, что у них идентичная высота заголовков и ячеек, а также один и тот же набор данных - они функционируют как одна сложная матрица.
Итак, взглянем на отчёт теперь:
Из этого скриншота видно, что названия стран теперь не выводятся, а также что между матрицами нет разногласий.
И, напоследок, сделаем нашу матрицу немного красивее:
Чтобы, например, добавить слово к номеру года вам нужно помнить, что в полях матрицы находятся выражения. Если в поле будет такой текст, то будет показана ошибка:
Year [fruit_import_database.year]
Правильно же делать это таким образом:
"Year " + [fruit_import_database.year]