Code: Alles auswählen.
ELSEIF p_deb = 'X' AND so_belnr IS INITIAL.
REFRESH itab. "<-- überflüssig, itab ist an dieser Stelle leer
SELECT *
FROM bsik JOIN bsid ON bsid~belnr = bsik~belnr
INTO CORRESPONDING FIELDS OF TABLE itab
WHERE bsik~belnr IN so_belnr. "<-- überflüssig, da hier so_belnr IS INITIAL
Code: Alles auswählen.
LOOP AT itab INTO wa.
READ TABLE it_h_kna1 INTO ls_kna1 WITH KEY kunnr = wa-kunnr.
IF sy-subrc = 0.
MOVE ls_kna1-name1 TO wa-name1.
MODIFY itab FROM wa.
ENDIF.
CLEAR wa.
ENDLOOP.
LOOP AT itab INTO wa.
IF sy-subrc = 0. "<--überflüssig. wenn du hier angekommen bist, so hat itab mindestens einen Eintrag
PERFORM verzn.
ENDIF.
MODIFY itab FROM wa.
CLEAR wa.
ENDLOOP.
Erst einmal können deine IFs nicht funktionieren, da die Reihenfolge nicht stimmt:kisa hat geschrieben:Was mach ich denn falsch?
Code: Alles auswählen.
IF P_KRED = 'X'.
ELSEIF P_DEB = 'X'.
ELSEIF P_KRED = 'X' AND SO_BELNR IS INITIAL. "wird nie erreicht
ELSEIF P_DEB = 'X' AND SO_BELNR IS INITIAL. "wird nie erreicht
ELSEIF P_KRED = 'X' AND SO_VBELN IS INITIAL. "wird nie erreicht
ELSEIF P_DEB = 'X' AND SO_VBELN IS INITIAL. "wird nie erreicht
ELSE.
ENDIF.
Code: Alles auswählen.
SELECT *
FROM KNA1 JOIN LFA1 ON KNA1~LIFNR = LFA1~LIFNR
INTO CORRESPONDING FIELDS OF TABLE IT_H_LFA1
WHERE KNA1~LIFNR IN SO_LIFNR.
SELECT *
FROM LFA1 JOIN KNA1 ON LFA1~KUNNR = KNA1~KUNNR
INTO CORRESPONDING FIELDS OF TABLE IT_H_KNA1
WHERE LFA1~KUNNR IN SO_KUNNR.
Ich glaube eher du hast einen Logik-Fehler bei den Belegen bzw. den Tabellen und ihren Verknüpfungen. Mein FI-Wissen reicht auch nicht sehr weit, deshalb sind das hier eher Vermutungen.kisa hat geschrieben:Habe ich vielleicht in Loop ein Fehler?
Code: Alles auswählen.
SELECT *
FROM BSIK JOIN BSID ON BSID~BELNR = BSIK~BELNR
INTO CORRESPONDING FIELDS OF TABLE ITAB
Gegen einen Kreditor werden nur Eingangsrechnungen als Buchhaltungsbeleg erfasst, aber der Lieferant wird nicht im SD verwendet.kisa hat geschrieben: wenn p_kred angeklickt ist, soll er mir sowohl FI Belegnummer (belnr) als auch SD Belegnummer (vbeln) anzeigen, aber nur von Kreditoren.
Code: Alles auswählen.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE it_h_kna1
FROM lfa1
JOIN kna1
ON lfa1~kunnr = kna1~kunnr
WHERE lfa1~kunnr IN so_kunnr.
Code: Alles auswählen.
IF p_kred = 'X'. "Einstieg über Kreditor
* Alle Belege der Kreditoren:
SELECT *
INTO CORRESPONDING FIELDS OF TABLE itab
FROM bsik
WHERE bukrs = pa_bukrs
AND wrbtr IN so_wrbtr
AND manst IN so_manst
AND budat IN so_budat
AND belnr IN so_belnr
AND lifnr IN so_lifnr.
* Alle Belege der Debitoren, die den Kreditoren zugeordnet sind
SELECT *
APPENDING CORRESPONDING FIELDS OF TABLE itab "an die Tabelle anhängen!
FROM bsid
JOIN lfa1 "Debitoren zu den Kreditoren ermitteln
ON lfa1~kunnr = bsid~kunnr
WHERE bukrs = pa_bukrs
AND wrbtr IN so_wrbtr
AND manst IN so_manst
AND budat IN so_budat
AND vbeln IN so_vbeln
AND lifnr IN so_lifnr.
ENDIF.
Das kann man mit zwei Abfragen einbauen:kisa hat geschrieben: wenn ich p_kred anklicke UND eine Selektion angebe (z. B. zeig mir nur FI Belegnummer von bis), dann soll er mir FI Belegnummer der Kreditoren anzeigen (also SD soll man gar nicht sehen können).
Genauso auch bei einer Selektion von SD Belegnummern.
Code: Alles auswählen.
IF p_kred = 'X'. "Einstieg über Kreditor
* Alle Belege der Kreditoren:
IF so_vbeln IS INITIAL. "Aber nur wenn nicht nach SD-Belegen gefragt wurde!
SELECT *
INTO CORRESPONDING FIELDS OF TABLE itab
FROM bsik
WHERE bukrs = pa_bukrs
AND wrbtr IN so_wrbtr
AND manst IN so_manst
AND budat IN so_budat
AND belnr IN so_belnr
AND lifnr IN so_lifnr.
ENDIF.
* Alle Belege der Debitoren, die den Kreditoren zugeordnet sind
IF so_belnr IS INITIAL. "Aber nur wenn nicht nach BELNR gefragt wurde!
SELECT *
APPENDING CORRESPONDING FIELDS OF TABLE itab "an die Tabelle anhängen!
FROM bsid
JOIN lfa1 "Debitoren zu den Kreditoren ermitteln
ON lfa1~kunnr = bsid~kunnr
WHERE bukrs = pa_bukrs
AND wrbtr IN so_wrbtr
AND manst IN so_manst
AND budat IN so_budat
AND vbeln IN so_vbeln
AND lifnr IN so_lifnr.
ENDIF.
ENDIF.
bitte beschreibe es konkreter. Welche Selektionsfelder sind bei dir gefüllt, SO_VBELN, SO_BELNR, beider oder keins? Was heisst es gibt die alle SD-Belegnummern raus? Welche hätten denn rauskommen müssen? Ein (Zahlen)Beispiel zum Nachvollziehen wäre sehr hilfreichkisa hat geschrieben: ABER WIEDER DAS SELBE PROBLEM. DIE SELEKTION, DIE ICH IN SD VORNEHME, WIRD NICHT BERÜCKSICHTIGT. ES GIBT MIR ALLE SD-BELEGNUMMERN RAUS.