Tabellenverarbeitung im ABAP

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

Tabellenverarbeitung im ABAP

Beitrag von KlausB (Specialist / 143 / 0 / 0 ) »
Hallo zusammen,

habe in einer internen Tabelle folgende Inhalte

Zeile PerNr Wert1 Wert2
1 1101 100 150
2 1107 200 250
3 1112 300 350
4 1120 100 110
5 1120 120 130
6 1123 200 210
7 1123 220 230
8 1123 240 250
9 1125 500 600
....

Möchte in eine weitere Tabelle nur die Personalnummern (PerNr) weitergeben, die mehr als einmal vorkommen, also 1120 und 1123.

Wie codier ich das?

Vielen Dank im voraus.

Klaus

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


Beitrag von brinam (Specialist / 111 / 0 / 0 ) »
Vielleicht so (tab1 Original-Tabelle, tab2 neue Tabelle):

TYPES: BEGIN OF t_tab2,
pernr LIKE tab1-pernr,
anzahl TYPE i,
END OF t_tab2.
DATA: wa_tab2 TYPE t_tab2,
tab2 TYPE TABLE OF t_tab2.

LOOP AT tab1.
READ TABLE tab2 INTO wa_tab2 WITH KEY pernr = tab1-pernr .
IF sy-subrc = 0. "Pernr schon mind. 1x da
ADD 1 TO wa_tab2-anzahl.
MODIFY TABLE tab2 FROM wa_tab2.
ELSE.
wa_tab2-pernr = tab1-pernr.
wa_tab2-anzahl = 1. "Pernr noch nicht da
APPEND wa_tab2 TO tab2.
ENDIF.
ENDLOOP.

DELETE tab2 WHERE anzahl = 1.

Jetzt stehen in tab2 nur diejenigen Personalnummern, die mehr als 1x vorkamen.
Viele Grüße
Britta

Beitrag von matel (ForumUser / 2 / 0 / 0 ) »
Die Laufzeit diese Progamm hängt quadratisch vor der Anzahl der Tabellenzeilen ab. Es gibt ein Algoritmun, wo sie linear vor der Zahl = (PerNr_Max - PerMr_min) abhängt.

Beitrag von KlausB (Specialist / 143 / 0 / 0 ) »
Hallo Britta,

herzlichen Dank für Deine Antwort. Dein Lösungsvorschlag funktioniert auch einwandfrei.

Leider hab ich aber mein Problem etwas undeutlich formuliert.

In der tab2 sollen bei den mehrfach vorkommenden Personalnummern auch die Werte (Wert1 und Wert2) vorhanden sein. Ich lös dies, indem ich den MODIFY in APPEND ändere. Beim anschließenden DELETE werden dann jedoch die ersten Datensätze bei 1120 und 1123 gelöscht :(

Hast Du vielleicht noch ne Idee?

Danke,
Klaus

Beitrag von KlausB (Specialist / 143 / 0 / 0 ) »
Hatte jetzt die Idee, den Inhalt von tab2 vor dem Löschen zu retten:

Code: Alles auswählen.

loop at tab2 into wa_tab2.
  APPEND wa_tab2 to tab3.
endloop.
Dann die Löschung durchzuziehen:

Code: Alles auswählen.

DELETE tab2 WHERE anzahl = 1.
Dann die fehlenden ersten Sätze in tab3 nachzulesen und nach tab2 zu bringen:

Code: Alles auswählen.

loop at tab2 into wa_tab2.
  READ TABLE tab3 INTO wa_tab3 WITH KEY pernr = wa_tab2-pernr.
  if wa_tab3-anzahl = 1.
    APPEND wa_tab3 TO tab2.
  endif.
endloop.

Problem: Funktioniert zwar, doch dieser letzte Loop ist eine Endlosschleife :?:

Die ersten Sätze von 1120 und 1123 werden ständig geschrieben.

Was mach ich falsch?

Beitrag von KlausB (Specialist / 143 / 0 / 0 ) »
Okay, hab's gefunden.

SY-SUBRC-Abfrage und DELETE der PerNr in tab3 war die Lösung.

Gruß,
Klaus

Code: Alles auswählen.

loop at tab2 into wa_tab2.
  READ TABLE tab3 INTO wa_tab3 WITH KEY pernr = wa_tab2-pernr.
  IF sy-subrc = 0.                            
    if wa_tab3-anzahl = 1.
      APPEND wa_tab3 TO tab2.
      delete tab3 where pernr = wa_tab2-pernr.
    endif.
  endif.
endloop.

Beitrag von brinam (Specialist / 111 / 0 / 0 ) »
Hallo Klaus,

sorry, dass ich erst jetzt antworte, aber ich hatte erst nach Deinem heutigen 3. Eintrag eine mail-Info erhalten.

Eine Anmerkung noch zu Deiner Endlos-Schleife. Eine Anweisungsfolge in etwa der Art:
loop at itab. ... append wa to itab. ... endloop.
würde ich (fast immer) vermeiden. Denn je nachdem, unter welchen Bedingungen Du einen neuen Satz an itab dranhängst, kann es passieren, das dies in jedem Schleifendurchlauf passiert. Und dann kommt es zur Endlosschleife, weil jeder (abgearbeitete) Satz der itab einen neuen Satz in itab erzeugt.

Besser wäre:
loop at itab. ... append wa to itab_temp. ... endloop.
Und anschließend erfolgt mit:
append lines of itab_temp to itab.
das eigentliche Anhängen der neuen Einträge an itab.
Viele Grüße
Britta

Beitrag von KlausB (Specialist / 143 / 0 / 0 ) »
Hallo Britta,

danke für Deine nochmalige Reaktion und für den Tipp!

Ich wünsch Dir einen schönen Tag.

Klaus

Seite 1 von 1

Vergleichbare Themen

5
Antw.
1929
Views
interne Tabellenverarbeitung
von gerold2102 » 04.12.2008 22:49 • Verfasst in ABAP® für Anfänger
2
Antw.
3129
Views
Tabellenverarbeitung in "Forms by Adobe"
von Felix0401 » 25.02.2022 15:16 • Verfasst in ABAP® Core
3
Antw.
9467
Views
OLE und ABAP: Aufruf von Excel-VBA Prozeduren aus ABAP
von OnkelSAP » 26.05.2010 09:45 • Verfasst in ABAP Objects®
6
Antw.
11779
Views
ABAP Workbench und ABAP Dictionary - für Einsteiger
von schnonus » 03.04.2008 10:39 • Verfasst in ABAP® für Anfänger
3
Antw.
31002
Views
ABAP 7.02 - Neues Feature - Pragmas in ABAP
von foessleitnerj » 09.01.2013 17:02 • Verfasst in Tips + Tricks & FAQs

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Ermittlung der Arbeitstage (Mosid)
vor 15 Stunden von DeathAndPain 3 / 44186
LSMW-Problem
vor 15 Stunden von DeathAndPain gelöst 6 / 2032
SFP (Adobe Forms) QR-Code wird nicht angezeigt
vor 17 Stunden von Sebastian82 gelöst 4 / 595
ATC Finding in Smartforms
vor einer Woche von sap_enthusiast 2 / 2069

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

Ermittlung der Arbeitstage (Mosid)
vor 15 Stunden von DeathAndPain 3 / 44186
LSMW-Problem
vor 15 Stunden von DeathAndPain gelöst 6 / 2032
SFP (Adobe Forms) QR-Code wird nicht angezeigt
vor 17 Stunden von Sebastian82 gelöst 4 / 595
ATC Finding in Smartforms
vor einer Woche von sap_enthusiast 2 / 2069