Величина утечки теплоносителя (разница масс)

Здравствуйте.

Можете ли вы сделать чтобы при выводе отчетов по отопительной воде учитывались условия п.92 МЕТОДИКИ ОСУЩЕСТВЛЕНИЯ КОММЕРЧЕСКОГО УЧЕТА ТЕПЛОВОЙ ЭНЕРГИИ, ТЕПЛОНОСИТЕЛЯ (ПРИКАЗ
от 17 марта 2014 г. N 99)

Т.е. согласно этой методики, можно разницу масс между подающим и обратным трубопроводом приравнивать к “НУЛЮ”.

Это актуально для вычислителей, в которых отсутствует функция не баланса масс.

Из п.92:
Если M1 > М2 или М2 > M1 но |М1 — М2| меньше суммы модулей абсолютных погрешно-
стей измерения массы теплоносителя величина утечки (подмеса) считается равной нулю.

Речь идет о виличине утечки, а не о том о чем вы говорите.

Величина утечки = М1-М2 - это и есть разница масс.

Именно об этом и говорится в п.92, т.е. разницу масс можно приравнивать к нулю с учетом условий указанных в п.92.
Эта функция реализована во многих вычислителях.
Я хотел бы чтобы она была реализована в программе при формировании отчетов.

Сделайте отчет своими силами, там не сложно будет внести условие когда дельтам масс приравнивается к нулю

energon Вы разработчик, или пользователь?

:hi_hi_hi: по профессии - разработчик, по отношению к ЛЭРС - пользователь как и вы.

Создайте вычисляемое поле с нужным выражением и используйте его в отчете вместо M1-M2.

Если сделать так, как вы предлагаете, то нет контроля по поводу допустимого небаланса масс.
Хотелось бы чтобы в этом расчете было сравнение с допустимым небалансом масс, значение которого вводится в настройках точки учета.
И при изменении значения в настройках, журнал событий ЛЭРС бы фиксировал данное изменение.
Я Вас понимаю как разработчиков: зачем программировать, когда можно это реализовать на уровне формирования отчетов, но думаю эта функция пригодилась бы многим.
В целом вам решать.

Исходная проблема касалась именно вывода данных в отчётах.

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

Во первых это не проблема, а предложения по улучшению функциональности ЛЭРС.
Моя исходная тема касалась не только вывода данных отчета и я думаю не обязательно делать новую тему.
Я думаю вы не поняли мою исходную тему, а я пояснил ее уже в дискуссии.

Все же если эта функциональность вас заинтересовала, то прошу обсуждать ее здесь

При формировании суточного отчета при сравнении архивных данных за каждые сутки такое вычисляемое поле сделать не проблема, а как внести изменения в суммарные переменные (сумма за период) в графе ИТОГО или в графе “Всего к оплате за потери воды Мп =”???

В ячейке строки Итого для колонки Мп надо суммировать вычисляемое поле.
Если отчетную форму создавать на базе ‘Теплоснабжение (системная)’, то ячейку SumMdelta в строке Итого надо связать с вычисляемым полем. При обработки события ‘Вычисление сводки завершено’, значение из ячейки SumMdelta автоматически подставляется в ячейку графы “Всего к оплате за потери воды Мп =” в обработчике скрипта OnSummaryCalculated:

// Все ячейки в строке итого подписаны на событие Summary Calculated (Вычисление итога завершено);
// Скрипт OnSummaryCalculated вызывается для каждой колонки, когда для нее подсчитана сумма.
// Когда будут получены суммы для всех колонок отчета, вызовется метод SetBarCodeValue для формирования barcode
private void OnSummaryCalculated(object sender, DevExpress.XtraReports.UI.TextFormatEventArgs e) 
{

	// e.Text - содержит отформатированное значение накопленной суммы (оно отображается в строке Итого) 
	// e.Value - содержит истинное значение накопленной суммы.
	double value = 0;
	double.TryParse(e.Text, out value);

	switch (((XRControl)sender).Name);
	{
		case "SumM1":
			// Суммарный массовый расход в подающей магистрале			
			Mass_in = value;
			break;
		case "SumM2":
			// Суммарный массовый расход в отводящей магистрале			
			Mass_out = value;
			break;
		case "SumMdelta":
			// Суммарный водоразбор
			Mass_delta = value;
			labelSummMass.Text = String.Format("{0:F3}", Mass_delta);
			break;
		case "SumH1":
			// Суммарная тепловая энергия в подающей магистрале			
			Heat_in = value;
			break;
		case "SumH2":
			// Суммарная тепловая энергия в отводяще магистрале			
			Heat_out = value;
			break;
		case "SumHdelta":
			// Суммарное теплопотребление с учетом теплопотерь
			Heat_delta = value;
			labelSummHeat.Text = String.Format("{0:F3}", Heat_delta+Heatloss);
			break;
		case "SumWorkTime":
			// Суммарное время наработки
			Worktime = value;
			break;
	}

	// Увеличиваем значение счетчика колонок, по которым вычислены суммы
	counter++;

	// Когда все суммы вычислены, формируем barcode и сбрасываем счетчик
	if (counter == 7);
	{
		SetBarCodeValue();
		counter = 0;
	}
}

Спасибо за ответ, но мы как начинающие пользователи немного не поняли Ваш ответ.
В отчете “Теплоснабжение (системная)” в графе “Итого” в колонке Мп, ячейка называется SumM, а не SumMdelta. Откуда взялась ячейка SumMdelta?
Я не понял где редактируется скрипт OnSummaryCalculated. Вы прислали переделанный код скрипта или код который используется в отчете “Теплоснабжение (системная)” .
Я правильно понял, что в этом скрипте нужно поставить условие расчета суточных масс Мп и суммарную за период?

Я нашел как зайти в скрипт

Только скрипт выглядит так:

// Получение суммарного теплопотребления c учетом тепловых потерь.
// Не используется rowFooterValues, чтобы не менять код при удалении BarCode и скриптов его заполняющих.
private void labelSummHeat_SummaryCalculated(object sender, DevExpress.XtraReports.UI.TextFormatEventArgs e)
{
// e.Text - содержит отформатированное (округленное) значение накопленной суммы,
// e.Value - содержит истинное значение накопленной суммы.
double dblHeat = 0;
if ( System.Double.TryParse(e.Text, out dblHeat) )
{
this.sumHeat = dblHeat + this.heatLoss;
}
}

// Вывод суммарного теплопотребления с учетом теплопотерь
private void labelSummHeat_PrintOnPage(object sender, DevExpress.XtraReports.UI.PrintOnPageEventArgs e)
{
labelSummHeat.Text = String.Format("{0:F3}", this.sumHeat);
}

// Все ячейки (кроме первой) в строке итого подписаны на событие Summary Calculated (Вычисление итога завершено).
// Скрипт OnSummaryCalculated вызывается для каждой колонки, когда для нее подсчитана сумма или среднее значение.
private void OnSummaryCalculated(object sender, DevExpress.XtraReports.UI.TextFormatEventArgs e)
{

// e.Text - содержит отформатированное (округленное) значение накопленной суммы,
// e.Value - содержит истинное значение накопленной суммы.
double value = 0;
double.TryParse(e.Text, out value);

// наименование ячейки, для которой поднято событие об окончании расчета суммы
string cellName = ((XRControl)sender).Name;

rowFooterValues[cellName] = value;
}

Вы вставьте в private void OnSummaryCalculated то содержимое что вам написали после rowFooterValues[cellName] = value; например

Уважаемый energon. Я задавал вопросы разработчику.

Можно обойтись и без скриптов.
1.В узле ‘Архив потреблений и интеграторов’ создайте вычисляемое поле, например, calculatedFieldMdelta с выражением:

Iif(IsNull([M - (?M) водоразбор (тонны)])  Or [M - (?M) водоразбор (тонны)] < 0, 0, [M - (?M) водоразбор (тонны)])

2.Свяжите его с ячейками tableCell_M_delta, sumM и labelSummMas (названия ячеек взяты для системной отчетной формы ‘Теплоснабжение (системная))’.
Расчет водоразбора черех вычисляемое поле.png
3. Сохраните изменения.

Огромное спасибо, я так и хотел реализовать, без скриптов, только я не понял как будет считаться ИТОГО.
Я сделал все как вы написали, только в колонке ИТОГО ничего не считается

А вы указали итоговую операцию (шаг 10 в примере) для ячеек, где нужно суммирование?
Покажите скриншот редактора отчетов для вышей отчетной формы.