ABAP 12. diel – Riadenie toku programu a logické výrazy


Robiť správne rozhodnutia je ťažké. Zdravý rozum a logické výrazy sú v programovaní často v protiklade.
Táto kapitola popisuje pravidlá, ktorých sa musíte držať. Ak chcete aby Váš program fungoval správne a bezproblémovo.

V praxi je omnoho jednoduchšie keď identifikujete chybu a vyriešite ju samostatne. Táto kapitola Vás zoznámi s nástrojmi, ktoré pre riešenie týchto problémov potrebujete.

– Riadenie toku programu a logické výrazy.

Riadiace štruktúry

Každý program je napísaný tak, aby riešil zadanú úlohu. Tá sa môže skladať z niekoľko čiastkových úloh. To znamená že niektoré úlohy budu vykonané skôr, niektoré vôbec (nepovinné) a niektoré za iných podmienok.. toto celé sa nazýva príkazový blok.

Riadenie toku programu zodpovedá za spojenie jednotlivých čiastkových úloh pomocou riadiacich štruktúr. Riadiace štruktúry môžeme použiť opakovane.

Riadiace štruktúry v reálnom živote

Do kino pôjdete za predpokladu že máte čas, niekto sa k Vám pripojí, film sa bude pravdepodobne páčiť inak zostanete doma a budete si čítať knihu.

Jediným rozdielom je že nikto tento problém nevyjadruje takto:

IF čas AND spoločnosť AND záujem, THEN ísť_do_kina_na_film, ELSE zostať_doma_a_čítať. ENDIF.

Ako ste si všimli štruktúra má svoj začiatok aj koniec. (IF a ENDIF.) Ako matematické zátvorky, bez nich to nepôjde 🙂

Použitie vzorov

Príkaz pre riadenie štruktúry. Jednoduchšie je použiť vzory pretože tie vkladajú predom definované štruktúry. Vkladanie vzorov, kurzor na riadok a kliknite na tlačítko Vzor (Pattern). Obrázok 10.1

Systém potom otvorí okno, v ktorom môžete vybrať často používané vzory medzi ne patrí napríklad i vzor SELECT. Obrázok 10.2

Iné vzory napríklad štruktúra IF, môžete nájsť pomocou poľa Iný vzor (Other pattern). Následne klikneme na Ďalej (Continue)

Vetvenie

Vetvenie odpovedá slovnému vzoru “Buď-alebo” v prirodzenóm jazyku. Kľučové rozhodnutie je podmienka. Buď jednoduchá alebo zložená z viacej podmienok. Všetky príklady majú spoločné to že sa vykonajú po splnení podmienky.

Štruktúra IF

Začína IF a končí ENDIF.. Napríklad chceme spočítať počet členov kurzu “SAP01”.

IF zmember03-zzcoursetitle = ´SAP01´.
counter_sap01 = counter_sap01 +1.
ENDIF.

Vetvenie sa drží princípu “buď A alebo B” použijeme príkaz ELSE, ktorý predstavuje prípad “alebo”. Pokiaľ je splnená podmienka IF tak sa vykoná príkazový blok za príkazom ELSE.

Keď nie je podmienka splnená overí sa druhá podmienka pomocou príkazu ELSEIF, potom tretia podmienka pomocou ELSEIF až do nekonečna. Celý cyklus sa uzavrie pomocou ELSE..

Vnorenie štruktúry IF

IF podmienka_1
IF podmienka_2
priradovací_blok_1
END IF
END IF

Spojené logické výrazy

IF podmienka_1 and podmienka_2
priradovací_blok_1
END IF

Logické výrazy

Je pravidlo že prehľadný zápis ma prednosť pred geniálnym zápisom. Preto je dôležité písať program prehľadne aby sa v tom dalo aj vyznať.

Štruktúra CASE

Začína CASE a končí ENDCASE. Štruktúra CASE iba sleduje objekt.

Rozdiel medzi IF a CASE.

Štruktúra IF overuje platnosť zložitých logických podmienok, štruktúra CASE rozlišuje jednotlivé prípady na základe obsahu jedného poľa. Jednoducho povedané keď použijete IF tak môže sa stať že bude “pršať” aj “slnko svietiť”. Štruktúra CASE túto situáciu nedovolí – buď môže pršať alebo svietiť slnko.

Prípad navrátového kódu:

Typickým príkladom použitia štruktúry CASE je analýza návratového kódu. Cieľom tejto snahy je aby program pracoval “správne”. A to aj keď nastane chyba, alebo tak aby sa spustil prinajmenšom vhodný proces.

Štruktúra CASE je užitočná keď overujete obsah jedného poľa. Na konci systém prejde k príkazu ENDCASE.

Príklad:

CASE zmember03-zzcousetitle.
WHEN ´SAP01´.
counter_sap01 = counter_sap01 + 1.
WHEN ´SAP05´.
counter_sap05 = counter_sap05 + 1.
WHEN OTHERS.
counter_otherwise = counter_otherwise + 1.
ENDCASE.

U štruktúry CASE má výraz WHEN OTHERS rovnaký význam ako príkaz ELSE pri štruktúre IF.

Príkaz SELECT bude vyhľadávať iba v tabuľke, príkaz vráti návratový kód 1 pokiaľ našiel aspoň jeden záznam. Keď neprečíta žiaden záznam tak návratový kód bude 4. A návratový kód 0 znamená že sa vykoná úspešná vetva. Samozrejme existujú rôzne príkazy ktoré vedia vrátiť rôzne chybové správy.

Príklad:

CASE sy-subrc.
WHEN 0.
* Úspešná vetva
WRITE: / counter_sap01 * Objednanie kurzu SAP01
WHEN 4.
* Chybový stav
WRITE: / Nikto si neobjednal kurz SAP01
WHEN OTHERS.
* Fatal error, žiadne hodnoty poľa sy-subrc
END CASE.

Cykly

Cykly vykonávajú príkazové bloky viacejkrát.

Cyklus SELECT

Umožňuje pridať k príkazu podmienku, keď čítate jednotlivé záznamy tabuľky môžete použiť podmienku ako filter a čítať len tie záznamy, ktoré podmienku spínajú. Pokiaľ chcete čítať len záznamy v tabuľke ktoré sú priradené k kurzu “SAP01” musíte napísať nasledujúci kód:

SELECT * FROM zmember03
WHERE zzcoursetitle = ´SAP01´.
counter_sap01 = counter_sap01 + 1.
ENDSELECT.

Cyklus DO

štruktúra tohto príkazu začína DO a končí ENDDO medzi dvoma príkazmi je blok, ktorý sa ma opakované vykonávať.

DO
príkazový blok
ENDDO

Počet opakovaní cyklu, použijete nasledujúci príkaz:

DO 12 TIMES // 12x sa bude opakovať cyklus

Vyvarujte sa nekonečných cyklov.

Cyklus WHILE

WHILE … ENDWHILE. overuje platnosť podmienky pred vykonaním príkazového bloku. Podmienka cyklu WHILE je pomerne jednoduchá:

WHILE podmienka
príkazový blok
ENDWHILE

Stopky.
Čas beží obrátene a akonáhle dosiahne hodnotu nula, program môže pokračovať.

WHILE sekunda > 0.
WRITE: / sekunda.
sekunda = sekunda – 1.
ENDWHILE.

Samozrejme musíte nastaviť počet sekúnd, aby systém uveril pred spustením že je väčší ako nula. Akonáhle bude pole SEKUNDA obsahovať 0 skončí vykonanie, a program bude pokračovať za príkazom ENDWHILE.

Ukončenie príkazu Cyklov

V jazyku ABAP môžete ukončiť cykly príkazom: CONTUNUE, CHECK, EXIT..

CONTUNIE.

IF podmienka_1
CONTINUE
ENDIF

Príkazy pod CONTINUE sa už nevykonajú, čo je dosť logické… 🙂

CHECK.

Príkaz CHECK môžete považovať za kombináciu príkazu IF a CONTINUE. Zápis kódu je pomerne jednoduchý:

CHECK podmienka

Výber podľa pohlavia, cyklus ktorý kontroluje podmienku, v opačnom prípade skontroluje daľší záznam.

SELECT * FROM zmember03.
CHECK zmember03-mgender = ´Ž´.
* príkazový blok
ENDSELECT

EXIT.

Príkaz EXIT je dosť efektívny, jednak ukončí príkazový blok ale aj vnútorný cyklus. Následne sa presunie na ďaľšiu výšiu úroveň.

Logické výrazy

Tak ako ľudské rozhodnutie nie je vždy logické, preto počítače nebudú rozumieť tomu čo ľudia chcú. Preto musíme podmienky vyjadrovať jasne.

Jednoduché logické výrazy

IF NUMBER01 > NUMBER02
príkazový blok
ENDIF

Logické operátory:

EQ =
NE <>
LT <
LE <=
GT >
GE =>

IS INITIAL. – podmienka pre defaultné hodnoty

IF number01 IS INITIAL.
príkazový_blok
ENDIF.

BETWEEN. – porovnáva obsah poľa medzi dolnou a hornou hranicou

IF zmember03-mdob
BETWEEN ´19840101´ AND ´19841231´.
ENDIF.

Spojené logické výrazy

IR c1.
* príkazový_blok
ENDIF.

Pokiaľ chcete spracovať datové záznamy všetkých členov kurzu “SAP03” a “SAP04” v samostatnom príkazovom riadku, mali by ste podmienku formulovať takto:

IF zmember03-zzcoursetitle = ´SAP03´ OR zmember03-zzcoursetitle = ´SAP04´.
* príkazový_blok
ENDIF.

AND.

AND. je podobné ako OR len s tým rozdielom že pokiaľ použijete dve podmienky, tak musia byť splnené. Inak povedané pokiaľ chcete isť na dovolenku, musíte mať čas AND peniaze. Bez toho to nepôjde..

IF zmember03-mgender = ´M´ AND zmember03-zzcoursetitle = ´SAP03´
* príkazový_blok
ENDIF.

NOT. reprezentuje negáciu..

IF NOT c1.
* príkazový_blok
ENDIF.

IF NOT zmember03-zzcoursetitle(3) = ´SAP´
* príkazový_blok
ENDIF.

Podmienka hovorí že na prvých troch miestach názvu kurzu musí byť “SAP” aby došlo k jej spracovaniu v príkazovom riadku.

Nabudúce: Výberové obrazovky

zdroj: TS FMG.sk, google.sk

Loading Facebook Comments ...