Aus einer Tabelle Daten einer internen Tabelle filtern - Interne Tabelle ist eine Tabelle ohne Kopfzeile

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

Aus einer Tabelle Daten einer internen Tabelle filtern - Interne Tabelle ist eine Tabelle ohne Kopfzeile

Beitrag von Sonne1234 (ForumUser / 30 / 17 / 2 ) »
Hallo zusammen,

ich bin totaler Anfänger in ABAP und tue mich da noch wirklich schwer. Ich habe eine interne Tabelle mit zuvor selektierten Daten erstellt.

Code: Alles auswählen.

SELECT bukrs blart bldat budat xblnr awkey awtyp cpudt
         FROM bkpf
         INTO CORRESPONDING FIELDS OF gs_bkpf
         WHERE bukrs IN so_bukrs AND
               blart IN so_blart AND
               cpudt IN so_cpudt.
  ENDSELECT.

  APPEND gs_bkpf TO gt_bkpf.
In dieser Tabelle sind nun Referenznummern, die ich benötige, um weitere Felder aus einer anderen Tabelle zu selektieren. Mein Versuch dies mit einem weiteren Select zu machen, funktioniert aber leider nicht.

Code: Alles auswählen.

SELECT objky kschl erdat vstat
         FROM nast
         INTO CORRESPONDING FIELDS OF table gs_nast
         where objky in gt_bkpf-xblnr.
Ich bekomme immer die Meldung: "GT_BKPF ist eine Tabelle ohne Kopfzeile und besitzt daher keine Komponente mit Namen "XBLNR".

Ich weiß aber nicht so richtig, wie ich das lösen kann. Ich habe dies schon mit einem LOOP probiert. Dort kommt aber die Meldung "XBLNR ist keine interne Tabelle".

Kann hier jemand von euch vielleicht einem totalen Anfänger weiterhelfen?

Vielen Dank.

Liebe Grüße.

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


Re: Aus einer Tabelle Daten einer internen Tabelle filtern - Interne Tabelle ist eine Tabelle ohne Kopfzeile

Beitrag von Lukas Sanders (ForumUser / 68 / 7 / 34 ) »
Hallo,

zuerst würde ich empfehlen, auch beim ersten SELECT die Daten nicht in eine Struktur zu selektieren und diese dann einer Tabelle anzufügen, sondern gleich in die Tabelle zu schreiben:

Code: Alles auswählen.

SELECT bukrs blart bldat budat xblnr awkey awtyp cpudt
         FROM bkpf
         INTO CORRESPONDING FIELDS OF TABLE gt_bkpf
         WHERE bukrs IN so_bukrs AND
               blart IN so_blart AND
               cpudt IN so_cpudt.
Beim Selektieren mit WHERE ... IN ... wird erwartet, dass entweder eine Auflistung von Einzelwerten (https://help.sap.com/doc/abapdocu_752_i ... p_list.htm), eine Range-Tabelle etwa aus einer Selektionsoption (https://help.sap.com/doc/abapdocu_752_i ... seltab.htm) oder eine Subquery (https://help.sap.com/doc/abapdocu_752_i ... bquery.htm) folgt.

Bei dem ersten SELECT sind die internen Tabellen (so_...) Range-Tabellen (aus Selektionsoptionen?), die einen bestimmten Aufbau haben. Bei diesen speziellen Tabellen funktioniert die IN-Bedingung, da in diesen Tabellen pro Zeile ein Einzelwert oder Wertebereich mit entsprechenden Selektionsbedingungen steht, welcher von der Datenbankschnittstelle in eine Werteliste umgesetzt werden kann.

Um zu allen Einträgen in einer normalen internen Tabelle Daten hinzuzulesen, gibt es die Anweisung FOR ALL ENTRIES (https://help.sap.com/doc/abapdocu_752_i ... p_itab.htm).

Diese entspricht in etwa einem Join zwischen einer internen Tabelle und einer Datenbanktabelle. Die übereinstimmenden Felder werden in der WHERE-Bedingung angegeben. In Deinem Programm würde es so aussehen:

Code: Alles auswählen.

SELECT objky kschl erdat vstat
         FROM nast
         FOR ALL ENTRIES IN gt_bkpf
         INTO CORRESPONDING FIELDS OF TABLE gt_nast
         WHERE objky EQ gt_bkpf-xblnr.
Damit hättest du dann in der internen Tabelle gt_nast alle Einträge aus der NAST stehen, die zu einem Beleg in der gt_bkpf passen.

Für die FOR-ALL-ENTRIES-Anweisung sollte allerdings vorher die Tabelle gt_bkpf sortiert und um Duplikate bereinigt werden (die ursprünglichen Daten sind dann ggf. nicht mehr vorhanden, also ggf. vorsichtshalber die Tabelle doppeln):

Code: Alles auswählen.

SORT gt_bkpf ASCENDING BY xblnr. 
DELETE ADJACENT DUPLICATES FROM gt_bkpf COMPARING xblnr. 
Außerdem sollte vor der Selektion geprüft werden, ob die Tabelle, nach deren Einträgen selektiert wird, leer ist. Sollte dies der Fall sein, wird nämlich die ganze NAST ausgelesen.

Code: Alles auswählen.

IF lines( gt_bkpf[ ] ) GT 0. 

  SELECT ... 

ENDIF. 
Eventuell kann es sich auch lohnen, einen echten Datenbank-Join einzubauen, je nachdem was das Ziel der Abfrage sein soll. Hierzu bietet die SAP-Dokumentation nützliche Hinweise und Beispiele: https://help.sap.com/doc/abapdocu_752_i ... t_join.htm

Re: Aus einer Tabelle Daten einer internen Tabelle filtern - Interne Tabelle ist eine Tabelle ohne Kopfzeile

Beitrag von Sonne1234 (ForumUser / 30 / 17 / 2 ) »
Hallo Lukas,

vielen Dank erstmal für deine ausführliche Antwort. Ein, zwei Sachen konnte ich schon umsetzen.

Den Rest muss ich mir nochmal in Ruhe genauer ansehen. Evtl. habe ich dann nochmal die ein, oder andere Rückfrage.

Danke fürs Helfen :)

Gruß Lisa

Re: Aus einer Tabelle Daten einer internen Tabelle filtern - Interne Tabelle ist eine Tabelle ohne Kopfzeile

Beitrag von DeathAndPain (Top Expert / 1941 / 257 / 412 ) »
Wenn ich jetzt noch verstehen würde, weshalb Du die gleiche Frage zweimal postest...

viewtopic.php?f=1&t=24059

Re: Aus einer Tabelle Daten einer internen Tabelle filtern - Interne Tabelle ist eine Tabelle ohne Kopfzeile

Beitrag von Sonne1234 (ForumUser / 30 / 17 / 2 ) »
Um ehrlich zu sein, habe ich beim ersten Mal nicht gelesen, dass die Frage erst freigegeben werden muss und habe schlichtweg gedacht, dass es nicht funktioniert hat.^^

Seite 1 von 1

Vergleichbare Themen

2
Antw.
3742
Views
Daten aus internen Tabelle in Tabelle speichern
von Stahle71 » 03.06.2015 11:03 • Verfasst in ABAP® für Anfänger
1
Antw.
3134
Views
Daten aus DB-Tabelle in interne Tabelle kopieren
von b0rsti » 07.02.2008 10:52 • Verfasst in ABAP® für Anfänger
17
Antw.
5083
Views
Daten einer Tabelle über Daten aus einer internen Tabelle selektieren
von Sonne1234 » 09.12.2019 08:54 • Verfasst in ABAP® für Anfänger
2
Antw.
11047
Views
OO - Interne Tabelle ohne Kopfzeile
von Ifrit » 19.06.2006 16:35 • Verfasst in ABAP® für Anfänger
3
Antw.
1846
Views
Interne Tabelle mit kopfzeile umwandeln
von kaufmann123 » 19.04.2018 11:16 • 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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 2 Tagen von Bright4.5 1 / 713
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2342
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8925