Table of Contents

Сводный отчет с параметрами потребления по меткам времени

Рассмотрим порядок создания сводного отчета параметров потребления по точкам учета с возможностью использования суточных данных. Задача: создать отчетную форму с возможностью вывода параметров потребления по нескольким точкам учета системы водоснабжения в одном отчете.

Видео-пример создания этой отчетной формы.

ШАГ 1. Создайте отчетную форму типа Параметры потребления по точкам учета на основе соответствующей системной. При создании отчетной формы добавьте группировку по полю FullTitle из узла Точка учета

ШАГ 2. Откройте вкладку Скрипты и скопируйте в нее следующий код:


using System.Data;
using System.Collections.Generic;

// Значения для вычисляемого поля используемого для форматирования ячеек (ключ - ID точки учета).
private Dictionary<int, bool> _formattingRule = new Dictionary<int, bool>();

// Формируем набор значений для вычисляемого поля
private void BaseReport_DataSourceDemanded(object sender, System.EventArgs e) 
{
    XtraReport xtraReport = (XtraReport)sender;
    var dataSet = (DataSet)xtraReport.DataSource;

    // Исходная таблица с данными потребления
    DataTable consumptionTable = dataSet.Tables["ConsumptionTable"];
    
    foreach(DataRow row in consumptionTable.Rows)
    {
        int measurePointId = (int)row["MeasurePointId"];
        
        // По умолчанию для всех точек учета считаем, что признак форматирования = False
        if (!_formattingRule.ContainsKey(measurePointId))
        {
            _formattingRule[measurePointId] = false;
        }
        
        // Если у точки учета хотя бы для одной метки времени выполнится условие, то для этой точки учета выставляем признак форматирования равным True
        // В этом случае будет изменен цвет фона ячейки с наименованием точки учета
        // См. свойство 'Правила форматирования' для ячейки tcFullTitle
        if (row["M"] != DBNull.Value)
        {
            var m = (double)row["M"];
            if (m > 0.27 && m < 0.28)    // условие, при котором надо изменить цвет фона ячейки с наименованием точки учета
            {
                _formattingRule[measurePointId] = true;
            }    
        }
    }    
}

// Скрипт для получения значения вычисляемого поля formattingRuleCalculatedField
private void formattingRuleCalculatedField_GetValue(object sender, DevExpress.XtraReports.UI.GetValueEventArgs e) 
{
    // ID текущей точки учета
    var measurePointId = GetCurrentColumnValue("MeasurePointId");
    if (measurePointId != null)
    {
        e.Value = _formattingRule[(int)measurePointId];
    }
}

ШАГ 3. В узле 'Параметры точки учета, потребления и показания' создайте вычисляемое поле с именем: formattingRuleCalculatedField.

ШАГ 4. Для вычисляемого поля formattingRuleCalculatedField задайте свойство Получить значение равным formattingRuleCalculatedField_GetValue.

ШАГ 5. Переключитесь на вкладку Обозреватель отчета и для узла MeasurePointSummaryReport в свойствах задайте скрипт Запрос источника данных равным BaseReport_DataSourceDemanded.

ШАГ 6. Откройте вкладку Скрипты и замените строку if (m > 0.27 && m < 0.28) на условие, при выполнении которого должен меняться цвет ячейки с наименованием точки учета.

ШАГ 7. В секции GroupFooter1 выделите ячейку с наименованием точки учета и в окне свойств для цвета фона задайте выражение Iif([formattingRuleCalculatedField] = True, 'DeepPink', ?)

ШАГ 8. Сохраните изменения.

ШАГ 9. Пример сформированного отчета с отображением меток времени:

ШАГ 10. Для того чтобы скрыть строки с метками времени, надо для секции detailBand1 задать свойство Видимость равным Нет

ШАГ 11. Пример сформированного отчета без отображения меток времени:

ШАГ 12. В данном примере источник данных отчета фильтруется по точкам учета системы водоснабжения. Если нужно отображать точки учета для всех ресурсов учета, то необходимо отключить фильтрацию: