Ich habe eine iTab mit Belegnummern aus der VBAK (also VBAK-VBELN); ermittelt mit einem einfachen SELECT. Nun brauche ich dazu auch die Lieferung VBFA-VBELN, selektiert mit VBFA-VBELV = VBAK-VBELN.
Zusätzlich (und daran scheitere ich) brauche ich im selben SELECT noch den Transport VBFA-VBELN, selektiert mit VBFA-VBELV = VBFA-VBELN (der Lieferung).
Kurz: Wie bekomme ich in einem SELECT diese drei Informationen AUFTRAGSNUMMER, LIEFERUNG und TRANSPORT? Das muss in einem Rutsch passieren da der User nach den drei Kriterien selektieren möchte. Mich killt das zweimalige Lesen der VBFA.
Ein zweimaliges Lesen der VBFA würde z.B. so funktionieren
inner Join VBFA as a
on ...
inner Join VBFA as b
on a~VBELV = b~VBELV
...
where
a~ ...
b~ ...
Hier mal das gesamte Coding. Ich sehe meinen Fehler nicht. Eigentlich sollte das doch klappen. Hat jemand eine Idee? Ich bekomme nicht die korrekten Werte für TRANSPORT. Hmm
REPORT z_bl_temp .
TYPES: BEGIN OF lty_liste,
vbeln TYPE vbeln_va, " Auftrag
vbelv TYPE vbeln_von, " Lieferung
vbelt TYPE vbeln_von, " Transport
END OF lty_liste.
DATA: lt_liste TYPE TABLE OF lty_liste.
SELECT a~vbeln
b~vbelv
c~vbelv
FROM vbak AS a
INNER JOIN vbfa AS b ON b~vbeln = a~vbeln
INNER JOIN vbfa AS c ON c~vbelv = b~vbelv
Zu früh gefreut.
Jetzt fällt mir auf die Füße daß es zu einigen Aufträge (VBAK) keine Transporte gibt. Aber das soll vom Programm akzeptiert werden. Die Zeilen OHNE Transport werden jetzt nicht selektiert.
Und nun?
Ciao,
Burkhart
Hallo nochmal. Ich stecke nach wie vor fest. Wie würdet Ihr den Join aufbauen?
Verkaufsbeleg aus der VBAK, dazu die Nummer der LIEFERUNG ermitteln und die Nummer des TRANSPORTES. Es kann sein daß noch keine Lieferung und/oder kein Transport vorhanden ist. Dennoch sollen die Belegnummern aus der VBAK in der Treffermege stehen.
Mein aktueller Ansatz funzt nicht:
SELECT a~vbeln
b~vbelv
c~vbelv
FROM vbak AS a
INNER JOIN vbfa AS b ON b~vbeln = a~vbeln
INNER JOIN vbfa AS c ON c~vbelv = b~vbelv
INTO TABLE lt_liste.
Verkaufsbelege zu denen noch kein Transport existiert werden nicht selektiert.
Wenn man in einem Join die Daten aus der Haupttabelle immer selektiert werden sollen, egal ob in der Unterlagerten dazu passende Datensätze sind, dann ist das Schlüsselwort "left outer Join" und nicht "INNER JOIN".
SELECT VBAK.VBELN, LIPS.VGBEL, LIPS.VGPOS, LIPS.VBELN, VTTP.TKNUM
FROM VTTP RIGHT JOIN LIPS ON VTTP.VBELN = LIPS.VBELN RIGHT JOIN
VBAK ON LIPS.VGBEL = s01_VBAK.VBELN
WHERE VBAK.VBELN Like '00300*'
Ich habe gerade keinen Zugriff aufs System, deswegen den Select mal so von Hand aufgebaut. Das VBAK.VBELN Like '00300*' entspricht bei uns der Selektion von Lieferplänen (Tranakion VA32).
Da muss man näturlich noch einiges an Daten überlesen. So spontan Aufträge, die direkt fakturiert werden, Korrekturlieferungen aus Lieferplänen, ...
Bei den Eingrenzungen für die LIPS und die VTTP hängt das glaube ich vom ABAP Stand ab, ob da auch Eingrenzungen möglich sind.
Mit einem schönen Select wird das auf jeden Fall nichts.
Ist auch die Frage, was möchtest du mit den Daten machen? Wenn du rausbekommen möchtest, ob zu Auslieferungen Transporte erstellt worden sind, dann kannst du ja zum Beispiel Auslieferungen der letzten 4 Wochen über das Anlagedatum einer Lieferung selektieren und dann mit einem überschaubaren Datenhaufen weitermachen.
So etwas ähnliches haben wir bei uns mal gemacht, um den Versand darauf hinzuweisen, dass die zum Beispiel noch keinen DFÜ-Warenbegleitschein erstellt haben. Die bekommen da bei uns eine Hinweis-Email.