SAP Jobsuche bei DV-Treff
RTK241
  • RTK241
  • SAP Forum - User Thema Starter
vor 12 Jahre
Hallo,

gibt es eine Möglichkeit den letzten Wareneingang im MM zu finden? Die MB51 funktioniert, kann aber nicht ausgelesen werden. Wir benötigen die Info für einen Query. Leider finden wir Sie nicht.

Förderer

Saute
vor 12 Jahre
Hallo,

alle Materialbelege mit der Bewegungsart findest du in der Tabelle MSEG.

Hier einschänken auf BWA 101 und dann das mit dem höchsten Datum suchen.

Gruß

Saute


Leiter Digitale Prozessoptimierung & IT

Anwendungsbetreuer PP / PM / PDM / VC / G.I.B DC

SAP ECC 6.0 EHP8

d8n8
  • d8n8
  • SAP Forum - Neuling
vor 2 Jahre
Hallo Saute,

ich finde es immer wieder interessant, dass im SAP Umfeld die gleichen Fragen auch 10 Jahre später noch interessant sind...

Ich brauche auch den letzten Wareneingang für eine Query und die Verknüpfung auf die MSEG bringt im ersten Schritt logischerweise alle Wareneingänge zu dem Material. Kannst Du mir bitte genauer erklären wie ich der Query sage, dass ich nur den mit dem höchsten Datum haben möchte?

Danke!

Dana

wreichelt
vor 2 Jahre
Hallo Dana,

das wird nur über eine Zusatzcodierung gehen, Beispiel:

select * from MSEG

up to 1 rows

where .....

order by budat descending.

Gruß Wolfgang

d8n8
  • d8n8
  • SAP Forum - Neuling
vor 2 Jahre
Hallo Wolfgang,

ja, ich stelle mir vor, dass ich ein lokales Feld in der Query definiere (LASTVE), das wie die LIFNR in MSEG ist. Dann würde ich gern in der MSEG für die Bewegungsart (BWART) 101 die größte Materialbelegnummer (MBLNR) finden und die Lieferantennummer (LIFNR) als Wert für dieses lokale Feld in der Query zurückgeben.

Ich hab mich jetzt den ganzen Vormittag damit abgequält und die verrücktesten Fehlermeldungen erhalten. Der letzte Versuch sieht so aus und beschwert sich darüber, das die interne Tabelle GT_MSEG keine Kopfzeile hat (verstehe ich schon nicht, denn sie ist wie MSEG definiert und sollte eine haben?) und dass ich mit Index oder Key zugreifen soll. Ich will aber einfach nur den ersten Eintrag haben, da ich (hoffentlich) vorher absteigend sortiert habe.

Vermutlich seht Ihr am Code, dass ich kein ABAP-Profi bin...

Es wäre super, wenn mir jemand den Code korrigieren oder den richtigen effizienteren Ansatz zur Verfügung stellen könnte.

TABLES: MSEG.

DATA: GT_MSEG TYPE STANDARD TABLE OF MSEG.

SELECT MBLNR, LIFNR

FROM MSEG

into table @GT_MSEG

WHERE MATNR = @VBAK-ZZVUMATNR and BWART = 101

ORDER BY MBLNR DESCENDING.

READ TABLE GT_MSEG.

MOVE LIFNR TO LASTVE.

Danke!

wreichelt
vor 2 Jahre
Hall,

Table Mseg.

Select * from mseg up to 1 rows

WHERE MATNR = @VBAK-ZZVUMATNR and BWART = 101

order by budat descending..

In der Tabelle Mseg sind jetzt auch die Felder Lifnr und malnehmt.

Warum @Vbak-zzumatnr das mit dem @ verstehe ich nicht

Gruß Wolfgang

d8n8
  • d8n8
  • SAP Forum - Neuling
vor 2 Jahre
Okay, fertig.

Die Tabellendeklaration musste global erfolgen, nicht unter "Coding zum Feld". Sonst gabs einen Dump mit der Beschwerde über doppelte Tabellendefinition.

Für den Fall, dass der letzte Wareneingang aus der Eigenfertigung ist und keine Lieferantennummer hat, hab ich das CLEAR gesetzt, damit der Wert der vorherigen Zeile nicht übertragen wird.

Die @-Zeichen kamen daher, dass einer der Fehlermeldungen sagte: wenn OpenSQL Statements verwendet werden (von denen ich nicht wusste, dass ich welche verwendet hätte...), sollen sie bitte konsequent verwendet werden und ich solle die Hostvariablen bitte mittels @ escapen.

Ja...

Letzten Endes hat dieser Code-Schnipsel zum Erfolg geführt. Vielleicht hilft er noch jemandem:

Das Zusatzfeld heißt LASTVENDOR. Unter Zusätze im Kontextmenü dieses Feldes beim Punkt Coding steht: "TABLES: MSEG."

Im "Coding zum Feld":

CLEAR LASTVENDOR.
  DATA: VBAK-ZZUMATNR.
  SELECT * FROM MSEG UP TO 1 ROWS
  WHERE WERKS = 1000 AND MATNR = VBAK-ZVUMATNR AND BWART = 101
  ORDER BY BUDAT_MKPF DESCENDING.
ENDSELECT.

MOVE MSEG-LIFNR TO LASTVENDOR.