-
-
Save ShilGen/5590a43d980ce71e978239fc7f094125 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ПБК: 4ЦК Профиль А+ (60 мин) | |
// Энергия А+ за 1 час | |
// № ПУ | Дата | Показания | |
//Входные параметры отчета | |
var workSheet = WorkbookNonExcel.Worksheets.FirstOrDefault(); | |
var meterPoints = ReportParams.ClassifierNodes.SelectMany(x => x.GetAllChildrenOfClass(MeterPoint.GetClassInfo())).OfType<MeterPoint>().Distinct().ToArray(); | |
var parameters = new Dictionary<DirectionBasedParameter, string>{{DirectionBasedParameter.Instances.EnergyActiveForward1hour, "A+, кВт" },}; | |
ReportParams.StartDt = ReportParams.StartDt.AlignToDay(); | |
ReportParams.EndDt = ReportParams.EndDt.AlignToDay(); | |
DayIntervalData interval = new DayIntervalData{StartDt = ReportParams.StartDt,EndDt = ReportParams.EndDt.AddMinutes(60)}; | |
TimeSpan qHours = ReportParams.EndDt.AddMinutes(60).Subtract(ReportParams.StartDt); | |
// Заголовок таблицы | |
workSheet.Cells[0, 0].Value = "Прибор учета"; | |
workSheet.Cells[0, 1].Value = "Дата и время"; | |
workSheet.Cells[0, 2].Value = "Показания"; | |
workSheet.Cells.GetSubrangeAbsolute(0, 0, 0, 2).SetHeaderFormat(); | |
// настройки выборки данных | |
var settings = new SettingsGetMeterPointDataData{ RequireAllIntervalsForIntervalParameters = true}; // получить все интервалы | |
var decimalPlaces = 4; // знаки после запятой | |
int SI_multiples = 1000; // для отображения значений в кВт | |
DateTime tmpDt; // переменная для вывода временных значений | |
int dataRow = 1; | |
int maxRowsCount = 1048500; | |
if ((1 + meterPoints.Length * qHours.TotalHours ) > maxRowsCount) | |
{ | |
AddLogInfo("Выберите меньшее количество счетчиков или меньший период времени. "); | |
throw new ExecuteRegularException("Превышено максимальное количество строк для формирования отчёта"); | |
} | |
// поддерживаемые параметры ТУ | |
var meterPointSupportedParameterInfo = new Dictionary<MeterPoint, DirectionBasedParameter[]>(); | |
var meterPointsStartColumn = new Dictionary<MeterPoint, int>(); | |
foreach (var meterPoint in meterPoints) | |
{ | |
var meter = meterPoint.AttributeElectricityMeter; | |
meterPointSupportedParameterInfo[meterPoint] = parameters.Select(x => x.Key).Where(x => meter == null || meter.IsParameterSupported(x).GetValueOrDefault(true)).ToArray(); | |
} | |
//формирование таблицы | |
using(PreloadManager.Current.RegisterCache(() => new MeterPointGetEnergyValueCache(meterPoints, parameters.Keys, interval))) | |
{ | |
foreach (var meterPoint in meterPoints) | |
{ | |
var meter = meterPoint.AttributeElectricityMeter; | |
tmpDt = ReportParams.StartDt; | |
meterPointSupportedParameterInfo.TryGetValue(meterPoint, out var meterParams); | |
if (meterParams == null) meterParams = new DirectionBasedParameter[0]; | |
if (meterParams.Length == 1) | |
{ | |
var datas = meterPoint.GetMeterPointFinalDataEx(meterParams[0], interval, settings); | |
foreach (var data in datas) | |
{ | |
if (meter != null) { workSheet.Cells[dataRow, 0].Value = meter.AttributeSerialNumber;} | |
workSheet.Cells[dataRow, 1].Value = tmpDt.ToString("dd.MM.yyyy HH:mm"); | |
workSheet.Cells[dataRow, 2].Value = "н/д"; | |
if (!double.IsNaN(data.Value)) workSheet.Cells[dataRow, 2].Value = Math.Round(data.Value / SI_multiples, decimalPlaces); | |
if (tmpDt == ReportParams.StartDt) | |
{ | |
workSheet.Cells.GetSubrangeAbsolute(dataRow, 0, dataRow, 2).Style.FillPattern.SetSolid(Color.FromArgb(0, 172, 225, 175)); | |
} | |
tmpDt = tmpDt.AddMinutes(60); | |
dataRow++; | |
} | |
} | |
} | |
} | |
//Форматирование таблицы | |
var dataCells = workSheet.Cells.GetSubrangeAbsolute(0, 0, dataRow-1, 2); | |
dataCells.SetBorder(); | |
dataCells.Style.HorizontalAlignment = HorizontalAlignmentStyle.Right; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment