Show/Hide Toolbars

Руководство администратора

Настройка однотипных виджетов

Ссылки Назад Вверх Вперед

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

На скриншоте ниже один и тот же отчет отображается для разных направлений деятельности (с разными значениями параметра direction).

Кликните мышью чтобы посмотреть файл в полном размере

Портал с шестью однотипными блоками типа Отчет", которые вызываются с разными значениями параметра.

Виджеты

Все виджеты имеют тип "Отчет" и вызывают один и тот же отчет. В фильтре передается значение параметра.

Кликните мышью чтобы посмотреть файл в полном размере

Портал с шестью блоками типа Отчет", которые вызываются с разными значениями параметра.

Настройка фильтра:

{"27":{"name":"Direction","value":"3034","type":"Dropdown"}}

где 27 — ID фильтра, а 3034 — ID направления.

Отчет

Отчет содержит диаграмму, на которую наложены текстовые поля (в них будут отображаться числовые подписи).

multiple_blocks_report

Отчет с диаграммой.

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

multiple_blocks_data_sources

Источники данных в отчете.

Данные для диаграммы подгружаются из хранимой процедуры (в данном примере в процедуре подсчитывается число завершенных и просроченных задач из четырех категорий "Цели", "Задачи", "Вехи" и "Мероприятия").

ALTER PROCEDURE [dbo].[cm_getTaskInfo]
(@Direction INT = NULL)
 
AS
 
IF @Direction = 0
  SET @Direction = NULL;
 
SELECT COUNT(DISTINCT c.TaskID) AS cTotal
    , COUNT(DISTINCT z.TaskID) AS zTotal
    , COUNT(DISTINCT v.TaskID) AS vTotal
    , COUNT(DISTINCT m.TaskID) AS mTotal
    , COUNT(DISTINCT vClosed.TaskID) AS vClosed
    , COUNT(DISTINCT vOverdue.TaskID) AS vOverdue
    , COUNT(DISTINCT mClosed.TaskID) AS mClosed
    , COUNT(DISTINCT mOverdue.TaskID) AS mOverdue
FROM TasksInSubcat47Denormalized c
LEFT JOIN TasksInSubcat48Denormalized z
  ON z.ParentTaskId = c.TaskID
  AND z.StateID NOT IN (2, 50)
LEFT JOIN TasksInSubcat49Denormalized v
  ON v.ParentTaskId = z.TaskID
  AND v.StateID NOT IN (2, 50)
LEFT JOIN TasksInSubcat51Denormalized m
  ON m.ParentTaskId = v.TaskID
  AND m.StateID NOT IN (2, 50)
LEFT JOIN TasksInSubcat49Denormalized vClosed
  ON vClosed.TaskID = v.TaskID
  AND vClosed.StateId IN (4, 44, 45)
LEFT JOIN TasksInSubcat49Denormalized vOverdue
  ON vOverdue.TaskID = v.TaskID
  AND vOverdue.IsOverdue = 1
LEFT JOIN TasksInSubcat51Denormalized mClosed
  ON mClosed.TaskID = m.TaskID
  AND mClosed.StateId IN (4, 44, 45)
LEFT JOIN TasksInSubcat51Denormalized mOverdue
  ON mOverdue.TaskID = m.TaskID
  AND mOverdue.IsOverdue = 1
WHERE c.StateID NOT IN (2, 50)
  AND (@Direction IS NULL OR c.ParentTaskId = @Direction)

 

Цветовая схема диаграммы определяется в зависимости от направления (значения параметра direction). В данном примере в процедуре настраиваются цветовые схемы для пяти блоков по отдельным направлениям и шестому блоку со сводными данными по всем направлениям (для него значение параметра direction равно 0).

ALTER PROCEDURE [dbo].[cm_getDiagramSettings]
(@Direction INT = NULL)
 
AS
 
IF @Direction = 0
SET @Direction = NULL;
 
DECLARE @Settings TABLE (SubcatName VARCHAR(50), Height INT, Color VARCHAR(50));
 
INSERT INTO @Settings
VALUES('Мероприятия', 1, CASE
  WHEN @Direction = 3034 THEN 'PaleTurquoise'
  WHEN @Direction = 3033 THEN 'LightGreen'
  WHEN @Direction = 3030 THEN 'GreenYellow'
  WHEN @Direction = 2969 THEN 'LemonChiffon'
  WHEN @Direction = 3032 THEN 'PaleGoldenrod'
  ELSE 'Aquamarine'
END);
 
INSERT INTO @Settings
VALUES('Вехи', 1, CASE
  WHEN @Direction = 3034 THEN 'MediumTurquoise'
  WHEN @Direction = 3033 THEN 'LimeGreen'
  WHEN @Direction = 3030 THEN 'YellowGreen'
  WHEN @Direction = 2969 THEN 'Khaki'
  WHEN @Direction = 3032 THEN 'Gold'
  ELSE 'MediumAquamarine'
END);
 
INSERT INTO @Settings
VALUES('Задачи', 1, CASE
  WHEN @Direction = 3034 THEN 'LightSeaGreen'
  WHEN @Direction = 3033 THEN 'ForestGreen'
  WHEN @Direction = 3030 THEN 'OliveDrab'
  WHEN @Direction = 2969 THEN 'DarkKhaki'
  WHEN @Direction = 3032 THEN 'Goldenrod'
  ELSE 'MediumSeaGreen'
END);
 
INSERT INTO @Settings
VALUES('Цели', 1, CASE
  WHEN @Direction = 3034 THEN 'DarkCyan'
  WHEN @Direction = 3033 THEN 'DarkGreen'
  WHEN @Direction = 3030 THEN 'DarkOliveGreen'
  WHEN @Direction = 2969 THEN 'Olive'
  WHEN @Direction = 3032 THEN 'DarkGoldenrod'
  ELSE 'SeaGreen'
END);
 
SELECT *
  FROM @Settings

Данные из хранимой процедуры используются в настройках диаграммы.

Кликните мышью чтобы посмотреть файл в полном размере

Настройка цветовой схемы диаграммы.

 

Подвал отчета с легендой отображается только на одном, последнем блоке. Для этого в код отчета добавляется процедура и назначается на событие AfterData для подвала отчета.

private void ReportSummary1_AfterData(object sender, EventArgs e)
{
string direction = ((String)Report.GetParameterValue("FilterDirection"));
if (direction != "3032")
 {
  ReportSummary1.Visible = false;
 }
}

Полезные ссылки