Interne Tabellen: Feldinhalte vergleichen

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

Interne Tabellen: Feldinhalte vergleichen

Beitrag von Mario Reum (ForumUser / 3 / 0 / 0 ) » 09.10.2019 21:36
Hallo zusammen,

gegeben seien zwei interne Tabellen:

lt_tabelle1 mit Spalte fgst (CHAR18).
lt_tabelle2 mit Spalte wmi (CHAR3).

Gerne möchte ich die neuen Konstrukte im ABAP nutzen um alle Einträge der lt_tabelle1 where fgst(3) = lt_tabelle2-wmi zu finden.

DATA(lt_filter) = FILTER #( lt_tabelle1 IN lt_tabelle2 where fgst(3) = wmi ).

Ist dies ohne Loop at lt_tabelle1 möglich? Vielleicht effizient mit einem CDS?

Vielen Dank im Voraus für Eure Tips!
Mario


Re: Interne Tabellen: Feldinhalte vergleichen

Beitrag von DeathAndPain (Top Expert / 1383 / 147 / 324 ) » 10.10.2019 12:20
Im Prinzip hast Du die Antwort mit deinem filter-Konstrukt ja schon selber gegeben. Was mir an dem filter-Befehl unsympathisch ist (und weswegen ich ihn fast nie verwende), ist die Tatsache, dass er als Zieldatentyp denselben Datentyp verlangt wie die Quelltabelle. Im Prinzip erzeugt man damit also eine Kopie von (möglicherweise großen) Teilen der Quelltabelle. Es fällt mir schwer, das für effizient zu halten, wenn es nur darum geht, bestimmte Zeilen in der Tabelle zu finden.

Am Ende ist aber die Frage, was Du mit Deinen Fundergebnissen im weiteren Verlauf machen möchtest, denn daraus ergibt sich, in welcher Form Du sie brauchst. Eine weitere Möglichkeit, Dein Problem zu lösen, wäre z.B.

Code: Alles auswählen.

TYPES type_table_of_char18 type standard table of CHAR18 with empty key.
DATA(lt_gesuchte_fgsts) = VALUE type_table_of_char18( FOR <zeile> IN lt_tabelle2 where fgst(3) = wmi ( <zeile>-fgst ) ).
Damit hättest Du alle fgst, die in den ersten drei Zeichen identisch mit ihren wmi sind, ohne die wmi als zusätzliche Ballastspalte mitzuschleppen, so wie der filter das macht.

(Hab den obenstehenden Code jetzt nicht getestet, aber so müsste das funktionieren.)

Oder Du machst sogar:

Code: Alles auswählen.

TYPES type_table_of_i type standard table of i with empty key.
DATA(lt_gesuchte_fgsts) = VALUE type_table_of_i( FOR <zeile> IN lt_tabelle2 INDEX INTO idx where fgst(3) = wmi ( idx ) ).
Damit bekämst Du dann eine Tabelle der Zeilennummern von den Zeilen, die Deiner Bedingung entsprechen.

Re: Interne Tabellen: Feldinhalte vergleichen

Beitrag von Mario Reum (ForumUser / 3 / 0 / 0 ) » 14.10.2019 08:30
Hallo DAP,

zunächst einmal vielen Dank für Deine Antworten.
Das Problem besteht nach wie vor, die where-Bedingung mit fgst(3) passt nicht.

Re: Interne Tabellen: Feldinhalte vergleichen

Beitrag von tm987456 (ForumUser / 40 / 26 / 9 ) » 14.10.2019 11:26
Filter kann kein Teilfeldzugriff über var(3). substring( ) funktioniert interessanterweise ebenfalls nicht. Dazu kommt, dass beim Filter nur binäre Vergleichsoperatoren erlaubt sind.

Entweder also schon bei der Erstellung der Tabellen mit einer Hilfsspalte arbeiten oder was anderes als Filter nehmen.

Gruss
tm

Seite 1 von 1

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und besseren Inhalt:

Aktuelle Forenbeiträge

Mandantenabhängige Farbgebung?
vor 9 Stunden von gtoXX 8 / 2224
Mandantenabhängige Z-Tabelle
vor 9 Stunden von gtoXX 4 / 128
Smartform debuggen Main-Teil
vor 21 Stunden von Bright4.5 15 / 407

Vergleichbare Themen

interne tabellen vergleichen
von TobiB » 23.11.2007 13:12
2 interne Tabellen vergleichen
von Frank Schmitt » 24.06.2020 09:40
2 interne Tabellen vergleichen
von Klende » 21.11.2005 15:16
2 interne Tabellen vergleichen
von Bright4.5 » 28.03.2019 08:56
2 interne Tabellen vergleichen
von swonny » 06.11.2006 16:12