Пример использования пользовательских атрибутов в сводных отчетах

Top  Previous  Next

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

Задача: создать вычисляемое поле для вывода процента отклонения фактической тепловой энергии от договорного значения. Фактические значения потребления берутся из узла 'Параметры сводного отчета по объектам учета' (поле Q_Heat), а договорное значение хранится в атрибуте объекта учета (атрибут ContractHeat, содержащий значение суточного договорного  теплопотребления на объекте, ГКал/сутки).

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

ШАГ 2. В узле 'Параметры сводного отчета по объектам учета' создайте вычисляемое поле с именем calculatedField_Attribute с выражением:

         ToDouble([Атрибуты объекта учета].[ContractHeat])

 

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

ExampleCalculatedFieldInDefferentNodes_1_DataSourceDemanded

 

В открывшейся форме редактора скриптов введите текст для обработчика запроса, в котором рассчитывается и сохраняется в переменной daysCount длительность отчетного периода в сутках:

using System.Data;

using System;

 

// Количество суток в отчетном периоде

private double daysCount = 0;

 

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

{

 // Определяем количество суток в отчетном периоде

 

 var report = (XtraReport)sender;

 

 DateTime startDate = (DateTime)report.Parameters["DATE_START"].Value,

              endDate = (DateTime)report.Parameters["DATE_END"].Value;

 

 TimeSpan ts = endDate - startDate;

 

 this.daysCount = ts.TotalDays;

}

 

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

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

{

 // Получаем значение атрибута для текущего объекта учета (суточное договорное значение)

 double? dayContractValue = this.GetCurrentColumnValue(this.calculatedField_Attribute.Name) as double?;

 

 if (!dayContractValue.HasValue || dayContractValue.Value == 0)

 {

         return;

 }

 

 // Пересчитываем договорную нагрузку на отчетный период 

 var contractHeat = this.daysCount * Convert.ToDouble(dayContractValue);

 

 // Получаем фактическое потребление тепловой энергии для текущего объекта учета

 DataRowView row = (DataRowView)e.Row;

 double? q = null;

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

 {

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

 }

 

 // Получаем значение возвращаемое вычисляемым полем

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

}

 

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

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

chapterup Наверх