exit und loop???

Getting started ... Alles für einen gelungenen Start.
14 Beiträge • Seite 1 von 1
14 Beiträge Seite 1 von 1

exit und loop???

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
Hallo,

ich habe das Problem, dass wenn ich im loop ein exit-Befehl in einer if-Anweisung habe, dann springt man aus dem loop aus. Ich möchte aber zur nächsten if-Anweisung springen.

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.
ich möchte aber, wenn die if-Abfragen nicht zutreffen, soll zur perform ZEITPAAR_BUCHEN changing <ALV_OUT>. springen.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: exit und loop???

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Öhm, was gemacht werden soll, wenn das IF nicht zutrifft, steht im ELSE.... Oder hab ich jetzt etwas falsch verstanden?
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: exit und loop???

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
mit exit geht das programm aus der loop-schleife raus. ich möchte aber wenn die ifs, die vor dem perform-aufruf kommen nicht zutreffen, dann rufe mir perform auf. perform soll aber trotzdem in der schleife bleiben.

Re: exit und loop???

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
IF A eq B.
*** Mache das, wenn A = B ist
ELSE.
*** mache den PERFORM.
ENDIF.

Nochmal die Frage: Oder verstehe ich dein Posting nicht?
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: exit und loop???

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
Danke für Deine Mithilfe!

Wenn ich aber so mache, wird die perform jedes mal ausgeführt und die zeiten werden jedes mal verbucht! D.h. ich habe -zig tausende Datensätze in der DB. Ich möchte aber, sowohl fehler gefunden wird, den loop weiter verarbeiten.

Re: exit und loop???

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
AH, dann willst du kein EXIT, sondern ein CONTINUE? Sprich:

IF A = B.
*** mach was
ELSE.
continue. "mache den nächsten LOOP-Durchlauf, ohne was zu tun
ENDIF.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: exit und loop???

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
Wow, DANKE, das geht!!!
Vielen Dank!

Re: exit und loop???

Beitrag von m.andreschak (ForumUser / 22 / 2 / 3 ) »
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.

Re: exit und loop???

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
ok, würde ich auch ausprobieren.
Danke!

Re: exit und loop???

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
Hi!

Wiedermal der Klugscheißer aus der letzten Reihe:
CATCH SYSTEM-EXCEPTIONS ist die alte Variante ;)
Heutzutage macht man das mit TRY ... CATCH und klassenbasierten Ausnahmen mittels RAISE EXCEPTION TYPE.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: exit und loop???

Beitrag von m.andreschak (ForumUser / 22 / 2 / 3 ) »
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.
Hast schon recht, das wäre sauberer.
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.

Re: exit und loop???

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
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.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: exit und loop???

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
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.
Hallo m.andreschak,

die Idee von dir ist einen Block innerhalb des Loops zu definieren und dann gezielt an das Ende dieses Blocks zu springen. Das funktioniert sicher mit der Exception - aber irgendwie halte ich das für nicht besonders gut lesbar.
Es gibt aber eine Alternative, die das selbe bewerkstelligt. Statt eines TRY-CATCH-ENDTRY Blocks kann man auch folgendes recht simple Konstrukt verwenden.

Code: Alles auswählen.

DO 1 TIMES.  
<diverses Coding>
ENDDO.
Zum Ende des Blocks springt man nun mittels "EXIT" oder "CONTINUE" oder "CHECK".

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
m.andreschak

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: exit und loop???

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
black_adept hat geschrieben:

Code: Alles auswählen.

DO 1 TIMES.  
<diverses Coding>
ENDDO.
Jedesmal wenn ich in SAP-Programmen ein solches Konstrukt sehe, wird mir übel :shock:

Ich bin ein Programmier den man in der Schule eingetrichtert hat, keinen sog. Spaghetti-Code zu schreiben und dazu gehören ganz besonders Schleifenabbrüche usw. Mit klar definierten IF ... ELSE ... bzw. CASE ... WHEN ... Anweisungen erreicht man ein viel verständlicheres Ablaufverhalten.
Mit der Lösung über Exceptions hab ich mich ja noch anfreunden können, obwohl es eigentlich auch Spaghetti-Code ist. :cry:

So das waren mein letzter Kommentar zu diesem Thema. :twisted:

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Seite 1 von 1

Vergleichbare Themen

10
Antw.
5043
Views
Loop Exit Sy-Subrc
von SaskuAc » 29.01.2018 15:23 • Verfasst in ABAP® für Anfänger
1
Antw.
1484
Views
4
Antw.
3786
Views
LOOP in einem LOOP
von Bjuti » 10.09.2013 15:18 • Verfasst in ABAP® für Anfänger
2
Antw.
5386
Views
Was ist der Unterschied zw. customer exit & user exit
von bohne » 07.02.2007 21:04 • Verfasst in ABAP® für Anfänger
52
Antw.
10230
Views
LOOP AT
von cuncon » 01.02.2018 09:28 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Regex in where
vor 49 Minuten von tar 8 / 174
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1488

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Regex in where
vor 49 Minuten von tar 8 / 174
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1488

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9822