Die Befehle «REPEAT» und «LOOP» ermöglichen das ausprogrammieren von
Schleifen. Funktionsmässig ist eine REPEAT-LOOP Schleife vergleichbar mit
einer Do-While Schleife. d.h. die REPEAT-LOOP Schleife wird immer
mindestens ein Mal durchlaufen und am Ende der Schleife wird das
Abbruchkriterium geprüft.
Soll eine REPEAT-LOOP Schleife aufgrund bestimmter Bedingungen gar nie
abgearbeitet werden, so ist sie mit einem GOTO komplett zu
überspringen.
Beispiel
1
Dokumentliste nach Shortcut innerhalb der Dokumentstufe:
# Liste der Verkaufsdokumente ab einem Startdatum.
# Gibt alle Dokumente nacheinander aus. (Jeweils sortiert nach ShortCut innerhalb der Dokumentstufe.)
#
«nm1Start-Datum?()»
#
«nm2Dokumente,[D]efinitiv [E]rledigt?()»«nm2(«(uppercase("«MEM(2)»"))\E»)»
«z~MEM(2)=E»«nm2(D)»
«zMEM(2)=D»«nm2(30)»
«zMEM(2)=E»«nm2(40)»
#
# Hier wird der Startwert auf 64 gesetzt, damit der Loop beim Shortcut A beginnt.
# Der erste Aufruf von «NO(1)» setzt den Wert auf 65, was dem Dezimalwert für A entspricht.
«nNO(1,64)»
# Hier wird der Wert auf 1 gesetzt, damit der Loop bei der Dokumentstufe 1 (Offerte) beginnt.
«nNO(2,1)»
#
«REPEAT»
# Die Verkaufsdokumente werden aktiviert. AUF-ACTIVE6 = Index nach: Stufe, Status, ShortCut, Datum, Nummer
«nzAUF-ACTIVE6(±A,«NO(2,0)»,«MEM(2)»,«(character("«NO(1)»"))\E»,«MEM(1)»)»
«LIST(AUF-ACTIVE6,INDEX,START,/dok_list)»
#
# Wenn NO(1) = 90 (entspricht dem Dezimalwert für Z) dann NO(2) um 1 erhöhen (entspricht der nächsten Dokumentstufe)
# Ausserdem wird NO(1) geleert und dann wieder auf 64 (entspricht dem Dezimalwert für A) gesetzt.
«zNO(1,0)=90»«nNO(2)»«nNO(1,NULL)»«nNO(1,64)»
# Der Loop wird solange ausgeführt, bis die Dokumentstufe 5 (Gutschrift) abgearbeitet ist und NO(2) den Wert 6 enthält.
«z~NO(2,0)=6»«LOOP»
...
...
...
/
/dok_list
«z~AUF-SCUT=«(character("«NO(1,0)»"))\E»»«LIST(STOP)»«GOTO(# ENDE DOK_LIST)»
#
«AUF-TYP» - «AUF-DOKSW» - «AUF-SCUT» - «AUF-DATUM» - «AUF-NR»
#
# ENDE DOK_LIST
/
Auflisten von Verkaufsdokumenten ab einem
Startdatum.
Pro Dokumentstufe (OF bis GS) werden die Shortcuts von A
bis Z abgearbeitet. Dabei werden entweder definitive (Status 30) oder
erledigte (Status 40) Dokumente berücksichtigt. Innerhalb des Shortcut
werden die Dokumente dann nach Datum abgearbeitet. (Subroutine
/dok_list)
Beispiel
2
Verschachtelte LOOPs :
REPEAT-LOOP Schleifen
können verschachtelt werden. Hier ein Beispiel (Code-Auszug) von zwei
verschachtelten REPEAT-LOOP Schleifen.
/List-Verpackungspositionen
# PackItems durchlesen und Etiketten-Format / Anzahl holen
«NO(1,NULL)»
«REPEAT»
«nNO(1,1)»
# Verpackungseinheit-Nr
«X(VPE=«XRES(PackingListRes:PackingUnitNo,«NO(1,0)»)»)»
...
...
...
#
# Anzahl Etiketten
«NO(2,NULL)»
«REPEAT(2)»
«nNO(2,1)»
# Verpackungsunit-No, Menge Position
...
...
...
«zNO(2,0)<«XRES(VPEres:SalPackingUnit.NumberOfLabel)\N»\N»«LOOP(2)»
#
«zNO(1,0)<«X(TrxCount)»\N»«LOOP»
/
Die äussere Schleife (REPEAT - LOOP) wird solange
abgearbeitet, wie der Zähler 1 kleiner ist als der Inhalt der Variablen
X(TrxCount)
Die innere Schleife (REPEAT(2) - LOOP(2) ) wird solange
abgearbeitet, wie der Zähler 2 kleiner ist als die Anzahl gewünschter
Etiketten. (Resultat eines Service-Aufrufs.)