SAP SD 价格主数据创建接口分享
一、接口逻辑
1)输入参数和输出参数
2)业务逻辑










二、接口代码



DATA lt_bdcdata TYPE TABLE OF bdcdata WITH HEADER LINE. "bdc执行内表
DATA lt_msgtab TYPE TABLE OF bdcmsgcoll WITH HEADER LINE. "bdc返回信息表
FUNCTION z_fmsd_create_condition_record.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(I_DATA_GD) TYPE ZSBC_IF_GD OPTIONAL
*" VALUE(I_INPUT) TYPE STRING OPTIONAL
*" EXPORTING
*" VALUE(E_OUTPUT) TYPE STRING
*"----------------------------------------------------------------------
DATA: lv_status TYPE c VALUE IS INITIAL.
CALL FUNCTION 'ZFM_BREAK_POINT' .
CLEAR: gv_input_008,e_output.
IF i_input IS NOT INITIAL.
CALL FUNCTION 'Z_FMBC_JSONTOABAP'
EXPORTING
i_json = i_input
IMPORTING
e_data = gv_input_008.
ENDIF.
IF gv_input_008 IS INITIAL.
PERFORM frm_set_msg TABLES gv_output_008 USING 'E' '00' '001' '请检查JSON结构与SAP ABAP结构 是否一致!'.
PERFORM frm_write_log_new USING 'SD0005'
gv_output_008
i_data_gd
i_input
e_output
'E'.
EXIT.
ENDIF.
gt_price[] = gv_input_008-price.
gt_discount[] = gv_input_008-discount.
IF gt_price[] IS NOT INITIAL AND gt_discount[] IS NOT INITIAL.
PERFORM frm_set_msg TABLES gv_output_008 USING 'E' '00' '001' '销售价格和销售折扣不能同时维护!'.
PERFORM frm_write_log_new USING 'SD0005'
gv_output_008
i_data_gd
i_input
e_output
'E'.
EXIT.
ELSEIF gt_price[] IS NOT INITIAL.
"调整前导零
LOOP AT gt_price INTO gs_price.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gs_price-kunnr
IMPORTING
output = gs_price-kunnr.
IF gs_price-vkorg = '8600'.
gs_price-matnr = gs_price-matnr && 'S'.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' "补18位前导零
EXPORTING
input = gs_price-matnr
IMPORTING
output = gs_price-matnr.
MODIFY gt_price FROM gs_price.
ENDLOOP.
READ TABLE gt_price INTO gs_price WITH KEY zflag = 'C'.
IF sy-subrc EQ 0.
READ TABLE gt_price INTO gs_price WITH KEY zflag = 'I'.
IF sy-subrc EQ 0.
PERFORM frm_set_msg TABLES gv_output_008 USING 'E' '00' '001' '不可以同时检查和创建!'.
PERFORM frm_write_log_new USING 'SD0005'
gv_output_008
i_data_gd
i_input
e_output
'E'.
EXIT.
ENDIF.
ENDIF.
"检查销售价格信息
PERFORM frm_price_check TABLES gv_output_008 gt_price CHANGING lv_status.
IF lv_status = 'E'.
PERFORM frm_write_log_new USING 'SD0005'
gv_output_008
i_data_gd
i_input
e_output
'E'.
EXIT.
ELSE.
READ TABLE gt_price INTO gs_price WITH KEY zflag = 'C'.
IF sy-subrc EQ 0. "仅校验
PERFORM frm_set_msg TABLES gv_output_008 USING 'S' '00' '001' '销售价格校验通过!'.
PERFORM frm_write_log_new USING 'SD0005'
gv_output_008
i_data_gd
i_input
e_output
'S'.
EXIT.
ELSE. "创建
"用BAPI创建
PERFORM frm_create_price TABLES gt_price gv_output_008 CHANGING lv_status.
IF lv_status = 'E'.
PERFORM frm_write_log_new USING 'SD0005'
gv_output_008
i_data_gd
i_input
e_output
'E'.
EXIT.
ELSE.
PERFORM frm_write_log_new USING 'SD0005'
gv_output_008
i_data_gd
i_input
e_output
'S'.
EXIT.
ENDIF.
ENDIF. "校验or创建
ENDIF. "检查表数据
ELSEIF gt_discount[] IS NOT INITIAL.
"调整前导零
&nb

