Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Формирование отчёта (разность строк)  (Прочитано 2387 раз)

Nikso

  • Новичок
  • *
  • Сообщений: 44
    • Просмотр профиля
Здравствуйте.
В БД архивируется показания счётчика нарастающим итогом. Переодический отчёт настраивается, так чтобы из БД бралось последнее значение интервала.
Вопрос: Возможно ли реализовать отчёт таким образом. чтобы  выводилась разность двух строк.

Например, выборка из БД даёт следующие данные:
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

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


Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3183
    • Просмотр профиля
    • Simple-Scada
Re: Формирование отчёта (разность строк)
« Ответ #1 : 19 Октября 2018, 11:54:06 »
Здравствуйте.

Да, это возможно. Допустим в отчете есть периодический источник данных с именем "Данные" с столбцами "Время" и "Давление". Источник данных вынесен на страницу отчета в виде бэнда данных "DataДанные". Нужно, чтобы в колонке "Давление" вместо его реального значения, отображалась разность реального значения и значения из предыдущей строки.
Для решения задачи находим в бэнде данных ячейку которая отвечает за вывод колонки "Давление", дважды кликаем её для редактирования и в открывшемся окне на вкладке "Выражение" пишем следующий код (см. вложение):
Код: (c#)
{(double)Данные.Давление - (double)Previous(Данные, "Давление")}

alan54

  • Постоялец
  • ***
  • Сообщений: 145
    • Просмотр профиля
Re: Формирование отчёта (разность строк)
« Ответ #2 : 28 Ноября 2018, 10:39:49 »
Подскажите, пожалуйста, как правильно написать выражение для разности времен (текущего и предыдущего)?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3183
    • Просмотр профиля
    • Simple-Scada
Re: Формирование отчёта (разность строк)
« Ответ #3 : 28 Ноября 2018, 11:01:45 »
Здравствуйте.
Для этого можно в бэнде данных разместить компонент Текст, дважды кликнуть его для редактирования и использовать следующее выражение:
Код: (c#)
{DateDiff(Данные.Время, (System.DateTime)Previous(Данные, "Время"))}
Данный код получает разницу во времени между текущей и предыдущей строкой. Также не забудьте выставить у компонента Текст формат "Время" (иначе ячейки будут пустыми). Для этого кликните его ПКМ и выберите пункт "Формат".
« Изменён: 28 Ноября 2018, 11:02:28 от Simple-Scada »

alan54

  • Постоялец
  • ***
  • Сообщений: 145
    • Просмотр профиля
Re: Формирование отчёта (разность строк)
« Ответ #4 : 28 Ноября 2018, 11:19:44 »
Спасибо большое!