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

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

Автор Тема: Отчеты  (Прочитано 74826 раз)

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Отчеты
« Ответ #15 : 20 Ноября 2017, 15:45:02 »
Здравствуйте!

При разборе "отчета по циклам" в предварительном режиме некорректно отображается время 30.12.1899 0:00:00, при этом данные выводятся правильно. Подскажите, в чем может быть проблема?

Спасибо.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Re: Отчеты
« Ответ #16 : 20 Ноября 2017, 15:56:37 »
Здравствуйте.
Вы говорите о времени в столбцах "Начало цикла" и "Конец цикла"? Можете показать скриншот, как выглядит отчет на прдпросмотре?

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Отчеты
« Ответ #17 : 20 Ноября 2017, 16:03:03 »
Скрин

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Re: Отчеты
« Ответ #18 : 20 Ноября 2017, 16:16:22 »
Мы забыли включить в статью фильтрацию по пустым циклам. Проделайте следующие действия:
1. Кликнуть ПКМ по бэнду DataЦиклы и выбрать пункт Редактировать.
2. Добавить фильтр по значению даты колонки vrCycleEnd.
(см. скрины во вложении)

Обратите внимание, циклы в отчете формируются по изменению переменной vrCycleEnd. У Вас в отчете она принимает только нулевые значения (дата-время "30.12.1899 0:00:00" соответствует нулю). Эти нулевые значения появляются в архиве когда Вы запускаете проект. После выполнения двух шагов описанных выше у Вас в отчете ничего не отобразится, т.к. vrCycleEnd не принимает никаких значений кроме 0. Поэтому нужно сделать так, чтобы в переменную vrCycleEnd записывалась дата/время конца цикла. Т.е. когда очередной цикл завершается вы должны выполнить такой код:
Код
begin
  vrCycleEnd.Value := Now;
end.

То же касается и переменной vrCycleStart. Когда начинается новый цикл в эту переменную нужно записать дату/время:
Код
begin
  vrCycleStart.Value := Now;
end.

В ином случае дата/время циклов будет равна нулю и отчет не будет строиться правильно.
« Изменён: 20 Ноября 2017, 16:17:46 от Simple-Scada »

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Отчеты
« Ответ #19 : 21 Ноября 2017, 10:52:45 »
Simple-Scada, скрипты добавил, теперь время выводится корректно.
1. Вопрос остался с фильтром, как я вижу приведенный Вами редактор отчета немного отличается от моей версии 2.2.6.1, в частности, что мне выбрать в поле фильтра вместо предложенного Вами больше чем? Я ставил начинается с, потом заканчивается на - в результате вообще ничего не выводилось.
2. Иногда проскакивают данные вне выбранного интервала.
3. По неизвестной мне причине при нажатии кнопки построить отчет перестал открываться отчет. В редакторе отчета в предварительном просмотре данные отображаются. Привязку кнопки к скрипту вызова отчета я не менял.

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Отчеты
« Ответ #20 : 21 Ноября 2017, 11:02:06 »
После удаления фильтра получается приведенный отчет в скрине, вторая строчка правильная, первая - нет, интервал был выбран с 9:56 по 9:58. Возможно это происходит из-за отсутствия фильтра.
Перезагрузил ПК, кнопка в скаде вывода отчета стала работать, но с периодическим успехом.
Стал далее разбирать пример с выводом макс. и мин. переменных. Отчет не компилируется, при проверке выводит ошибку.

Есть ли в отчете среднее арифметическое, чтобы вывести среднюю величину переменной за выбранное время?
« Изменён: 21 Ноября 2017, 14:47:55 от AutoCY »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Re: Отчеты
« Ответ #21 : 21 Ноября 2017, 14:47:06 »
AutoCY, Ваша версия редактора отчетов не отличается от нашей (за исключением дизайна полей и раскрывающихся списков, но это из-за разницы в ОС). Просто Вы выбрали неправильный тип данных у Фильтра. У Вас выбран Тип данных "Строка", а на нашем скрине тип "Дата". Измените тип на "Дата" и выберите условие "больше чем".

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Re: Отчеты
« Ответ #22 : 21 Ноября 2017, 14:49:21 »
Цитировать
После удаления фильтра получается приведенный отчет в скрине, вторая строчка правильная, первая - нет, интервал был выбран с 9:56 по 9:58. Возможно это происходит из-за отсутствия фильтра.
Перезагрузил ПК, кнопка в скаде вывода отчета стала работать, но с периодическим успехом.
Стал далее разбирать пример с выводом макс. и мин. переменных. Отчет не компилируется, при проверке выводит ошибку.
В отчете явно есть какая-то ошибка, скорее всего что-то простое. Но чтобы сказать почему именно она возникает нам нужен отчет. Можете выслать папку с проектов на support@simple-scada.com?

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Отчеты
« Ответ #23 : 21 Ноября 2017, 14:57:35 »
В отчете явно есть какая-то ошибка, скорее всего что-то простое. Но чтобы сказать почему именно она возникает нам нужен отчет. Можете выслать папку с проектов на support@simple-scada.com?

Да, я учту Ваше замечание по поводу неправильно выбранного типа и вышлю отчет.

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Отчеты
« Ответ #24 : 24 Ноября 2017, 16:58:30 »
Возможно ли в отчете произвести вычисление разницы между началом цикла и концом?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Re: Отчеты
« Ответ #25 : 24 Ноября 2017, 19:27:02 »
AutoCY, да, вычислить разницу довольно просто. Вы можете разместить в бэнде компонент Текст и задать ему выражение с функцией DateDiff, как показано на скрине во вложении. Если не нужно видеть миллисекунды, то дополнительно нужно задать формат.

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Отчеты
« Ответ #26 : 27 Ноября 2017, 10:32:07 »
Вы можете разместить в бэнде компонент Текст и задать ему выражение с функцией DateDiff.

1 На сколько я понял: выделил нужный мне бэнд, в редактировании выбрал функцию DateDiff, записал выражение. Только теперь вообще ничего не выводится (не строится таблица) - чистый лист. Или надо было создать отдельный компонент ТЕКСТ и наложить его на бэнд? Но в этом случае появляются ошибки.

2 Далее у меня не получается вывести корректно переменную  MyVariableRes из ArchiveTimeOn(MyVariable, MyVariableRes, DateStart, DateEnd) в отчет. MyVariableRes суммирует общее количество времени наработки оборудования, при попытке вывести эту сумму в отчете пишет - 30.12.1899 0:00:00. С датой 30.12.1899 мы раннее разобрались, а вот почему остальное время по нулям - не понятно, при этом в Скаде все нормально. Я попытался применить приведенный Вами скрипт, отбросил дату вообще, оставив только время в формате string. В скаде это время выводится, но вот как в отчет поместить string? Эту переменную я добавляю в источник ЦИКЛЫ и тогда теряется коннект с сервером.

Спасибо за Ваше долготерпение. )
« Изменён: 27 Ноября 2017, 11:08:46 от AutoCY »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Re: Отчеты
« Ответ #27 : 27 Ноября 2017, 14:47:48 »
Цитировать
1 На сколько я понял: выделил нужный мне бэнд, в редактировании выбрал функцию DateDiff, записал выражение. Только теперь вообще ничего не выводится (не строится таблица) - чистый лист. Или надо было создать отдельный компонент ТЕКСТ и наложить его на бэнд? Но в этом случае появляются ошибки.
Бэнд это компонент с именем "DataЦиклы" (если Вы создавали его в соответствии с руководством). В бэнде размещаются компоненты Текст. Когда Вы перетягиваете источник данных на страницу, то создается Бэнд и в нём автоматически размещаются компоненты Текст для каждой выбранной колонки источника данных. Нужно указать выражение не для бэнда, а для одного из компонентов Текст. При необходимости можно добавить в бэнд новый компонент Текст. См. скрип во вложении в нашем предыдущем сообщении, на нём выделен зелёным цветом компонент Текст для которого задается выражение, а также видно само выражение.

Цитировать
Далее у меня не получается вывести корректно переменную  MyVariableRes из ArchiveTimeOn(MyVariable, MyVariableRes, DateStart, DateEnd) в отчет.
Можем предположить, что это из-за того, что ArchiveTimeOn не является "синхронной" процедурой и выполняется в отдельном потоке. Поэтому если в скрипте вызвать ArchiveTimeOn и сразу после вызвать построение отчета, то в отчете будет 0, потому что ArchiveTimeOn выполнится через некоторое время после построения отчета.

Вышлите последнюю версию проекта на support@simple-scada.com мы изменим шаблон отчета в соответствии с задачами.
« Изменён: 27 Ноября 2017, 14:48:22 от Simple-Scada »

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Отчеты
« Ответ #28 : 30 Ноября 2017, 16:45:31 »
Scada установлена на сервере.
В скрипте ReportView('my_client', 'Отчет') прописываю всех клиентов:
  ReportView('my_client_1', 'Отчет');
  ReportView('my_client_2', 'Отчет');
              .............................
  ReportView('my_client_n', 'Отчет')

Если один клиент сформирует отчет, это не будет же отображаться на других клиентах (т.е. не ReportExportClient)? 
 

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1407
    • Просмотр профиля
Re: Отчеты
« Ответ #29 : 30 Ноября 2017, 17:15:29 »
Здравствуйте!

Если у Вас в скрипте написано:
Код
begin
  ReportView('my_client_1', 'Отчет');
  ReportView('my_client_2', 'Отчет');
  ReportView('my_client_3', 'Отчет');
end.

и он вызывается, к примеру по нажатию на кнопку, то при нажатии кнопки на любом из клиентов произойдет формирование отчета и он отобразится на клиентах my_client_1, my_client_2, my_client_3. Если нужно, чтобы по нажатию на кнопку отчет отобразился только на том клиенте, на котором нажали кнопку - необходимо изменить скрипт так:
Код
begin
  ReportView(GetClientName, 'Отчет'); // сформировать отчет и открыть его на клиенте, который вызвал скрипт
end.