Warenbewegung buchen 
From Theobald Software
In diesem Beispiel wird mit BAPI_GOODSMVT_CREATE ein Materialbeleg zu einer Warenbewegung erstellt. Der Parameter "GM_CODE" beinhaltet die Umschlüsselung zu den Transaktionscodes. Der Wert "01" wird durch SAP mit der Transaktion MB01 ersetzt. Mit dieser Transaktion wird ein Wareneingang zu einer Bestellung gebucht. Weitere Möglichkeiten wären "02", für eine Warenbewegung zu einem Auftrag (Transaktion MB31) und "05" für sonstige Wareneingänge erfassen. (Transaktion MB1C).
Die wichtigsten Kopfdaten sind das Buchungsdatum, der Benutzername und das Datum des Dokuments. In den Positionsdaten werden die Daten des Wareneingangs im Bezug zur Bestellung übergeben. Die "101" im MOVE_TYPE gibt die Bewegungsart "Wareneingang zu einer Bestellung in das Lager" an. Der dazugehörige Lagerort, in unserem Beispiel das Materiallager, wird im Parameter "STGE_LOC" übergeben. Da wir eine Warenbewegung zu einer Bestellung buchen, übergeben wir in den Parametern PO_NUMBER und PO_ITEM die Bestellnummer und die Position. In dem Parameter "MVT_IND" wird das Bewegungskennzeichen übergeben. Dieses Kennzeichen gibt an welche Art von Beleg der Bewegung zugrunde liegt. Mögliche Belege wären Bestellung oder Lieferschein.
Nach erfolgreicher Buchung des Wareneingangs erhalten wir die Warenbelegnummer und das Belegjahr als Wert zurück.
Damit die Funktion funktioniert, muss das Verbindungsobjekt Con als Instanz-Variable der Klasse vorhanden sein.
public bool WEBuchen101(string PO_Number, string PO_ITEM, string Plant, decimal Quantity) { string rMessage; // Fill Export Structures for the FunctionModule RFCFunction func = Con.CreateFunction("BAPI_GOODSMVT_CREATE"); func.Exports["GOODSMVT_HEADER"].ToStructure()["PSTNG_DATE"] = "20070921"; //Posting Date in the Document func.Exports["GOODSMVT_HEADER"].ToStructure()["PR_UNAME"] = "HUGO"; //UserName func.Exports["GOODSMVT_HEADER"].ToStructure()["HEADER_TXT"] = "XXX"; //HeaderText func.Exports["GOODSMVT_HEADER"].ToStructure()["DOC_DATE"] = "20070921"; //Document Date in Document func.Exports["GOODSMVT_CODE"].ToStructure()["GM_CODE"] = "01"; // Fill Table Items RFCStructure itemrow = func.Tables["GOODSMVT_ITEM"].Rows.Add(); itemrow["PLANT"] = Plant; //Plant itemrow["PO_NUMBER"] = PO_Number; //Purchase Order Number itemrow["PO_ITEM"] = PO_ITEM; //Item Number of Purchasing Document itemrow["ENTRY_QNT"] = Quantity; //Quantity in Unit of Entry itemrow["MOVE_TYPE"] = "101"; //Movement Type itemrow["MVT_IND"] = "B"; //Movement Indicator itemrow["STGE_LOC"] = "0001"; //Storage Location // Execute Function Module func.Execute(); RFCFunction funcCommit = Con.CreateFunction("BAPI_TRANSACTION_COMMIT"); funcCommit.Exports["WAIT"].ParamValue = "X"; string MaterialDocument = func.Imports["MATERIALDOCUMENT"].ParamValue.ToString(); string MatDocumentYear = func.Imports["MATDOCUMENTYEAR"].ParamValue.ToString(); // Check Return-Table if (func.Tables["RETURN"].RowCount > 0) { rMessage = func.Tables["RETURN"].Rows[0, "MESSAGE"].ToString(); funcCommit.Execute(); if (func.Tables["RETURN"].Rows[0, "TYPE"].ToString().Equals("E")) return false; else return true; } else { funcCommit.Execute(); rMessage = ""; return true; } }


