Пример использования пользовательского атрибута

Top  Previous  Next

Рассмотрим использование пользовательского атрибута на примере отчетной формы 'Ведомость учета параметров потребления тепла' для точки учета.        

Задача: создать вычисляемое поле для вывода процента отклонения фактической тепловой энергии от договорного значения. Фактические значения потребления берутся из узла 'Архивы потреблений и интеграторов', а договорное значение хранится в атрибуте точки учета.

ШАГ 1. Откройте в редакторе отчетов требуемую отчетную форму (главном меню пункт Справочники -> Отчетные формы).

ШАГ 2. В секцию ReportHeader добавьте ячейку с именем label_СontractHeat для отображения договорной нагрузки по тепловой энергии. Свяжите эту ячейку с соответствующим полем из узла 'Атрибуты точки учета'.

На закладке 'Обозреватель отчета' в свойствах отчетной формы задайте обработчик события 'Запрос источника данных'.

ExampleCalculatedFieldInDefferentNodes_1_DataSourceDemanded

 

ШАГ 3. В свойстве 'Скрипты' для вычисляемого поля calculatedField_Q выберите пункт 'Получить значение -> (Новый)', чтобы создать заготовку скрипта, которая будет возвращать значение вычисляемого поля.

ШАГ 4. Код скриптов обработчиков:

 

using System;

using System.Data;

using Lers.Reports;

 

// Часовая договорная нагрузка. 

private double? contractHeat = null;

 

// Обработчик запроса источника данных

private void BaseReport_DataSourceDemanded(object sender, System.EventArgs e) 

{

            double contractValue = 0;

            object binded_value = null;

 

            // Получаем значение пользовательского атрибута связанного с ячейкой label_СontractHeat

 // Значение атрибута хранится как строка. 

            binded_value = DataSourceUtils.GetBindedValue(label_ContractHeat);

 

    // Получаем догворное значение часовой нагрузки (ГКал/час)        

            if (double.TryParse(Convert.ToString(binded_value), out contractValue))

            {

          this.contractHeat = contractValue;

            }

}

 

// Обработчик возвращающий значение, которое является результатом вычисляемого поля calculatedField_Q. 

private void calculatedField_Q_GetValue(object sender, DevExpress.XtraReports.UI.GetValueEventArgs e) 

{

            DataRowView row = (DataRowView)e.Row;

 

            // Получаем фактическое потребление тепловой энергии (для каждой метки времени свое, ГКал/сутки)

            double? q = null;

            if ( row["Q"] != DBNull.Value)

 {

         q = Convert.ToDouble(row["Q"]);

 }

 

            // Получаем значение, которое является результатом вычисляемого поля.

            // Процент отклонения фактического расхода тепла от договорного значения.

 // this.contractHeat - значение часовой договорной нагрузки (ГКал/час) считанное из пользовательского атрибута.

 

            if (q.HasValue && this.contractHeat.HasValue)

 {

         e.Value = 100 * (q - 24 * this.contractHeat.Value) / (24 * this.contractHeat.Value);

 }

}

 

ШАГ 5. Свяжите вычисляемое поле calculatedField_Q с требуемой ячейкой секции Detail.

ШАГ 6. С помощью кнопки icon_save на панели инструментов редактора отчетов сохраните сделанные изменения.

chapterup Наверх