Условный оператор
Формат:
IF <Логическая переменная> THEN; BEGIN;
<Выражение1>;
.
.
<ВыражениеN>;
END;
ELSE; BEGIN;
<Выражение1>;
.
.
<ВыражениеN>;
END;
<Логическая переменная> - см. «ЛОГИЧЕСКАЯ ПЕРЕМЕННАЯ»;
<Выражение> - оператор или конструкция.
Пример:
IF ПРОВ THEN; BEGIN;
ЗАРПЛАТА=ОКАЗАНО_УСЛУГ*0.1;
END;
ELSE; BEGIN;
ПРОВ=ОКАЗАНО_УСЛУГ<ГРАНИЦА2;
IF ПРОВ THEN; BEGIN;
ЗАРПЛАТА=ОКАЗАНО_УСЛУГ*0.12;
END;
ELSE; BEGIN;
ПРОВ=ОКАЗАНО_УСЛУГ<ГРАНИЦА3;
IF ПРОВ THEN; BEGIN;
ЗАРПЛАТА=ОКАЗАНО_УСЛУГ*0.14;
END;
ELSE; BEGIN;
ПРОВ=ОКАЗАНО_УСЛУГ<=ГРАНИЦА4;
IF ПРОВ THEN; BEGIN;
ЗАРПЛАТА=НОРМА*0.18;
РАЗНИЦА=(ОКАЗАНО_УСЛУГ-НОРМА)*0.22;
ЗАРПЛАТА=ЗАРПЛАТА+РАЗНИЦА;
END;
ELSE; BEGIN;
ПРОВ=ОКАЗАНО_УСЛУГ<=ГРАНИЦА5;
IF ПРОВ THEN; BEGIN;
ЗАРПЛАТА=НОРМА*0.18;
РАЗНИЦА=(ОКАЗАНО_УСЛУГ-НОРМА)*0.23;
ЗАРПЛАТА=ЗАРПЛАТА+РАЗНИЦА;
END;
ELSE; BEGIN;
ЗАРПЛАТА=НОРМА*0.18;
РАЗНИЦА=(ОКАЗАНО_УСЛУГ-НОРМА)*0.24;
ЗАРПЛАТА=ЗАРПЛАТА+РАЗНИЦА;
END;
END;
END;
END;
END;
{ ОБХОД МЕСЯЦА ПО ДНЯМ }
;;ЗАРПЛАТА = 0;
;;Ставка1= Переменная(Докт,Дата_нач,Ставка1);
;;Ставка2= Переменная(Докт,Дата_нач,Ставка2);
;;Ставка3= Переменная(Докт,Дата_нач,Ставка3);
;;Ставка4= Переменная(Докт,Дата_нач,Ставка4);
{ Подготовка цикла: }
;;ТЕКУЩИЙ_ДЕНЬ = ИЗМЕНЕНИЕДАТЫ(ДАТА_НАЧ,1,0); // С версии 12.2: ТЕКУЩИЙ_ДЕНЬ = ДАТА(ДАТА_НАЧ);
;;ПЕРИОД_ОКОНЧЕН = СРАВНИТЬДАТЫ(ТЕКУЩИЙ_ДЕНЬ,ДАТА_ОКОНЧ);
;;ЦИКЛ_РАБОТАЕТ = ПЕРИОД_ОКОНЧЕН <= 0;
while ЦИКЛ_РАБОТАЕТ do;
begin;
{ Бизнес-логика цикла: }
;;СУММА = 0;
;;ЧАСОВ = РАБЧАС(ДОКТ,ТЕКУЩИЙ_ДЕНЬ,ТЕКУЩИЙ_ДЕНЬ,"","","",-1,0);
СМЕНА_больше9_ЧАСОВ = ЧАСОВ > 9;
if СМЕНА_больше9_ЧАСОВ then;
begin;
СУММА = Ставка4;
end;
else;
begin;
СМЕНА_больше8_ЧАСОВ = ЧАСОВ > 8;
if СМЕНА_больше8_ЧАСОВ then;
begin;
СУММА = Ставка3;
end;
else;
begin;
;;СМЕНА_больше7_ЧАСОВ = ЧАСОВ > 7;
if СМЕНА_больше7_ЧАСОВ then;
begin;
СУММА = Ставка2;
end;
else;
begin;
СМЕНА_больше0_ЧАСОВ = ЧАСОВ > 0;
if СМЕНА_больше0_ЧАСОВ then;
begin;
СУММА = Ставка1;
end;
end;
end;
end;
;;ЗАРПЛАТА = ЗАРПЛАТА + СУММА;
{ Коррекция цикла: }
;;ТЕКУЩИЙ_ДЕНЬ = ИЗМЕНЕНИЕДАТЫ(ТЕКУЩИЙ_ДЕНЬ,1,1);
;;ПЕРИОД_ОКОНЧЕН = СРАВНИТЬДАТЫ(ТЕКУЩИЙ_ДЕНЬ,ДАТА_ОКОНЧ);
;;ЦИКЛ_РАБОТАЕТ = ПЕРИОД_ОКОНЧЕН <= 0;
end;
ЗАРПЛАТА=ОКРУГЛ(ЗАРПЛАТА,0);