Problem mit zwei Schleifen und at first

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
7 Beiträge • Seite 1 von 1
7 Beiträge Seite 1 von 1

Problem mit zwei Schleifen und at first

Beitrag von PRuediger (ForumUser / 6 / 1 / 0 ) »
Hallo ABAPforum.com-Community,

schon oft wurde mir hier geholfen, nur bei meinem jetzigen Problem leider noch nicht. Die Suchhilfe gab mir kein zufriedenstellendes Ergebnis.

Es ist eigentlich sehr simpel. Ich lese eine interne Tabelle zweimal hintereinander mit Konditionen in einem Programm aus. Zwischendrin wird das Programm open_group für die Erstellung einer Batch-Input-Mappe ausgeführt.

Sofern der erste at first-Block durchgelaufen ist, wird der zweite nicht mehr ausgeführt. Ist dies ein Fehler von SAP oder ein logischer Fehler von mir?!

Code: Alles auswählen.

 ... Anweisungen ...
  loop at tab where fehler gt 0.
    at first.
    	... Anweisungen, write, skip (mehr nicht) ...
    endat.
    	... Anweisungen, write, skip (mehr nicht) ...
  endloop.

perform open_group.

  loop at tab where fehler eq 0.
    at first.
    	... Anweisungen, write, skip (mehr nicht) ...
    endat.
    	... Anweisungen, write, Erstellung / Daten für die BI-Mappe ...
  endloop.
 ... Anweisungen ...
Vielleicht kann mir jemand von Euch helfen!

Einen schönen Freitag,

Phil

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


Re: Problem mit zwei Schleifen und at first

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
hallo Phil,

passt das denn von der Logik her? Ich kann in deinem Beispiel nicht erkennen an welcher Stelle open_group aufgerufen wird, aber macht das wirklich Sinn zuerst aus einer internen Tabelle über alle Datensätze mit fehler > 0 zu iterieren und dann zu jedem dieser Fehlersätze noch mal über die gleiche Tabelle mit fehler = 0 drüber zu laufen?

Gruss
Alexander
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: Problem mit zwei Schleifen und at first

Beitrag von PRuediger (ForumUser / 6 / 1 / 0 ) »
Hallo Alexander,

kurz zum Ablauf. Das Programm wird zur Änderung vom Infotyp 8 und Infotyp 7 der Transaktion PA30 (Personalstamm pflegen) verwendet. Ausgang ist eine Exceldatei die via Funktion ALSM_EXCEL_TO_INTERNAL_TABLE ausgelesen wird. Via loop über die Spalten und Zeilen werden die Daten in die Tabelle tab geschrieben. Gleichzeitig wird die Personalnummer auf Richtigkeit geprüft. Sollte dies nicht der Fall sein, so wird der der Wert fehler auf 4 gesetzt, wenn nicht bleibt er 0.

Und das passiert dann unten in dem loop wo die Kondition fehler gt 0 gesetzt ist. Dort sollen die Fehlerfälle erstmal angezeigt werden, die nicht in die Batch-Input-Mappe kommen. (Da sie sonst zum Abbruch führt) Danach wird open_group ausgeführt, weil dann durch die Kondition fehler eq 0 die Personalnummer gegeben ist und die Batch-Input-Mappe durchlaufen müsste.

Gruß Phil

Re: Problem mit zwei Schleifen und at first

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
sorry, habe es immer noch nicht verstanden. An welcher Stelle im Code wird denn open_group aufgerufen?
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: Problem mit zwei Schleifen und at first

Beitrag von PRuediger (ForumUser / 6 / 1 / 0 ) »
Open_Group wird nach der Excel-Tabellen-Auslesung und nach dem Schreiben der Daten der Exceltabelle in die interne Tabelle tab und einer vorherigen Ausgabe der nicht vorhandenen Personalnummern ausgeführt.

Code: Alles auswählen.

 call function 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    exporting
      filename                = filename
      i_begin_col             = p_bcol
      i_begin_row             = p_brow
      i_end_col               = p_ecol
      i_end_row               = p_erow
    tables
      intern                  = xlsdaten
    exceptions
      inconsistent_parameters = 1
      upload_ole              = 2
      others                  = 3.

  if sy-subrc <> 0.
    message id sy-msgid type sy-msgty number sy-msgno
            with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  endif.
  loop at xlsdaten.
    case xlsdaten-col.
      when '0001'.
        move xlsdaten-value to tab-pernr.
        select single * from pa0001 where pa0001~pernr eq xlsdaten-value.
        if sy-subrc eq 4.
          tab-fehler = 4.
        endif.
      when '0003'.
        move xlsdaten-value to tab-begda.
      when '0004'.
        move xlsdaten-value to tab-endda.
      when '0006'.
        move xlsdaten-value to tab-stdzl.
      when '0007'.
        move xlsdaten-value to tab-stdne.
    endcase.
    at end of row.
      append tab.
      clear tab.
      fehler = 0.
    endat.
  endloop.

  write: / 'Benutzername: ', sy-uname.
  write: / 'SAP-System: ', sy-sysid.
  write: / 'Datum: ', sy-datum.

  loop at tab where fehler gt 0.
    at first.
      skip.
      format color col_negative.
      write: / 'Nicht hinzugefügte Datensätze wg. Fehlern:'.
      format color col_heading.
      write: / 'Personalnummer', 20 'Anfang', 31 'Ende', 42 'Zähler', 50 'Nenner'.
      format color off.
    endat.
    write: / tab-pernr, 20 tab-begda, 31 tab-endda, 42 tab-stdzl, 50 tab-stdne.
  endloop.


  perform open_group.

  loop at tab where fehler eq 0.
    at first.
      skip.
      format color col_negative.
      write: / 'Der Batch-Inputmappe hinzugefügte Datensätze:'.
      format color col_heading.
      write: /42 'Infotyp 8', 60 'Infotyp 7'.
      write: / 'Personalnummer', 20 'Anfang', 31 'Ende', 42 'Zähler', 50 'Nenner', 60 'Arbeitszeitplan'.
      format color off.
    endat.

Re: Problem mit zwei Schleifen und at first

Beitrag von JDO (ForumUser / 45 / 0 / 3 ) »
Hallo Phil,

bei einem LOOP AT itab mit Gruppenstufenverarbeitung darf grundsätzlich keine einschränkende Bedingung angegeben werden, ansonsten ist das Verhalten der Gruppenstufenverarbeitung undefiniert.

Beispiel AT FIRST: Die Gruppenstufe wird durch die erste Zeile der internen Tabelle definiert. Der Gruppenwechsel findet beim Auslesen dieser Zeile statt. Wenn die einschränkende Bedingung erst in einer höheren Zeile erfüllt ist, findet der Gruppenwechsel nicht statt.

MfG Jürgen

Folgende Benutzer bedankten sich beim Autor JDO für den Beitrag:
PRuediger


Re: Problem mit zwei Schleifen und at first

Beitrag von PRuediger (ForumUser / 6 / 1 / 0 ) »
Oh, vielen Dank Dir. Wieder etwas dazu gelernt. Dann werde ich mal die Schleife so umbauen. :-)

Seite 1 von 1

Vergleichbare Themen

2
Antw.
1909
Views
Problem, mit Wertübergabe bei zwei internen Tabellen
von scott111 » 06.04.2006 21:44 • Verfasst in Dialogprogrammierung
2
Antw.
1353
Views
Zwei Vergleiche
von Elcin » 30.09.2016 15:17 • Verfasst in ABAP® für Anfänger
3
Antw.
2554
Views
Zwei Fragen
von ZK » 03.09.2004 12:25 • Verfasst in ABAP® für Anfänger
7
Antw.
3524
Views
Zwei Tabellen joinen (für ALV)?
von k4lisp3r4 » 22.01.2007 16:33 • Verfasst in ABAP® für Anfänger
7
Antw.
8358
Views
Select auf zwei Tabellen
von mip » 27.03.2008 16:05 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

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.