Пожалуйста, включите JavaScript для просмотра этого сайта.

Отчеты Simple-Scada

История: Примеры отчетов

Периодический отчет

Пред. Вверх След. Еще

Важно! Подробнее о принципе работы периодического отчета можно прочесть в этом разделе.

Рассмотрим процесс создания простого периодического отчёта на основе архивных данных проекта. Допустим, в проекте имеется ёмкость с жидкостью и две переменные: уровень жидкости и ее температура. У этих переменных включена архивация и они сохраняются в архив. Также мы добавили в проект ещё две переменные, определяющие период времени, за который требуется сформировать отчет. В результате имеем четыре переменных:

Переменная

Тип данных

Описание

vrTemperature

Single

Температура жидкости в ёмкости. Шкала 0-100. Включена архивация.

vrLevel

Single

Уровень жидкости в ёмкости. Шкала 0-100. Включена архивация.

vrTimeBegin

DateTime

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

vrTimeEnd

DateTime

Конец периода времени, за который требуется сформировать отчёт.

 

Задача: взять заданный пользователем период времени от "vrTimeBegin" до "vrTimeEnd", разбить его на равные интервалы (например, по 60 секунд) и на каждый интервал выводить определенным образом обработанные данные. Например, минимум и максимум уровня "vrLevel" и среднюю температуру "vrTemperature".

Сначала создадим интерфейс проекта. Размещаем на мнемосхеме ёмкость, уровень, температуру и связываем их с соответствующими переменными. Добавим также два календаря (для задания периода времени) и свяжем их с переменными "vrTimeBegin" и "vrTimeEnd". Добавим кнопку "Сформировать" для формирования отчёта. Получим такой интерфейс:

 

Сохраним проект и перейдём к созданию шаблона отчёта. Запустим редактор отчётов (Reports.exe), выберем наш проект и создадим новый отчёт с именем "Периодический".  Затем добавим в отчет новый источник данных через меню "Источники" - "Новый источник данных":

 

Источник данных - это хранилище, из которого мы собираемся брать данные для построения нашего отчёта. Любой источник всегда состоит из колонок. Источники данных можно добавлять по-разному, подробное описание здесь. При добавлении нового источника данных через меню  "Источники" -> "Новый источник данных" редактор отчетов автоматически получит параметры подключения к БД проекта и не придется ничего дополнительно настраивать. В открывшемся окне укажем имя источника - назовем его "Данные". Имена переменных начала, конца и интервала автоматически изменятся на "Данные_Начало", "Данные_Конец", "Данные_Интервал". Слой оставим "Основной", а "Тип" источника "Периодический":

 

Нажмем кнопку "Создать" и перейдем к "Словарю" отчета. В нем появился наш источник "Данные" с единственной колонкой "Время", а также три переменные "Данные_Начало", "Данные_Конец", "Данные_Интервал". Теперь Simple-Scada будет передавать в этот источник только те данные из архива, которые лежат в интервале времени от переменной начала ("Данные_Начало") до переменной конца ("Данные_Конец"). Все остальные данные, которые лежат вне этого периода - не попадут в источник.

 

Можно задать фиксированный период времени для источника, например с 01 октября 2022 г. по 30 октября 2022 г. Для этого нужно вручную задать время и дату для переменных "Данные_Начало" и "Данные_Конец". Можно дважды кликнуть по переменной, либо использовать клик правой кнопкой мыши и пункт "Изменить":

 

В окне изменения переменной есть поле "Значение", его и нужно менять:

 

Но для нас такой способ не подходит. Мы хотим чтобы пользователь выбирал интервал времени прямо из клиента Simple-Scada и затем формировал отчёт. То есть период времени всегда может быть разным. Поэтому мы должны связать переменные из проекта "vrTimeBegin" и "vrTimeEnd" с переменными отчета "Данные_Начало" и "Данные_Конец". Делаем клик правой кнопкой мыши по переменной проекта и выбираем пункт "Связать с переменной":

 

В открывшемся окне выбираем переменную отчета, с которой нужно установить связь. Таким образом связываем переменную "vrTimeBegin" с "Данные_Начало", а "vrTimeEnd" c "Данные_Конец". Теперь перед построением отчета в переменные "Данные_Начало" и "Данные_Конец" будут подставлены значения переменных проекта "vrTimeBegin" и "vrTimeEnd" и источник "Данные" будет работать с заданным периодом времени. 

 

Добавим в источник новые колонки в соответствии с задачей: минимум и максимум уровня и среднюю температуру. Для начала добавим минимум для уровня. Делаем клик правой кнопкой мыши по переменной уровня ("vrLevel") и выбираем пункт "Добавить в источник". Обратите внимание, иконка у переменных "vrLevel" и "vrTemperature" отмечена зеленой точкой - значит переменная архивируется. Если добавить в источник переменную, которая не архивируется, то в источник нечего выводиться не будет. Учитывайте это. 

 

Открылось окно добавления новой колонки в источник данных. В списке выбираем наш источник "Данные", называем новую колонку "Макс. уровень", тип обработки: "максимум", получить: "значение":

Помимо вычисления максимума в Simple-Scada для периодических источников данных можно выбрать и другие типы обработки. Подробно типы обработки и принцип работы периодического источника данных описаны в этой статье.

Теперь проделаем те же действия для переменной "vrLevel", но с именем "Мин. уровень" и типом обработки "минимум", а также добавим переменную "vrTemperature" в источник с именем "Средн. температура" и типом обработки "среднее". После всех действий, в словаре должна получиться такая структура:

 

Перетянем источник данных в зону отчёта - в этом случае в отчёте будет создан новый стандартный бэнд "Данные", привязанный к нашему источнику данных "Данные". Бэнд "Данные" это один из наиболее часто используемых бэндов. Он берет данные из источника, с которым связан и выводится столько раз, сколько строк в источнике данных. В открывшемся окне выбираем флажки всех колонок и включаем флажок "Заголовок данных". 

 

Бэнд добавлен, теперь можно перейти к просмотру отчёта, но мы увидим пустую страницу. Чтобы увидеть данные на странице, сначала нужно их получить от сервера. Запустим сервер Simple-Scada, активируем проект и подождём пока в архиве (в БД) накопятся данные для переменных уровня и температуры. После этого подключаемся к проекту клиентом Simple-Scada и выбираем в календарях прошедший интервал времени, а в Редакторе отчёта нажимаем зеленую кнопку обновления данных. 

Для лучшего понимания опишем по шагам, что происходит в этот момент:

в переменные отчёта "Данные_Начало" и "Данные_Конец" записывается значение переменных проекта "vrTimeBegin" и "vrTimeEnd", так как ранее мы их связали. То есть, переменные "Данные_Начало" и "Данные_Конец" становятся равны тому, что указано в двух Календарях нашего проекта;

источник "Данные" получает архивные данные для переменных «Уровень» и «Температура» за период от "Данные_Начало" до "Данные_Конец";

полученные данные разбиваются на одинаковые интервалы равные значению переменной отчёта "Данные_Интервал" (в секундах), по-умолчанию 60 секунд. Если задать переменной интервала "Данные_Интервал" значение равное 0, то вычисления будут производиться для всего периода от "Данные_Начало" до "Данные_Конец", без разбивки на интервалы;

для каждого интервала вычисляется минимальное и максимальное значение уровня и среднее значение температуры;

результаты сохраняются в источник данных "Данные";

Теперь источник заполнен данными (если в архиве нет данных за указанный период, то источник останется пустым) и можно снова перейти к просмотру отчёта: 

 

Отчёт сформирован, но после десятичной запятой выводится слишком много знаков. Изменим формат чисел и оставим два знака дробной части. Делаем клик правой кнопкой мыши на поле и нажимаем на иконку форматирования:

 

 

Переходим к просмотру отчета. Теперь данные выводятся правильно:

 

Обратите внимание, строки в отчёте формируются с интервалом 60 секунд. Вы можете указать другой интервал изменив значение переменной отчёта "Данные_Интервал". Или можете связать её с целочисленной переменной проекта и вывести в проект, чтобы оператор мог выбирать не только время начала и конца отчёта, но и интервал.

У созданного отчёта не хватает заголовка. Просто добавить его компонентом Текст, как в предыдущем примере у нас не получится, так как текст будет перекрыт бэндом "Данные". Или же, если поставить текст заголовка прямо на бэнд "Данные", то он распечатается на каждой строке бэнда. Для решения этой проблемы воспользуемся бэндом "Заголовок отчёта". Он выводится один раз в начале отчёта, перед другими бэндами.

 

Вынесем бэнд "Заголовок отчёта" в рабочую зону. Он автоматически расположится выше бэнда "Данные". Теперь в зоне бэнда "Заголовок отчёта" разместим компонент "Текст". В тексте укажем период, за который строится отчёт:

 

Изменим размер текста заголовка и его выравнивание при помощи соответствующих кнопок панели форматирования:

 

Затем настроим выравнивание текста в ячейках бэнда "Данные", а для ячеек в шапке бэнда выставим светло-серый фон. :

 

Теперь сделаем подсветку светло-красным цветом для ячеек колонки "Макс. уровень", в которых максимальный уровень имеет значение больше 90. Для этого выделим ячейку, нажмем кнопку "Условия" на панели форматирования и добавим "Условное выделение":

 

Выставляем параметры для условного выделения: значение; числовое для колонки "Макс. уровень"; больше чем 90, цвет текста: чёрный; цвет фона: тускло-розовый; граница: со всех сторон.

 

Теперь ячейки, которые имеют значение больше 90, подсвечиваются:

 

Проделаем те же действия для колонки "Мин. уровень", но будем проверять условие, когда минимальный уровень ниже 10. Цвет фона сделаем светло-жёлтым:

 

Теперь можно добавить итог данных. Для этого будем использовать соответствующий бэнд "Итог данных" - он автоматически разместится после бэнда "Данные".

 

Добавим в этот бэнд компонент «Текст», расположив его под колонкой "Макс. уровень". В открывшемся окне перейдём на вкладку "Итог". Нам нужно получить максимальный уровень, поэтому выберем функцию "Max", в качестве данных укажем наш источник данных "Данные" и колонку "Макс. уровень":

 

Добавим ещё два компонента "Текст" в бэнд "Итог данных": для столбца "Мин. уровень" с функцией "Min" для получения минимума, для столбца "Средн. температура" с функцией "Avg" для получения среднего. Далее, установим формат для этих текстовых объектов: два знака дробной части. Шаблон отчёта готов. Сохраним отчёт и вернёмся к Редактору проекта. Напишем скрипт на событие "OnClick" для кнопки "Сформировать":

Важно! В некоторых случаях может потребоваться из скрипта задать параметры источника данных "Периодический" (например, если нужно по каким-либо условиям изменять интервал источника данных). Для этого можно использовать процедуру SetSourcePeriodicParams.

var
  aReport: TM_Report;
begin
  aReport := ReportBuild('Периодический');
  aReport.View(GetClientName);
end.

Сохраним проект и перезапустим его на сервере, чтобы изменения вступили в силу. Подключимся к проекту через клиент Simple-Scada. Введем время начала/конца в календари и нажмем кнопку "Сформировать". Отчёт откроется для просмотра:

 

В окне просмотра мы нажали кнопку "Сохранить" -> "Adobe PDF файл" и сохранили полученный отчёт в формате ".pdf". Просмотреть его можно по ссылке. При необходимости, можно формировать отчёт и сохранять его на клиентский или серверный ПК в нужном формате - подробнее см. по ссылке.