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

Отчеты Simple-Scada

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

Динамический отчет

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

Часто бывает необходимо создать один шаблон отчёта, но в разные моменты времени подставлять в него разные переменные. Ниже мы рассмотрим создание такого отчёта.

В нашем проекте есть два однотипных резервуара "А" и "B", у каждого резервуара имеется "Температура", "Давление" и "Уровень". Как и в предыдущих примерах есть два календаря, которые определяют период времени для отчёта. Календарь начала интервала связан с переменной "vrTimeBegin", календарь конца интервала связан с переменной "vrTimeEnd". Также имеется две кнопки - кнопка "Отчёт по A" для формирования отчёта по переменным резервуара "А" и кнопка "Отчёт по B" для формирования отчёта по переменным резервуара "B". Так выглядит интерфейс страницы:

 

Список переменных проекта:

 

Мы не будем создавать два отдельных шаблона отчёта для каждого резервуара и решим задачу одним динамическим шаблоном. Сразу добавим в список переменных проекта три внутренних переменных с именами "vrDynamic1", "vrDynamic2", "vrDynamic3", типом данных "Int64" и максимальной шкалой от 0 до 4294967295. Эти переменные будут отвечать за динамическую подстановку нужных нам переменных в отчёт. В "vrDynamic1" будем подставлять "Температуру", в "vrDynamic2" - "Давление", а в "vrDynamic3" - "Уровень".

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

 

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

 

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

 

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

 

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

 

Далее, добавим в источник новые динамические колонки, в которые будет выполняться подстановка "Температуры", "Давления" и "Уровня" заданного нами резервуара. Ранее мы назвали наши динамические переменные "vrDynamic1", "vrDynamic2" и "vrDynamic3" - их мы и будем добавлять в источник данных. Для начала добавим переменную "vrDynamic1". Делаем клик правой кнопкой мыши по переменной и выбираем пункт "Добавить в источник":

 

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

 

Теперь переменная "vrDynamic1" добавлена в источник данных с типом "динамическая". Это значит, что перед построением отчёта будет взято текущее значение переменной "vrDynamic1", например 15. После этого в проекте будет выполнен поиск переменной с ID = 15 и если такая переменная будет найдена, то именно она будет подставлена в колонку ("vrDynamic1") источника данных. То есть, наша внутренняя переменная "vrDynamic1" работает как ссылка и своим значением указывает на другую переменную, которую нужно подставить в отчёт. Меняя значение переменной "vrDynamic1" мы изменяем ссылку. В этом суть динамических переменных.

Теперь проделаем те же действия для переменных "vrDynamic2", "vrDynamic3" и также добавим их в источник, выбрав тип колонки "динамическая". После всех действий, в словаре должна получиться такая структура:

 

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

 

Добавим в отчёт заголовок. Для этого воспользуемся бэндом "Заголовок отчёта" (данный бэнд выводится один раз в начале отчёта, перед другими бэндами).

 

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

 

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

 

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

 

В открывшемся окне вводим имя "vrDynamic1_Текущее" и выбираем тип ссылки "динамическая". Принцип работы динамической ссылки тот же, что и у динамической колонки, которую мы добавляли ранее - берётся текущее значение переменной "vrDynamic1", например "26", затем в проекте выполняется поиск переменной с ID=26 и если такая переменная существует, то "vrDynamic1_Текущее" примет значение этой переменной.

 

Те же действия проделываем для переменных "vrDynamic2" и "vrDynamic3", после чего словарь данных должен выглядеть так:

 

Вынесем бэнд "Итог отчёта" в рабочую зону. Он автоматически расположится после бэнда "Данные".

 

Теперь в зону бэнда "Итог отчёта" перетянем "текущие" переменные:

 

Для создания подписей используем компонент "Текст". Подписи назовем: "Текущая температура", "Текущее давление", "Текущий уровень". Аналогично переименуем названия колонок в бэнде данных. Шаблон отчета теперь выглядит так:

 

Теперь можно сохранить шаблон отчёта и вернуться в редактор проекта. В меню "Переменные" - "Редактировать" мы видим переменные проекта и их идентификаторы (ID).

 

При формировании отчёта для резервуара "А" нужно подставить:

ID переменной "vrTemperatureA" в переменную "vrDynamic1";

ID переменной "vrPressureA" в переменную "vrDynamic2";

ID переменной "vrLevelA" в переменную "vrDynamic3";

 

Соответственно, при формировании отчёта для резервуара "B" нужно подставить:

ID переменной "vrTemperatureB" в переменную "vrDynamic1";

ID переменной "vrPressureB" в переменную "vrDynamic2";

ID переменной "vrLevelB" в переменную "vrDynamic3";

 

Подстановки проделаем в скриптах. На событие "OnClick" для кнопки "Отчёт по A" напишем следующий код:

var
  aReport: TM_Report;
begin
  vrDynamic1.Value := vrTemperatureA.ID;
  vrDynamic2.Value := vrPressureA.ID;
  vrDynamic3.Value := vrLevelA.ID;
 
  aReport := ReportBuild('Динамический'); // строим отчет с именем "Динамический"
  aReport.View(GetClientName);            // открываем отчет на просмотр
end.

 

На событие "OnClick" для кнопки "Отчёт по B" напишем следующий код:

var
  aReport: TM_Report;
begin
  vrDynamic1.Value := vrTemperatureB.ID;
  vrDynamic2.Value := vrPressureB.ID;
  vrDynamic3.Value := vrLevelB.ID;
 
  aReport := ReportBuild('Динамический'); // строим отчет с именем "Динамический"
  aReport.View(GetClientName);            // открываем отчет на просмотр
end.

 

Сохраняем проект и подключаемся к нему клиентом Simple-Scada. В календари "Начало" и "Конец" вводим интервал времени, за который нужно сформировать отчёт. Нажимаем кнопку "Отчёт по A" и видим, что сформировался отчёт по переменным резервуара "А". Нажимаем кнопку "Отчёт по B" и получаем тот же отчёт, но с переменными резервуара "B".