Code: Alles auswählen.
DATA: rangetab TYPE RANGE OF dbtab-field1,
wa_rangetab LIKE LINE OF rangetab.
LOOP AT itab INTO wa.
wa_rangetab-sign = 'I'.
wa_rangetab-option = 'EQ'.
wa_rangetab-low = wa-field1.
APPEND wa_rangetab TO rangetab.
ENDLOOP.
SELECT *
INTO TABLE lt_dbtab
FROM dbtab
WHERE field1 IN rangetab.
Code: Alles auswählen.
Loop at t_itab assigning fieldsymbol(<w_itab>).
rt_range = value #( base rt_range
( sign = 'I' option = 'EQ' low = <w_itab>-value ) ).
endloop.
Code: Alles auswählen.
DATA itab TYPE STANDARD TABLE OF vbak.
DATA wa LIKE LINE OF itab.
DATA ra_vbtyp TYPE RANGE OF vbtyp.
DATA ra_vkorg TYPE RANGE OF vkorg.
DEFINE _add_range_.
DATA wa_&1 LIKE LINE OF &1.
FIELD-SYMBOLS <&2> TYPE any.
ASSIGN COMPONENT '&2' OF STRUCTURE wa TO <&2>.
IF sy-subrc = 0.
READ TABLE &1 WITH KEY low = <&2> TRANSPORTING NO FIELDS.
IF sy-subrc > 0.
wa_&1-sign = 'I'.
wa_&1-option = 'EQ'.
wa_&1-low = <&2>.
APPEND wa_&1 TO &1.
ENDIF.
ENDIF.
END-OF-DEFINITION.
SELECT * FROM vbak INTO TABLE itab UP TO 10 ROWS.
LOOP AT itab INTO wa.
_add_range_ ra_vbtyp vbtyp.
_add_range_ ra_vkorg vkorg.
ENDLOOP.
in Deiner LOOP-Schleife zu stehen hast. Schreib die Befehle doch einfach für einmalige Ausführung vor die LOOP-Schleife. Diese Werte ändern sich doch nicht, so dass Du im LOOP einfach immer nur den LOW änderst und dann Deinen APPEND machst.wa_rangetab-sign = 'I'.
wa_rangetab-option = 'EQ'.
Code: Alles auswählen.
LOOP AT itab INTO wa.
APPEND #( sign= 'I' option = 'EQ' low = wa-field1 ) to rangetab.
ENDLOOP.
15 Spalten. Offenbar hat er in seiner itab eine Zeile für jede Spalte, deren Wert er einschränken möchte.Romaniac hat geschrieben:Du machst einen Loop über eine interne Tabelle und füllst im Loop 15 mal die Rangetabelle wenn Deine interne Tabelle 15 Einträge hat?
Es geht sogar noch "besser": Du kannst sogar die Rangetab im Makro definieren:DeathAndPain hat geschrieben:Dieses Makro soll funktionieren, obgleich es einen DATA-Befehl enthält? Beim 2. Einsatz des Makros ist der DATA doppelt drin; das sollte einen Syntax Error werfen.
Kleine Verbesserung:DeathAndPain hat geschrieben: ↑06.02.2019 16:34
Ab Release 7.40 machst Du einfach:
Code: Alles auswählen.
LOOP AT itab INTO wa. APPEND #( sign= 'I' option = 'EQ' low = wa-field1 ) to rangetab. ENDLOOP.
Code: Alles auswählen.
LOOP AT itab INTO wa.
APPEND VALUE #( sign = 'I' option = 'EQ' low = wa-field1 ) to rangetab.
ENDLOOP.
Code: Alles auswählen.
LOOP AT itab INTO wa.
rangetab = VALUE #( BASE rangetab ( sign = 'I' option = 'EQ' low = wa-field1 ) ).
ENDLOOP.
Code: Alles auswählen.
rangetab = value #( for <wa> in itab ( sign = 'I' option = 'EQ' low = <wa>-field1 ) ).
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Icke0801
Code: Alles auswählen.
SELECT DISTINCT 'I' AS sign,
'EQ' AS option,
itab~field1 AS low
FROM @itab AS itab
INTO CORRESPONDING FIELDS OF TABLE @rangetab.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Romaniac