Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Серега от 10 Ноября 2025, 12:14:30

Название: Объект и все такое
Отправлено: Серега от 10 Ноября 2025, 12:14:30
Добрый день!
Прилетела задачка. Как бы была страница (pVCU) и куча подстраниц. И выполнялась процедура из глобального модуля:
Код: (delphi)
procedure SelectRoutes(aNameSubPage, aNameTC:String; tblRoutes_U4XXXMXX_XXX:TM_Table);
var
  aQuery: string;
  aSubPage: TM_Subpage;
begin
  aSubPage := pVCU.FindSubpageByName(aNameSubPage);
  if aSubPage <> nil then
  begin
    aQuery := 'SELECT ... FROM ... WHERE TC=' ... ' + QuotedStr(aNameTC);
    tblRoutes_U4XXXMXX_XXX.RunSQL(aQuery, tsSaveFixRow);
  end else
    begin
      ShowMessageClient(GetClientName, 'Предупреждение!', 'Выберите ТС.');
      Exit;
    end;
end;
Теперь подстраницы стали каждая страницей, а страница как бы стала подстраницей у каждой страницы, как бы поменялись названия а функционал тот же.
Понятно что скрипт работать не будет, так как поменялись названия страниц. Эксперимент не удался, ругается на имя. И теперь вопрос.
Можно ли заменить в скрипте название страницы на подстановку для конкретной страницы, которую указываем в параметрах при вызове?
То есть вот эту строку:
Код: (delphi)
aSubPage := pVCU.FindSubpageByName(aNameSubPage);
заменить на эту строку:
Код: (delphi)
aSubPage := aNameSubPage.FindSubpageByName('pVCU');
Возможно так сделать не получиться. Не хотелось бы писать это на каждую подстраницу.
Можете как то прокомментировать?
Название: Re: Объект и все такое
Отправлено: Simple-Scada от 12 Ноября 2025, 17:57:17
Цитировать
Возможно так сделать не получиться. Не хотелось бы писать это на каждую подстраницу.
Можете как то прокомментировать?
Если мы правильно поняли из кода, параметр aNameSubPage является обычной строкой. У строк, конечно, нет метода FindSubpageByName. Он есть только у страниц (объектов типа TM_Page). При необходимости можно сначала получить нужную страницу, а затем найти принадлежащую ей подстраницу.
В процедуру SelectRoutes передаётся указатель на таблицу. Если нужно получить подстраницу, которой принадлежит таблица, то вместо поиска лучше вызвать метод tblRoutes_U4XXXMXX_XXX.GetOwner. (https://simple-scada.com/help/script/getowner.html) Он вернёт подстраницу, которой принадлежит таблица (либо окно, если таблица находится в окне).
Название: Re: Объект и все такое
Отправлено: Серега от 13 Ноября 2025, 17:03:10
В теме какой то читал про эту функцию. Ну теперь, после Ваше ответа, точно стоит изучить ее подробнее.
Спасибо!