【ABAP】BAPI委外订单入库

it2025-09-16  7

BAPI委外订单入库相比普通入库要多加三个字段,line_id、parent_id 、line_depth。 委外订单的上层只需要line_id,下层需要line_id、parent_id 、line_depth。 line_id唯一不重复,下层的parent_id 要等于上层的line_id,line_depth = ‘01’。 字段定义

DATA: BEGIN OF wa_bapi_header. INCLUDE STRUCTURE bapi2017_gm_head_01. DATA: END OF wa_bapi_header. DATA: BEGIN OF wa_goodsmvt_code. INCLUDE STRUCTURE bapi2017_gm_code. DATA: END OF wa_goodsmvt_code. DATA: BEGIN OF it_bapi_item OCCURS 0. INCLUDE STRUCTURE bapi2017_gm_item_create. DATA: END OF it_bapi_item. DATA: BEGIN OF it_cmtmsg OCCURS 0. INCLUDE STRUCTURE bapiret2. DATA: END OF it_cmtmsg. DATA:wa_ekpo LIKE ekpo. DATA:g_mblnr LIKE mseg-mblnr, g_mjahr LIKE mseg-mjahr, g_bamng LIKE ekbe-bamng, g_msg(100) TYPE c. DATA:l_line_id TYPE mseg-line_id VALUE '000000', l_parent_id TYPE mseg-parent_id VALUE '000000', l_line_depth TYPE mseg-line_depth VALUE '00'.

内表赋值,调用BAPI

"抬头信息 * wa_bapi_header-pstng_date = sy-datum. "凭证中的凭证日期 wa_bapi_header-doc_date = p_budat. IF wa_bapi_header-doc_date IS INITIAL. wa_bapi_header-doc_date = sy-datum. "凭证记帐日期 ENDIF. wa_bapi_header-pstng_date = p_budat. IF wa_bapi_header-pstng_date IS INITIAL. wa_bapi_header-pstng_date = sy-datum. "凭证记帐日期 ENDIF. wa_bapi_header-header_txt = p_bktxt. "凭证抬头文本 wa_goodsmvt_code-gm_code = '01'. "GM CODE "明细信息 LOOP AT it_out2 INTO wa_out WHERE check = 'X'." AND wtmng > 0 AND rsnum = ''. SELECT SINGLE * INTO wa_ekpo FROM ekpo WHERE ebeln = wa_out-ebeln AND ebelp = wa_out-ebelp. IF wa_out-rspos = ''. it_bapi_item-move_type = '101'. ELSE. it_bapi_item-move_type = '543'. ENDIF. it_bapi_item-plant = wa_ekpo-werks. it_bapi_item-stge_loc = wa_out-lgort. it_bapi_item-po_number = wa_out-ebeln. it_bapi_item-po_item = wa_out-ebelp. it_bapi_item-entry_qnt = wa_out-wtmng. it_bapi_item-entry_uom = wa_out-meins. it_bapi_item-mvt_ind = 'B'. IF wa_out-rsnum NE ''. IF wa_out-rspos = ''. l_line_id = l_line_id + 1. l_parent_id = l_line_id. it_bapi_item-line_id = l_line_id. ELSE. it_bapi_item-parent_id = l_parent_id. l_line_id = l_line_id + 1. it_bapi_item-line_id = l_line_id. it_bapi_item-line_depth = '01'. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = wa_out-vbeln IMPORTING output = it_bapi_item-val_sales_ord. it_bapi_item-val_s_ord_item = wa_out-vbelp. ENDIF. ENDIF. IF wa_out-wtmng <= 0. MESSAGE '此次收货数量必须大于0' TYPE 'S'. EXIT. ENDIF. "补前导零 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = wa_out-matnr IMPORTING output = wa_out-matnr. it_bapi_item-material = wa_out-matnr. APPEND it_bapi_item. CLEAR:it_bapi_item,wa_ekpo. ENDLOOP. IF it_bapi_item[] IS NOT INITIAL. CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = wa_bapi_header goodsmvt_code = wa_goodsmvt_code IMPORTING materialdocument = g_mblnr matdocumentyear = g_mjahr TABLES goodsmvt_item = it_bapi_item return = it_cmtmsg. IF g_mblnr IS NOT INITIAL. "提交 CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. "删除已经过账的数据 DELETE it_out WHERE check = 'X' AND wtmng > 0 . CONCATENATE '物料凭证:' g_mblnr '已经创建.' INTO g_msg. MESSAGE g_msg TYPE 'S'. ELSE. "回滚 CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. READ TABLE it_cmtmsg WITH KEY type = 'E'. CONCATENATE '入库过账失败!' it_cmtmsg-message INTO g_msg. MESSAGE g_msg TYPE 'E'. EXIT. ENDIF. ENDIF. CLEAR:wa_bapi_header,it_bapi_item,p_bktxt. FREE:it_bapi_item.
最新回复(0)