Funktionsbaustein BAPI GOODSMVT CREATE

Aus SAP-Wiki
Wechseln zu:Navigation, Suche

Mit dem Funktionsbaustein BAPI_GOODSMVT_CREATE kann man Warenbewegungen buchen, wie in der Transaktion MIGO.

Mustercode

CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
  EXPORTING
    goodsmvt_header               =
    goodsmvt_code                 =
*   TESTRUN                       = ' '
*   GOODSMVT_REF_EWM              =
*   GOODSMVT_PRINT_CTRL           =
* IMPORTING
*   GOODSMVT_HEADRET              =
*   MATERIALDOCUMENT              =
*   MATDOCUMENTYEAR               =
  TABLES
    goodsmvt_item                 =
*   GOODSMVT_SERIALNUMBER         =
    return                        =
*   GOODSMVT_SERV_PART_DATA       =
*   EXTENSIONIN                   =
*   GOODSMVT_ITEM_CWM             =
          .

Beispiel

*&---------------------------------------------------------------------*
*& Form GO_MIGO
*&---------------------------------------------------------------------*
*& Bestandsbuchung
*& Vorlage: Report = Z_MM_POST_UNDERDELIVERY
*&---------------------------------------------------------------------*
FORM go_BAPI_GOODSMVT_CREATE
  USING iv_vbeln TYPE likp-vbeln.

  DATA(ls_headret) = VALUE bapi2017_gm_head_ret( ).
  DATA(lt_return)  = VALUE bapiret2_t( ).
  DATA(ls_return)  = VALUE bapiret2( ).

* Lesen Positionen zur Anlieferung
  SELECT *   ##DB_FEATURE_MODE[TABLE_LEN_MAX1]
    FROM lips
    WHERE vbeln = @iv_vbeln
      AND vgbel IS NOT INITIAL
    INTO TABLE @DATA(lt_lips).

* Kopfdaten füllen
  DATA(ls_header) = VALUE bapi2017_gm_head_01( pstng_date    = sy-datum  "Buchungsdatum im Beleg
                                               doc_date      = sy-datum  "Belegdatum im Beleg
                                               pr_uname      = sy-uname  "Benutzername
                                              ).

* MMIM: Umschlüsselung GM_CODE auf Transaktion der BestFührung
  DATA(ls_mvt_code) = VALUE bapi2017_gm_code( gm_code = '01' ).


* Positionen füllen
  DATA(lt_items_to_move) = VALUE bapi2017_gm_item_create_t( FOR <fs_lips> IN lt_lips
                                (
                                  material      = CONV #( <fs_lips>-matnr ) "18-stellige Materialnummer
                                  plant         = <fs_lips>-werks           "Werk
                                  stge_loc      = <fs_lips>-lgort           "Lagerort
                                  move_type     = '107'                     "Bewegungsart (Bestandsführung) (Bewegung in bew. Sperrbestand)
                                  entry_qnt     = <fs_lips>-lfimg           "Menge in Erfassungsmengeneinheit
                                  entry_uom_iso = 'PCE'                     "ISO-Code Maßeinheit Stück
                                  po_number     = <fs_lips>-vgbel           "Bestellnummer
                                  po_item       = <fs_lips>-vgpos           "Bestellposition
                                  mvt_ind       = 'B'                       "Movement Indicator B für Bestellung
                                  deliv_numb    = <fs_lips>-vbeln           "Anlieferung
                                  deliv_item    = <fs_lips>-posnr           "Position
                                )
                                                           ).

* Funktionsbaustein mit Warenbewegung buchen
  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      goodsmvt_header  = ls_header
      goodsmvt_code    = ls_mvt_code
*     testrun          = p_test
    IMPORTING
      goodsmvt_headret = ls_headret
    TABLES
      goodsmvt_item    = lt_items_to_move
      return           = lt_return.

* Fehlerauswertung: E - Error, A - Abort
  LOOP AT lt_return ASSIGNING FIELD-SYMBOL(<fs_return>).

    MESSAGE ID <fs_return>-id         "Nachrichtenklasse
        TYPE 'I'                      "Typ (E = Error, S = Success, I = Info, A = Abbruch)
      NUMBER <fs_return>-number       "Nachrichtennummer
        WITH <fs_return>-message_v1   "Platzhaltervariable1
             <fs_return>-message_v2   "Platzhaltervariable2
             <fs_return>-message_v3   "Platzhaltervariable3
             <fs_return>-message_v4.  "Platzhaltervariable4

  ENDLOOP.

* Wenn Returntabelle gefüllt ist, liegt ein Fehler vor
  IF lines( lt_return ) > 0.
*   Rollback bei Fehler
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
      IMPORTING
        return = ls_return.

    IF ls_return IS NOT INITIAL.
      MESSAGE ID ls_return-id         "Nachrichtenklasse
          TYPE 'I'                    "Typ (E = Error, S = Success, I = Info, A = Abbruch)
        NUMBER ls_return-number       "Nachrichtennummer
          WITH ls_return-message_v1   "Platzhaltervariable1
               ls_return-message_v2   "Platzhaltervariable2
               ls_return-message_v3   "Platzhaltervariable3
               ls_return-message_v4.  "Platzhaltervariable4
    ENDIF.

* Wenn Returntabelle leer ist, ist alles ok und COMMIT WORK
  ELSE.
*   Daten verbuchen
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait   = abap_true
      IMPORTING
        return = ls_return.

*   Erfolgsmeldung
    MESSAGE i082(/isdfps/mm) WITH ls_headret-mat_doc   "Materialbeleg &1/&2 erfolgreich gebucht.
                                  ls_headret-doc_year.

    IF ls_return IS NOT INITIAL.
      MESSAGE ID ls_return-id         "Nachrichtenklasse
          TYPE 'I'                    "Typ (E = Error, S = Success, I = Info, A = Abbruch)
        NUMBER ls_return-number       "Nachrichtennummer
          WITH ls_return-message_v1   "Platzhaltervariable1
               ls_return-message_v2   "Platzhaltervariable2
               ls_return-message_v3   "Platzhaltervariable3
               ls_return-message_v4.  "Platzhaltervariable4
    ENDIF.
  ENDIF.

ENDFORM.