Пример 3. Интерактивный объект "Матрица"

Top  Previous  Next

В этом примере мы рассмотрим, как построить детальный отчет, щелкнув на значение в ячейке объекта "Матрица". В качестве примера мы будем использовать матрицу, которая показывает объемы продаж сотрудников по годам.

 

В качестве источника данных для матрицы используется таблица MatrixDemo. В ней представлены продажи сотрудников, сгруппированные по году и месяцу:

 

Name

Year

Month

ItemsSold

Revenue

Nancy Davolio

1999

2

1

1000

Nancy Davolio

1999

11

1

1100

Nancy Davolio

1999

12

1

1200

Nancy Davolio

2000

1

1

1300

Nancy Davolio

2000

2

2

1400

Nancy Davolio

2001

2

2

1500

Nancy Davolio

2001

3

2

1600

Nancy Davolio

2002

1

2

1700

Andrew Fuller

2002

1

2

1800

Andrew Fuller

1999

10

2

1900

Andrew Fuller

1999

11

2

2000

Andrew Fuller

2000

2

2

2100

Janet Leverling

1999

10

3

3000

Janet Leverling

1999

11

3

3100

Janet Leverling

2000

3

3

3200

Steven Buchanan

2001

1

3

4000

Steven Buchanan

2001

2

4

4100

Steven Buchanan

2000

1

4

3999

 

На основе этих данных построим матрицу, которая печатает следующую информацию:

 

в заголовке колонки печатается поле MatrixDemo.Year;
в заголовке строки печатается поле MatrixDemo.Name;
в ячейке печатается поле MatrixDemo.Revenue.

 

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

 

interactiveExample3

 

Как видно, значения в ячейках представляют собой сумму продаж сотрудника за весь год. Давайте сделаем так, чтобы при щелчке на ячейке матрицы показывался более подробный отчет. Этот отчет должен давать ответ на вопрос - "откуда в ячейке матрицы взялось это значение?". В нашем случае подробный отчет может содержать продажи выбранного сотрудника за каждый месяц выбранного года.

 

Как связать ячейку с данными, на основе которых она была напечатана? Каждая ячейка матрицы имеет адрес. Это совокупность значений из заголовка колонки и строки. В нашем примере адрес ячейки - это совокупность года и имени сотрудника. Именно эти данные можно передать в детальный отчет. Как это сделать? Очень просто: настройте гиперссылку, указав только имя отчета и название параметра. Значение параметра указывать не надо: для ячеек матрицы FastReport сам формирует значение и передает его в параметр.

 

Предположим, мы щелкнули на верхней левой ячейке, содержащей число 3900. Это сумма продаж сотрудника "Andrew Fuller" за 1999 год. В каком виде значение передается в параметр? FastReport комбинирует значение колонки и значение строки, используя точку с запятой в качестве разделителя:

 

1999;Andrew Fuller

 

То есть, в детальном отчете мы должны извлечь из этого значения год и имя сотрудника, преобразовать год в число, и эти значения использовать для фильтрации данных? Ничего подобного! Все, что нужно сделать в детальном отчете - создать параметр, имеющий вложенные параметры. Как это сделать, смотрите в главе "Данные". В данном случае родительский параметр может выглядеть следующим образом:

 

interactiveExample3_1

 

При создании параметра учитывайте следующие моменты:

 

родительский параметр настраивать никак не нужно. Назовите его понятным для вас именем, и все;
родительский параметр должен иметь столько вложенных параметров, сколько значений передается из матрицы. В данном случае передается два значения;
порядок вложенных параметров соответствует порядку передаваемых из матрицы значений. Напоминаем, что сначала передаются значения колонок, затем строк матрицы. В нашем случае в первый параметр будет передан год, во второй - имя сотрудника;
вложенные параметры можно называть как угодно, но желательно давать им имена, совпадающие с именами полей из матрицы;
очень важно правильно настроить тип данных для каждого вложенного параметра. Тип данных должен соответствовать значению, которое передается в параметр. В нашем случае первый параметр (год) должен быть целого типа (Int32), второй (имя сотрудника) - строкового (String).

 

Итак, после того как мы прояснили все необходимые моменты, приступим к созданию отчета. Выделите ячейку матрицы и вызовите редактор гиперссылки:

 

interactiveExample3_4

 

В настройке гиперссылки вам нужно указать в качестве параметра родительский параметр (в нашем примере - "SelectedCell"):

 

interactiveExample3_3

 

FastReport сам передаст значения во вложенные параметры SelectedCell.Year и SelectedCell.Name. Эти значения будут преобразованы в тип данных, указанный в настройке параметра - вот почему так важно правильно настроить тип данных параметра.

 

Детальный отчет располагается на отдельной странице основного отчета и использует тот же источник данных, что и матрица - MatrixDemo:

 

interactiveExample3_2

 

Осталось отфильтровать строки данных, чтобы показать продажи выбранного сотрудника за выбранный год. Для этого откройте редактор бэнда "Данные" и укажите следующее условие фильтрации:

 

[MatrixDemo.Year] == [SelectedCell.Year] && [MatrixDemo.Name] == [SelectedCell.Name]

 

Отчет готов. Запустите его на выполнение и щелкните на верхней левой ячейке. Откроется детальный отчет, который содержит следующие данные:

 

interactiveExample3_5

 

Как видно, сумма значений соответствует значению ячейки матрицы, на которой мы щелкнули.