METHOD zmm_i001_ii_si_sap_mmd_in~si_sap_mmd_in.
*** **** INSERT IMPLEMENTATION HERE **** ***
DATA: output_hd TYPE zmmi005_dt_mesg_hd,
output_body TYPE zun_dt_un_resp_msgbd_tab,
output_line TYPE zun_dt_un_resp_msgbd.
DATA: r_obj TYPE REF TO zun_co_si_un_resp_out.
DATA: out TYPE zun_mt_un_resp.
DATA:cm_str TYPE string.
DATA:cm_typ TYPE char1.
DATA headdata TYPE bapimathead.
DATA clientdata TYPE bapi_mara.
DATA clientdatax TYPE bapi_marax.
DATA plantdata TYPE bapi_marc.
DATA plantdatax TYPE bapi_marcx.
DATA forecastparameters TYPE bapi_mpop.
DATA forecastparametersx TYPE bapi_mpopx.
DATA planningdata TYPE bapi_mpgd.
DATA planningdatax TYPE bapi_mpgdx.
DATA storagelocationdata TYPE bapi_mard.
DATA storagelocationdatax TYPE bapi_mardx.
DATA valuationdata TYPE bapi_mbew.
DATA valuationdatax TYPE bapi_mbewx.
DATA warehousenumberdata TYPE bapi_mlgn.
DATA warehousenumberdatax TYPE bapi_mlgnx.
DATA salesdata TYPE bapi_mvke.
DATA salesdatax TYPE bapi_mvkex.
DATA storagetypedata TYPE bapi_mlgt.
DATA storagetypedatax TYPE bapi_mlgtx.
DATA flag_online TYPE bapie1global_data-testrun.
DATA flag_cad_call TYPE bapie1global_data-testrun.
DATA no_dequeue TYPE bapie1global_data-testrun.
DATA no_rollback_work TYPE bapie1global_data-testrun.
DATA return TYPE bapiret2.
DATA materialdescription TYPE TABLE OF bapi_makt .
DATA unitsofmeasure TYPE TABLE OF bapi_marm .
DATA unitsofmeasurex TYPE TABLE OF bapi_marmx.
DATA internationalartnos TYPE TABLE OF bapi_mean .
DATA materiallongtext TYPE TABLE OF bapi_mltx .
DATA taxclassifications TYPE TABLE OF bapi_mlan .
DATA returnmessages TYPE TABLE OF bapi_matreturn2 .
DATA prtdata TYPE TABLE OF bapi_mfhm .
DATA prtdatax TYPE TABLE OF bapi_mfhmx .
DATA extensionin TYPE TABLE OF bapiparex .
DATA extensioninx TYPE TABLE OF bapiparexx .
DATA ls_materialdescription TYPE bapi_makt .
DATA ls_unitsofmeasure TYPE bapi_marm .
DATA ls_unitsofmeasurex TYPE bapi_marmx .
DATA ls_internationalartnos TYPE bapi_mean .
DATA ls_materiallongtext TYPE bapi_mltx .
DATA ls_taxclassifications TYPE bapi_mlan .
DATA ls_returnmessages TYPE bapi_matreturn2 .
DATA ls_prtdata TYPE bapi_mfhm .
DATA ls_prtdatax TYPE bapi_mfhmx .
DATA ls_extensionin TYPE bapiparex .
DATA ls_extensioninx TYPE bapiparexx .
-
视图检查
DATA: lw_mara TYPE mara,
lw_marc TYPE marc,
lw_mard TYPE mard,
lw_mbew TYPE mbew,
lw_mvke TYPE mvke.DATA:z_error TYPE c1,
z_message TYPE string.LOOP AT input-mt_sap_mmd-msgbd INTO DATA(ls_item).
"校验z013-800000000000 999999999999
IF ls_item-zflag EQ ‘’ AND ls_item-mtart = ‘Z013’ AND ( ls_item-matnr < ‘800000000000’ OR ls_item-matnr > ‘999999999999’ ) .output_line-order1 = ls_item-matnr. output_line-retid = 'E'. output_line-rettxt = |物料{ ls_item-matnr ALPHA = OUT }不符合编码规范|. output_line-itemid = ls_item-itemid. output_line-yl-yl1 = ls_item-zflag. APPEND output_line TO output_body. CLEAR output_line. EXIT. ENDIF. CASE ls_item-zflag. WHEN '' OR 'A'. CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' EXPORTING input = ls_item-matnr IMPORTING output = ls_item-matnr EXCEPTIONS length_error = 1 OTHERS = 2. SELECT SINGLE matnr FROM mara INTO @DATA(zmatnr) WHERE matnr = @ls_item-matnr. IF zmatnr IS NOT INITIAL AND ls_item-zflag = ''. z_error = 'X'. z_message = '输入的物料编号已存在'. ELSEIF zmatnr IS INITIAL AND ls_item-zflag = 'A'. z_error = 'X'. z_message = '输入的物料编号不存在'. ENDIF. CLEAR headdata. headdata-material = ls_item-matnr. headdata-matl_type = ls_item-mtart. headdata-ind_sector = ls_item-mbrsh. headdata-basic_view = 'X'.
-
headdata-sales_view = 'X'.
-
headdata-purchase_view = 'X'.
-
headdata-mrp_view = 'X'.
-
headdata-forecast_view = ‘X’.
-
headdata-warehouse_view = 'X'.
-
headdata-account_view = 'X'.
-
headdata-cost_view = 'X'. "基本数据 CLEAR clientdata. clientdata-matl_group = ls_item-matkl. SELECT SINGLE msehi INTO clientdata-base_uom FROM t006a WHERE spras = 1 AND mseh3 = ls_item-meins. IF sy-subrc <> 0. clientdata-base_uom = ls_item-meins. ENDIF. clientdata-division = ls_item-spart.
-
clientdata-extmatlgrp = wa_y_material-mara_extmatlgrp.
-
clientdata-item_cat = wa_y_material-mara_item_cat.
*** clientdata-net_weight = ls_item-ntgew.
SELECT SINGLE gewei INTO clientdata-unit_of_wt FROM mara WHERE matnr = ls_item-matnr.
clientdata-envt_rlvt = ls_item-kzumw.
CLEAR clientdatax.
clientdatax-matl_group = 'X'.
clientdatax-base_uom = 'X'.
-
clientdatax-extmatlgrp = 'X'.
-
clientdatax-item_cat = 'X'. clientdatax-division = 'X'. clientdatax-net_weight = 'X'.
-
clientdatax-trans_grp = 'X'. clientdatax-unit_of_wt = 'X'. clientdatax-envt_rlvt = 'X'.
-
"工厂级别数据
-
CLEAR plantdata.
-
plantdata-plant = wa_y_material-marc_plant.
-
plantdata-availcheck = wa_y_material-marc_availcheck.
-
plantdata-loadinggrp = wa_y_material-marc_loadinggrp.
-
plantdata-pur_group = wa_y_material-marc_pur_group.
-
plantdata-batch_mgmt = wa_y_material-marc_batch_mgmt.
-
plantdata-auto_p_ord = wa_y_material-marc_auto_p_ord.
-
plantdata-ind_post_to_insp_stock = wa_y_material-marc_ind_post_to_insp_stock.
-
plantdata-quotausage = wa_y_material-marc_quotausage.
-
plantdata-sourcelist = wa_y_material-marc_sourcelist.
-
plantdata-mrp_group = wa_y_material-marc_mrp_group.
-
plantdata-mrp_type = wa_y_material-marc_mrp_type.
-
plantdata-mrp_ctrler = wa_y_material-marc_mrp_ctrler.
-
plantdata-lotsizekey = wa_y_material-marc_lotsizekey.
-
plantdata-minlotsize = wa_y_material-marc_minlotsize.
-
plantdata-maxlotsize = wa_y_material-marc_maxlotsize.
-
plantdata-round_val = wa_y_material-marc_round_val.
-
plantdata-proc_type = wa_y_material-marc_proc_type.
-
plantdata-backflush = wa_y_material-marc_backflush.
-
plantdata-plnd_delry = wa_y_material-marc_plnd_delry.
-
plantdata-gr_pr_time = wa_y_material-marc_gr_pr_time.
-
plantdata-safety_stk = wa_y_material-marc_safety_stk.
-
plantdata-sm_key = wa_y_material-marc_sm_key.
-
plantdata-plan_strgp = wa_y_material-marc_plan_strgp.
-
plantdata-alt_bom_id = wa_y_material-marc_alt_bom_id.
-
CLEAR plantdatax.
-
plantdatax-plant = wa_y_material-marc_plant.
-
plantdatax-availcheck = 'X'.
-
plantdatax-loadinggrp = 'X'.
-
plantdatax-pur_group = 'X'.
-
plantdatax-batch_mgmt = 'X'.
-
plantdatax-auto_p_ord = 'X'.
-
plantdatax-ind_post_to_insp_stock = 'X'.
-
plantdatax-quotausage = 'X'.
-
plantdatax-sourcelist = 'X'.
-
plantdatax-mrp_group = 'X'.
-
plantdatax-mrp_type = 'X'.
-
plantdatax-mrp_ctrler = 'X'.
-
plantdatax-lotsizekey = 'X'.
-
plantdatax-minlotsize = 'X'.
-
plantdatax-maxlotsize = 'X'.
-
plantdatax-round_val = 'X'.
-
plantdatax-proc_type = 'X'.
-
plantdatax-backflush = 'X'.
-
plantdatax-plnd_delry = 'X'.
-
plantdatax-gr_pr_time = 'X'.
-
plantdatax-safety_stk = 'X'.
-
plantdatax-sm_key = 'X'.
-
plantdatax-plan_strgp = 'X'.
-
plantdatax-alt_bom_id = 'X'.
-
"仓库存储数据
-
CLEAR storagelocationdata.
-
storagelocationdata-plant = wa_y_material-marc_plant.
-
storagelocationdata-stge_loc = wa_y_material-mard_stge_loc.
-
CLEAR storagelocationdatax.
-
storagelocationdatax-plant = wa_y_material-marc_plant.
-
storagelocationdatax-stge_loc = wa_y_material-mard_stge_loc.
-
"销售数据
-
CLEAR salesdata.
-
salesdata-sales_org = wa_y_material-mvke_sales_org.
-
salesdata-distr_chan = wa_y_material-mvke_distr_chan.
-
salesdata-sales_unit = wa_y_material-mvke_sales_unit.
-
salesdata-matl_stats = wa_y_material-mvke_matl_stats.
-
salesdata-acct_assgt = wa_y_material-mvke_acct_assgt.
-
salesdata-item_cat = wa_y_material-mvke_item_cat.
-
CLEAR salesdatax.
-
salesdatax-sales_org = wa_y_material-mvke_sales_org.
-
salesdatax-distr_chan = wa_y_material-mvke_distr_chan.
-
salesdatax-sales_unit = 'X'.
-
salesdatax-matl_stats = 'X'.
-
salesdatax-acct_assgt = 'X'.
-
salesdatax-item_cat = 'X'.
-
"会计、成本
-
CLEAR valuationdata.
-
valuationdata-val_area = wa_y_material-marc_plant.
-
valuationdata-val_class = wa_y_material-mbew_val_class.
-
valuationdata-price_ctrl = wa_y_material-mbew_price_ctrl.
-
valuationdata-price_unit = wa_y_material-mbew_price_unit.
-
valuationdata-moving_pr = wa_y_material-mbew_moving_pr.
-
valuationdata-std_price = wa_y_material-mbew_std_price.
-
valuationdata-qty_struct = wa_y_material-mbew_qty_struct.
-
valuationdata-orig_mat = wa_y_material-mbew_orig_mat.
-
CLEAR valuationdatax.
-
valuationdatax-val_area = wa_y_material-marc_plant.
-
valuationdatax-val_class = 'X'.
-
valuationdatax-price_ctrl = 'X'.
-
valuationdatax-price_unit = 'X'.
-
valuationdatax-moving_pr = 'X'.
-
valuationdatax-std_price = 'X'.
-
valuationdatax-qty_struct = 'X'.
-
valuationdatax-orig_mat = 'X'. "物料描述 CLEAR materialdescription[]. ls_materialdescription-langu_iso = 'ZH'. ls_materialdescription-matl_desc = ls_item-maktx. APPEND ls_materialdescription TO materialdescription . "单位 CLEAR unitsofmeasure[]. ls_unitsofmeasure-alt_unit = clientdata-base_uom.
-
unitsofmeasure-gross_wt = wa_y_material-t_marm_gross_wt. ls_unitsofmeasure-unit_of_wt = clientdata-unit_of_wt.
-
unitsofmeasure-volume = wa_y_material-t_marm_volume.
-
unitsofmeasure-volumeunit = wa_y_material-t_marm_volumeunit. APPEND ls_unitsofmeasure TO unitsofmeasure. CLEAR unitsofmeasurex[]. ls_unitsofmeasurex-alt_unit = clientdata-base_uom.
-
unitsofmeasurex-gross_wt = 'X'. ls_unitsofmeasurex-unit_of_wt = 'X'.
-
unitsofmeasurex-volume = 'X'.
-
unitsofmeasurex-volumeunit = 'X'. APPEND ls_unitsofmeasurex TO unitsofmeasurex.
-
"税分类
-
CLEAR taxclassifications[].
-
taxclassifications-depcountry = 'CN'.
-
taxclassifications-tax_type_1 = 'MWST'.
-
taxclassifications-taxclass_1 = wa_y_material-t_mlan_taxclass1.
-
taxclassifications-taxclass_2 = wa_y_material-t_mlan_taxclass2.
-
APPEND taxclassifications. IF ls_item-satnr IS NOT INITIAL. "存SATNR DATA:ls_te_mara TYPE bapi_te_mara, ls_te_marax TYPE bapi_te_marax. ls_te_mara-material = ls_item-matnr. CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' EXPORTING input = ls_item-satnr IMPORTING output = ls_te_mara-satnr EXCEPTIONS length_error = 1 OTHERS = 2. SELECT SINGLE matnr FROM mara INTO @DATA(l_matnr) WHERE matnr = @ls_te_mara-satnr AND kzkfg = 'X'. IF l_matnr IS NOT INITIAL. ELSE. z_error = 'X'. z_message = '输入的可配置物料不存在或不是可配置物料'. ENDIF. ENDIF. DATA zcwb TYPE c LENGTH 200. zcwb = ls_item-zcwb. "长文本 CLEAR materiallongtext[]. ls_materiallongtext-applobject = 'MATERIAL'. ls_materiallongtext-text_name = ls_item-matnr. ls_materiallongtext-text_id = 'GRUN'. ls_materiallongtext-langu = '1'. "中文 ls_materiallongtext-format_col = 1. ls_materiallongtext-text_line = zcwb+0(132). APPEND ls_materiallongtext TO materiallongtext. CLEAR: ls_materiallongtext. ls_materiallongtext-applobject = 'MATERIAL'. ls_materiallongtext-text_name = ls_item-matnr. ls_materiallongtext-text_id = 'GRUN'. ls_materiallongtext-langu = '1'. "中文 ls_materiallongtext-format_col = 2. ls_materiallongtext-text_line = zcwb+132(68). APPEND ls_materiallongtext TO materiallongtext. CLEAR: ls_materiallongtext.
"执行bapi**********
IF z_error IS INITIAL.
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
headdata = headdata
clientdata = clientdata
clientdatax = clientdatax
plantdata = plantdata
plantdatax = plantdatax
forecastparameters = forecastparameters
forecastparametersx = forecastparametersx
planningdata = planningdata
planningdatax = planningdatax
storagelocationdata = storagelocationdata
storagelocationdatax = storagelocationdatax
valuationdata = valuationdata
valuationdatax = valuationdatax
warehousenumberdata = warehousenumberdata
warehousenumberdatax = warehousenumberdatax
salesdata = salesdata
salesdatax = salesdatax
storagetypedata = storagetypedata
storagetypedatax = storagetypedatax
flag_online = ' '
flag_cad_call = ' '
no_dequeue = ' '
no_rollback_work = ' '
IMPORTING
return = return
TABLES
materialdescription = materialdescription
unitsofmeasure = unitsofmeasure
unitsofmeasurex = unitsofmeasurex
internationalartnos = internationalartnos
materiallongtext = materiallongtext
taxclassifications = taxclassifications
returnmessages = returnmessages
prtdata = prtdata
prtdatax = prtdatax
extensionin = extensionin
extensioninx = extensioninx.
IF return-type = 'S' ."执行成功
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' "提交该BAPI
EXPORTING
wait = 'X'.
IF ls_item-satnr IS NOT INITIAL.
DO 10 TIMES.
SELECT SINGLE matnr FROM mara INTO zmatnr
WHERE matnr = ls_item-matnr.
IF sy-subrc = 0.
CALL FUNCTION 'ZFUN_MM_SATNR'
EXPORTING
matnr = ls_item-matnr
satnr = ls_item-satnr
IMPORTING
rtyp = cm_typ
msg = cm_str.
EXIT.
ENDIF.
ENDDO.
ENDIF.
output_line-order1 = ls_item-matnr.
IF ls_item-zflag IS INITIAL.
output_line-yl-yl1 = ' '.
ELSE.
output_line-yl-yl1 = ls_item-zflag.
ENDIF.
IF cm_typ = 'E' .
output_line-rettxt = |物料{ ls_item-matnr ALPHA = OUT }保存成功;{ cm_str }|.
ELSE.
output_line-rettxt = |物料{ ls_item-matnr ALPHA = OUT }保存成功;|.
ENDIF.
output_line-retid = 'S'.
output_line-itemid = ls_item-itemid.
APPEND output_line TO output_body.
CLEAR output_line.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
output_line-order1 = ls_item-matnr.
output_line-retid = 'E'.
output_line-rettxt = |物料{ ls_item-matnr ALPHA = OUT }保存失败:{ return-message }|.
output_line-itemid = ls_item-itemid.
output_line-yl-yl1 = ls_item-zflag.
APPEND output_line TO output_body.
CLEAR output_line.
ENDIF.
ELSE.
output_line-order1 = ls_item-matnr.
output_line-retid = 'E'.
output_line-rettxt = z_message.
output_line-itemid = ls_item-itemid.
output_line-yl-yl1 = ls_item-zflag.
APPEND output_line TO output_body.
CLEAR output_line.
ENDIF.
WHEN 'B'. "冻结
headdata-material = ls_item-matnr.
headdata-basic_view = 'X'.
clientdata-pur_status = '04'.
clientdatax-pur_status = 'X'.
"执行bapi**********
CALL FUNCTION ‘BAPI_MATERIAL_SAVEDATA’
EXPORTING
headdata = headdata
clientdata = clientdata
clientdatax = clientdatax
flag_online = ’ ’
flag_cad_call = ’ ’
no_dequeue = ’ ’
no_rollback_work = ’ ’
IMPORTING
return = return.
IF return-type = ‘S’ ."执行成功
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’ "提交该BAPI
EXPORTING
wait = ‘X’.
output_line-order1 = ls_item-matnr.
output_line-retid = 'S'.
output_line-rettxt = |物料{ ls_item-matnr ALPHA = OUT }冻结成功|.
output_line-itemid = ls_item-itemid.
output_line-yl-yl1 = ls_item-zflag.
APPEND output_line TO output_body.
CLEAR output_line.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
output_line-order1 = ls_item-matnr.
output_line-retid = 'E'.
output_line-rettxt = |物料{ ls_item-matnr ALPHA = OUT }冻结失败|.
output_line-itemid = ls_item-itemid.
output_line-yl-yl1 = ls_item-zflag.
APPEND output_line TO output_body.
CLEAR output_line.
ENDIF.
WHEN 'C'."取消冻结
headdata-material = ls_item-matnr.
headdata-basic_view = 'X'.
clientdata-pur_status = ''.
clientdatax-pur_status = 'X'.
"执行bapi**********
CALL FUNCTION ‘BAPI_MATERIAL_SAVEDATA’
EXPORTING
headdata = headdata
clientdata = clientdata
clientdatax = clientdatax
flag_online = ’ ’
flag_cad_call = ’ ’
no_dequeue = ’ ’
no_rollback_work = ’ ’
IMPORTING
return = return.
IF return-type = ‘S’ ."执行成功
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’ "提交该BAPI
EXPORTING
wait = ‘X’.
output_line-order1 = ls_item-matnr.
output_line-retid = 'S'.
output_line-rettxt = |物料{ ls_item-matnr ALPHA = OUT }解冻成功|.
output_line-itemid = ls_item-itemid.
output_line-yl-yl1 = ls_item-zflag.
APPEND output_line TO output_body.
CLEAR output_line.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
output_line-order1 = ls_item-matnr.
output_line-retid = 'E'.
output_line-rettxt = |物料{ ls_item-matnr ALPHA = OUT }解冻失败|.
output_line-itemid = ls_item-itemid.
output_line-yl-yl1 = ls_item-zflag.
APPEND output_line TO output_body.
CLEAR output_line.
ENDIF.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
"反馈头信息
out-mt_un_resp-msghd-msgid = input-mt_sap_mmd-msghd-msgid.
out-mt_un_resp-msghd-tlgid = input-mt_sap_mmd-msghd-tlgid.
out-mt_un_resp-msghd-tlgname = input-mt_sap_mmd-msghd-tlgname.
out-mt_un_resp-msghd-dtsend = sy-datum && sy-uzeit.
out-mt_un_resp-msghd-sender = 'ERP'.
out-mt_un_resp-msghd-receiver = input-mt_sap_mmd-msghd-sender.
"反馈行信息
out-mt_un_resp-msgbd = output_body.
TRY .
CREATE OBJECT r_obj.
CALL METHOD r_obj->si_un_resp_out
EXPORTING
output = out.
COMMIT WORK AND WAIT.
CALL FUNCTION 'ZFUN_PO_LOG'
EXPORTING
output1 = out
-
ENDTRY.output2 = out . CATCH cx_ai_system_fault.
ENDMETHOD.