Quantcast
Channel: SCN: Message List - ABAP Development
Viewing all articles
Browse latest Browse all 10425

Re: How do you implement BAPI_PO_CREATE then BAPI_GOODSMVT_CREATE?

$
0
0

Hi Ron,

 

Here is the code from one of my programs:

 

FORM knjizi_nzn.

 

   DATA wa_tab LIKE LINE OF it_sgr.

 

   DATA onumber LIKE BAPIMEPOHEADER-PO_NUMBER.

 

   DATA: BEGIN OF tab OCCURS 0.

           INCLUDE STRUCTURE zserije_mat.

   DATA: END OF tab.

 

   DATA: tab_pom LIKE LINE OF tab.

 

*DATA DECLARATION

   CONSTANTS : C_X VALUE 'X'.

 

*Structures to hold PO header data

   DATA : HEADER LIKE BAPIMEPOHEADER ,

         HEADERX LIKE BAPIMEPOHEADERX .

 

*Internal Tables to hold PO ITEM DATA

   DATA : ITEM LIKE BAPIMEPOITEM OCCURS 0 WITH HEADER LINE,

         ITEMX LIKE BAPIMEPOITEMX OCCURS 0 WITH HEADER LINE,

 

*Internal table to hold messages from BAPI call

   RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.

   data : w_header(40) value 'Zaglavlje naloga'.

 

   data : ws_langu like sy-langu.

 

 

   ws_langu = sy-langu. "Language variable

 

*POPULATE HEADER DATA FOR PO

   HEADER-COMP_CODE = wa_zgr-bukrs .

   HEADER-DOC_TYPE = mm_wa-bsart .

   HEADER-DOC_DATE = wa_zgr-datgr .

   HEADERX-creat_date = sy-datum .

   HEADER-SUPPL_PLNT = wa_zgr-umwrk .

   HEADER-LANGU = ws_langu .

   HEADER-PURCH_ORG = mm_wa-ekorg .

   HEADER-PUR_GROUP = mm_wa-ekgrp .

 

*HEADER FLAG

   HEADERX-comp_code = c_x.

   HEADERX-doc_type = c_x.

   HEADERX-creat_date = c_x.

   HEADERX-SUPPL_PLNT = c_x.

   HEADERX-langu = c_x.

   HEADERX-purch_org = c_x.

   HEADERX-pur_group = c_x.

   HEADERX-doc_date = c_x.

 

   LOOP AT it_sgr_pom INTO wa_sgr_pom.

*ITEM DATA

     ITEM-PO_ITEM = wa_sgr_pom-stgr.

     ITEM-MATERIAL = wa_sgr_pom-matnr.

     ITEM-PLANT = wa_zgr-werks.

     ITEM-STGE_LOC = wa_zgr-lgort.

     ITEM-QUANTITY = wa_sgr_pom-menge.

     ITEM-ITEM_CAT = 'U' .

     APPEND ITEM.

 

     ITEMX-PO_ITEM = wa_sgr_pom-stgr.

     ITEMX-MATERIAL = C_X.

     ITEMX-PLANT = C_X .

     ITEMX-STGE_LOC = C_X .

     ITEMX-QUANTITY = C_X .

     ITEMX-TAX_CODE = C_X .

     ITEMX-ITEM_CAT = C_X .

     ITEMX-ACCTASSCAT = C_X .

     APPEND ITEMX.

 

   ENDLOOP.

 

   CALL FUNCTION 'BAPI_PO_CREATE1'

     EXPORTING

       POHEADER         = HEADER

       POHEADERX        = HEADERX

*POADDRVENDOR =

*TESTRUN =

     IMPORTING

       EXPPURCHASEORDER = ONUMBER

*EXPHEADER =

*EXPPOEXPIMPHEADER =

     TABLES

       RETURN           = RETURN

       POITEM           = ITEM

       POITEMX          = ITEMX.

 

   CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

     EXPORTING

       WAIT = 'X'.

 

 

   wa_zgr-nalbr = onumber.

 

 

* OTPREMNICA

 

* Structures for BAPI

   data: gm_header  type bapi2017_gm_head_01.

   data: gm_code    type bapi2017_gm_code.

   data: gm_headret1 type bapi2017_gm_head_ret.

   data: gm_headret2 type bapi2017_gm_head_ret.

   data: gm_item    type table of

                    bapi2017_gm_item_create with header line.

   data: gm_item_wa LIKE LINE OF gm_item.

   data: gm_return  type bapiret2 occurs 0.

   data: gm_retmtd1  type bapi2017_gm_head_ret-mat_doc.

   data: gm_retmtd2  type bapi2017_gm_head_ret-mat_doc.

 

   DATA: item_count TYPE ebelp.

   DATA: matnr_pom TYPE matnr,

         lgort_pom TYPE lgort_d,

         loop_count(6) TYPE n.

 

   DATA xchpf1 LIKE mara-xchpf.

 

   clear: gm_return, gm_retmtd1, gm_retmtd2. refresh gm_return.

 

* Setup BAPI header data.

   gm_header-pstng_date = sy-datum.

   gm_header-doc_date   = sy-datum.

   gm_code-gm_code      = '04'.

   gm_header-ref_doc_no = onumber.

 

 

   LOOP AT it_sgr_pom INTO wa_sgr_pom.

 

     CLEAR xchpf1.

     SELECT SINGLE mara~xchpf INTO xchpf1

     FROM mara

     WHERE mara~matnr = wa_sgr_pom-matnr.

 

     IF xchpf1 IS NOT INITIAL.

 

       CALL FUNCTION 'ZMATGET'

         EXPORTING

           im_werks = wa_zgr-umwrk

           im_lgort = wa_sgr_pom-nsklok

           im_matnr = wa_sgr_pom-matnr

           im_kolic = wa_sgr_pom-menge

         TABLES

           output   = tab

         EXCEPTIONS

           nowerks  = 1

           nolgort  = 2

           nomatnr  = 3

           OTHERS   = 4.

 

 

       LOOP AT tab INTO tab_pom.

 

         IF loop_count IS INITIAL.

           item_count = item_count + 10.

         ENDIF.

 

         gm_item-move_type = '351'.

         gm_item-material  = wa_sgr_pom-matnr.

         gm_item-entry_qnt = tab_pom-taken.

         gm_item-entry_uom = wa_sgr_pom-meins.

         gm_item-plant     = wa_zgr-umwrk.

         gm_item-stge_loc  = wa_sgr_pom-nsklok.

         gm_item-po_number = onumber.

         gm_item-po_item = item_count.

         gm_item-batch     = tab_pom-charg.

         "gmitem-mvt_ind       = 'B'.

         APPEND gm_item.

 

         IF ( matnr_pom IS NOT INITIAL AND matnr_pom <> wa_sgr_pom-matnr ) OR

           ( matnr_pom = wa_sgr_pom-matnr

           AND lgort_pom <> wa_sgr_pom-nsklok ).

 

           item_count = item_count + 10.

 

         ENDIF.

 

         lgort_pom = wa_sgr_pom-nsklok.

         matnr_pom = wa_sgr_pom-matnr.

 

         loop_count = loop_count + 1.

 

       ENDLOOP.

       CLEAR loop_count.

 

     ELSE.

 

       item_count = item_count + 10.

 

       gm_item-move_type = '351'.

       gm_item-material  = wa_sgr_pom-matnr.

       gm_item-entry_qnt = wa_sgr_pom-menge.

       gm_item-entry_uom = wa_sgr_pom-meins.

       gm_item-plant     = wa_zgr-umwrk.

       gm_item-stge_loc  = wa_sgr_pom-nsklok.

       gm_item-po_number = onumber.

       gm_item-po_item = item_count.

       gm_item-batch     = ''.

       "gmitem-mvt_ind       = 'B'.

       APPEND gm_item.

 

     ENDIF.

 

   ENDLOOP.

 

* Call goods movement BAPI

   CALL FUNCTION 'BAPI_GOODSMVT_CREATE'

     EXPORTING

       goodsmvt_header  = gm_header

       goodsmvt_code    = gm_code

     IMPORTING

       goodsmvt_headret = gm_headret1

       materialdocument = gm_retmtd1

     TABLES

       goodsmvt_item    = gm_item

       return           = gm_return.

 

   CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

     EXPORTING

       wait = 'X'.

 

   wa_zgr-otpbr = gm_retmtd1.

 

* PRIJEM ROBE

 

   gm_code-gm_code      = '01'.

 

   LOOP AT gm_item INTO gm_item_wa.

 

       gm_item_wa-move_type = '101'.

 

       gm_item_wa-plant     = wa_zgr-werks.

       gm_item_wa-stge_loc  = wa_zgr-lgort.

 

       IF gm_item_wa-batch IS NOT INITIAL.

           gm_item_wa-batch     = 'MPRD'.

       ELSE.

           gm_item_wa-batch = ''.

       ENDIF.

       gm_item_wa-mvt_ind       = 'B'.

 

     MODIFY gm_item FROM gm_item_wa.

   ENDLOOP.

 

     CALL FUNCTION 'BAPI_GOODSMVT_CREATE'

     EXPORTING

       goodsmvt_header  = gm_header

       goodsmvt_code    = gm_code

     IMPORTING

       goodsmvt_headret = gm_headret2

       materialdocument = gm_retmtd2

     TABLES

       goodsmvt_item    = gm_item

       return           = gm_return.

 

   CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

     EXPORTING

       wait = 'X'.

 

   wa_zgr-pribr = gm_retmtd2.

 

   MODIFY sd_zgr FROM wa_zgr.

 

ENDFORM.

 

Hope it will help you.

Regards,

Vladimir


Viewing all articles
Browse latest Browse all 10425

Trending Articles