Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: mvs от 06 Апреля 2018, 12:19:42

Название: Суточный отчет
Отправлено: mvs от 06 Апреля 2018, 12:19:42
Как сделать периодический отчет с гистограммой, разбитый по суткам. По сутках разбивка должна быть автоматической. На 1-й странице отображается таблица с данными и гистограмма за 1-е сутки, на 2-й по 2-ю ... итд.
Название: Re: Суточный отчет
Отправлено: Simple-Scada от 06 Апреля 2018, 14:52:13
Здравствуйте. Период отчета должен быть фиксированный (например отчет должен строиться за последние семь суток)? Или произвольный (дата старта и дата окончания задаётся пользователем через скаду)?
Название: Re: Суточный отчет
Отправлено: mvs от 06 Апреля 2018, 23:44:45
дата старта и дата окончания задаётся пользователем через скаду
Название: Re: Суточный отчет
Отправлено: Simple-Scada от 10 Апреля 2018, 15:46:58
Для этого, как и при создании других отчетов, в проекте нужно создать две виртуальные переменные "vrFrom", "vrTo" с типом данных DateTime. Привязать эти переменные к календарям "Начало" и "Конец". У календарей нужно скрыть отображение времени оставив только дату. Добавить в проект кнопку для построения отчета:
Код: (delphi)
begin
  ReportView(GetClientName, 'Суточный_отчет', rptNoPrint);
end.
Далее нужно создать шаблон отчета в редакторе отчетов. Для решения задачи понадобится два источника данных с типом "периодический". Создаём первый источник. Назовём его "Сутки". Переменные для источника называем "Начало_сутки", "Конец_сутки" и "Интервал_сутки". Этот источник будет использоваться только для разбиения всего периода отчета на сутки.
Второй источник назовём "Гистограмма". Его переменные: "Начало_гист", "Конец_гист" и "Интервал_гист". Этот источник будет использоваться для отображения гистограммы для каждых суток.

В словаре отчета дважды нажимаем на переменную "Интервал_сутки", открывается окно редактирования. Вводим значение 86400 (это 24 часа в секундах). Связываем переменную проекта "vrFrom" c переменной источника "Начало_сутки", а "vrTo" c "Конец_сутки". И обязательно добавляем в источник данных "Сутки" любую архивную переменную из проекта (иначе источник будет считаться пустым не и не будет отображаться в отчете после построения). У нас такая переменная называется vrRandom.
Аналогично связываем переменные второго источника "Гистограмма". Связываем переменную проекта "vrFrom" c переменной источника "Начало_гист", а "vrTo" c "Конец_гист". А переменной "Интервал_гист" нужно задать значение, которое Вам требуется. Например 3600 (1 час в секундах), тогда каждый столбец гистограммы будет соответствовать одному часу, а всего в гистограмме будет 24 столбца. Также нужно добавить в источник ту архивную переменную проекта, которую нужно отобразить в гистограмме и выбрать нужный тип обработки. Например у нас есть переменная vrSaw, которая меняется в виде пилы и на гистограмме мы хотим видеть среднее значение этой переменной за каждый час суток. Тогда добавляем её в источник данных "Гистограмма" с именем "vrSaw_Avg" и типом обработки "Среднее":

(https://simple-scada.com//images/ssrDay_1.png)

После проделанных действий источники в словаре должны выглядеть так:
(https://simple-scada.com//images/ssrDay_2.png)

Перетягиваем источник "Сутки" на страницу отчета. Убираем флажки с колонок и выключаем "Заголовок данных":
(https://simple-scada.com//images/ssrDay_3.png)

Получаем пустой бэнд данных "DataСутки". Растягиваем его по высоте и размещаем в нём 4 компонента "Текст" в две "строки". Верхнюю "строку" отводим под заголовок, а нижнюю под данные, одно поле с выражением: {Сутки.Время.AddHours(-24)}, второе поле с: "{Сутки.Время}". Таким должен быть результат:
(https://simple-scada.com//images/ssrDay_4.png)

Нам нужно чтобы каждые новые сутки печатались на новой странице. Поэтому выделяем бэнд "DataСутки" и меняем свойство "Новая страница до" на значение "Да". Теперь можно приступить к созданию гистограммы. Выбираем компонент "Диаграмма" на панели инструментов и перетягиваем его в зону бэнда "DataСутки". Запускаем мастер диаграмм. Выбираем тип диаграммы: "Гистограмма", выбираем понравившийся стиль, в окне ряды создаем новый ряд-гистограмма с нужным именем и колонками:
(https://simple-scada.com//images/ssrDay_5.png)

Остальные шаги мастера проходим без изменений. Шаблон отчета теперь выглядит так:
(https://simple-scada.com//images/ssrDay_6.png)

В гистограмме теперь будет отображаться почасовое среднее значение переменной "vrSaw" за весь период отчета. Но нам нужно отображать на каждой странице только одни сутки. Дважды кликаем гистограмму для редактирования. Переходим на вкладку "Фильтры" и добавляем новый фильтр с выражением "(Гистограмма.Время >= Сутки.Время.AddHours(-24)) && (Гистограмма.Время <= Сутки.Время)", как показано ниже:
(https://simple-scada.com//images/ssrDay_7.png)

Наконец, нужно сделать так, чтобы время начала и время конца отчета, которое задается переменными проекта "vrFrom" и "vrTo" учитывало только дату, а время (часы, минуты, секунды) обнуляло. Это можно сделать на уровне отчета. Переходим к события отчета. И на событие "Начало построения" пишем код для обнуления времени:
Код
Начало_сутки = Начало_сутки.Date;
Конец_сутки = Конец_сутки.Date;
Начало_гист = Начало_гист.Date;
Конец_гист = Конец_гист.Date;

См. скрин ниже:
(https://simple-scada.com//images/ssrDay_8.png)

Готово. Отчет строится по суткам за выбранный пользователем интервал. Каждые сутки на отдельной странице. Гистограмма разбивается по часам отображая среднее значение переменной "vrSaw" за каждый час.
Название: Re: Суточный отчет
Отправлено: mvs от 24 Апреля 2018, 01:27:58
спасибо, как еще добавить табличные значения на каждые сутки отдельно
Название: Re: Суточный отчет
Отправлено: Simple-Scada от 27 Апреля 2018, 10:12:07
спасибо, как еще добавить табличные значения на каждые сутки отдельно
Для этого растяните бэнд данных "DataСутки" по высоте, освободив место и по аналогии с гистограммой разместите в нём таблицу источника данных "Гистограмма". Для этого просто перетяните на страницу отчета источник данных "Гистограмма" из словаря, в открывшемся окне отметьте флажками нужные столбцы и включите флажок "Таблица", тогда вместо обычного бэнда данных будет создан компонент "Таблица". Этот компонент будет расположен в нижней части отчета и разместить его в бэнде  "DataСутки" сначала не получится. Поэтому выделите таблицу и установите свойство "Стыковка таблицы" в значение "нет". Теперь можно перетянуть таблицу в бэнд  "DataСутки". Остаётся лишь добавить фильтр (как у гистограммы), чтобы в таблице отображались данные только за одни сутки. Для этого нужно кликнуть ПКМ таблицу и выбрать пункт "Редактировать". В открывшемся окне перейти на вкладку "Фильтры" и добавить новый фильтр с типом "Выражение". Само выражение должно быть таким же, как у гистограммы: "(Гистограмма.Время >= Сутки.Время.AddHours(-24)) && (Гистограмма.Время <= Сутки.Время)".
Теперь помимо гистограммы на каждые сутки выводится также таблица с данными.
Название: Re: Суточный отчет
Отправлено: mvs от 03 Мая 2018, 19:20:39
Спасибо  :)