Werte einer internen Tabelle gruppieren und auslesen

Getting started ... Alles für einen gelungenen Start.
31 Beiträge • Seite 1 von 3 (current) Nächste
31 Beiträge Seite 1 von 3 (current) Nächste

Werte einer internen Tabelle gruppieren und auslesen

Beitrag von bohne (Specialist / 437 / 0 / 0 ) »
Hallo!

Wie kann man aus einer internen Tabelle Werte
die gleich sind gruppiert auslesen.

In einer Spalte gibt es Bestellnummern,
eine Bestellnummer kann mehrmals vorkommen.
Wei kann man diese gruppiert auslesen je nach wie oft sie vorkommen?
Zuerst bestellnummer 126
126
134
134
134
134
134
144
144
...
...

Grüße
bohne

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


Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
LOOP -> F1
AT {NEW|END OF|FIRST|LAST} -> F1
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Beitrag von bohne (Specialist / 437 / 0 / 0 ) »
Hi,

offengestanden habe ich Probleme hier die
entsprechenden Werte einzutragen.
Kann mir bitte jemand erklären wie ich diese
entsprechend eintragen muss bzw. kombinieren kann.


Grüße
bohne

Code: Alles auswählen.

*die select Abfrage
*wie erfolgt nun die Anpassung der Loop-Schleife 

SELECT * FROM  tabelle INTO CORRESPONDING FIELDS OF TABLE interne_tabelle
WHERE Rech_Nr IN sel_Feld.
SORT itab by customid ascending.

LOOP -> F1 
AT {NEW|END OF|FIRST|LAST} -> F1

ENDLOOP.

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo Bohne,

versuch doch mal bitte die F1-Hilfe zu benutzen, die für die meisten ABAP-Befehlsworte sehr ausführlich ist.
Wenn wir Dir immer alles vorkauen, wirst Du es nie wirklich verstehen...

PS:
nein! wir wollen Dich nicht ärgern, sondern animieren, selbst die Lösung zu suchen. Deshalb ist der erste Schritt immer die F1-Taste zu benutzen.
Wenn du mit den angebotenen Informationen nicht klarkommst und deshalb noch Fragen hast, helfen wir dir gerne.

PPS:
deine letzte Antwort deutet leider drauf hin, dass du Haubi's Antwort nicht verstanden hast...
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Charadin (Specialist / 148 / 0 / 0 ) »
ereglam hat geschrieben:Wenn wir Dir immer alles vorkauen, wirst Du es nie wirklich verstehen...
@ereglam, @haubi: da habt Ihr bestimmt recht, aber gerade für Anfänger (die, die wirklich erst sehr kurz mit ABAP zu tun haben) sind solche Anweisungen:
Haubi hat geschrieben:LOOP -> F1
AT {NEW|END OF|FIRST|LAST} -> F1
schon sehr kryptisch.

Kann man da nicht ein, zwei Sätze dazuschreiben, so in der Art von "Mach einen Loop über die interne Tabelle und schau Dir dann mal den Befehl "AT" genauer an" - oder so in der Art, versteht Ihr, was ich meine? :wink:
Zuletzt geändert von Charadin am 08.03.2006 10:19, insgesamt 1-mal geändert.
Gruß,
Charadin

Beitrag von bohne (Specialist / 437 / 0 / 0 ) »
ereglam,
ich kann dir auf alles schwören worauf du willst ich habe in den letzten zwei Tagen nur noch damit verbracht hierzu eine Lösung zu finden und ich bin langsam am Verzweifeln ob mit mir alles OK ist.
Bitte das ist wirklich kein Scherz oder sowas
ich werde so noch verrückt kann mir da nicht jemand helfen. Die F1 habe ich bereits ebenfalls angeschaut:
Wenn ich das so laufen lasse bekomme ich pro Rechnungsnr eine neue Seite. Ich möchte aber eine neue Seite pro neue Rechnungnr

LOOP AT itab INTO wa_itab .
AT NEW rechnungsnr.
NEW-PAGE.
WRITE / wa_itab-rechnungsnr.
ENDAT.
AT END OF rechnungsnr.
WRITE / 'Test'.
ENDAT.
ENDLOOP.

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Hehe....

Haste an's Sortieren gedacht?

Gruss,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Beitrag von bohne (Specialist / 437 / 0 / 0 ) »
meinst du so ?

Code: Alles auswählen.

SORT itab by rechnungsnr ascending.
LOOP AT itab INTO wa_itab . 
AT NEW rechnungsnr. 
NEW-PAGE. 
WRITE / wa_itab-rechnungsnr. 
ENDAT. 
AT END OF rechnungsnr. 
WRITE / 'Test'. 
ENDAT. 
ENDLOOP.

Beitrag von bohne (Specialist / 437 / 0 / 0 ) »
das klappt auch nicht .

Grüße
bohne

Beitrag von Charadin (Specialist / 148 / 0 / 0 ) »
gibt es denn in Deiner Tabelle (links) neben Deinem Feld "Rechnungsnummer" noch andere Felder?

siehe dazu die ABAP-Schlüsselwortdokumentation:
AT NEW f.
...
Die zugehörige Folge von Anweisungen wird genau dann durchlaufen, wenn das Teilfeld f oder ein (links) vor f definiertes Teilfeld in der aktuellen LOOP-Zeile einen anderen Wert hat als in der vorangehenden (AT NEW) bzw. nachfolgenden (AT END OF) Tabellenzeile.
Gruß,
Charadin

Beitrag von GastX (Specialist / 277 / 4 / 18 ) »
@Haubi: Sortieren, wozu?

Ernsthaft: wichtig beim Nutzen von AT NEW etc. ist der Aufbau der internen Tabelle, also die Reihenfolge der Spalten.
Auszug aus der Doku:
Die Gruppenstufenstruktur bei internen Tabellen ist statisch. Sie entspricht genau der Reihenfolge der Spalten der internen Tabelle (von links nach rechts). Insbesondere ist die Gruppenstufenstruktur bei internen Tabellen unabhängig davon, nach welchen Kriterien die interne Tabelle sortiert wurde.
(Wenn irgendwas dagegenspricht, den Tabellenaufbau entsprechend zu gestalten, muss man wohl den Gruppenwechsel selbst realisieren.)

@Bohne: der Loop sieht ja soweit ok aus, aber wie ist denn Deine interne Tabelle definiert?

-----------------------------------
Nachtrag: ups, charadin war schneller...

Beitrag von bohne (Specialist / 437 / 0 / 0 ) »
Hi,

es gibt durchaus noch andere Felder ausser Rechnungsnummer in meiner Tabelle.

Kann mir bitte nicht jemand sagen wie man sowas mit Abap löst? Ich bin völlig überfordert.

Es muss doch in Abap einen Weg dafür geben

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo bohne,

in der Hilfe zum LOOP und AT steht u.a., dass bei der Verwendung dieser Anweisung mit einer internen Tabelle die Felder von links nach rechts ausgewertet werden.
Wenn Du also eine Tabelle hast, deren linkeste Spalte nicht die Bestellnummer ist, kann der 'AT NEW bestnr.' nicht richtig funktionieren, wenn sich zu einer Bestellnummer sich etwas in eine der linkeren Spalten ändert.
Das heißt, es wird ab Zeilenbeginn bis zum benannten Feld geprüft, ob sich in irgendeinem Feld der Wert geändert hat.
(ok, ok, da war wieder jemand schneller...)

Wie lautet deine Tabellendeklaration?
Mögliches Beispiel:

Code: Alles auswählen.

TYPES:
  BEGIN OF struct,
* Felder, die hier stehe dürfen sich nicht innerhalb einer Rechnungsnummer ändern
    rechnungsnr TYPE belnr,
* weitere Felder, deren Inhalt sich ändern darf
  END   OF struct.
DATA:
  itab TYPE TABLE OF struct WITH HEADER LINE.
SORT itab by rechnungsnr ascending. 
LOOP AT itab INTO wa_itab . 
  AT NEW rechnungsnr. 
    NEW-PAGE. 
    WRITE / wa_itab-rechnungsnr. 
  ENDAT. 
  AT END OF rechnungsnr. 
    WRITE / 'Test'. 
  ENDAT. 
ENDLOOP.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Anders ausgedrueckt:

Code: Alles auswählen.

NUMMER RGNR   Text
1      4711   Hansi
1      4711   Bansi
1      4712   Hansi
1      4712   Bansi
...funktioniert, nicht aber...

Code: Alles auswählen.

NUMMER RGNR   Text
1      4711   Hansi
2      4711   Bansi
1      4712   Hansi
2      4712   Bansi
...weil sich links neben der RGNR noch NUMMER befindet, dass sich innerhalb einer RGNR aendert.
Stellst Du die Feldreihenfolge um:

Code: Alles auswählen.

RGNR   NUMMER Text
4711   1      Hansi
4711   2      Bansi
4712   1      Hansi
4712   2      Bansi
...funktioniert der Gruppenwechsel wieder.

Klarer geworden?

Gruss,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Beitrag von donny (Specialist / 253 / 0 / 2 ) »
Hallo zusammen,

ich hätte da noch folgenden "old-Style-Lösungsvorschlag":

Code: Alles auswählen.

DATA: z_rgnr LIKE itab-rgnr.

SORT itab BY rgnr.
LOOP AT itab.
* Beim ersten Mal den Vergleichswert setzen
  IF z_rgnr IS INITIAL.
    z_rgnr = itab-rgnr.
  ENDIF.
  IF z_rgnr <> itab-rgnr.
*   Coding für Gruppenwechsel
    WRITE: / 'Fertig  mit Rechnung:', z_rgnr.
    WRITE: / 'Beginne mit Rechnung:', itab-rgnr.
*   Nächste Rechnungsnummer
    z_rgnr =  itab-rgnr.
  ENDIF.
ENDLOOP.
* für letzten Wert: Gruppenendeverarbeitung
  IF not z_rgnr IS INITIAL.
    WRITE: / 'Fertig  mit Rechnung:', z_rgnr.
  ENDIF.

Hier ist die Zeilenstruktur egal. Ich speichere mir das Vergleichsfeld selber. Nicht sehr elegant, aber geht.
Aufpassen muß man auf die Endeverarbeitung nach dem Loop. Wenn die Tabelle nicht leer ist, steht nach dem Loop in Z_RGNR ein Wert drin. Für den muß die Endeverarbeitung wie im Beispiel angedacht noch vorgenommen werden.

Gruß
donny

Vergleichbare Themen

4
Antw.
6402
Views
gruppieren von internen Tabellen
von debianfan » 18.01.2018 03:17 • Verfasst in ABAP® für Anfänger
13
Antw.
1463
Views
Report Summieren der Werte einer Internen Tabelle
von ArjenR » 03.01.2020 09:02 • Verfasst in ABAP® für Anfänger
5
Antw.
5534
Views
Werte einer internen Tabelle in sap script form
von Gast » 16.02.2006 17:06 • Verfasst in ABAP® für Anfänger
3
Antw.
3351
Views
Gruppieren / Summieren in internen Tabellen
von eddi12 » 19.02.2008 12:10 • Verfasst in ABAP® für Anfänger
10
Antw.
849
Views
ALV Grid Sortierung - Doppelte Werte gruppieren
von der_neuling » 05.05.2022 16:56 • Verfasst in ABAP® für Anfänger

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.