ich möchte einige Range Tabellen dynamisch aufbauen und später in der Where Bedingung für ein Select benutzen. Der Code sieht wie folgt aus; Aber es kommt zum Kurzdump, dass die Wherebedingung ein unerwartetes Format.
IF typnr IS SUPPLIED.
CONCATENATE 'TYPNR IN' lt_typnr INTO
source_line separated by space.
APPEND source_line TO where_tab.
ENDIF.
SELECT * FROM ZTYP_TABLE
INTO CORRESPONDING FIELDS OF TABLE lt_header
WHERE (where_tab).
Hat Jemand Erfahrung damit?
lt_typnr ist die Range tabelle
Hallo Besi,
was willst Du eigentlich?
Eine RANGE Tabelle nutzen: select ... where Field in RANGETAB (den Aufbau der RANGETAB findest Du mit F1 auf RANGES)
oder
dynamischen where-Bedingung im Select (wie in Deinem Quellcode) dann verwende aber keine RANGETAB um die where-Bedingung zu speichern sondern einen STRING (F1 auf select, weiter zu WHERE-Klausel, dann Variante 3).
ich glaube nicht, dass das geht. Zu 4.6 durften nur Literale in einer dynamischen Where-Bedingung angegeben werden. Ab 4.7 wird in der Doku das nicht mehr so ausdrücklich gesagt, aber es heisst:
1. Die in source_text angegebenen logische Bedingungen müssen dieselbe Form haben wie entsprechende Bedingungen im ABAP -Quelltext. Allerdings darf der Operator nicht in der Form f1 IN itab1 verwendet werden.
Der letzte Satz sagt meiner Meinung nach aus, dass das, was du vorhast, nicht funktionieren wird.
Ab Release 640ff ist man da wieder flexibler:
"Die Überprüfung einer Selektionstabelle ist seit Release 6.40 in einem dynamischen logischen Ausdruck möglich. "
Bliebe also noch die Möglichkeit sich ein beliebiges Coding mit GENERATE SUBROUTINE POOL zusammenzubauen und aufzurufen.
IF typnr IS SUPPLIED.
CONCATENATE 'TYPNR IN lt_typnr' INTO
source_line separated by space.
*ENDIF auskommentiert, damit where-Bedingung nie leer
SELECT * FROM ZTYP_TABLE
INTO CORRESPONDING FIELDS OF TABLE lt_header
WHERE (source_line).
ENDIF.
So ähnlich sollte es funktionieren, habe es aber nicht ausprobiert.
Vielleicht hilft Dir dies mehr weiter als meine obige Aussage.
Norbert hat Recht: Das habe ich auch erfahren, dass Ranges dynamisch aufbauen erst ab Release 6.40 gehen kann. Aber dafür kann man die Ranges in der where_tab
anstatt in mit between aufabuen.
d.h.
.....where (where_tab): where_tab hätte dann folgende Zeilen---> typ_nr between low and high ).