Hallo,
als Neuling in der Programmierung habe ich auch hier im Forum schon einiges gelesen, aber jetzt schwirrt mit der Kopf mit select, join, wa und itab.
Vielleicht kann mir jemand bei meinem Problem helfen.
Ich möchte eine Auswertung über Debitoren erstellen und in einer Liste ausgeben.
Diese soll aus KNA1 Debi-Nummer(KUNNR), Name (NAME1), Straße (STRAS), Ort (ORT01) haben.
Wo vorhanden soll aus KNBK Länderschlüsssel (BANKS), Bankschlüssel (BANKL) und Kontonummer (BANKN) dazu kommen.
In KNA1 und KNBK habe ich KUNNR als eindeutigen Schlüssel. Es gibt immer nur eine Bankverbindung pro Debitor.
Und wo vorhanden soll aus TIBAN noch die IBAN (IBAN)dazu kommen.
Eine eindeutige IBAN ergibt sich aus der Kombination von BANKS und BANKL und BANKN, die in KNBK und TIBAN enthalten sind.
Wo keine Bankdaten vorhanden, soll aber die Adresse ausgegeben werden.
Wie soll ich den Report aufbauen?
Bin für jede Hilfe dankbar.
thr-hn
Vielen Dank Alexander!
Leider hatte ich den Eintrag nicht gefunden.
Er hat mir sehr weitergeholfen!
Ein Problem habe ich noch.
In KNA1 sind viel mehr Einträge als in KNBK. D.h. wir haben etliche Debitoren ohne Bankverbindung.
Diese Debitoren gehen bei meinem Report verloren.
Folgendes Coding habe ich:
LOOP AT gt_debitoren INTO wa_debitoren.
WRITE:/ wa_debitoren-kunnr,
wa_debitoren-name1(25),
wa_debitoren-name2(20),
wa_debitoren-stras(20),
wa_debitoren-pstlz,
wa_debitoren-ort01(20).
"zum Lieferanten die Bankverbindung lesen
SELECT * FROM knbk INTO wa_knbk WHERE kunnr = wa_debitoren-kunnr.
WRITE: wa_knbk-banks,
wa_knbk-bankl(12),
wa_knbk-bankn.
ENDSELECT.
IF sy-subrc <> 0.
WRITE: ' keine Bankverbindung gepflegt'. NEW-LINE.
ENDIF.
"jetzt noch die IBAN dazu lesen
select * from tiban into wa_tiban where banks = wa_knbk-banks
and bankl = wa_knbk-bankl
and bankn = wa_knbk-bankn.
write: wa_tiban-iban(25).
new-line.
endselect.
ENDLOOP.
Was muss ich ändern, damit auch die Debitoren ohne Bankverbindung und im zweiten Schritt die Debitoren mit Bank aber ohne IBAN ausgegeben werden?
Danke
thr-hn
um die Frage zu beantworten müsste man mehr von deinem Code sehen. Interessant wäre die Stelle an der die interne Tabelle gt_debitoren gefüllt wird.
Vor der Zeile SELECT * FROM knbk INTO wa_knbk würde ich noch ein CLEAR wa_knbk. setzen, um sicher zu sein, dass in diesem Workarea keine Werte aus der vorherigen Schleife übriggeblieben sind
Ich bin dem verlinkten Beispiel gefolgt und habe folgende Defintion getroffen:
START-OF-SELECTION.
"Debitroen lesen: Ident, Name, Adresse...
"nur Debis, die nicht zum Löschen vorgemerkt sind
SELECT kna1~kunnr kna1~name1 kna1~name2
kna1~ort01 kna1~pstlz kna1~stras
FROM kna1 JOIN knbk ON kna1~kunnr = knbk~kunnr
APPENDING table gt_debitoren
WHERE kna1~kunnr IN o_kunnr
AND kna1~loevm = ''.
...dann kommt der Loop.
und genau hier liegt der Hund begraben. Bei dem Select liest du ja nur Felder aus der KNA1, schränkst diese aber gleichzeitig über einen Join auf Datensätze ein, welche ebenfalls in der KNBK enthalten sind. Lass folgenden Part einfach weg: JOIN knbk ON kna1~kunnr = knbk~kunnr.
Folgende Benutzer bedankten sich beim Autor Alexander D. für den Beitrag: thr-hn