PDA

View Full Version : Jede Menge CABEQ und Tags



tarkusch
16-08-12, 16:00
Hallo,

hätte schon fast alle Tag, Gotos und CABEQ eliminiert, aber bei dieser Unterroutine stehe ich, wieder mal auf den Schlauch.

/FREE
Dow §Ende = *off;
// ---------------------------------
// Eingabe Abteilung
// ---------------------------------
/END-FREE
C TAG01 TAG
/FREE
DOU *IN13 = *OFF;
EXFMT RecABT;
ENDDO;

IF SFL#1REC = *ZERO;
// Kostenstellen eingeben
/END-FREE
C TAG02 TAG
/FREE
DOU *IN13 = *OFF;
EXFMT RecIKOST;
*IN13 = *OFF;
/END-FREE
C *INKL CABEQ *ON TAG01
/FREE
EXSR Pruefungen;
/END-FREE
C *INKL CABEQ *ON TAG01
/FREE
ENDDO;
// Präsentieren Kostenstelle
EXFMT RecOKOST;
/END-FREE
C *INKL CABEQ *ON TAG02
/FREE
ENDIF;
// Verarbeitung
§Work = *OFF;
IF SFL#1REC > *ZERO;
IF Count > *ZEROS;
WRITE FMTC1;
W1Update = 'N';
DOU *IN13 = *OFF;
EXFMT FMTW1;
If *INKC;
*INKC = *OFF;
Leave;
EndIf;
/END-FREE
C *INKL CABEQ *ON TAG02
/FREE
*IN13 = (W1Update = *BLANKS);
IF W1Update = 'J';
EXSR UpdateAll;
ENDIF;
ENDDO;
ENDIF;
ENDIF;
ENDDO;

Dank im Voraus und Gruß

Tarki

Fuerchau
16-08-12, 16:21
Was willst du denn da wissen?
Ich arbeite da überhaupt nicht mehr mit GOTO's!

Wie wärs z.B.:

select;
when Condition1;
...
when Condition2;
...
other;
endsl;

In Schleifen kann man dann gerne LEAVE und ITER verwenden, wobei die Ende-Bedingung am Anfang abgefragt werden sollte, sonst klappt Iter nicht:

dow 1=1;
read ...
if %eof();
leave;
endif;

select;
when Condition1;
iter;
when Condition2;
leave;
:
endsl;
:
enddo;

Und wenn dann das Ganze in einer Subroutine ist, gibt's noch den LEAVESR.

Wo ist also dein Problem?