Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: evgeni85 от 31 Июля 2025, 09:26:58

Название: Конструкция "if..then..else" в скриптах
Отправлено: evgeni85 от 31 Июля 2025, 09:26:58
Здравствуйте. Подскажите в чем ошибка в скрипте?
Код: (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.
Название: Re: Конструкция "if..then..else" в скриптах
Отправлено: Simple-Scada от 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.
Название: Re: Конструкция "if..then..else" в скриптах
Отправлено: evgeni85 от 31 Июля 2025, 09:48:32
Спасибо