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

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

Автор Тема: Отчет - переменная string  (Прочитано 4917 раз)

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Отчет - переменная string
« : 24 Апреля 2018, 14:15:50 »
День добрый!

Подскажите, можно ли в отчет передать string-переменную?

deldemo

  • Старожил
  • ****
  • Сообщений: 308
    • Просмотр профиля
Re: Отчет - переменная string
« Ответ #1 : 24 Апреля 2018, 21:05:41 »
Конечно можно

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Отчет - переменная string
« Ответ #2 : 25 Апреля 2018, 08:09:59 »
Как вытащить string в отчет по изменению?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Отчет - переменная string
« Ответ #3 : 25 Апреля 2018, 10:25:06 »
Как вытащить string в отчет по изменению?
Архивировать можно только численные переменные, поэтому для архивации строковой переменной придется создать собственную таблицу в БД с колонками [`id`, `timestamp`, `value`] и записывать в неё значение строковой переменной из скрипта, который выполняется по изменению этой переменной. Например так:

Код: (delphi)
var
  aQuery: string;
begin
  { формируем запрос на вставку текущего значения переменной в таблицу БД `my_table` }
  aQuery := 'INSERT INTO `my_table` (`ID`, `Timestamp`, `Value`) VALUES (' +
    IntToStr(Variable.ID) + ', ' +
    'NOW(), ' +
    Variable.AsStr +
    ');';

  { отправляем запрос на выполнение }
  RunSQL(aQuery, nil, 0);
end.

В результате получаем таблицу `my_table` в которой хранятся все изменения строковой переменной. Эту таблицу можно вывести в отчет используя пользовательский источник данных.

Второй вариант. Подойдёт, если различных строковых значений мало. Допустим строковая переменная принимает только три значения: "один", "два" и "три". Тогда можно создать отдельную целочисленную переменную (например в именем vrStrAsInt), включить у неё архивацию по-изменению и записывать в неё уникальное число соответствующее значению строковой переменной:
Код: (delphi)
begin
  if myStr.Value = 'один' then
    vrStrAsInt.Value := 1
  else
  if myStr.Value = 'два' then
    vrStrAsInt.Value := 2
  else
  if myStr.Value = 'три' then
    vrStrAsInt.Value := 3;
end.
Затем в отчет можно вывести переменную vrStrAsInt в обычный источник данных "по-изменению". Но нужно будет в отчете выполнить преобразование численного значения обратно в строковое. Это можно сделать через условия (см. скрин во вложении). Т.е. этот способ заключается в том, чтобы создать числовой эквивалент каждому значению строковой переменной и архивировать его. Затем в отчете привести его снова  к строке.
« Изменён: 26 Мая 2018, 13:38:38 от Simple-Scada »

Nomad

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
Re: Отчет - переменная string
« Ответ #4 : 14 Октября 2021, 18:37:33 »
Добрый день!
Делал пример из документации "Отчет из своего источника данных", и пришлось снять галочки (см. вложение), а то не записывалось значение, было только одно значение. Так правильно?
И если записывать в таблицу несколько строковых переменных, например Value1 и Value2, то ID будет иметь значение для той переменной, которая записалась последней?
« Изменён: 14 Октября 2021, 18:39:24 от Nomad »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1400
    • Просмотр профиля
Re: Отчет - переменная string
« Ответ #5 : 15 Октября 2021, 11:28:19 »
Здравствуйте.

Цитировать
Делал пример из документации "Отчет из своего источника данных", и пришлось снять галочки (см. вложение), а то не записывалось значение, было только одно значение. Так правильно?
Количество столбцов пользовательской таблицы в БД, их типы и настройки должны подбираться исходя из решаемой задачи. Описание опции PRIMARY_KEY можно найти по ссылке, опции NOT NULL по ссылке. Если требуется записывать значения переменных в свою таблицу БД, то правильным вариантом будет активировать опции PK и NN для колонок ID и Timestamp - это сформирует уникальный ключ по колонкам ID, Timestamp и исключит возможность добавления дублирующихся записей с одинаковым ID и Timestamp(например при ошибках заполнения таблицы из скриптов). Если снять все галочки(как у Вас на скриншоте), то в таблицу можно будет добавлять любые записи, в том числе абсолютно одинаковые.

Цитировать
И если записывать в таблицу несколько строковых переменных, например Value1 и Value2, то ID будет иметь значение для той переменной, которая записалась последней?
Если Вы записываете в таблицу значения нескольких переменных, а затем хотите использовать их в отчете, то конечно ID будут иметь значение, т.к. затем в отчете можно будет к примеру сделать выборку по требуемому ID и получить значения только нужной переменной. У любой переменной имеется уникальный ID, который можно посмотреть в редакторе переменных. Получить ID переменной в скрипте можно используя свойство "ID".