Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: MaksimGorbunov от 09 Июля 2026, 08:08:38

Название: Некорректная работа TM_ComboBox через скрипт на веб-клиенте
Отправлено: MaksimGorbunov от 09 Июля 2026, 08:08:38
Добрый день.

Версия - 2.7.3.1.

Столкнулся с тем, что при подключении через веб-клиент некорректно отрабатывает объект TM_ComboBox. Т.е. при выборе элемента из выпадающего списка на веб-клиенте не происходит переход на нужную мнемосхему диагностики. Переходы реализованы через скрипт по изменению значения переменной связанной с объектом OnDataChange (если значение переменной для данной строки = 1, то GetPageByName("название мнемки").GoToPageClient(GetClientName) и т.п.) На десктоп-клиенте отрабатывает всё корректно, на веб-клиенте - нет. Как это можно исправить? Иногда требуется подключение через веб-клиент, а диагностика в данном случае недоступна.
Название: Re: Некорректная работа TM_ComboBox через скрипт на веб-клиенте
Отправлено: Simple_Scada от 09 Июля 2026, 12:20:43
Здравствуйте.

Цитировать
Переходы реализованы через скрипт по изменению значения переменной
См. описание функции "GetClientName (https://simple-scada.com/help/script/getclientname.html)"– она не работает в скриптах, которые вызываются сервером скады (OnDataChange и т.д.). Вызов GetClientName в таких скриптах всегда будет возвращать пустую строку. Соответственно, переход по страницам будет выполняться только для десктоп-клиентов, в настройках которых имя клиента (https://simple-scada.com/help/manual/settings-simple-client.html?anchor=servset) не задано, т.е. = пустой строке. Если задать любое произвольное имя для декстоп-клиента, то переход также не будет работать. Web-клиенты получают случайно сгенерированное имя, поэтому для них такой скрипт никогда не будет работать.

Для перехода по страницам через компонент "Список (https://simple-scada.com/help/manual/combobox.html)", можно использовать следующий способ:
1. Задайте нужным страницам однотипные имена (https://clck.ru/3Uapj2), например PageDiagnostic1, PageDiagnostic2, PageDiagnostic3 и т.д.
2. Перейдите в меню редактирования скриптов и создайте новый глобальный модуль (https://simple-scada.com/help/script/globalmodule.html), например с именем "GlobalUnit" и следующим кодом:
Код: (delphi)
interface
 
var
  ClientData: TM_ClientData;
 
implementation
 
finalization
  FreeAndNil(ClientData);
end.
3. На событие "OnClick (https://simple-scada.com/help/script/by-obj-event.html)" списка используйте следующий код:
Код: (delphi)
begin
  ClientData := GetClientData;
end.
4. На событие "OnDataChange (https://simple-scada.com/help/script/general-events.html)" списка используйте следующий код:
Код: (delphi)
var
  aPage: TM_Page;
begin
  // ищем страницу с именем PageDiagnostic + значение переменной списка
  aPage := GetPageByName('PageDiagnostic' + IntToStr((Sender as TM_ComboBox).AsInt));
  if aPage <> nil then                       // если страница существует
    aPage.GoToPageClient(ClientData.Name);   // то, перейти на нее
end.
Учитывайте, что такой способ будет работать на 100% корректно только в однопользовательской системе. При одновременной работе множества пользователей всегда есть вероятность, что несколько пользователей будут одновременно взаимодействовать со списком и мешать друг другу.
Название: Re: Некорректная работа TM_ComboBox через скрипт на веб-клиенте
Отправлено: MaksimGorbunov от 09 Июля 2026, 13:25:10
Благодарю за ответ.