bapi_goodsmvt_create
www.4AP.de - ABAP Syntaxbeispiel: Warenbewegungen mit dem bapi_goodsmvt_create buchen |
Beispielcoding: Warenbewegungen mit dem bapi_goodsmvt_create buchen (kopieren erlaubt aber auf eigene Gefahr :-)) |
|
Warenbewegungen mit dem bapi_goodsmvt_create buchen: * * Coded by Thorsten Neubüser - www.4ap.de * PARAMETERS: p_bu_dat LIKE goodsmvt_header-pstng_date, p_beldat LIKE goodsmvt_header-doc_date, p_uname LIKE goodsmvt_header-pr_uname, p_header LIKE goodsmvt_header-header_txt, p_gmcode LIKE goodsmvt_code-gm_code, p_bwart LIKE goodsmvt_item-move_type, p_mvtind LIKE goodsmvt_item-mvt_ind. * <SNIP> PERFORM prepare_bapi_goodsmvt_create. PERFORM create_sap_documents_bapi. " LOOP AT split_tab. * <SNIP> *&---------------------------------------------------------------------* *& Form prepare_bapi_GOODSMVT_CREATE *&---------------------------------------------------------------------* FORM prepare_bapi_goodsmvt_create. * goodsmvt_header LIKE bapi2017_gm_head_01 goodsmvt_header-pstng_date = p_bu_dat. " Buchungsdatum im Beleg goodsmvt_header-doc_date = p_beldat. " Belegdatum im Beleg * REF_DOC_NO Referenz-Belegnummer * BILL_OF_LADING Nummer des Frachtbriefes beim Wareneingang * GR_GI_SLIP_NO Warenbegleitscheinnummer goodsmvt_header-pr_uname = p_uname. " Benutzername goodsmvt_header-header_txt = p_header. " Belegkopftext * VER_GR_GI_SLIP Version für den Druck des Warenbegleitscheines * VER_GR_GI_SLIPX Änderungsinformation zum zugehörigen Nutzdatenfeld * EXT_WMS Steuerung Buchung für externes WMS * goodsmvt_code LIKE bapi2017_gm_code goodsmvt_code-gm_code = p_gmcode. " Zuordnung Code zu Transaktion " für BAPI Warenbewegung WRITE: / 'Kopfdaten der Belege BAPI_GOODSMVT_CREATE'(012). WRITE: /5 'Buchungsdatum im Beleg'(013), 50 p_bu_dat. WRITE: /5 'Belegdatum'(014), 50 p_bu_dat. WRITE: /5 'Benutzername'(015), 50 p_uname. WRITE: /5 'Belegkopftext'(016), 50 p_header. ULINE. ENDFORM. " prepare_bapi_GOODSMVT_CREATE *&---------------------------------------------------------------------* *& Form create_sap_documents_BAPI *&---------------------------------------------------------------------* FORM create_sap_documents_bapi. DATA: d_count TYPE i, d_mod TYPE i. LOOP AT split_tab. * goodsmvt_item type BAPI2017_GM_ITEM_CREATE occurs 0 *Sonstiger Wareneingang ohne Bezug zu einer Reservierung *Siehe Warenausgang ohne Bezug zu einer Reservierung * GM_Code 03: Warenausgang [siehe Form prepare_bapi] * Warenausgang ohne Bezug zu einer Reservierung * Folgende Felder müssen gefüllt werden: * Materialnummer * Werk * Lagerort * Bewegungsart * Bewegungskennzeichen * Menge in Erfassungsmengeneinheit * ISO-Code Maßeinheit für Erfassungsmengeneinheit *andere mögliche GM_CODE *01 MB01 Wareneingang zur Bestellung buchen - Goods Receipts for Purchase Order *02 MB31 Wareneingang zum Fertigungsauftrag - Goods Receipts for Prod Order *03 MB1A Warenentnahme - Goods Issue *04 MB1B Umbuchung - Transfer Posting *05 MB1C Wareneingang Sonstige - Enter Other Goods Receipt *06 MB11 Warenbewegung *07 MB04 Nachverrechnung von Beistellmaterial * goodsmvt_item * siehe BAPI2017_GM_ITEM_CREATE.xls MOVE: split_tab-matnr TO goodsmvt_item-material, split_tab-werks TO goodsmvt_item-plant, split_tab-lgort TO goodsmvt_item-stge_loc, p_bwart TO goodsmvt_item-move_type, p_mvtind TO goodsmvt_item-mvt_ind, " Bewegungskennzeichen * nur frei verwendbarer Bestand split_tab-lgbst TO goodsmvt_item-entry_qnt, * Lagermengeneinheit in ISO umschlüsseln??? * split_tab- to goodsmvt_item-ENTRY_UOM_ISO. " ISO-Code ! split_tab-meins TO goodsmvt_item-entry_uom. * Daten anfügen APPEND goodsmvt_item. * Folgende Felder müssen unter Umständen gefüllt werden (keine * vollständige Aufzählung): * Sonderbestand (z.B. Kundenauftrag, Projekt, Lieferant usw.) * Mindesthaltbarkeitsdatum (wenn dies im System so eingestellt ist) * Grund der Bewegung (wenn dies im System so eingestellt ist) * Charge (wenn das Material chargenpflichtig ist und keine * automatische *Chargennummernvergabe eingestellt ist) * Kontierungsfelder * Folgende Felder können gefüllt werden (keine vollständige * Aufzählung): * Sonderbestandskennzeichen * Positionstext * Abladestelle * Warenempfänger * Folgende Felder dürfen nicht gefüllt werden (keine vollständige * Aufzählung): * Reservierung * Empfangendes/Abgebendes Material * Empfangendes/Abgebendes Werk * Empfangender/Abgebender Lagerort * Empfangende/Abgebende Charge d_mod = d_count MOD 100. IF d_mod = 0. CLEAR save_subrc. PERFORM call_bapi_goodsmvt_create. REFRESH goodsmvt_item. CLEAR goodsmvt_item. ENDIF. ENDLOOP. " at split_tab PERFORM call_bapi_goodsmvt_create. ENDFORM. " create_sap_documents_BAPI *&---------------------------------------------------------------------* *& Form call_BAPI_GOODSMVT_CREATE *&---------------------------------------------------------------------* FORM call_bapi_goodsmvt_create. IF p_mard EQ 'X'. CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = goodsmvt_header goodsmvt_code = goodsmvt_code testrun = p_testrn IMPORTING goodsmvt_headret = goodsmvt_headret materialdocument = materialdocument matdocumentyear = matdocumentyear TABLES goodsmvt_item = goodsmvt_item * GOODSMVT_SERIALNUMBER = return = bapi_return. *Es wird keine Transaktionssteuerung implementiert. Der Aufrufer muß *dementsprechend nach erfolgreichem Aufruf dieser Methode, wenn also im *Parameter Return dem Aufrufer keine Fehler mitgeteilt wurden, das *'Commit Work' selber ausführen. PERFORM commit_work TABLES bapi_return USING 'BAPI_GOODSMVT_CREATE'. ENDIF. ENDFORM. " call_BAPI_GOODSMVT_CREATE *&---------------------------------------------------------------------* *& Form commit_work *&---------------------------------------------------------------------* FORM commit_work TABLES bapi_return STRUCTURE bapi_return USING aufrufender_baustein. IF bapi_return[] IS INITIAL. * DO IT NOW! CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X' IMPORTING return = bapi_return. save_subrc = sy-subrc. LOOP AT bapi_return. WRITE: / bapi_return-message, aufrufender_baustein. ENDLOOP. IF save_subrc NE 0. MESSAGE e000(zmig) WITH 'BAPI_TRANSACTION_COMMIT' sy-subrc aufrufender_baustein. WRITE: / 'BAPI_TRANSACTION_COMMIT', sy-subrc, aufrufender_baustein. ELSE. " save_subrc NE 0 * alles ging gut :-)) CASE aufrufender_baustein. WHEN 'BAPI_GOODSMVT_CREATE'. count_bapi_goodsmvt_create = count_bapi_goodsmvt_create + 1. IF NOT p_succes IS INITIAL. WRITE: / 'Warenbewegung erfolgreich gebucht:'(017), split_tab-matnr, split_tab-werks, split_tab-lgort, p_bwart, split_tab-lgbst, split_tab-meins, 'Beleg:'(018), materialdocument, matdocumentyear. ENDIF. " not p_succes is initial WHEN 'L_TO_CREATE_SINGLE'. count_l_to_create_single = count_l_to_create_single + 1. IF NOT p_succes IS INITIAL. WRITE: / 'Transportauftrag erfolgreich angelegt:'(039), e_ltap-matnr, e_tanum, e_ltap-nsolm, e_ltap-nltyp, e_ltap-nlber, e_ltap-nlpla, e_ltap-nppos. ENDIF. " not p_succes is initial WHEN OTHERS. * ÄHH, ist nicht vorgesehen :-)) ENDCASE. " aufrufender_baustein ENDIF. " save_subrc NE 0 ELSE. " return[] is initial * anything is going wrong! save_subrc = '999'. WRITE: / 'Return-codes des:'(011), aufrufender_baustein. LOOP AT bapi_return. WRITE: /3 'ID', bapi_return-id, 'TYPE', bapi_return-type, 'NUMBER', bapi_return-number. IF NOT bapi_return-message IS INITIAL. WRITE: /3 bapi_return-message. ENDIF. IF NOT bapi_return-message_v1 IS INITIAL. WRITE: /3 bapi_return-message_v1. ENDIF. IF NOT bapi_return-message_v2 IS INITIAL. WRITE: /3 bapi_return-message_v2. ENDIF. IF NOT bapi_return-message_v3 IS INITIAL. WRITE: /3 bapi_return-message_v3. ENDIF. CASE aufrufender_baustein. WHEN 'BAPI_GOODSMVT_CREATE'. WRITE: /3 'Warenbewegung die scheiterte:'(029), split_tab-matnr, split_tab-werks, split_tab-lgort, p_bwart, split_tab-lgbst, split_tab-meins. WHEN OTHERS. ENDCASE. " aufrufender_baustein * IF bapi_return-type = 'A'. * bapi_return-type = 'E'. " no abortion!!! * ENDIF. " bapi_return-type = 'A' * MESSAGE * ID bapi_return-id(2) * TYPE bapi_return-type * NUMBER bapi_return-number * WITH bapi_return-message * bapi_return-message_v1 * bapi_return-message_v2 * bapi_return-message_v3. ENDLOOP. " at bapi_return ENDIF. " bapi_return[] is initial CLEAR: bapi_return. REFRESH: bapi_return. ENDFORM. " commit_work |


