Вопрос на засыпку!

Есть задание сделать отчётную форму.
В ней выводить почасовые показания на заданную дату и время по нескольким точкам учета, принадлежащим различным объектам учета. Еще нужно выводить сумму показаний по некоторым (не всем) точкам учета, принадлежащим различным объектам учета. Еще необходимо в этой же форме отображать показания по тем же точкам учета, но с разницей во времени: один год назад, два года назад. Вопрос знатокам: какой тип формы мне подойдет?

В текущей версии ЛЭРС УЧЕТ создание такой отчетной формы не поддерживается.
Покажите, пожалуйста, как должна выглядеть отчетная форма.

Вот так:
1.png
2.png

Поясните, зачем нужны показания трех годичной давности на конкретную дату и час?

Как выбираются точки учета, по которым нужны суммарные показания?

Если не брать в расчет сравнение показаний за разные годы, то каких параметров не хватает в ‘Отчете с фиксированным набором объектов учета’ ?

Потребление тепловой энергии и теплоносителя варьируется в течении года, в течении недели, в течении суток: это зависит и от погоды, и от сроков плановых работ, и т.п.
Показания нужны не трехгодичной, а двухгодичной давности, чтобы сравнить текущее потребление с сопоставимым потреблением предыдущих двух лет. Это нужно и для определения экономических показателей, и для контроля правильности работы расходомеров, и для контроля утечек.
Мы являемся теплосетевой организацией (обслуживаем теплотрассы), покупаем тепловую энергию у нескольких поставщиков, и продаем нескольким потребителям. Суммарные показания нужны, чтобы видеть итоги по каждому поставщику и потребителю отдельно.
В ‘Отчете с фиксированным набором объектов учета’ не хватает именно сравнения за предыдущие годы.

Правильно ли мы поняли, что набора параметров в ‘Отчете с фиксированным набором объектов учета’ достаточно, если будет возможность получения их значений за три произвольных периода?

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

А откуда компьютер знает какие периоды захочет сравнивать пользователь?

В вашем случае нужна одна метка времени за три подряд идущих года, а для другого пользователя возможно понадобится сравнивать потребления, например, марта 2017 и марта 2015.

Из скрипта, разумеется.

Т.е. пользователь, которому нужно сравнение за произвольные периоды, должен каждый раз менять скрипт в отчетной форме?

По моему это еще большее ‘издевательство над пользователями’.

При формировании отчетов, если в параметрах ЛЭРС УЧЕТ установлен признак ‘Запоминать последний использованный отчетный период’, то изменять придется только день или час.

пользователь, которому нужно сравнение за произвольные периоды, вероятно, воспользуется обещанной вами в R26.0 функцией “Добавлено: отчёт для сравнения потребления за два произвольных периода”.
‘Запоминать последний использованный отчетный период’ - это предложение мне напоминает очень неудобный костыль, ведь все равно придется пользователю проверять правильность заполнения всех полей, это и дополнительная нагрузка на пользователя, и источник ошибок при невнимательности пользователя. А о пользователях своей программы хороший программист должен всегда помнить и заботиться! :slight_smile:
А не пора ли вам задуматься о том, что стоило бы позволить в скриптах использовать обращение через Lers Framework ко всем данным потребления, которые нужны разработчику отчетной формы?

А в чем сложность использовать Framework в текущей версии?
Например:

using Lers;
using Lers.Core;
using Lers.Data;


private void BaseReport_DataSourceDemanded(object sender, System.EventArgs e) 
{
	Lers.LersServer server = Connection.Server;
	label1.Text = "Версия сервера: " + server.Version.ToString();
	
	// Получаем точку учета по уникальному номеру, который задается в свойствах точки учета.
	Lers.Core.MeasurePoint measurePoint = server.MeasurePoints.GetByNumber(1);
	
	// Убеждаемся, что мы получили указатель на объект MeasurePoint.
	// Если точки учета с таким номером не существует или она недоступна для текущего пользовтеля, то метод GetByNumber() вернет null.

	if (measurePoint != null);
	{
		// Выводим полное наименование точки учета.
		label2.Text = String.Format("Точка учета "{0}"", measurePoint.FullTitle);

		// Запрашиваем данные о суточном потреблении.
		MeasurePointConsumptionRecordCollection consumption = measurePoint.Data.GetConsumption(new DateTime(2016, 12, 1), new DateTime(2016, 12, 31), Lers.Data.DeviceDataType.Day);

		// Выводим данные на экран.
		foreach (MeasurePointConsumptionRecordWater recordWater in consumption);
		{
			label3.Text += String.Format("{0}: M_in = {1}, T_in = {2}", recordWater.DateTime, recordWater.M_in, recordWater.T_in) + "
";
		}
	}
	else
	{
		label3.Text = "Точка учета не существует или недоступна для данной учетной записи.";
	}
}

Пока никто из пользователей не обращался с просьбой сравнения потребления за три периода (текущий год и два предыдущих).

Создайте вопрос в разделе форума “Предложения по улучшению ЛЭРС УЧЕТ” и сделайте в нем ссылку на этот вопрос.

Возможно еще появятся заинтересованные пользователи со своими предложениями.

Сложность была в отсутствии в документации описания, как нужно подключаться к серверу из скриптов отчетной формы, и примера работы. Сейчас попробовал ваш пример, всё получилось, большое спасибо!
Почему-то в Просмотре редактора отчётов это работает, а при запуске отчета через Отчеты → Фиксированный список объектов, получаем сообщение:
Безымянный.png

Использование FrameWork в скриптах возможно только из редактора отчетов.

Разработка нового типа отчета не быстрая задача.
Создайте вопрос в разделе форума “Предложения по улучшению ЛЭРС УЧЕТ”.

Как вариант в текущей версии ЛЭРС УЧЕТ вы можете создать внешний модуль (см. пример ExternalModuleExample), в котором реализовать формирование отчета.