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

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

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

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Отчеты
« Ответ #30 : 01 Декабря 2017, 16:42:20 »
 ReportView(GetClientName, 'Отчет') - это как раз то, что нужно, спасибо.

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Отчеты
« Ответ #31 : 04 Января 2018, 09:01:28 »
День добрый! В отчете при увеличении заголовка HEADER в высоту происходит перехлест с DATA. Соответственно выводится ошибка предупреждения. Не пойму, как поменять их позиционирование? Спасибо.

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Отчеты
« Ответ #32 : 04 Января 2018, 11:06:40 »
Еще не всегда активна кнопка ТИП ОБРАБОТКИ, когда надо выбрать скажем максимальное значение.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Re: Отчеты
« Ответ #33 : 04 Января 2018, 11:27:29 »
Здравствуйте.

Цитировать
В отчете при увеличении заголовка HEADER в высоту происходит перехлест с DATA.
Судя по скрину Вы растянули по высоте компоненты Текст которые входят в Header, а сам Header по высоте не увеличили. Это же касается бэнда Data. Нужно, чтобы сам бэнд был достаточной высоты, чтобы в него поместились другие объекты.

Цитировать
Еще не всегда активна кнопка ТИП ОБРАБОТКИ, когда надо выбрать скажем максимальное значение.
У Вас источник данных имеет тип "Периодический", или "По-изменению"? Тип обработки можно задать только для источников с типом "Периодический".
« Изменён: 04 Января 2018, 11:28:08 от Simple-Scada »

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Отчеты
« Ответ #34 : 04 Января 2018, 11:51:58 »
Спасибо получилось.  :D
« Изменён: 05 Января 2018, 20:21:57 от Simple-Scada »

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Отчеты
« Ответ #35 : 05 Января 2018, 13:30:58 »
Для получения максимального значения переменной, по приведенному примеру в отчете по циклам, я создал второй источник, в бенд Footer переместил компонент Текст и в нем в итоге записал: {MaxIf(DataСкорость,Скорость.a_speed,(Скорость.Время >= Запуск.vrCycleStart) && (Скорость.Время <= Запуск.vrCycleEnd))}. Далее переместил компонент Текст в Data первого источника. На данном этапе все получилось.
Теперь вопрос: как посчитать среднее арифметическое нескольких компонентов Текст в разных циклах. Ведь сам компонент Текст является итогом. Получается надо подсчитать среднее арифметическое итогов в итоге.
Пока я написал: {AvgD(DataЗапуск,Скорость.a_speed)}. И теперь происходит расчет среднего арифметического всех значений внутри компонента Текст, а не его конечных максимальных значений.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Re: Отчеты
« Ответ #36 : 06 Января 2018, 00:10:14 »
К сожалению вычислить итоговое среднее значение по итоговым максимальным значениям стандартными средствами нельзя.

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Отчеты
« Ответ #37 : 12 Января 2018, 12:17:31 »
Можно ли рядом не в высоту, а в ширину расположить два поля с разными источниками? Т.е. сжимаем поле DataЦиклы_1 и рядом в ширину располагаем второе поле DataЦиклы_2?

Спасибо.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Re: Отчеты
« Ответ #38 : 13 Января 2018, 11:10:45 »
Цитировать
Можно ли рядом не в высоту, а в ширину расположить два поля с разными источниками?
Можно разместить два текстовых поля с разными источниками в любом месте страницы.

Цитировать
Т.е. сжимаем поле DataЦиклы_1 и рядом в ширину располагаем второе поле DataЦиклы_2?
"DataЦиклы_1" и "DataЦиклы_2" это два бэнда данных. Каждый бэнд данных всегда занимает всю ширину страницы и расположить два бэнда по горизонтали друг за другом невозможно.

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Отчеты
« Ответ #39 : 15 Января 2018, 14:54:01 »
Задача:
 1. Вывести в отчете значение переменной в начале цикла и в конце.
 2. Далее посчитать разницу этих показаний в каждом цикле.
 3. Посчитать сумму разницы показаний переменной всех циклов.

В общем задачи я выполнил, но отчет получился трудночитаемый для пользователя.

 Создал источник №1. В его бенде вывел начало циклов и соответствующее этому значение переменной. Далее в итоге посчитал сумму значений переменной.
 Создал источник №2. В его бенде вывел конец циклов и соответствующее этому значение переменной. Далее в итоге посчитал сумму значений переменной.
 Создал источник №3. В его бенде вывел начало и конец циклов (как в Вашем примере). Вывести разницу соответствующую каждому циклу не получилось. Далее в бенде итог источника №3 вычел из суммы источника №2 сумму источника №1 и получил  сумму разницы показаний переменной всех циклов.

Получились три таблицы, хотя нужна только одна. Не могу вывести разницу соответствующую каждому циклу. Хотелось бы получить нечто похожее на то, что находится в приложении.

Спасибо.

 
« Изменён: 15 Января 2018, 14:59:34 от AutoCY »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Re: Отчеты
« Ответ #40 : 16 Января 2018, 10:36:50 »
Цитировать
Хотелось бы получить нечто похожее на то, что находится в приложении.
Для вывода такой таблицы в отчет стандартные источники плохо подходят и проще всего создать через MySQLWorkbench в БД новую таблицу с колонками:
  • `id` (int). Первичный ключ. Автоинкрементный;
  • `start` (timestamp(0)). Время начала цикла;
  • `end` (timestamp(0)). Время конца цикла;
  • `start_val` (double). Значение параметра на начало цикла;
  • `end_val` (double). Значение параметра на конец цикла;
  • `diff` (double). Разница между конечным и начальным значением параметра;
Создание подобной таблицы описано в этой статье начиная с абзаца: "Интерфейс проекта создан, переменные определены. Теперь можно создать таблицу...".
В эту таблицу в конце каждого цикла можно добавлять новую строку с итогами цикла. У Вас в проекте уже есть переменные старта и конца цикла (vrCycleStart и vrCycleEnd). Значение параметра на конец цикла можно получить в конце цикла, как и разницу между начальным и конечным значением. Не хватает переменной для значения параметра в начале цикла. Нужно создать её, например с именем "vrStartValue". Во время старта цикла записывать в неё текущее значение параметра:
Код: (delphi)
begin
  vrStartValue.Value := myVariable.Value;
end.

А по завершению цикла выполнять вставку новой строки в таблицу:
Код: (delphi)
var
  aQuery: string;
  aStartStr, aEndStr: string;
  aDiff: string;
begin
  { переводим время старта и конца цикла в пригодный для MySQL формат }
  aStartStr := MySQLDateTime(vrCycleStart.AsDateTime, dttMillisecond);
  aEndStr := MySQLDateTime(vrCycleEnd.AsDateTime, dttMillisecond);

  { считаем разницу между конечным и начальным значением параметра }
  aDiff := FloatToStr(myVariable.AsFloat - vrStartValue.AsFloat);

  { формируем запрос на вставку новой строки в таблицу }
  aQuery := 'INSERT INTO `my_table` (`start`, `end`, `start_val`, `end_val`, `diff`) VALUES(' +
    aStartStr + ', ' +  // время старта цикла
    aEndStr + ', ' +    // время конца цикла
    QuotedStr(vrStartValue.AsStr) + ', ' // значение на начало цикла
    QuotedStr(myVariable.AsStr) + ', '   // текущее значение параметра, т.е значение на конец цикла
    QuotedStr(aDiff) +                   // разница между показаниями
    ')';

  { отправляем запрос на выполнение }
  RunSQL(aQuery, nil, 0);
end.
В результате в Вашей БД будет таблица практически такая же, как Вы описали (за исключением "ИТОГО", его расчет легко добавить в отчете). Эту таблицу можно легко вывести в отчет в соответствии с этой статьей. При таком подходе не нужно создавать множество источников и легко вывести итог с суммой разниц для каждого цикла. Отчет будет строиться очень быстро, т.к. данные уже подготовлены и их нужно только отобразить. Плюс эту таблицу при необходимости можно отобразить в компоненте Таблица в скаде.
« Изменён: 26 Мая 2018, 10:38:32 от Simple-Scada »

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Отчеты
« Ответ #41 : 16 Января 2018, 16:09:00 »
Simple-Scada, спасибо за приведенное направление. Вроде все выполнил, но таблица не обновляется в скаде. Новые строки циклов должны автоматически добавляться и это можно визуально просмотреть в скаде?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Re: Отчеты
« Ответ #42 : 17 Января 2018, 10:47:29 »
AutoCY, забыли описать обновление таблицы. Обновить таблицу можно SQL-запросом на выборку, используя метод RunSQL вот так:
Код: (delphi)
begin
  { выбираем все данные из таблицы БД `my_table` и отображаем их в скаде в таблице "Table1" }
  Table1.RunSQL('SELECT * FROM `my_table`', tsSaveFixRow);
end.
« Изменён: 26 Мая 2018, 10:38:42 от Simple-Scada »

Антон Сидоров

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Отчеты
« Ответ #43 : 17 Января 2018, 12:26:07 »
Здравствуйте.
Simple-Scada 2 demo 64 тега 2.2.7.0
Win 8.1 32 Pro (лиц)
Reports.exe

Предварительный просмотр -> Получить данные
появляется то, что на картинках либо Reports.exe виснет. Что не так?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Re: Отчеты
« Ответ #44 : 17 Января 2018, 12:50:59 »
Здравствуйте. Можете выслать папку отчетов "..\Simple-Scada 2\Project\ИМЯ_ПРОЕКТА\Reports", или целиком папку проекта на support@simple-scada.com для проверки?
« Изменён: 17 Января 2018, 12:51:46 от Simple-Scada »