SAP Jobsuche bei DV-Treff
Sacor321
  • Sacor321
  • SAP Forum - Neuling Thema Starter
vor 5 Jahre
Hallo zusammen,

vorab ich hab eigentlich keine ABAP-Kenntnisse und keine Entwicklerrechte.

Zu meinem Problem:

Ich würde gerne eine Liste erstellen in der alle Materialien einer ATP-Prüfung unterzogen werden und mir diese Ergebnis dargestellt wird.

Ich habe in der SQ02 eine InfoSet angelegt, wobei ich die Tabellen MARA (KEY:MATNR) mit MARC (KEY:MATNR, WERKS) und MARD verbunden habe.

Daraufhin habe ich folgendes Coding eingefügt:

Abschnitt DATA:

data:  iwmdvsx type table of bapiwmdvs with header line,
       iwmdvex type table of bapiwmdve with header line.
Abschnitt Satzverarbeitung:

parameters: p_matnr type mara-matnr,
            p_werks type marc-werks,
            p_meins type mara-meins.
p_matnr = mara-matnr.
p_werks = marc-werks.
p_meins = mara-meins.

CALL FUNCTION 'BAPI_MATERIAL_AVAILABILITY
     EXPORTING
       PLANT      = p_werks
       MATERIAL   = p_matnr
       UNIT       = p_meins
*      CHECK_RULE               =
*      STGE_LOC                 =
*      BATCH                    =
*      CUSTOMER                 =
*      DOC_NUMBER               =
*      ITM_NUMBER               =
*      WBS_ELEM                 =
*      STOCK_IND                =
*      DEC_FOR_ROUNDING         =
*      DEC_FOR_ROUNDING_X       =
*      READ_ATP_LOCK            =
*      READ_ATP_LOCK_X          =
*      MATERIAL_EVG             =
*      SGT_RCAT                 =
*   IMPORTING
*           ENDLEADTME               =
*           AV_QTY_PLT               = d_WKBST
*           DIALOGFLAG               =
*     RETURN    = ls_return
   TABLES
     wmdvsx     = iwmdvsx
     wmdvex     = iwmdvex.
check sy-subrc = 0.

Zusätzlich habe ich Zusatzfeld angelegt "ATP" mit einer Like-Reference MARD-LABST.

Leider weiß ich nicht, wie ich SAP beibringen kann mir alle Materialien auszulesen mit WERK und EINHEIT. (Ich will hier die Standard ATP-Prüfung machen also muss ich die Prüfregel A nicht mit übergeben und auch keine Menge oder Zeitpunkte)

Diese im Anschluss in einer temporäre Tabelle zu packen und danach auf diese Liste das 'BAPI_MATERIAL_AVAILABILITY'auszuführen und diese Ergebnisse aus AV_QTY_PLT in meiner Variable "ATP" zu speichern.

Kann mir jemand Schritt für Schritt sagen wie ich sowas machen könnte?

Vielen Dank im Voraus an alle Gurus.

Grüße

Sacor

wreichelt
vor 5 Jahre
Hallo,

wenn du eine query (SQ01) dazu erstellt und die Felder Werk, Materialnummer als Selektionsfeld definierst

dann läuft die Query ja über die ausgewählten Werk/Materialien.

Alle benötigten Listfelder stehen ja zur Verfügung in der Query.

Zur SQ02: die Selektionsfelder unter Parameters sind überflüssig, weil ja in der MARA bzw. MARC schon vorhanden. In der Funktion 'CALL … ' müßten dann eben MARA-MATNR, MARC-WERKS und MARA-MEINS zugeordnet werden.

Hoffe ich kann ein wenig helfen

Gruß Wolfgang

Sacor321
  • Sacor321
  • SAP Forum - Neuling Thema Starter
vor 5 Jahre
@wreichelt:

Hallo Wolfgang,

also ich habe die Parameteranweisung rausgenommen

und beim Exporting der Funktion die Korrespondierenden Felder der MARA und MARC angegeben.

CALL FUNCTION 'BAPI_MATERIAL_AVAILABILITY'
     EXPORTING
       PLANT      = marc-werks
       MATERIAL   = mara-matnr
       UNIT       = mara-meins
*      CHECK_RULE               =
*      STGE_LOC                 =
*      BATCH                    =
*      CUSTOMER                 =
*      DOC_NUMBER               =
*      ITM_NUMBER               =
*      WBS_ELEM                 =
*      STOCK_IND                =
*      DEC_FOR_ROUNDING         =
*      DEC_FOR_ROUNDING_X       =
*      READ_ATP_LOCK            =
*      READ_ATP_LOCK_X          =
*      MATERIAL_EVG             =
*      SGT_RCAT                 =
   IMPORTING
*           ENDLEADTME               =
            AV_QTY_PLT               = ATP
*           DIALOGFLAG               =
*     RETURN    = ls_return
   TABLES
     wmdvsx     = iwmdvsx
     wmdvex     = iwmdvex.
check sy-subrc = 0.

Ich konnte das Infoset erzeugen und eine Querry darüber aufrufen, aber die Das Feld ATP füllt sich mit dem Wert der AV_QTY_PLT.

Leider hab ich festgestellt, dass ich den Wert aus der Tabelle WMDVEX erste Zeile brauche und meine Anweisung die ich als spezielle Coding zum Feld ATP geschrieben habe funktioniert nicht.

read table iWMDVEX index 1.

In der SQ01 habe ich bei der Feldgruppenauswahl und Feldauswahl alle Material, Werks und Unit Felder ausgewählt.

Die Grundliste zeigt mir jedes Material mit Werk und Lagerort.

Könntest du mir da weiterhelfen, wie ich mein Feld ATP richtig fülle?

Grüße

Sacor

wreichelt
vor 5 Jahre
Hallo,

so direkt habe ich keine Idee, aber in dem Beispiel wird über die SE37 der FB aufgerufen

https://sapcodes.com/2015/12/07/material-stock-check-using-fm-bapi_material_availability/ 

vielleicht kannst du damit erst mal prüfen ob es so funktioniert.

Gruß Wolfgang

Sacor321
  • Sacor321
  • SAP Forum - Neuling Thema Starter
vor 5 Jahre
Hi Wolfgang,

also ich hab jetzt kapiert, das mein Zusatzfeld als Summenfeld interpretiert worden ist vom verfügbaren Bestand.

Deswegen hab ich immer das gleiche Ergebnis bekommen, leider hab ich somit noch gar nicht das BAPI ausgeführt.

Ich verifziere meine Ergebnisse derzeit schon immer mit der SE37, leider check ich nicht wie ich das Output des BAPI abgreife...

Danke für den Link, aber ich denke es liegt daran das mein Code falsch ist...

wreichelt
vor 5 Jahre
Hallo,

hast du inzwischen eine Lösung gefunden?

Geht es nicht auch ohne den FB ? wenn es nur um den Lagerbestand geht würde ich die MARD lesen

und dort den Bestand in ein Zusatzfeld bringen und das dann Listen.

Gruß Wolfgang

Sacor321
  • Sacor321
  • SAP Forum - Neuling Thema Starter
vor 5 Jahre
Hi Wolfgang,

leider hab ich noch keine Lösung.

Im Grunde mach ich das genau das was du vorschlägst nur Erweitere ich die Abfrage um MM-Daten.

Ich weiß leider nicht was die Abkürzung FB bedeutet...

Im Grunde will ich beim Erstellen der Abfrage die aktuelle ATP-Menge, aber mit den Eingrenzungen von Materialstammdaten. Den verfügbaren Bestand kann ich ja einfach auslesen, aber den ATP-Bestand zum heutigen Tag geht nicht.

Wenn ich den Funktionsbaustein einzeln aufrufe sehe ich die Ergebnisse, aber ich weiß leider nicht wie ich diese Ergebnisse massenhaft erstelle und dann in das Zusatzfeld speichere für meine temporäre Abfrage.

Grüße

Sacor

P.S. Ich suche schon die ganze Zeit in Foren wie man sowas bewertstelligt, leider find ich nur die Fragen, aber nicht die Lösung...

Nordwolf
vor 5 Jahre
Vorab: Bin auch kein Entwickler und habe bisher auch nur Mini-Codeschnipsel in Infosets gebastelt...

Aber wenn der gelesene Wert an sich passt, fehlt dann nicht einfach noch die Zuweisung des gelesenen Werts in dein Zusatzfeld?

Also sowas wie

READ TABLE ... INTO Zusatzfeld
oder

Zusatzfeld = ...

Gruß, Nordwolf

wreichelt
vor 5 Jahre
Hallo Sacor,

du definierst ein Zusatzfeld,

dort wird Coding hinterlegt etwa so:

Tables: mard, t001l.

clear: zlabst1.

SELECT SUM( LABST ) FROM MARD into ZLABST1

WHERE MATNR = MARA-MATNR

AND WERKS = werk1

GROUP BY WERKS MATNR.

Gruß Wolfgang