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

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

Автор Тема: Суточный отчёт не с начала суток, как проще сделать  (Прочитано 2774 раз)

EvgeniySM

  • Новичок
  • *
  • Сообщений: 30
    • Просмотр профиля
Здравствуйте.

Требуется делать суточный отчёт не с начала суток, а с произвольного времени. В проекте я делаю:
1) Первый компонент Календарь с возможностью выбора только даты - для выбора начальной даты построения отчёта - назначаю ему переменную vrBegin, например дата - 10.12.2019;
2) Второй компонент Календарь с возможностью выбора только времени - для выбора начального времени построения отчёта (или расчётного часа) - назначаю ему ту же переменную vrBegin, например время 7:40:00. В итоге, начальная дата и время формирования отчёта - 10.12.2019 07:40:00.
3) Третий компонент Календарь с возможностью выбора только даты - для выбора конечной даты построения отчёта - назначаю ему переменную vrEnd, например дата 15.12.2019. Так как время не выбрано, то дата и время окончания формирования отчёта получается 15.12.2019 00:00:00.

Переменную интервала Inter в  системе отчётов делаю фиксированной и равной 86400 (полное количество секунд в сутках). Далее связываю переменную начала формирования Begin с переменной проекта vrBegin, переменную окончания формирования End с переменной проекта vrEnd, интервал остаётся равным полному количеству секунд в сутках 86400. Внимание, вопрос - как будет строится отчёт? Логично предположить, что от выбранной даты и времени начала построения с интервалом 86400 секунд до конечной даты. Но как будут выведены данные в последнем пункте? По выбранный интервал или именно до конечной даты? Ведь при выборе только даты, время остаётся равным 00:00:00, то есть последняя запись получится не за полные сутки? Если это так, то как сделать так, чтобы конечная дата была увеличена на время расчётного часа?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Здравствуйте.

Посмотрите эту короткую статью в руководстве по отчетам. На картинке показан принцип разбивки по интервалам, а в описании принцип работы источника. Последний интервал не равен предыдущим, т.к. ему не хватило "места". Т.е. время начала и конца отчета - это всегда неизменная величина. Скада просто берёт данные от времени начала до времени конца и пытается разбить их на равные интервалы, если это возможно. Если нет, то последний интервал будет неполным.
Поэтому Вам нужно сделать так чтобы время начала и время конца совпадали по часам, минутам, секундам. Для этого достаточно перед построением отчета скопировать часы/минуты/секунды и времени начала во время конца. Пример:
Код: (delphi)
var
  aBegin: TDateTime;
begin
  aBegin := vrBegin.AsDateTime;
  vrEnd.Value := RecodeTime(vrEnd.AsDateTime, HourOf(aBegin), MinuteOf(aBegin), SecondOf(aBegin), 0);
 
  // далее строим отчет
end.
, где vrBegin и vrEnd - переменные начала и конца. Теперь выбираем время начала = "10.12.2019 07:40:00", время конца = "15.12.2019 00:00:00". Строим отчет. Перед построением отчета время конца станет равным "15.12.2019 07:40:00" и отчет будет построен.

EvgeniySM

  • Новичок
  • *
  • Сообщений: 30
    • Просмотр профиля
Спасибо, всё получилось.