天天看點

SAP中ABAP的生産訂單調用BAPI進行收貨BAPI_GOODSMVT_CREATE(根據生産訂單号進行收貨,可以修改收貨數量)

 REPORT  z0304.

 "定義需要使用的表

 TABLES: afko,aufk,resb.

*生産訂單收貨的bapi所用結構

 DATA: mat_doc LIKE bapi2017_gm_head_ret-mat_doc,"物料憑證号

       itpt LIKE TABLE OF bapi2017_gm_item_create WITH HEADER LINE,"明細表

       gmhead LIKE bapi2017_gm_head_01,"頭結構

       gmcode LIKE bapi2017_gm_code,"頭結構

       mthead LIKE bapi2017_gm_head_ret,"輸出結構

       berrmsg LIKE TABLE OF bapiret2 WITH HEADER LINE."輸出資訊

 "定義需要使用的類型池

 TYPE-POOLS:slis,truxs.

 DATA: BEGIN OF it_display OCCURS 0,

 aufnr LIKE afko-aufnr,"生産訂單編号

 rsnum LIKE afko-rsnum,"預留

 werks LIKE resb-werks,"工廠

 lgort LIKE resb-lgort,"庫存地點

 matnr LIKE resb-matnr,"物料号碼

 bdmng LIKE resb-bdmng."數量

 DATA: END OF it_display.

 DATA:it_resb LIKE TABLE OF it_display WITH HEADER LINE.

 "開始時候螢幕上顯示的 查詢條件的 輸入框

 SELECT-OPTIONS:

 "生産訂單号

   aufnr FOR afko-aufnr  OBLIGATORY NO INTERVALS NO-EXTENSION.

 "設定螢幕事件

 START-OF-SELECTION.

   "查詢收貨所需要的字段

   SELECT

     a~aufnr

     a~werks

     b~gamng AS bdmng

     b~rsnum

   FROM aufk AS a

   INNER JOIN afko  AS b ON a~aufnr = b~aufnr

   APPENDING CORRESPONDING FIELDS OF TABLE   it_resb

   WHERE  a~aufnr IN aufnr.

   "循環讀取表中資料添加到bapi的明細表中

   LOOP AT it_resb.

     CLEAR:itpt.

     "查詢庫位

     SELECT SINGLE *

     FROM resb

     WHERE rsnum =  it_resb-rsnum.

     itpt-plant      = it_resb-werks."工廠

     itpt-stge_loc   = resb-lgort."庫位(根據自己所需要庫位進行調整)

     itpt-material   = it_resb-matnr."物料号

     itpt-entry_qnt  = it_resb-bdmng."數量(根據自己所需要數量進行調整)

     itpt-orderid    = it_resb-aufnr."生産訂單

     itpt-item_text  = '項目文本'."項目文本

     itpt-move_type  = '101'."移動類型

     itpt-mvt_ind    = 'F'. "移動辨別

     itpt-stck_type  = ''."庫存類型(根據自己所需要庫存類型進行調整)

     itpt-order_itno = '1'.                                 "行項目1,2,3

     itpt-line_id    = '1'. "憑證行的唯一辨別 1,2,3

     APPEND itpt.

   ENDLOOP.

   "擡頭文本

   gmhead-header_txt = '擡頭文本'."擡頭文本

   gmhead-pstng_date = sy-datum.."憑證中的過帳日期

   gmhead-doc_date = sy-datum.."憑證中的憑證日期

   gmcode-gm_code = '02'."代碼

   "調用bapi

   CALL FUNCTION 'BAPI_GOODSMVT_CREATE'

     EXPORTING

       goodsmvt_header  = gmhead

       goodsmvt_code    = gmcode

     IMPORTING

       goodsmvt_headret = mthead

       materialdocument = mat_doc

     TABLES

       goodsmvt_item    = itpt

       return           = berrmsg.

   READ TABLE berrmsg WITH KEY type = 'E'.

   IF sy-subrc <> 0.

     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

       EXPORTING

         wait = 'X'.

     "物料憑證号

     MESSAGE mat_doc TYPE 'S'.

   ELSE.

     MESSAGE berrmsg-message TYPE 'E'.

   ENDIF.

繼續閱讀