PS组件相关BAPI

一、新增组件BAPI

"-----------------------------------------@斌将军-------------------------------------------- DATA:lv_number                   LIKE  bapi_network_list-network,lv_return                   LIKE  bapiret2,lt_components               TYPE TABLE OF bapi_network_comp_add,ls_components               TYPE bapi_network_comp_add,lt_message_table            TYPE TABLE OF  bapi_meth_message WITH HEADER LINE,ls_message_table            TYPE bapi_meth_message,lt_activity                 TYPE TABLE OF  bapi_network_comp_act_rng WITH HEADER LINE,lt_components_list          TYPE TABLE OF  bapi_network_comp_list WITH HEADER LINE,lt_components_id            TYPE TABLE OF  bapi_network_comp_id WITH HEADER LINE,lt_components_detail        TYPE TABLE OF  bapi_network_comp_detail,ls_components_detail        TYPE bapi_network_comp_detail,lt_components_remove        TYPE TABLE OF  bapi_network_comp_id WITH HEADER LINE,lt_components_change        TYPE TABLE OF  bapi_network_comp_change WITH HEADER LINE,lt_components_change_update TYPE TABLE OF bapi_network_comp_cng_upd WITH HEADER LINE.CALL FUNCTION 'BAPI_PS_INITIALIZATION'."------------------------ADD----------------------------LOOP AT lt_zin INTO ls_in.lv_number = ls_in-aufnr."网络编号CLEAR:ls_components.ls_components-activity = ls_in-vornr."活动编号ls_components-material = ls_in-matnr."物料编码ls_components-plant = ls_in-werks."工厂ls_components-entry_quantity = ls_in-bdmng."需求数量
*  ls_components-base_uom = ls_in-VORNR."工厂ls_components-req_date = ls_in-bdter."需求日期ls_components-cost_relevant = 'X'."与成本核算相关标识ls_components-item_cat = 'L'."项目类别CASE ls_in-zqdlx.WHEN 'G1'.ls_components-type_of_pur_resv = '7'."生成WBS元素的初步采购需求WHEN 'G2'.READ TABLE lt_marc INTO DATA(ls_marc) WITH KEY matnr = ls_in-matnr werks = ls_in-werks.IF ls_marc-sbdkz = '' OR ls_marc-sbdkz = '1'.ls_components-type_of_pur_resv = '8'."生成WBS预留ELSEIF ls_marc-sbdkz = '2'.ls_components-type_of_pur_resv = '3'."生成网络预留ENDIF.WHEN 'G3'.ls_components-type_of_pur_resv = '1'."网络的采购需求ls_components-item_cat = 'N'."项目类别WHEN OTHERS.ENDCASE.ls_components-mrp_relevant = '3'."预留相关性/生成采购申请(立即)ls_components-item_text = ls_in-zbz."长文本APPEND ls_components TO lt_components.MOVE-CORRESPONDING ls_in TO ls_out.APPEND ls_out TO lt_zout.ENDLOOP.CALL FUNCTION 'BAPI_NETWORK_COMP_ADD'EXPORTINGnumber           = lv_numberIMPORTINGreturn           = lv_returnTABLESi_components_add = lt_componentse_message_table  = lt_message_table.
"-----------------------------------------@斌将军--------------------------------------------

二、获取组件列表

"-----------------------------------------@斌将军--------------------------------------------    
lv_number = ls_in-aufnr.CLEAR:lt_components_list[],lv_return.CALL FUNCTION 'BAPI_NETWORK_COMP_GETLIST'EXPORTINGnumber            = lv_number
*       MAX_ROWS          = 0IMPORTINGreturn            = lv_returnTABLESi_activity_range  = lt_activitye_components_list = lt_components_list.
"-----------------------------------------@斌将军--------------------------------------------

三、获取组件详细信息

"-----------------------------------------@斌将军--------------------------------------------   
lv_number = ls_in-aufnr."获取详细信息CLEAR:lv_return,lt_components_detail[].CALL FUNCTION 'BAPI_NETWORK_COMP_GETDETAIL'EXPORTINGnumber              = lv_number
*       MAX_ROWS            = 0IMPORTINGreturn              = lv_returnTABLESi_activity_range    = lt_activityi_components_id     = lt_components_ide_components_detail = lt_components_detail.
"-----------------------------------------@斌将军--------------------------------------------

四、修改组件信息

"-----------------------------------------@斌将军--------------------------------------------
"修改组件数量
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.lt_components_change-component = ls_list-component."详细信息BAPI获取到的组件唯一标识
lt_components_change-entry_quantity = lv_syxqsl.
lt_components_change-item_text = ls_in-zbz.
APPEND lt_components_change.lt_components_change_update-component = ls_list-component.
lt_components_change_update-entry_quantity = 'X'.
lt_components_change_update-item_text = 'X'.
APPEND lt_components_change_update.IF lt_components_change[] IS NOT INITIAL.CLEAR:lv_return,lt_message_table[].CALL FUNCTION 'BAPI_NETWORK_COMP_CHANGE'EXPORTINGnumber                     = lv_numberIMPORTINGreturn                     = lv_returnTABLESi_components_change        = lt_components_changei_components_change_update = lt_components_change_updatee_message_table            = lt_message_table.CLEAR:lv_message.
LOOP AT lt_message_table WHERE message_type CA 'EAX'.lv_check = 'E'.lv_message = lv_message && lt_message_table-message_text.
ENDLOOP.
ENDIF.
"-----------------------------------------@斌将军--------------------------------------------

五、移除组件

"-----------------------------------------@斌将军--------------------------------------------
lt_components_remove-component = ls_list-component."添加到移除内表
APPEND lt_components_remove.IF lt_components_remove[] IS NOT INITIAL.CLEAR:lv_return,lt_message_table[].CALL FUNCTION 'BAPI_NETWORK_COMP_REMOVE'EXPORTINGnumber              = lv_numberIMPORTINGreturn              = lv_returnTABLESi_components_remove = lt_components_removee_message_table     = lt_message_table.
ENDIF.
"-----------------------------------------@斌将军--------------------------------------------

六、同时提交修改和移除BAPI,删除采购申请失败

业务场景中需要保证修改和移除操作同时成功和失败,需要同时COMMIT提交,这就会导致一下情况:

1.先修改后移除,COMMIT,修改成功,移除成功,删除组件对应的采购申请失败

2.先移除后修改,COMMIT,修改失败,移除成功,删除组件对应的采购申请成功

综合考虑,采用第一种方式,对于删除采购申请失败,则调用同步程序RLORD035,同步删除采购申请。

因为该程序修改会弹出文本界面,在接口中会导致接口中断,所以复制为ZRLORD035,将WRITE的文本全部注释,测试满足需求。

"-----------------------------------------@斌将军--------------------------------------------
REFRESH:s_banfn.
LOOP AT lt_eban.s_banfn-sign = 'I'.s_banfn-option = 'EQ'.s_banfn-low = lt_eban-banfn.APPEND s_banfn.ENDLOOP.SUBMIT zrlord035"调用采购申请不符项,将删除数据同步到采购申请,这样采购申请就会被打上删除标识WITH p_reqs IN s_banfnWITH sim = ''WITH set_del = 'X'AND RETURN.
"-----------------------------------------@斌将军--------------------------------------------


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部