die Ursache kannst du normalerweise selbst schnell rausfinden, indem du dein Programm debuggst. Dazu setzt du einen Breakpoint an einer bestimmten Stelle, IF p_deb = 'X'. wäre eine z.B. ein möglicher Ansatz. Anschliessend gehst du schrittweise von Befehl zu Befehl und schaust dir an, was alles in den internen Tabellen passiert. Sollten an einer Stelle zu viele Belege selektiert werden, so wird es dir dabei sicherlich auffallen.kisa hat geschrieben:Ich möchte aber nur die Belege von 60 bis 100 sehen. Irgendwie funktioniert die Selektion nicht.
Code: Alles auswählen.
"NUR SD-BELEGNUMMER:
IF so_belnr IS INITIAL.
"<-------------------- hier läufst du nur rein, wenn so_belnr nicht gefüllt ist
SELECT *
FROM kna1
INNER JOIN bsid ON kna1~kunnr = bsid~kunnr
INTO CORRESPONDING FIELDS OF TABLE itab
WHERE bukrs = pa_bukrs
AND wrbtr IN so_wrbtr
AND manst IN so_manst
AND budat IN so_budat
AND kna1~kunnr IN so_kunnr.
SELECT *
FROM vbrk
INTO CORRESPONDING FIELDS OF TABLE it_h_vbrk
WHERE vbrk~vbeln IN so_vbeln. "<--------- so_vbeln ist an dieser Stelle leer, du liest mit diesem Befehl also ALLE Faktura unabhängig von deiner Selektion
sorry, jetzt bin ich auch schon ganz durcheinander. Das passt schon, sind ja zwei unterschiedliche Selektionsfelder die angesprochen werden.kisa hat geschrieben:Wieso ist vbeln leer?
nein, das liegt an dieser Anweisung hier:kisa hat geschrieben:Laut Debugger wird meine IT_H_VBAK-Tabelle mit den 40 Listen gefüllt, die ich selektiert habe. Aber sobald ich auf Loop gehe, bekomme ich wieder alle Daten. Liegt es an sy-subrc = 0?
Code: Alles auswählen.
LOOP AT ITAB INTO WA.
READ TABLE IT_H_VBAK INTO LS_VBAK WITH KEY VBELN = SO_VBELN.