SAP MM物料主数据变更接口分享
一、接口逻辑
SAP提供接口,OA调用
1)输入参数和输出参数
2)逻辑补充
二、接口代码
FUNCTION z_fmmm_0020.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(I_DATA_GD) TYPE ZSBC_IF_GD OPTIONAL
*" VALUE(I_INPUT) TYPE STRING OPTIONAL
*" EXPORTING
*" VALUE(E_OUTPUT) TYPE STRING
*"----------------------------------------------------------------------
DATA: ls_input TYPE zsmm_input_020,
ls_output TYPE zsmm_output_020,
lt_output TYPE zssmm_output_020,
lwa_output TYPE zssmm_output_020,
lt_base_data TYPE zttmm_input_020_base,
lt_sales_data TYPE zttmm_input_020_sales,
lt_purchase_data TYPE zttmm_input_020_purchase,
lt_mrp_data TYPE zttmm_input_020_mrp,
lt_account_data TYPE zttmm_input_020_account,
lwa_sales_data TYPE zssmm_input_020_sales,
lwa_purchase_data TYPE zssmm_input_020_purchase,
lwa_mrp_data TYPE zssmm_input_020_mrp,
lwa_account_data TYPE zssmm_input_020_account,
lt_mara TYPE TABLE OF mara,
lwa_mara TYPE mara.
DATA: lv_line(10),
lv_percent(6),
lv_text(40),
lv_lines TYPE n LENGTH 5.
DATA: ls_headdata LIKE bapimathead,
ls_mara LIKE bapi_mara,
ls_marax LIKE bapi_marax,
ls_marc LIKE bapi_marc,
ls_marcx LIKE bapi_marcx,
*LS_FORECASTPARAMETERS LIKE TABLE OF BAPI_MPOP,
*LS_FORECASTPARAMETERSX LIKE TABLE OF BAPI_MPOPX,
*LS_PLANNINGDATA LIKE TABLE OF BAPI_MPGD,
*LS_PLANNINGDATAX LIKE TABLE OF BAPI_MPGDX,
* ls_storagelocationdata LIKE TABLE OF bapi_mard,
* ls_storagelocationdatax LIKE TABLE OF bapi_mardx,
ls_mbew LIKE bapi_mbew,
ls_mbewx LIKE bapi_mbewx,
*LS_WAREHOUSENUMBERDATA LIKE TABLE OF BAPI_MLGN,
*LS_WAREHOUSENUMBERDATAX LIKE TABLE OF BAPI_MLGNX,
ls_mvke LIKE bapi_mvke,
ls_mvkex LIKE bapi_mvkex,
ls_mlan TYPE bapi_mlan,
lt_mlan TYPE TABLE OF bapi_mlan,
ls_marm TYPE bapi_marm,
ls_marmx TYPE bapi_marmx,
* lt_makt LIKE TABLE OF bapi_makt WITH HEADER LINE,
lt_marm LIKE TABLE OF bapi_marm WITH HEADER LINE,
lt_marmx LIKE TABLE OF bapi_marmx WITH HEADER LINE,
* lt_taxclassifications LIKE TABLE OF bapi_mlan WITH HEADER LINE,
* lt_extensionin LIKE TABLE OF bapiparex WITH HEADER LINE,
* lt_extensioninx LIKE TABLE OF bapiparexx WITH HEADER LINE,
ls_return LIKE bapiret2.
DATA:lt_longtext TYPE TABLE OF bapi_mltx,
ls_longtext TYPE bapi_mltx.
DATA:gv_status TYPE c. "总状态,成功就是全部成功
DEFINE de_null_check.
IF &1 IS INITIAL.
lwa_output-matnr = &2.
lwa_output-type = 'E'.
lwa_output-message = &3 && '为必填!'.
APPEND lwa_output TO ls_output-messagelist.
ENDIF.
END-OF-DEFINITION.
DEFINE de_error.
IF &1 IS INITIAL.
lwa_output-matnr = &2.
lwa_output-type = 'E'.
lwa_output-message = &3 && '为错误!'.
APPEND lwa_output TO ls_output-messagelist.
gv_status = 'E'.
ENDIF.
END-OF-DEFINITION.
IF i_input IS NOT INITIAL.
CALL FUNCTION 'Z_FMBC_JSONTOABAP2'
EXPORTING
i_json = i_input
IMPORTING
e_data = ls_input.
ENDIF.
IF ls_input IS INITIAL.
* PERFORM frm_set_msg TABLES ls_output-messagelist USING 'E' '00' '001' '请检查JSON结构与SAP ABAP结构 是否一致!'.
lwa_output-type = 'E'.
lwa_output-message = '请检查JSON结构与SAP ABAP结构 是否一致!'.
APPEND lwa_output TO ls_output-messagelist.
gv_status = 'E'.
PERFORM frm_write_log_new USING 'MM0020' ls_output i_data_gd i_input e_output 'E'.
EXIT.
ENDIF.
lt_base_data = ls_input-base_data .
lt_sales_data = ls_input-sales_data .
lt_purchase_data = ls_input-purchase_data.
lt_mrp_data = ls_input-mrp_data .
lt_account_data = ls_input-account_data .
gv_status = 'S'.
LOOP AT lt_sales_data ASSIGNING FIELD-SYMBOL(<fs_sales_data>).
lwa_sales_data = <fs_sales_data>.
* lwa_sales_data-matnr = |{ lwa_sales_data-matnr ALPHA = IN }|.
CALL FUNCTION 'Z_FMBC_CONVERT_MATNR_IN'
EXPORTING
i_matnr = lwa_sales_data-matnr
IMPORTING
e_matnr = lwa_sales_data-matnr.
<fs_sales_data>-matnr = lwa_sales_data-matnr.
SELECT SINGLE *
FROM mara
WHERE matnr = @lwa_sales_data-matnr
INTO @lwa_mara.
IF sy-subrc NE 0.
lwa_output-type = 'E'.
gv_status = 'E'.
lwa_output-message = '物料编码' && lwa_sales_data-matnr && '不存在!'.
APPEND lwa_output TO ls_output-messagelist.
ELSE.
APPEND lwa_mara TO lt_mara.
ENDIF.
de_null_check: lwa_sales_data-vkorg lwa_sales_data-matnr 'VKORG(销售组织)',
lwa_sales_data-vtweg lwa_sales_data-matnr 'VTWEG(分销渠道)',
* lwa_sales_data-prodh lwa_sales_data-matnr 'PRODH(产品应用领域)',
lwa_sales_data-taxkm lwa_sales_data-matnr 'TAXKM(物料的税分类)',
lwa_sales_data-ktgrm lwa_sales_data-matnr 'KTGRM(物料的科目分配组)',
lwa_sales_data-zrequest_id lwa_sales_data-matnr 'ZREQUEST_ID(OA流程唯一码)',
lwa_sales_data-zlcbh lwa_sales_data-matnr 'ZLCBH(OA流程编号)'.
IF lwa_sales_data-vkorg IS NOT INITIAL.
SELECT SINGLE *
FROM tvkot
WHERE vkorg = @lwa_sales_data-vkorg
AND spras = '1'
INTO @DATA(lwa_tvkot).
IF sy-subrc NE 0.
de_error: lwa_sales_data-vkorg lwa_sales_data-matnr 'VKORG(销售组织)'.
ENDIF.
ENDIF.
IF lwa_sales_data-vtweg IS NOT INITIAL.
SELECT SINGLE *
FROM tvtwt
WHERE vtweg = @lwa_sales_data-vtweg
AND spras = '1'
INTO @DATA(lwa_tvtwt).
IF sy-subrc NE 0.
de_error: lwa_sales_data-vtweg lwa_sales_data-matnr 'VTWEG(分销渠道)'.
ENDIF.
ENDIF.
IF lwa_sales_data-prodh IS NOT INITIAL.
SELECT SINGLE *
FROM t179t
WHERE prodh = @lwa_sales_data-prodh
AND spras = '1'
INTO @DATA(lwa_t179t).
IF sy-subrc NE 0.
* de_error: lwa_sales_data-prodh lwa_sales_data-matnr 'PRODH(产品应用领域)'. “changed by dq 20250213 取消产品应用领域必填校验
ENDIF.
ENDIF.
IF lwa_sales_data-dwerk IS NOT INITIAL.
SELECT SINGLE *
FROM t001w
WHERE werks = @lwa_sales_data-dwerk
INTO @DATA(lwa_t001w).
IF sy-subrc NE 0.
de_error: lwa_sales_data-dwerk lwa_sales_data-matnr 'DWERK(交货工厂)'.
ENDIF.
ENDIF.
IF lwa_sales_data-taxkm IS NOT INITIAL.
SELECT SINGLE *
FROM tskmt
WHERE taxkm = @lwa_sales_data-taxkm
AND tatyp = 'MWST'
INTO @DATA(lwa_tskmt).
IF sy-subrc NE 0.
de_error: lwa_sales_data-taxkm lwa_sales_data-matnr 'TAXKM(税分类)'.
ENDIF.
ENDIF.
IF lwa_sales_data-ktgrm IS NOT INITIAL.
SELECT SINGLE *
FROM tvkmt
WHERE ktgrm = @lwa_sales_data-ktgrm
INTO @DATA(lwa_tvkmt).
IF sy-subrc NE 0.
de_error: lwa_sales_data-ktgrm lwa_sales_data-matnr 'KTGRM(科目分配组)'.
ENDIF.
ENDIF.
IF lwa_sales_data-vmsta IS NOT INITIAL.
SELECT SINGLE *
FROM tvmst
WHERE vmsta = @lwa_sales_data-vmsta
INTO @DATA(lwa_tvmst).
IF sy-subrc NE 0.
de_error: lwa_sales_data-vmsta lwa_sales_data-matnr 'VMSTA(指定分销链的物料状态)'.
ENDIF.
ENDIF.
ENDLOOP.
LOOP AT lt_purchase_data ASSIGNING FIELD-SYMBOL(<fs_purchase_data>).
lwa_purchase_data = <fs_purchase_data>.
* lwa_purchase_data-matnr = |{ lwa_purchase_data-matnr ALPHA = IN }|.
CALL FUNCTION 'Z_FMBC_CONVERT_MATNR_IN'
EXPORTING
i_matnr = lwa_purchase_data-matnr
IMPORTING
e_matnr = lwa_purchase_data-matnr.
<fs_purchase_data>-matnr = lwa_purchase_data-matnr.
SELECT SINGLE *
FROM mara
WHERE matnr = @lwa_purchase_data-matnr
INTO @lwa_mara.
IF sy-subrc NE 0.
lwa_output-type = 'E'.
gv_status = 'E'.