Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Nikso от 18 Октября 2018, 13:29:16

Название: Формирование отчёта (разность строк)
Отправлено: Nikso от 18 Октября 2018, 13:29:16
Здравствуйте.
В БД архивируется показания счётчика нарастающим итогом. Переодический отчёт настраивается, так чтобы из БД бралось последнее значение интервала.
Вопрос: Возможно ли реализовать отчёт таким образом. чтобы  выводилась разность двух строк.

Например, выборка из БД даёт следующие данные:
12.10.2018 3.00 | 100
12.10.2018 4.00 | 200
12.10.2018 5.00 | 250

А в отчёт необходимо вывести:
12.10.2018 4.00 | 100 т.е. 200-100=100
12.10.2018 5.00 | 50   т.е. 250-200=50

Реализация когда в отчёт выводится разность последнего и первого значения в интервале не подходит т.к. ведёт к потере информации

Название: Re: Формирование отчёта (разность строк)
Отправлено: Simple-Scada от 19 Октября 2018, 11:54:06
Здравствуйте.

Да, это возможно. Допустим в отчете есть периодический источник данных с именем "Данные" с столбцами "Время" и "Давление". Источник данных вынесен на страницу отчета в виде бэнда данных "DataДанные". Нужно, чтобы в колонке "Давление" вместо его реального значения, отображалась разность реального значения и значения из предыдущей строки.
Для решения задачи находим в бэнде данных ячейку которая отвечает за вывод колонки "Давление", дважды кликаем её для редактирования и в открывшемся окне на вкладке "Выражение" пишем следующий код (см. вложение):
Код: (c#)
{(double)Данные.Давление - (double)Previous(Данные, "Давление")}
Название: Re: Формирование отчёта (разность строк)
Отправлено: alan54 от 28 Ноября 2018, 10:39:49
Подскажите, пожалуйста, как правильно написать выражение для разности времен (текущего и предыдущего)?
Название: Re: Формирование отчёта (разность строк)
Отправлено: Simple-Scada от 28 Ноября 2018, 11:01:45
Здравствуйте.
Для этого можно в бэнде данных разместить компонент Текст, дважды кликнуть его для редактирования и использовать следующее выражение:
Код: (c#)
{DateDiff(Данные.Время, (System.DateTime)Previous(Данные, "Время"))}
Данный код получает разницу во времени между текущей и предыдущей строкой. Также не забудьте выставить у компонента Текст формат "Время" (иначе ячейки будут пустыми). Для этого кликните его ПКМ и выберите пункт "Формат".
Название: Re: Формирование отчёта (разность строк)
Отправлено: alan54 от 28 Ноября 2018, 11:19:44
Спасибо большое!