Code: Alles auswählen.
loop at LT_ROWS into LS_ROWS.
read table GT_ALV_OUT assigning <ALV_OUT>
index LS_ROWS-INDEX.
check SY-SUBRC is initial.
if <ALV_OUT>-ICON_CHECK is not initial. " nur wenn kein Fehler beim Prüfen
<ALV_OUT>-ICON_VERAB = ICON_MESSAGE_CRITICAL .
continue.
else.
if <ALV_OUT>-ICON_CHECK is not initial. " nur wenn kein Fehler beim Prüfen
<ALV_OUT>-ICON_VERAB = ICON_MESSAGE_CRITICAL .
continue.
else.
clear: PA2002-BEGUZ, PA2002-ENDUZ.
select single * from PA2002
where PERNR = <ALV_OUT>-PERNR
and BEGDA = <ALV_OUT>-DATUM
and AWART = LV_REISE.
if PA2002-BEGUZ = <ALV_OUT>-TRT_BEG and PA2002-ENDUZ = <ALV_OUT>-TRT_END.
message I012.
exit.
endif.
endif.
if <ALV_OUT>-ICON_CHECK is not initial. " nur wenn kein Fehler beim Prüfen
<ALV_OUT>-ICON_VERAB = ICON_MESSAGE_CRITICAL .
continue.
else.
clear: PA2002-BEGUZ, PA2002-ENDUZ.
select single * from PA2002
where PERNR = <ALV_OUT>-PERNR
and BEGDA = <ALV_OUT>-DATUM
and AWART = LV_MONTA.
if PA2002-BEGUZ = <ALV_OUT>-TIM_BEG and PA2002-ENDUZ = <ALV_OUT>-TIM_END.
message I012.
exit.
endif.
clear: PA2002-BEGUZ, PA2002-ENDUZ.
select single * from PA2002
where PERNR = <ALV_OUT>-PERNR
and BEGDA = <ALV_OUT>-DATUM.
if <ALV_OUT>-TIM_BEG le PA2002-BEGUZ or <ALV_OUT>-TRT_BEG le PA2002-BEGUZ.
message I013.
exit.
endif.
endif.
perform ZEITPAAR_BUCHEN changing <ALV_OUT>.
endif.
endloop.
Hast schon recht, das wäre sauberer.a-dead-trousers hat geschrieben: CATCH SYSTEM-EXCEPTIONS ist die alte Variante
Heutzutage macht man das mit TRY ... CATCH und klassenbasierten Ausnahmen mittels RAISE EXCEPTION TYPE.
m.andreschak hat geschrieben:Hat dann nur den Nachteil, dass man noch extra eine Ausnahmeklasse dafür anlegen muss.
Und da die Exception hier nicht weitergereicht werden würde, wäre das doch fast schon Jacke wie Hose.
Code: Alles auswählen.
raise exception type cx_static_check.
Hallo m.andreschak,m.andreschak hat geschrieben:Ich bin da selbst nicht so fit, aber wäre es nicht eventuell möglich, das ganze über CATCH SYSTEM-EXCEPTIONS zu machen?
Du definierst einen CATCH-Block in deinem LOOP, in dem alle If-Anweisungen stehen. Wenn eine IF-Anweisung nicht passt, löst du mit RAISE EXCEPTION eine Ausnahme aus, (=Die Laufzeitumgebung springt bis hinter den CATCH-Block) und kannst dann hinter dem CATCH Block dein Perform machen.
So die Theorie.
Code: Alles auswählen.
DO 1 TIMES.
<diverses Coding>
ENDDO.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
m.andreschak
Jedesmal wenn ich in SAP-Programmen ein solches Konstrukt sehe, wird mir übelblack_adept hat geschrieben:Code: Alles auswählen.
DO 1 TIMES. <diverses Coding> ENDDO.