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

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

Автор Тема: Конструкция "if..then..else" в скриптах  (Прочитано 1751 раз)

evgeni85

  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Здравствуйте. Подскажите в чем ошибка в скрипте?
Код: (delphi)
begin
  if arch.AsBool = false then
  vrValue_1.Archiving := false;
  vrValue_2.Archiving := false;
  vrValue_3.Archiving := false;
  vrValue_4.Archiving := false;
  vrValue_5.Archiving := false;
  vrValue_6.Archiving := false;
  vrValue_7.Archiving := false;
  vrValue_8.Archiving := false;
  vrValue_9.Archiving := false;
  vrValue_10.Archiving := false;
  vrValue_11.Archiving := false;
  vrValue_12.Archiving := false;
  vrValue_13.Archiving := false;
  vrValue_14.Archiving := false;
  vrValue_15.Archiving := false;
  vrValue_16.Archiving := false;
  vrValue_17.Archiving := false;
  vrValue_18.Archiving := false;
  vrValue_19.Archiving := false;
  vrValue_20.Archiving := false;
  vrValue_21.Archiving := false;
  else
  vrValue_1.Archiving := true;
  vrValue_2.Archiving := true;
  vrValue_3.Archiving := true;
  vrValue_4.Archiving := true;
  vrValue_5.Archiving := true;
  vrValue_6.Archiving := true;
  vrValue_7.Archiving := true;
  vrValue_8.Archiving := true;
  vrValue_9.Archiving := true;
  vrValue_10.Archiving := true;
  vrValue_11.Archiving := true;
  vrValue_12.Archiving := true;
  vrValue_13.Archiving := true;
  vrValue_14.Archiving := true;
  vrValue_15.Archiving := true;
  vrValue_16.Archiving := true;
  vrValue_17.Archiving := true;
  vrValue_18.Archiving := true;
  vrValue_19.Archiving := true;
  vrValue_20.Archiving := true;
  vrValue_21.Archiving := true;
end.
« Изменён: 31 Июля 2025, 09:56:03 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3217
    • Просмотр профиля
    • Simple-Scada
Re: Конструкция "if..then..else" в скриптах
« Ответ #1 : 31 Июля 2025, 09:46:12 »
Здравствуйте.

Если нужно выполнить несколько операций после if..then, заключайте их в блок "begin..end;", иначе условие будет применено только к первой строке после if..then.
Код: (delphi)
begin
  if arch.AsBool then
  begin
    // несколько операций здесь
  end else
    begin
      // несколько операций здесь
    end;
end.

Но гораздо лучше упростить код так:
Код: (delphi)
var
  aValue: Boolean;
begin
  aValue := arch.AsBool;
  vrValue_1.Archiving := aValue;
  vrValue_2.Archiving := aValue;
  vrValue_3.Archiving := aValue;
  vrValue_4.Archiving := aValue;
  vrValue_5.Archiving := aValue;
  vrValue_6.Archiving := aValue;
  vrValue_7.Archiving := aValue;
  vrValue_8.Archiving := aValue;
  vrValue_9.Archiving := aValue;
  vrValue_10.Archiving := aValue;
  vrValue_11.Archiving := aValue;
  vrValue_12.Archiving := aValue;
  vrValue_13.Archiving := aValue;
  vrValue_14.Archiving := aValue;
  vrValue_15.Archiving := aValue;
  vrValue_16.Archiving := aValue;
  vrValue_17.Archiving := aValue;
  vrValue_18.Archiving := aValue;
  vrValue_19.Archiving := aValue;
  vrValue_20.Archiving := aValue;
  vrValue_21.Archiving := aValue;
end.

Или так:
Код: (delphi)
var
  I: Integer;
  aValue: Boolean;
  aVar: TM_Variable;
begin
  aValue := arch.AsBool;
  for I := 1 to 21 do
  begin
    aVar := GetVariableByName('vrValue_' + IntToStr(I));
    if aVar <> nil then
      aVar.Archiving := aValue;
  end;
end.
« Изменён: 31 Июля 2025, 09:56:11 от Simple-Scada »

evgeni85

  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Re: Конструкция "if..then..else" в скриптах
« Ответ #2 : 31 Июля 2025, 09:48:32 »
Спасибо
« Изменён: 31 Июля 2025, 09:56:18 от Simple-Scada »