SAP Jobsuche bei DV-Treff
Leutnant
  • Leutnant
  • SAP Forum - User Thema Starter
vor 9 Jahre
Hallo Experten,

für eine monatliche Reporting versuche ich ein Query oder Abfrage zu basteln. Zuerst wollte ich es über Quickviewer versuchen. Dann aber habe ich gesehen das es mit 6-7 Tabellen dies nicht funktioniert bzw. keine Daten angibt (da es höchstwahrscheinlich die passende Felder nicht findet). Nun wollte ich zu Forenexperten fragen, ob man ein alternative Vorgang versuchen kann oder doch in ABAP programmieren muss?

Zur Info: Im Unternehmen haben wir kein SAP BW System und bei ABAP habe ich leider keine vertiefte Kenntnisse.

Die Tabellen sind VBAK, VBAP, VBEP, LIKP, MKPF, MARC und KNA1

Was meint Ihr dazu, kann man es irgendwie anders hinkriegen?

Danke für eure Antworten.

Grüße

Leutnant

wreichelt
vor 9 Jahre
Hallo,

ich verstehe nicht was bei dem Join über die Tabellen kein Ergebnis kommen soll.

VBAK > VBAP

VBAK > KNA1

VBAP > LIKP über legt outer Join (es muss ja noch keine Luferung vorhanden sein)

VBAP > MARC

MKPF ?? Bedeutung ?

Gruß

Wolfgang

Leutnant
  • Leutnant
  • SAP Forum - User Thema Starter
vor 9 Jahre
Zitat von: wreichelt 

Hallo,

ich verstehe nicht was bei dem Join über die Tabellen kein Ergebnis kommen soll.

VBAK > VBAP

VBAK > KNA1

VBAP > LIKP über legt outer Join (es muss ja noch keine Luferung vorhanden sein)

VBAP > MARC

MKPF ?? Bedeutung ?

Hallo Wolfgang,

also die folgende Felder brauche ich für Liefertreue monatlich zu erstellen. Diese sollte eine Liste Einzelanschreibung von Lieferungen anzeigen.

Material Nr. - Bezeichnung - Kundenauftrags-Nr. - Lieferschein-Nr. - Kunde (Text) - 1. bestätigter Termin - n. bestätigter Termin - Ausliefertermin - Lieferscheinerstellungsdatum

Und diese muss ich dann nach folgende Kriterien auswerten: Nach Produktgruppe, Disponent, Verkäufer, Produkthierarchie.

Sobald ich ein outer Join von VBAK mache, bekomme ich die Daten nur bis an die 3 Tabelle. Mir fehlen das Vertriebswissen wie ich diese Felder verknüpfen soll. Wäre so eine Tabelle zu erstellen mit dem SQVI machbar?

Diese sind dann folgende Felder:

VBAK > VKORK, VKGRP, VBELN, AUDAT

VBAP > PRODH, MATNR, ARKTX

KNA1 > NAME1, STRAS, PSTLZ, ORT01

VBEP > EDATU

MARC > DISPO

LIKP > VBELN (kann auch MKPF > XBLNR verwendet werden)

MKPF > BUDAT, BLDAT (Hier brauche ich die WA-Termin und Lieferschein Erstellungsdatum)

Gruß

Leutnant

wreichelt
vor 9 Jahre
Hallo,

die Verknüpfungen von VBAK-VBAP nach KNA1 und MARC sind ja normale JOins, die Verknüpfung zu VBEP ist auch kein Problem obwohl hier mehr als ein Treffer pro VBAP-Position möglich ist.

Die Verknüpfung zu LIKP/LIPS ist ein outer Join in der LIKP gibt's ja auch das Feld zum Vorgänger-Beleg.

MKPF ? hier kenne ich mich nicht aus.

Gruß

Wolfgang

Leutnant
  • Leutnant
  • SAP Forum - User Thema Starter
vor 9 Jahre
Zitat von: wreichelt 

Hallo,

die Verknüpfungen von VBAK-VBAP nach KNA1 und MARC sind ja normale JOins, die Verknüpfung zu VBEP ist auch kein Problem obwohl hier mehr als ein Treffer pro VBAP-Position möglich ist.

Die Verknüpfung zu LIKP/LIPS ist ein outer Join in der LIKP gibt's ja auch das Feld zum Vorgänger-Beleg.

MKPF ? hier kenne ich mich nicht aus.

Hallo Wolfgang,

danke vorerst für deine Antworten.

Aber leider funktioniert es nicht. Was mache ich den falsch?

Habe genau so gemacht wie geschrieben.

Also den VBAK => VBAP => KNA1 => MARC mit normalen Join verbunden.

Diese Felder habe ich dann ausgewählt: VKORG, VKGRP, AUDAT, VBELN, PRODH, ARKTX, MATNR, NAME1, STRAS, PSTLZ, ORT01 und DISPO.

Und wenn ich nach ein Zeitraum eingebe, bekomme ich eine Meldung, dass es keine Daten verfügbar gibt.

Obwohl ich es die Tabellen mit SE16 anschaue und da schon welche Daten sehe.

Irgendwie funktioniert es nicht, wollte am Anfang nicht mit allen Tabellen es versuchen. Dennoch bekomme ich keine Ergebnisse.

Gruß

Leutnant

daytona80
vor 9 Jahre
Hi,

vielleicht auch dies:

In der Selektion die maximale Trefferanzahl raufsetzen. (Hat mich auch mal fast zum Verzweifeln gebracht 🙂 )

Berechtigungen auf ALLE verbauten Tabellen vorhanden?


Vielen Dank und viele Grüße
Leutnant
  • Leutnant
  • SAP Forum - User Thema Starter
vor 9 Jahre
Zitat von: daytona80 

Hi,

vielleicht auch dies:

In der Selektion die maximale Trefferanzahl raufsetzen. (Hat mich auch mal fast zum Verzweifeln gebracht 🙂 )

Berechtigungen auf ALLE verbauten Tabellen vorhanden?

Hi Daytona,

was meinst du mit Selektion maximale Trefferanzahl?

Ja ich habe bei alle verbauten Tabellen entsprechende Berechtigungen.

Mit SE16 sehe ich ja alle Inhalte der Tabellen.

Weitere Lösungen?

ereuss
vor 9 Jahre
Hi,

wenn keine Daten selektiert werden, dann liegt das in der Regel an den Joins zwischen den Tabellen. Welche Tabellen hast Du denn über welche Felder miteinander verknüpft ?

Gruss

Eugen

newgui
vor 9 Jahre
Hallo Leutnant,

vielleicht bekommst du kein Ergebnis, weil du nicht die likp mit der vbap verknüpfen musst sondern die lips. In der lips wird der Vorgängerbeleg auf Positionsbasis angezeigt. Also so verknüpfen

vbap-vbeln -> lips-vgbl

vbap-posnr -> lips-vgpos

Dann kannst du zur lips ein left outer join machen. Du musst danach die likp aber als Zusatztabelle einfügen -> im Infoset mittels Zusätze -> sonst verlierst du wieder das left outer join.

Für was du die mkpf brauchst ist mir ein Rätsel. Du hast alles was du brauchst in den anderen Tabellen. Lieferdatum findest du in der likp und Erstellungsdatum auch.

Wenn du jetzt alles folgendermaßen verknüpfst sollte es eig. funktionieren.

VBAK - VBAP

vbak-vbeln -> vbap-vbeln

VBAP - VBEP

vbap-vbeln -> vbep-vbeln

vbap-posnr -> vbep-posnr

VBAK - KNA1

(Wenn du nur den Auftraggeber brauchst - sonst musst du die Tabelle vbpa dazwischen schalten)

vbak-kunnr -> kna1-kunnr

VBAP - MARC

vbap-matnr -> marc-matnr

vbap-werks -> marc-werks

VBAP - LIPS

wie oben beschrieben

LIPS - LIKP

lips-vbeln - likp-vbeln

mfg

newgui

Leutnant
  • Leutnant
  • SAP Forum - User Thema Starter
vor 9 Jahre
Zitat von: newgui 

vielleicht bekommst du kein Ergebnis, weil du nicht die likp mit der vbap verknüpfen musst sondern die lips. In der lips wird der Vorgängerbeleg auf Positionsbasis angezeigt. Also so verknüpfen

vbap-vbeln -> lips-vgbl

vbap-posnr -> lips-vgpos

Dann kannst du zur lips ein left outer join machen. Du musst danach die likp aber als Zusatztabelle einfügen -> im Infoset mittels Zusätze -> sonst verlierst du wieder das left outer join.

Für was du die mkpf brauchst ist mir ein Rätsel. Du hast alles was du brauchst in den anderen Tabellen. Lieferdatum findest du in der likp und Erstellungsdatum auch.

Wenn du jetzt alles folgendermaßen verknüpfst sollte es eig. funktionieren.

VBAK - VBAP

vbak-vbeln -> vbap-vbeln

VBAP - VBEP

vbap-vbeln -> vbep-vbeln

vbap-posnr -> vbep-posnr

VBAK - KNA1

(Wenn du nur den Auftraggeber brauchst - sonst musst du die Tabelle vbpa dazwischen schalten)

vbak-kunnr -> kna1-kunnr

VBAP - MARC

vbap-matnr -> marc-matnr

vbap-werks -> marc-werks

VBAP - LIPS

wie oben beschrieben

LIPS - LIKP

lips-vbeln - likp-vbeln

Hallo newgui,

vorerst danke ich für dein Antwort. Also dein Antwort hat mir fast die richtige Ergebnisse geliefert. Außer 2-3 Punkte, die ich vielleicht nicht richtig verstanden habe, sieht es relativ gut aus.

Zitat von: newgui 

vbap-vbeln -> lips-vgbl

1- Dieses Feld existiert bei der Tabelle LIPS nicht, meintest du vielleicht den "VGBEL-Belegnummer des Vorlagebelegs"? Wenn ja habe ich den Sinn nicht verstanden. Als Ergebnis bei diesem Feld bekomme ich die gleiche Werte wie die Belegnummer von VBAK.

2- Bei der VBEP-EDATU Lieferdatum habe ich den erst bestätigten Termin und dann die n bestätigter Termin (also 2 Termine) kann man diese Separat in eine andere Spalte zeigen?

Zitat von: newgui 

Für was du die mkpf brauchst ist mir ein Rätsel. Du hast alles was du brauchst in den anderen Tabellen. Lieferdatum findest du in der likp und Erstellungsdatum auch.

3- Die MKPF brauche ich für das Feld BUDAT Ausliefertermin (also die tatsächliche Ausgangstermin). Diese kann ich bei den anderen Tabellen nicht finden.

4- Außerdem brauche ich noch 2 zusätzliche Felder um die Differenz von 1. bestätigter Termin und n. bestätigter Termin als Tage anzuzeigen.

(Also n. bestätigter Termin - 1. bestätigter Termin)

Und Wertung in Bezug auf Liefertreue z.B. Wenn Differenz 0 ist dann ist es 100% wenn größer 0 dann ist es 0%.

Vielen Dank

Leutnant

newgui
vor 9 Jahre
Hallo Leutnant,

freut mich, dass es bis auf 2-3 Dinge klappt.

1. du hast recht, das Feld heißt lips-vgbel (Tippfehler meinerseits)

Ja, das Ergebnis ist das der Kundenauftrag aus der VBAK. Du brauchst aber diesen als Verknüpfung zur vbap od. vbak, je nachdem. Über die likp, kannst du keine Verknüpfung herstellen.

2. also bei uns gibt es immer nur einen bestätigten Termin, wir arbeiten nicht mit Einteilungen. Aber es gibt trotzdem auch bei uns mehrere Einteilungsnrn. je Pos. in der Edatu. Um hier die richtige rauszufiltern muss man alles anzeigen wo die Bestätigte Menge > 0 ist. Wenn man natürlich mit mehreren Einteilungen arbeitet wirds schwierig. Nebeineinander (soferne ich das richtig verstehe) würde nur über ein Lokales Feld gehen aber selbst wenn man es dann als Statistik anzeigst bekommst du immer 2 Datensätze.

3. Die mkpf brauchst du eigentlich nicht. Das Ist Lieferdatum findest du auch in der likp - das Feld heißt IstWA Dat (WADAT_IST).

4. die zusätzlichen Felder kannst du direkt im query über lokale Felder definieren. Hier ein kleines Video dazu. Da kannst du sowohl die Differenztage berechen. bzw. auch gleich als Prozent ausgeben.

http://fico-forum.de/demo/query_lokales_feld.php 

Ich hoffe, dass damit die 2-3 Punkte geklärt sind.

mfg

newgui

newgui
vor 9 Jahre
Hallo Leutnant.

Noch ein Nachtrag zu Punkt 2, eigentlich sollte es ja ok sein, wenn jede Einteilung zu einer Position angezeigt wird. Du willst diese ja auch berechnen und in die Lieferperformance mit einfließen lassen. Aber vielleicht habe ich den Punkt deinerseits auch falsch verstanden 🙂.

mfg

newgui

Leutnant
  • Leutnant
  • SAP Forum - User Thema Starter
vor 9 Jahre
Zitat von: newgui 

2. also bei uns gibt es immer nur einen bestätigten Termin, wir arbeiten nicht mit Einteilungen. Aber es gibt trotzdem auch bei uns mehrere Einteilungsnrn. je Pos. in der Edatu. Um hier die richtige rauszufiltern muss man alles anzeigen wo die Bestätigte Menge > 0 ist. Wenn man natürlich mit mehreren Einteilungen arbeitet wirds schwierig. Nebeineinander (soferne ich das richtig verstehe) würde nur über ein Lokales Feld gehen aber selbst wenn man es dann als Statistik anzeigst bekommst du immer 2 Datensätze.

Hallo newgui,

doch du hast es eigentlich schon richtig verstanden. Ich wollte die 2 (oder auch mehr) Datums nicht in eine Spalte sondern separate Spalte anzeigen, da die Differenz zwischen den beiden Terminen unser wichtigste Ergebnis sein sollte.

Diese Termine sind aber leider in mehreren Zeilen dargestellt und es wird dann wirklich schwierig wenn ich immer 2 Datensätze in beiden Spalten bekomme.

Zitat von: newgui 

Noch ein Nachtrag zu Punkt 2, eigentlich sollte es ja ok sein, wenn jede Einteilung zu einer Position angezeigt wird. Du willst diese ja auch berechnen und in die Lieferperformance mit einfließen lassen. Aber vielleicht habe ich den Punkt deinerseits auch falsch verstanden 🙂.

Also hier meinte ich ein Position mit mehreren Lieferdatum bei der Einteilungen.

Beispiel: ich habe ein Material X von einer Menge 1440 ST zu liefern. Bei der ersten Lieferdatum 04.07.2015 liefere ich 1200 ST und bei der zweiten Lieferdatum 11.07.2015 liefere ich den Rest 240 ST. Diese 2 Termine sind unter Einteilungen und die möchte ich separat darstellen können bzw. danach ich diese in der Spalte Differenz berechnen kann.

MfG

Leutnant

wreichelt
vor 9 Jahre
Hallo Leutnant,

es Können ja noch mehr als 2 Einteilungen vorhanden sein.

Das ist aber kein Problem, du bekommst ja auch mehrere Zeilen gelistet.

Im Infoset kannst du ja ein Zusatzfeld definieren und dort die Tage berechnen.

Gruß

Wolfgang

newgui
vor 9 Jahre
Hallo Leutnant,

also jetzt verstehe ich dann bald gar nichts mehr. Willst du nun die Differenz zwischen Einteilung und Lieferdatum oder zwischen den einzelnen Einteilungen berechnen.

Also so

Einteilung1 / Einteilung2 / Differenz Eint.1-Eint2

oder so

Einteilung1 / IstWadat / Differen Eint-IstWadat

Einteilung2 / IstWadat / Differen Eint-IstWadat

Das 2te kommt sowiso standardmäßig heraus.

Bei einem bin ich mir aber nicht sicher wie das läuft. Die Verknüpfung zwischen lips und vbap/vbep erfolgt normalerweise auf Positionsebene. Da wir nicht mit Einteilungen arbeiten kann ich nicht sagen wie sich das verhält wenn es innerhalb einer Position verschiedene Einteilungen und Mengen gibt?

Und hier nochmal der Hinweis. Du brauchst kein Zusatzfeld im Infoset (Programmierung). Das kannst du auch auf sehr einfache Weise per lokalem Feld im query lösen. Den link zum Video hatte ich ja letztens angehängt.

mfg

newgui

Leutnant
  • Leutnant
  • SAP Forum - User Thema Starter
vor 9 Jahre
Zitat von: wreichelt 

es Können ja noch mehr als 2 Einteilungen vorhanden sein. Das ist aber kein Problem, du bekommst ja auch mehrere Zeilen gelistet. Im Infoset kannst du ja ein Zusatzfeld definieren und dort die Tage berechnen.

Hallo Wolfgang,

meinst du, dass man die 2 Einteilungen untereinander mit ein Zusatfeld den Differenz berechnen kann? Wenn ja wie würde es gehen?

MfG

Leutnant

Leutnant
  • Leutnant
  • SAP Forum - User Thema Starter
vor 9 Jahre
Zitat von: newgui 

also jetzt verstehe ich dann bald gar nichts mehr. Willst du nun die Differenz zwischen Einteilung und Lieferdatum oder zwischen den einzelnen Einteilungen berechnen.

Also so

Einteilung1 / Einteilung2 / Differenz Eint.1-Eint2

oder so

Einteilung1 / IstWadat / Differen Eint-IstWadat

Einteilung2 / IstWadat / Differen Eint-IstWadat

Das 2te kommt sowiso standardmäßig heraus.

Hallo newgui,

ja, das erste Differenz wollte ich haben. Für uns ist es wichtig die Differenz zwischen den erst bestätigte Termin und n. bestätigte Termin zu finden.

Zitat von: newgui 

Bei einem bin ich mir aber nicht sicher wie das läuft. Die Verknüpfung zwischen lips und vbap/vbep erfolgt normalerweise auf Positionsebene. Da wir nicht mit Einteilungen arbeiten kann ich nicht sagen wie sich das verhält wenn es innerhalb einer Position verschiedene Einteilungen und Mengen gibt?

Genau dies ist mein Problem, die Tabelle erfolgt auf Positionsebene und diese Termine brauche ich separat in einer Spalte damit ich die berechnen kann. Kann man diese Termine mit ein lokalem Feld anzeigen lassen oder wird da Programmieraufwand benötigt?

MfG

Leutnant

newgui
vor 9 Jahre
Hallo Leutnant,

ok, jetzt weiß ich was du willst. Ich fürchte, dass du für diese Anforderung eine Programmierung benötigst.

Das Problem ist nicht unbedingt das gegenüberstellen von 2 Einteilungen sondern eher die 1:n Beziehung.

Man könnte zB die vbep an die vbap hängen wie gehabt, dann könnte man aus der VBEP eine Alias Tabelle (zB VBEP_1) machen und diese dann mit left outer join an die vbep hängen.

Man müsste dann für jede mögliche Einteilung eine Alias Tabelle anhängen, sprich wenn es Möglich ist, dass es 5 Einteilungen gibt müsstest du die VBEP 5x einfügen. Man könnte rein theoretisch dann über lokale Felder noch definieren aus welcher vbep welche Einteilung geschrieben werden muss und dann könnte man es wahrscheinlich sogar rechnen.

Aber erstens wird es relativ kompliziert, zweitens weiß ich nicht ob es tatsächlich so funktioniert und drittens müsstest du schon ziemlich gute Kentnisse mit Infosets und queries haben. Also ich würde vorschlagen programmieren oder du exportierst die Datei wie sie ist ins excel und arbeitest dort weiter.

mfg

newgui

Leutnant
  • Leutnant
  • SAP Forum - User Thema Starter
vor 9 Jahre
Zitat von: newgui 

Man könnte zB die vbep an die vbap hängen wie gehabt, dann könnte man aus der VBEP eine Alias Tabelle (zB VBEP_1) machen und diese dann mit left outer join an die vbep hängen.

Man müsste dann für jede mögliche Einteilung eine Alias Tabelle anhängen, sprich wenn es Möglich ist, dass es 5 Einteilungen gibt müsstest du die VBEP 5x einfügen. Man könnte rein theoretisch dann über lokale Felder noch definieren aus welcher vbep welche Einteilung geschrieben werden muss und dann könnte man es wahrscheinlich sogar rechnen.

Hallo newgui,

die Alias Tabelle habe ich angelegt und per outer join auch verknüpft. Diese habe ich an vbep angehängt, dazu habe ich das Feld Einteilungsnummer genommen. Nun habe ich 6 mal die gleiche Lieferdatum. über lokale Felder habe ich es ausprobiert aber wie beschrieben ist es wirklich zu kompliziert und habe keine logische Ergebnisse bekommen.

Dazwischen habe ich mir überlegt die Alias Felder mit dem Einteilungsnummer zu verknüpfen. Genau gesagt habe ich mir so was gedacht:

Einteilungsnr. 1 = Lieferdatum 1

Einteilungsnr. 2 = Lieferdatum 2

Einteilungsnr. 3 = Lieferdatum 3

Einteilungsnr. 4 = Lieferdatum 4

Einteilungsnr. 5 = Lieferdatum 5

Einteilungsnr. 6 = Lieferdatum 6

Alle Lieferdatums möchte ich mit lokalen Felder definieren. Dabei sollte die Datum nur einmal bei der zutreffende Einteilungsnr. vorkommen. Ob es funktionieren wird weiß ich nicht aber was anderes fällt mir nicht ein!

Da wäre auch möglich diese Spalten separat anzeigen zu lassen. Das Problem ist, wie ich das Logik herstelle weiß ich nicht! Da muss ich einzeln ausprobieren und einzeln anschauen ob es funktioniert.

Wenn für die Logik eine Idee gibt, wie ich es umsetzen kann, könnte ich viel Zeit sparen. Auf die schnelle fällt mir ein anderen Weg nicht ein.

Zitat von: newgui 

Also ich würde vorschlagen programmieren oder du exportierst die Datei wie sie ist ins excel und arbeitest dort weiter.

Wenn dies nicht funktioniert, muss ich wie gesagt über Excel weiterarbeiten.

Vielen Dank nochmal

MfG

Leutnant

newgui
vor 9 Jahre
Hallo Leutnant,

habs jetzt mal auf die kurze getestet mit vbap - vbep - vbep_1

Habe einige Belege wo ich zumindest 2 Einteilungen habe.

Als Ergebnis bekomme ich jetzt folgendes

Auft. Pos Ein1 Ein2

xxxx 10 001 001

xxxx 10 001 002

xxxx 10 002 001

xxxx 10 002 002

Leider ist das jetz ein wenig schwierig darzustellen und ich kann auch nur mit 2 Einteilungen testen.

Jetzt hast du praktisch je Position statt 2 Zeilen, 4 Zeilen.

Jetzt kanns du über lokale Felder definieren:

Ein1 = vbep / Ein2 = vbep_1 usw.

Lokales Feld für Datum je Einteilung in sep. Spalten

Lokales Feld Datum 1 Einteilung

Bedingung: Ein1 = 001

Formel: Datum Ein1

Lokales Feld Datum 2 Einteilung

Bedingung: Ein2 = 002

Formel: Datum Ein2

usw.

Lokales Feld zum Selektieren

Bedingung: Datum Ein1 <> '' OR Datum Ein2 <> '' or usw.

Formel: 'x'

Dieses lokale Feld kannst du als Selektion definieren und über das "x" bekommst du nur mehr jene raus, die von den Einteilungen her ungleich sind.

Weiß nicht wie du es dann rechnen möchtest aber jetzt musst du vermutlich nochmal 5 lokale Felder anlegen für die jew. Performance oder Differenz.

So würde ich es zumindest machen. Aber ich habe inzwischen auch schon 8 Jahre Erfahrung mit queries in jeder erdenklichen Ausprägung 🤤

Du kannst es gerne noch so versuchen. Wenn es nicht funktioniert würde ich dir raten den Weg über excel oder die IT zu gehen.

mfg

newgui