SAP MM采购订单创建接口分享
一、接口逻辑
使用费用采购订单、固定资产采购订单、模具采购订单等通过OA审批后,将结果传入SAP创建采购订单并完成审批。
1)输入参数和输出参数
2)各种申购场景梳理和业务映射
3)采购订单增强
二、接口代码
FUNCTION z_fmmm_0007.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(I_DATA_GD) TYPE ZSBC_IF_GD OPTIONAL
*" VALUE(I_INPUT) TYPE STRING OPTIONAL
*" EXPORTING
*" VALUE(E_OUTPUT) TYPE STRING
*"----------------------------------------------------------------------
TABLES: ztmm007_log.
DATA: gs_input TYPE zsmm_input_007,
gt_output TYPE zttmm_output_007,
gs_output TYPE zsmm_po_output,
gs_data_list TYPE zsmm_po_data,
gs_return TYPE zsmm_output_007.
"gs_poacc TYPE zsmm_po_acc.
DATA: ls_msg TYPE bapi_msg,
l_status TYPE c VALUE 'S'.
DATA: l_zsbc_msg TYPE zsbc_msg.
DATA: l_num TYPE int4.
DATA:ls_fid LIKE thead-tdid,
ls_fname LIKE thead-tdname,
ls_fobject LIKE thead-tdobject.
DATA:flines LIKE TABLE OF tline WITH HEADER LINE .
DATA: l_zlcbh(40) TYPE c.
DATA: poheader LIKE TABLE OF bapimepoheader WITH HEADER LINE , "采购订单抬头数据
poheaderx LIKE TABLE OF bapimepoheaderx WITH HEADER LINE,
return LIKE TABLE OF bapiret2 WITH HEADER LINE,
poitem LIKE TABLE OF bapimepoitem WITH HEADER LINE, "采购订单项目
poitemx LIKE TABLE OF bapimepoitemx WITH HEADER LINE,
poschedule LIKE TABLE OF bapimeposchedule WITH HEADER LINE, "采购订单交货计划行的字段
poschedulex LIKE TABLE OF bapimeposchedulx WITH HEADER LINE,
poaccount LIKE TABLE OF bapimepoaccount WITH HEADER LINE, "采购订单的帐户分配字段
poaccountx LIKE TABLE OF bapimepoaccountx WITH HEADER LINE,
potextitem LIKE TABLE OF bapimepotext WITH HEADER LINE.
DATA: lv_purchaseorder TYPE bapimmpara-po_number,
lv_po_rel_code TYPE bapimmpara-po_rel_cod,
lv_use_exceptions TYPE bapimmpara-selection,
lv_no_commit TYPE bapimmpara-selection,
lv_rel_status_new TYPE bapimmpara-rel_status,
lv_rel_indicator_new TYPE bapimmpara-po_rel_ind,
lv_ret_code TYPE sy-subrc,
lt_return TYPE STANDARD TABLE OF bapireturn.
DATA: ls_bapi_te_mepoitem TYPE bapi_te_mepoitem,
ls_bapi_te_mepoitemx TYPE bapi_te_mepoitemx,
lt_extensionin TYPE TABLE OF bapiparex,
lwa_extensionin TYPE bapiparex.
DATA: epo LIKE bapimepoheader-po_number.
DATA: l_ebelp TYPE ebelp.
DATA: BEGIN OF lt_zpowb1 OCCURS 0,
ebelp(5) TYPE c,
zpowb1(200) TYPE c,
END OF lt_zpowb1.
DATA:lv_msg TYPE char255.
DATA: lt_zpowb3 LIKE TABLE OF lt_zpowb1 WITH HEADER LINE.
"CALL FUNCTION 'ZFM_BREAK_POINT'.
CALL FUNCTION 'Z_FMBC_JSONTOABAP2'
EXPORTING
i_json = i_input
IMPORTING
e_data = gs_input.
* if I_TEST is not initial.
* GS_INPUT = I_TEST.
* endif.
CALL FUNCTION 'Z_FMBC_ABAPTOJSON'
EXPORTING
i_data = gs_input
IMPORTING
e_json = i_input.
*********************CHECKDATA
IF gs_input IS INITIAL.
l_status = 'E'.
ls_msg = '请检查JSON结构与SAP ABAP结构 是否一致!'.
l_zsbc_msg-type = l_status.
l_zsbc_msg-message = ls_msg.
APPEND l_zsbc_msg TO gs_output-messagelist.
APPEND gs_output TO gt_output.
gs_return-data_list = gt_output.
CALL FUNCTION 'Z_FMBC_ABAPTOJSON'
EXPORTING
i_data = gs_return
IMPORTING
e_json = e_output.
PERFORM write_log_po USING i_data_gd i_input e_output 'MM0007' 'INBOUND' l_status ls_msg.
EXIT.
ENDIF.
"删除掉已经成功的数据
DELETE gs_input-data_list WHERE ebeln IS NOT INITIAL.
LOOP AT gs_input-data_list INTO gs_data_list.
IF gs_data_list-zlcbh IS INITIAL. "OR gs_data_list-zoaitm IS INITIAL.
l_status = 'E'.
ls_msg = 'OA流程编号不能为空!'.
PERFORM frm_set_msg TABLES gs_output-messagelist USING l_status '00' '001' ls_msg.
APPEND gs_output TO gt_output.
EXIT.
ENDIF.
* IF gs_data_list-submi IS INITIAL.
* l_status = 'E'.
* ls_msg = '汇总号里要输入SRM询价单号!'.
* PERFORM frm_set_msg TABLES gs_output-messagelist USING l_status '00' '001' ls_msg.
* APPEND gs_output TO gt_output.
* EXIT.
* ENDIF.
SELECT SINGLE * FROM ztmm007_log
WHERE zlcbh = gs_data_list-zlcbh
AND zrequest_id = gs_data_list-zrequest_id
AND ebeln NE ''.
IF sy-subrc = 0.
l_status = 'E'.
ls_msg = 'OA流程编号和OA流程唯一码重复!'.
PERFORM frm_set_msg TABLES gs_output-messagelist USING l_status '00' '001' ls_msg.
APPEND gs_output TO gt_output.
EXIT.
ENDIF.
SELECT SINGLE * FROM t006a
WHERE mseh3 = @gs_data_list-meins
AND spras = '1' INTO @DATA(lw_t006a).
IF sy-subrc NE 0.
l_status = 'E'.
ls_msg = '单位' && gs_data_list-meins && '不存在!'.
PERFORM frm_set_msg TABLES gs_output-messagelist USING l_status '00' '001' ls_msg.
APPEND gs_output TO gt_output.
EXIT.
ENDIF.
SELECT SINGLE * FROM t006a
WHERE mseh3 = @gs_data_list-bprme
AND spras = '1' INTO @lw_t006a.
IF sy-subrc NE 0.
l_status = 'E'.
ls_msg = '单位' && gs_data_list-bprme && '不存在!'.
PERFORM frm_set_msg TABLES gs_output-messagelist USING l_status '00' '001' ls_msg.
APPEND gs_output TO gt_output.
EXIT.
ENDIF.
IF gs_data_list-zterm IS INITIAL.
l_status = 'E'.
ls_msg = '付款条件不能为空!'.
PERFORM frm_set_msg TABLES gs_output-messagelist USING l_status '00' '001' ls_msg.
APPEND gs_output TO gt_output.
EXIT.
ENDIF.
IF gs_data_list-mwskz IS INITIAL.
l_status = 'E'.
ls_msg = '税码不能为空!'.
PERFORM frm_set_msg TABLES gs_output-messagelist USING l_status '00' '001' ls_msg.
APPEND gs_output TO gt_output.
EXIT.
ENDIF.
IF gs_data_list-bsart = 'NB' .
* IF gs_data_list-preq_no IS INITIAL OR gs_data_list-preq_item IS INITIAL.
* l_status = 'E'.
* ls_msg = 'NB类型采购申请不能为空!'.
* PERFORM frm_set_msg TABLES gs_output-messagelist USING l_status '00' '001' ls_msg.
* APPEND gs_output TO gt_output.
*