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.