Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: JibberHorse от 15 Марта 2019, 16:32:30

Название: TM_Table
Отправлено: JibberHorse от 15 Марта 2019, 16:32:30
Здравствуйте!
Не получается привязать скрипт к событиям OnCellDatachange и OnCellClick. Для этих событий скрипты просто не доступны (список пуст, только папки). Для всех остальных событий объекта TM_Table перечень скриптов доступен.
v2.3.4.0.
Название: Re: TM_Table
Отправлено: Simple-Scada от 15 Марта 2019, 19:01:56
Здравствуйте.

Скрипты OnCellDatachange и OnCellClick уникальны, они выглядят так:
Код: (delphi)
procedure OnCellClick(Cell: TM_TableCell);
procedure OnCellDatachange(Cell: TM_TableCell);
, т.е. содержат параметр Cell: TM_TableCell, в то время как большинство скриптов являются универсальными и выглядят так:
Код: (delphi)
procedure myScript(Sender: TM_Control);
, т.е. содержат параметр Sender: TM_Control.

Таким образом на события OnCellDatachange и OnCellClick можно назначить только ранее созданные скрипты такого же типа, а стандартные универсальные скрипты не подойдут, поэтому они не отображаются в списке. Поэтому на события OnCellDatachange и OnCellClick нужно написать новые скрипты (для этого нужно выделить таблицу и дважды кликнуть кнопку с тремя точками "..." напротив события OnCellDatachange или OnCellClick).
Название: Re: TM_Table
Отправлено: JibberHorse от 16 Марта 2019, 14:23:48
Ясно. спасибо!
Название: Re: TM_Table
Отправлено: MaxHari от 29 Ноября 2019, 13:20:05
Здравствуйте!
Есть таблица с граничными значениями переменных, которые необходимо менять (к ячейкам таблицы привязаны переменные, выбраны параметры "работать с граничным значением"). Каким образом можно отследить изменение значения в ячейке?

Также в Скаде было выявлено отсутствие проверки "предупредительная_граница <= аварийной_границы" при изменении значения предупредительной границы. Хорошо бы поправить это в будущем.
Название: Re: TM_Table
Отправлено: Simple-Scada от 29 Ноября 2019, 18:57:33
Здравствуйте.

Цитировать
Каким образом можно отследить изменение значения в ячейке?
На изменение границ событие не предусмотрено, поэтому отследить их изменение не получится.

Цитировать
Также в Скаде было выявлено отсутствие проверки "предупредительная_граница <= аварийной_границы" при изменении значения предупредительной границы. Хорошо бы поправить это в будущем.
Вы используете последнюю версию SImple-Scada 2.3.6.3? Мы улучшали работу с границами в этой версии.
Название: Re: TM_Table
Отправлено: MaxHari от 29 Ноября 2019, 20:59:53
Цитировать
На изменение границ событие не предусмотрено, поэтому отследить их изменение не получится.
Возникает только идея сделать соответствующее количество переменных и писать в них значения границ, а там уже делать нужные действия.
Может, можете добавить такое событие в будущих версиях? Либо сделать какой-то флаг в переменной, что поменялись границы. Либо рассматривать изменение не только значения переменной, а целиком объекта...

Цитировать
Вы используете последнюю версию SImple-Scada 2.3.6.3? Мы улучшали работу с границами в этой версии.
Да, версия последняя. Помню раньше писал "вручную" через скрипты, там по привышению пред.>авар. в предупредительную границу записывалось значение аварийной. В данном же случае изменение происходит через свойство объекта "работать с граничным значением переменной". Запись в ячейку происходит, а что на деле в саму границу пишет ещё не проверял...
Название: Re: TM_Table
Отправлено: Simple-Scada от 02 Декабря 2019, 09:38:50
Цитировать
Также в Скаде было выявлено отсутствие проверки "предупредительная_граница <= аварийной_границы" при изменении значения предупредительной границы. Хорошо бы поправить это в будущем.
Перепроверили несколько раз, с таблицей, уровнями и полями, всегда работает правильно, версия 2.3.6.3. Можете уточнить что значит "отсутствие проверки "предупредительная_граница <= аварийной_границы""? При изменении предупредительной границы выполняется проверка значения переменной и если оно ниже предупредительной границы, то ячейка остаётся бесцветной, а если выше, то окрашивается в желтый цвет.

Цитировать
Помню раньше писал "вручную" через скрипты, там по привышению пред. > авар. в предупредительную границу записывалось значение аварийной. В данном же случае изменение происходит через свойство объекта "работать с граничным значением переменной".
Все свойства граничных значений в скриптах (HighAlarm, HighWarning, LowWarning и LowAlarm) привязаны правильно и не менялись с начала разработки Simple-Scada 2, поэтому непонятно как меняя предупредительную границу можно изменить аварийную. Вы уверены что не перепутали свойства в скриптах? Также нужно учитывать что при включенном сохранении граничных значений они будут загружаться из файла на жестком диске, а не из настроек переменной (https://simple-scada.com/help/manual/index.html?variable-new.html#var_dop). Если у Вас есть пример проекта с неправильным присвоением границ, то просьба выслать его для проверки на support@simple-scada.con.
Название: Re: TM_Table
Отправлено: MaxHari от 05 Декабря 2019, 10:08:06
Цитировать
Перепроверили несколько раз, с таблицей, уровнями и полями, всегда работает правильно, версия 2.3.6.3. Можете уточнить что значит "отсутствие проверки "предупредительная_граница <= аварийной_границы""? При изменении предупредительной границы выполняется проверка значения переменной и если оно ниже предупредительной границы, то ячейка остаётся бесцветной, а если выше, то окрашивается в желтый цвет.

Покраска ячеек выполняется нормально.
Нет проверки, когда в предупредительную границу записывается значение выше аварийной. На практике предупредительная граница просто исчезает, и значение переменной контролируется по аварийной границе, т.е. сама реализация нормально срабатывает. Для "глупых" пользователей, которые могут перепутать ячейки и прочее хорошо бы добавить эту проверку - что если введено значение предупредительной границы большее, чем аварийной, то выдавать какое-либо сообщение.
Может, на скринах будет понятнее...
Файл 1.png - переменная Тннт достигла предупредительной границы, всё ок.
2. png - переменная Тннт достигла аварийной границы, всё ок.
3. png - изменили предупредительную границу переменной Тннт на значение, выше аварийной. Контроль переменной идёт по аварийной границе - всё ок. Оповещения или ещё что-то, что предупр.>аварийной границы нет.
Опция "сохранение граничных значений" включена.

Цитировать
непонятно как меняя предупредительную границу можно изменить аварийную.
Аварийная граница не меняется. Когда значение записывалось через скрипты, при условии, что предупр.>аварийной, в предупредительную границу записывалось значение аварийной. На тот момент опция "сохранение граничных значений" не была выставлена.
Название: Re: TM_Table
Отправлено: Simple-Scada от 06 Декабря 2019, 09:46:02
Цитировать
Нет проверки, когда в предупредительную границу записывается значение выше аварийной.
Понятно, спасибо за подробное описание, мы сначала подумали что цвет ячеек не меняется при смене границ. Рассмотрим добавление проверки на пересечение границ при вводе нового значения.
Название: Re: TM_Table
Отправлено: MaxHari от 12 Декабря 2019, 12:19:55
Для таблиц с прокрутками - можно ли при открытии окна с таблицей как-то перемещать скролл (курсор) на первую строку, если скролл (курсор) был ниже "начальной" части таблицы при её предыдущем закрытии?
Название: Re: TM_Table
Отправлено: Simple-Scada от 14 Декабря 2019, 12:07:41
MaxHari, позицию скролла нельзя изменить программно.
Название: Re: TM_Table
Отправлено: MaxHari от 06 Января 2020, 18:22:06
Здравствуйте!
Вроде уже задавал вопрос, не смог найти..

У таблиц есть событие OnCellDatachange. Можно ли как-то по этому событию понять в какой ячейке поменялась переменная и сделать что-то с соседней ячейкой (например, в столбце aCol + 1)?
Название: Re: TM_Table
Отправлено: Simple-Scada от 07 Января 2020, 16:22:20
Здравствуйте.

У таблиц есть событие OnCellDatachange. Можно ли как-то по этому событию понять в какой ячейке поменялась переменная и сделать что-то с соседней ячейкой (например, в столбце aCol + 1)?
В событие OnCellDatachange передаётся параметр Cell типа TM_TableCell, это та ячейка в которой изменилось значение. Все свойства ячеек описаны здесь (https://simple-scada.com/help/script/tmtablecell.html). Обратите внимание на свойства Col и Row - это номер столбца и номер строки ячейки в таблице. Таким образом получить соседнюю ячейку (справа от текущей) можно так:
Код: (delphi)
var
  aCell: TM_TableCell;
begin
  aCell := Table1.GetCell(Cell.Col + 1, Cell.Row);
end.
Название: Re: TM_Table
Отправлено: MaxHari от 07 Января 2020, 18:03:32
Спасибо, сам бы никогда не догадался)

Возможно ли как-то убирать фокус с выбранной строки таблицы (делать что-то по типу RowIndex := -1)?
Название: Re: TM_Table
Отправлено: Simple-Scada от 08 Января 2020, 10:45:50
Возможно ли как-то убирать фокус с выбранной строки таблицы (делать что-то по типу RowIndex := -1)?
Нет, у каждого клиента этот индекс свой и изменить его с сервера (через скрипт) не получится, поэтому свойство RowIndex доступно только для чтения.