FUNCTION zplm_d_0001_mm01.
*"----------------------------------------------------------------------
*"*"本地接口:
*" EXPORTING
*" VALUE(EX_TOTAL) TYPE CHAR4
*" VALUE(EX_SUCCESSFUL) TYPE CHAR4
*" VALUE(EX_FAIL) TYPE CHAR4
*" TABLES
*" IT_DATA STRUCTURE ZSTRU_PLM_D_0001_INPUT OPTIONAL
*" ET_DATA STRUCTURE ZSTRU_PLM_D_0001_OUTPUT OPTIONAL
*"----------------------------------------------------------------------
* 1 检查传入工厂+物料是否已存在SAP,如果已存在就更新,不存在就创建
* 2 需要设置默认值的字段,如果传入空白,自动给默认值(无论是创建还是修改,比如利润中心)
* 3 调用BAPI - BAPI_MATERIAL_SAVEDATA 创建&修改物料主数据
* 4 返回成功/失败的消息和条目数
DATA: gs_input LIKE zstru_plm_d_0001_input,
gs_output LIKE zstru_plm_d_0001_output.
DATA: gt_marc LIKE TABLE OF marc,
gs_marc LIKE marc.
*-- rfc log - first phase
INCLUDE zgen_bc_x_fmlog_first_phase.
IF it_data[] IS INITIAL.
gs_output-retype = 'E'.
gs_output-remessage = '没有传入任何数据'.
APPEND gs_output TO et_data.
CLEAR gs_output.
*-- rfc log - last phase
INCLUDE zgen_bc_x_fmlog_last_phase.
RETURN.
ENDIF.
LOOP AT it_data INTO gs_input.
**1 检查传入值
*检查传入工厂
IF gs_input-plant IS INITIAL.
gs_output-werks = gs_input-plant.
gs_output-matnr = gs_input-material.
gs_output-retype = 'E'.
gs_output-remessage = '没有传入工厂'.
APPEND gs_output TO et_data.
CLEAR gs_output.
ADD 1 TO ex_total.
ADD 1 TO ex_fail.
CONTINUE.
ELSE.
SELECT COUNT( * ) FROM t001w WHERE werks = gs_input-plant.
IF sy-subrc <> 0.
gs_output-werks = gs_input-plant.
gs_output-matnr = gs_input-material.
gs_output-retype = 'E'.
* gs_output-remessage = '工厂编码不存在SAP,请检查'.
MESSAGE s011(zplm01) WITH gs_input-plant INTO gs_output-remessage.
APPEND gs_output TO et_data.
CLEAR gs_output.
ADD 1 TO ex_total.
ADD 1 TO ex_fail.
CONTINUE.
ENDIF.
ENDIF.
*物料号补0
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = gs_input-material
IMPORTING
output = gs_input-material
EXCEPTIONS
length_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
*传入单位转内部
DATA: l_out_meins TYPE meins.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = gs_input-base_uom
* LANGUAGE = SY-LANGU
IMPORTING
output = l_out_meins
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.
gs_input-base_uom = l_out_meins.
ENDIF.
*2 设置默认值
PERFORM frm_0001_init_data CHANGING gs_input.
*3 调用BAPI - BAPI_MATERIAL_SAVEDATA 创建物料主数据
PERFORM frm_0001_bapi_mm01 TABLES et_data
USING gs_input.
*3 返回成功/失败的消息和条目数
ADD 1 TO ex_total.
IF gs_output-retype = 'S'.
ADD 1 TO ex_successful.
ELSE.
ADD 1 TO ex_fail.
ENDIF.
ENDLOOP.
*-- rfc log - last phase
INCLUDE zgen_bc_x_fmlog_last_phase.
ENDFUNCTION.
FORM frm_0001_init_data CHANGING gs_input LIKE zstru_plm_d_0001_input.
DATA: lv_matnr LIKE gs_input-material.
DATA: ls_mara LIKE mara,
ls_marc LIKE marc.
SELECT SINGLE * FROM mara INTO CORRESPONDING FIELDS OF ls_mara WHERE matnr = gs_input-material.
SELECT SINGLE * FROM marc INTO CORRESPONDING FIELDS OF ls_marc WHERE werks = gs_input-plant AND matnr = gs_input-material.
"行业领域
IF gs_input-ind_sector IS INITIAL.
gs_input-ind_sector = 'M'.
ENDIF.
"普通项目类别组
IF gs_input-item_cat IS INITIAL.
gs_input-item_cat = 'NORM'.
ENDIF.
"货架寿命到期日的期间标识
IF gs_input-period_ind_expiration_date IS INITIAL.
gs_input-period_ind_expiration_date = 'D'.
ENDIF.
""修改物料时,关键字段如果传入空值,自动填充SAP原值
IF ls_mara IS NOT INITIAL.
IF gs_input-matl_type IS INITIAL."物料类型
gs_input-matl_type = ls_mara-mtart.
ENDIF.
IF gs_input-base_uom IS INITIAL."单位
gs_input-base_uom = ls_mara-meins.
ENDIF.
IF gs_input-matl_group IS INITIAL."物料组
gs_input-matl_group = ls_mara-matkl.
ENDIF.
ENDIF.
"利润中心
IF ls_marc-prctr IS INITIAL."增加利润中心判断逻辑
IF gs_input-matl_type = 'ROH'.
IF gs_input-plant = '1301'.
gs_input-profit_ctr = '1300KL'.
ELSEIF gs_input-plant = '1101'.
gs_input-profit_ctr = '1100HT'.
ENDIF.
ELSEIF gs_input-matl_type = 'HALB'.
IF gs_input-plant = '1301'.
gs_input-profit_ctr = '1300KL'.
ELSEIF gs_input-plant = '1101'.
gs_input-profit_ctr = '1100HT'.
ENDIF.
ELSEIF gs_input-matl_type = 'FERT'.
IF gs_input-plant = '1301'.
gs_input-profit_ctr = '1300KL'.
ELSEIF gs_input-plant = '1101'.
gs_input-profit_ctr = '1100HT'.
ENDIF.
ELSEIF gs_input-matl_type = 'Z001'.
IF gs_input-plant = '1301'.
gs_input-profit_ctr = '1300KL'.
ELSEIF gs_input-plant = '1101'.
gs_input-profit_ctr = '1100HT'.
ENDIF.
* gs_input-STOR_CONDS = '02'.
ENDIF.
ELSE.
IF gs_input-profit_ctr IS INITIAL.
gs_input-profit_ctr = ls_marc-prctr.
ENDIF.
ENDIF.
""物料描述
IF gs_input-matl_desc IS INITIAL.
SELECT SINGLE maktx
FROM makt
INTO gs_input-matl_desc
WHERE matnr = gs_input-material
AND spras = sy-langu.
ENDIF.
""存储条件
IF gs_input-stor_conds IS INITIAL.
IF gs_input-matl_type = 'FERT'.
CLEAR lv_matnr.
lv_matnr = gs_input-material.
"物料编码以31/33开头的存储条件为01,32/34/35开头的存储条件为04
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = lv_matnr
IMPORTING
output = lv_matnr.
IF lv_matnr+0(2) = '31' OR lv_matnr+0(2) = '33' OR lv_matnr+0(2) = '36' ."增加36到01
gs_input-stor_conds = '01'.
ELSEIF lv_matnr+0(2) = '32' OR lv_matnr+0(2) = '34' OR lv_matnr+0(2) = '35'.
gs_input-stor_conds = '04'.
ENDIF.
ELSE."原材料,半成品,营销配件的存储条件全部默认03。
gs_input-stor_conds = '03'.
ENDIF.
ENDIF.
ENDFORM.
FORM frm_0001_bapi_mm01 TABLES et_data STRUCTURE zstru_plm_d_0001_output
USING gs_input LIKE zstru_plm_d_0001_input.
DATA: gs_output LIKE zstru_plm_d_0001_output.
DATA: lt_export LIKE TABLE OF zst_ims_d_0001 WITH HEADER LINE ."下发返回消息
DATA: ls_marc LIKE marc.
SELECT SINGLE * FROM marc
INTO CORRESPONDING FIELDS OF ls_marc
WHERE werks = gs_input-plant
AND matnr = gs_input-material.
DATA:
ls_headdata TYPE bapimathead,
ls_clientdata TYPE bapi_mara,
ls_clientdatax TYPE bapi_marax,
ls_plantdata TYPE bapi_marc,
ls_plantdatax TYPE bapi_marcx,
ls_mard LIKE bapi_mard,
ls_mardx LIKE bapi_mardx,
lt_materialdescription LIKE TABLE OF bapi_makt WITH HEADER LINE. "物料描述
* LT_materiallongtext LIKE TABLE OF bapi_mltx WITH HEADER LINE. "物料描述
DATA: lt_unitsofmeasure TYPE TABLE OF bapi_marm WITH HEADER LINE, "单位 "维护 毛重和体积单位
lt_unitsofmeasurex TYPE TABLE OF bapi_marmx WITH HEADER LINE.
"add D20210324
DATA zzbapi_te_mara LIKE bapi_te_mara. "客户定义字段:客户级别的物料数据
DATA zzbapi_te_marax LIKE bapi_te_marax. "客户定义字段:客户级别的物料数据
DATA w_extensionin TYPE TABLE OF bapiparex WITH HEADER LINE.
DATA w_extensioninx TYPE TABLE OF bapiparexx WITH HEADER LINE.
CLEAR gs_output.
CLEAR: ls_headdata,
ls_clientdata, "基本数据
ls_clientdatax,
ls_plantdata, "工厂数据 MRP视图
ls_plantdatax,
ls_mard,
ls_mardx.
REFRESH: lt_materialdescription[],
lt_unitsofmeasure,
lt_unitsofmeasurex.
ls_headdata-material = gs_input-material. "物料碼
ls_headdata-ind_sector = gs_input-ind_sector."產業別
ls_headdata-matl_type = gs_input-matl_type. "物料類型
""基本数据1&2
IF ls_headdata IS NOT INITIAL.
ls_headdata-basic_view = 'X'.
MOVE-CORRESPONDING gs_input TO ls_clientdata.
* ls_clientdata-sled_bbd = 'B'.
ls_clientdatax-matl_group = 'X'.
ls_clientdatax-base_uom = 'X'.
ls_clientdatax-item_cat = 'X'.
* ls_clientdatax-period_ind_expiration_date = 'X'.
ls_clientdatax-pack_vo_un = 'X'.
ls_clientdatax-size_dim = 'X'.
ls_clientdatax-stor_conds = 'X'.
* ls_clientdatax-sled_bbd = 'X'.
ls_clientdatax-document = 'X'.
"增加单位D2022.03.03
IF ls_clientdata-std_descr IS NOT INITIAL.
ls_clientdatax-std_descr = 'X'.
ENDIF.
"增加单位D20210317
* IF ls_clientdata-net_weight IS NOT INITIAL.
* ls_clientdatax-net_weight = 'X'.
* ENDIF.
IF ls_clientdata-unit_of_wt IS NOT INITIAL.
ls_clientdatax-unit_of_wt = 'X'.
ENDIF.
ENDIF.
""工厂数据 MRP视图
IF gs_input-plant IS NOT INITIAL.
ls_headdata-storage_view = 'X'."存储视图
MOVE-CORRESPONDING gs_input TO ls_plantdata.
* ls_plantdata-period_ind = 'M'.
ls_plantdatax-plant = gs_input-plant.
ls_plantdatax-profit_ctr = 'X'.
ls_plantdatax-pur_status = 'X'.
* ls_plantdatax-period_ind = 'X'.
ENDIF.
"物料描述
lt_materialdescription-langu = '1'.
lt_materialdescription-langu_iso = 'ZH'.
lt_materialdescription-matl_desc = gs_input-matl_desc.
APPEND lt_materialdescription.
CLEAR lt_materialdescription.
IF gs_input-volum IS NOT INITIAL.
"单位
CLEAR lt_unitsofmeasure[].
lt_unitsofmeasure-alt_unit = gs_input-base_uom.
lt_unitsofmeasure-volume = gs_input-volum.
lt_unitsofmeasure-volumeunit = gs_input-voleh.
IF gs_input-unit_of_wt IS NOT INITIAL.
lt_unitsofmeasure-unit_of_wt = gs_input-unit_of_wt.
ENDIF.
APPEND lt_unitsofmeasure.
CLEAR lt_unitsofmeasurex[].
lt_unitsofmeasurex-alt_unit = gs_input-base_uom.
lt_unitsofmeasurex-volume = 'X'.
lt_unitsofmeasurex-volumeunit = 'X'.
IF gs_input-unit_of_wt IS NOT INITIAL.
lt_unitsofmeasurex-unit_of_wt = 'X'.
ENDIF.
APPEND lt_unitsofmeasurex.
ENDIF.
"增加毛重字段D20210324
zzbapi_te_mara-material = ls_headdata-material.
zzbapi_te_mara-brgew = gs_input-gross_wt. "毛重
zzbapi_te_marax-material = ls_headdata-material.
zzbapi_te_marax-brgew = 'X'.
w_extensionin-structure = 'BAPI_TE_MARA'.
w_extensionin-valuepart1 = zzbapi_te_mara.
APPEND w_extensionin.
w_extensioninx-structure = 'BAPI_TE_MARAX'.
w_extensioninx-valuepart1 = zzbapi_te_marax.
APPEND w_extensioninx.
"""当物料已存在SAP时,不再更新以下三个字段
"""【因为接口设置的默认值,但SAP此时的值已被修改,不能再还原为默认值】
IF ls_marc IS NOT INITIAL.
CLEAR: ls_clientdatax-item_cat,"普通项目类别组
ls_plantdatax-profit_ctr,"利润中心
ls_clientdatax-stor_conds."存储条件
ENDIF.
DATA: msgreturn LIKE bapi_matreturn2 OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF wa_errmsg.
INCLUDE STRUCTURE bapiret2.
DATA:END OF wa_errmsg.
DATA it_return TYPE /eacc/t_bapiret2 .
REFRESH msgreturn.
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
headdata = ls_headdata
clientdata = ls_clientdata "基本数据
clientdatax = ls_clientdatax
plantdata = ls_plantdata "工厂数据 MRP视图
plantdatax = ls_plantdatax
* storagelocationdata = ls_mard
* storagelocationdatax = ls_mardx
TABLES
materialdescription = lt_materialdescription "物料描述
unitsofmeasure = lt_unitsofmeasure
unitsofmeasurex = lt_unitsofmeasurex
extensionin = w_extensionin
extensioninx = w_extensioninx
returnmessages = msgreturn.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
LOOP AT msgreturn WHERE type = 'E' ."OR ( TYPE = 'S' AND ID = 'M3' AND ( NUMBER = 800 OR NUMBER = 810 ) ).
MOVE-CORRESPONDING msgreturn TO wa_errmsg.
APPEND wa_errmsg TO it_return.
ENDLOOP.
LOOP AT it_return INTO wa_errmsg.
gs_output-werks = gs_input-plant.
gs_output-matnr = gs_input-material.
gs_output-retype = wa_errmsg-type.
MESSAGE ID wa_errmsg-id
TYPE wa_errmsg-type
NUMBER wa_errmsg-number
WITH wa_errmsg-message_v1
wa_errmsg-message_v2
wa_errmsg-message_v3
wa_errmsg-message_v4
INTO gs_output-remessage.
APPEND gs_output TO et_data.
CLEAR gs_output.
ENDLOOP.
IF sy-subrc <> 0.
gs_output-werks = gs_input-plant.
gs_output-matnr = gs_input-material.
gs_output-retype = 'S'.
IF ls_marc IS INITIAL.
MESSAGE s800(m3) WITH gs_input-material INTO gs_output-remessage.
ELSE.
MESSAGE s801(m3) WITH gs_input-material INTO gs_output-remessage.
ENDIF.
APPEND gs_output TO et_data.
CLEAR gs_output.
*---当物料创建或者修改成功执行下发
CALL FUNCTION 'ZIMS_D_0001_MATNR_SYNC'
TABLES
it_data = et_data
et_export = lt_export.
IF sy-subrc = 0.
LOOP AT lt_export.
gs_output-retype = lt_export-retype.
CONCATENATE '物料' gs_input-material lt_export-remessage INTO gs_output-remessage.
* gs_output-remessage = ls_export-remessage.
APPEND gs_output TO et_data.
CLEAR: gs_output,lt_export.
ENDLOOP.
ENDIF.
"添加更改日志
PERFORM frm_0001_update_log USING gs_input.
UPDATE mara SET texture = gs_input-texture
zz_spec = gs_input-zz_spec
zz_model = gs_input-zz_model
zz_fcode = gs_input-zz_fcode
zz_func = gs_input-zz_func
zz_ibin = gs_input-zz_ibin"增加是否激活D20220422
zz_pjcode = gs_input-zz_pjcode"增加是否激活D20220422
zz_mode = gs_input-zz_mode"增加激活方式D20231024
WHERE matnr = gs_input-material.
COMMIT WORK AND WAIT.
ENDIF.
ENDFORM.
FORM frm_0001_update_log USING gs_input LIKE zstru_plm_d_0001_input.
DATA: zz_spec_chang TYPE mara-zz_spec, ""规格
texture_chang TYPE mara-texture, ""材质
zz_model_chang TYPE mara-zz_model, ""型号
zz_fcode_chang TYPE mara-zz_fcode, ""功能码
zz_func_chang TYPE mara-zz_func, "功能配置
zz_ibin_chang TYPE mara-zz_ibin, "是否激活D20220422
zz_pjcode_chang TYPE mara-zz_pjcode, "配件码D20220522
zz_mode_chang TYPE mara-zz_mode. "激活方式D20231024
DATA: it_zmm02ul TYPE TABLE OF zmm02ul WITH HEADER LINE .
DATA wk_number TYPE c LENGTH 10.
REFRESH it_zmm02ul[].
CLEAR it_zmm02ul.
"规格
SELECT SINGLE zz_spec FROM mara INTO zz_spec_chang WHERE matnr = gs_input-material.
IF zz_spec_chang IS INITIAL.
IF gs_input-zz_spec IS NOT INITIAL.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_SPEC'.
it_zmm02ul-zfield1n = '规格'.
it_zmm02ul-zu_type = '插入'.
it_zmm02ul-zoldvl = zz_spec_chang.
it_zmm02ul-znewvl = gs_input-zz_spec.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ENDIF.
ELSE.
IF gs_input-zz_spec IS INITIAL.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_SPEC'.
it_zmm02ul-zfield1n = '规格'.
it_zmm02ul-zu_type = '删除'.
it_zmm02ul-zoldvl = zz_spec_chang.
it_zmm02ul-znewvl = gs_input-zz_spec.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ELSE.
IF gs_input-zz_spec <> zz_spec_chang.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_SPEC'.
it_zmm02ul-zfield1n = '规格'.
it_zmm02ul-zu_type = '变更'.
it_zmm02ul-zoldvl = zz_spec_chang.
it_zmm02ul-znewvl = gs_input-zz_spec.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ENDIF.
ENDIF.
ENDIF.
IF it_zmm02ul IS NOT INITIAL.
APPEND it_zmm02ul.
ENDIF.
CLEAR it_zmm02ul.
"材质
SELECT SINGLE texture FROM mara INTO texture_chang WHERE matnr = gs_input-material.
IF texture_chang IS INITIAL.
IF gs_input-texture IS NOT INITIAL.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'TEXTURE'.
it_zmm02ul-zfield1n = '材质'.
it_zmm02ul-zu_type = '插入'.
it_zmm02ul-zoldvl = texture_chang.
it_zmm02ul-znewvl = gs_input-texture.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ENDIF.
ELSE.
IF gs_input-texture IS INITIAL.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'TEXTURE'.
it_zmm02ul-zfield1n = '材质'.
it_zmm02ul-zu_type = '删除'.
it_zmm02ul-zoldvl = texture_chang.
it_zmm02ul-znewvl = gs_input-texture.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ELSE.
IF gs_input-texture <> texture_chang.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'TEXTURE'.
it_zmm02ul-zfield1n = '材质'.
it_zmm02ul-zu_type = '变更'.
it_zmm02ul-zoldvl = texture_chang.
it_zmm02ul-znewvl = gs_input-texture.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ENDIF.
ENDIF.
ENDIF.
IF it_zmm02ul IS NOT INITIAL.
APPEND it_zmm02ul.
ENDIF.
CLEAR it_zmm02ul.
"型号
SELECT SINGLE zz_model FROM mara INTO zz_model_chang WHERE matnr = gs_input-material.
IF zz_model_chang IS INITIAL.
IF gs_input-zz_model IS NOT INITIAL.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_MODEL'.
it_zmm02ul-zfield1n = '型号'.
it_zmm02ul-zu_type = '插入'.
it_zmm02ul-zoldvl = zz_model_chang.
it_zmm02ul-znewvl = gs_input-zz_model.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ENDIF.
ELSE.
IF gs_input-zz_model IS INITIAL.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_MODEL'.
it_zmm02ul-zfield1n = '型号'.
it_zmm02ul-zu_type = '删除'.
it_zmm02ul-zoldvl = zz_model_chang.
it_zmm02ul-znewvl = gs_input-zz_model.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ELSE.
IF gs_input-zz_model <> zz_model_chang.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_MODEL'.
it_zmm02ul-zfield1n = '型号'.
it_zmm02ul-zu_type = '变更'.
it_zmm02ul-zoldvl = zz_model_chang.
it_zmm02ul-znewvl = gs_input-zz_model.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ENDIF.
ENDIF.
ENDIF.
IF it_zmm02ul IS NOT INITIAL.
APPEND it_zmm02ul.
ENDIF.
CLEAR it_zmm02ul.
"功能码
SELECT SINGLE zz_fcode FROM mara INTO zz_fcode_chang WHERE matnr = gs_input-material.
IF zz_fcode_chang IS INITIAL.
IF gs_input-zz_fcode IS NOT INITIAL.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_FCODE'.
it_zmm02ul-zfield1n = '功能码'.
it_zmm02ul-zu_type = '插入'.
it_zmm02ul-zoldvl = zz_fcode_chang.
it_zmm02ul-znewvl = gs_input-zz_fcode.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ENDIF.
ELSE.
IF gs_input-zz_fcode IS INITIAL.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_FCODE'.
it_zmm02ul-zfield1n = '功能码'.
it_zmm02ul-zu_type = '删除'.
it_zmm02ul-zoldvl = zz_fcode_chang.
it_zmm02ul-znewvl = gs_input-zz_fcode.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ELSE.
IF gs_input-zz_fcode <> zz_fcode_chang.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_FCODE'.
it_zmm02ul-zfield1n = '功能码'.
it_zmm02ul-zu_type = '变更'.
it_zmm02ul-zoldvl = zz_fcode_chang.
it_zmm02ul-znewvl = gs_input-zz_fcode.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ENDIF.
ENDIF.
ENDIF.
IF it_zmm02ul IS NOT INITIAL.
APPEND it_zmm02ul.
ENDIF.
CLEAR it_zmm02ul.
"功能配置
SELECT SINGLE zz_func FROM mara INTO zz_func_chang WHERE matnr = gs_input-material.
IF zz_func_chang IS INITIAL.
IF gs_input-zz_func IS NOT INITIAL.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_FUNC'.
it_zmm02ul-zfield1n = '功能配置'.
it_zmm02ul-zu_type = '插入'.
it_zmm02ul-zoldvl = zz_func_chang.
it_zmm02ul-znewvl = gs_input-zz_func.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ENDIF.
ELSE.
IF gs_input-zz_func IS INITIAL.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_FUNC'.
it_zmm02ul-zfield1n = '功能配置'.
it_zmm02ul-zu_type = '删除'.
it_zmm02ul-zoldvl = zz_func_chang.
it_zmm02ul-znewvl = gs_input-zz_func.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ELSE.
IF gs_input-zz_func <> zz_func_chang.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_FUNC'.
it_zmm02ul-zfield1n = '功能配置'.
it_zmm02ul-zu_type = '变更'.
it_zmm02ul-zoldvl = zz_func_chang.
it_zmm02ul-znewvl = gs_input-zz_func.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ENDIF.
ENDIF.
ENDIF.
IF it_zmm02ul IS NOT INITIAL.
APPEND it_zmm02ul.
ENDIF.
CLEAR it_zmm02ul.
"是否激活字段addD20220422
SELECT SINGLE zz_ibin FROM mara INTO zz_ibin_chang WHERE matnr = gs_input-material.
IF zz_ibin_chang IS INITIAL.
IF gs_input-zz_func IS NOT INITIAL.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_IBIN'.
it_zmm02ul-zfield1n = '是否激活'.
it_zmm02ul-zu_type = '插入'.
it_zmm02ul-zoldvl = zz_ibin_chang.
it_zmm02ul-znewvl = gs_input-zz_ibin.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ENDIF.
ELSE.
IF gs_input-zz_ibin IS INITIAL.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_IBIN'.
it_zmm02ul-zfield1n = '是否激活'.
it_zmm02ul-zu_type = '删除'.
it_zmm02ul-zoldvl = zz_ibin_chang.
it_zmm02ul-znewvl = gs_input-zz_ibin.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ELSE.
IF gs_input-zz_ibin <> zz_ibin_chang.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_IBIN'.
it_zmm02ul-zfield1n = '是否激活'.
it_zmm02ul-zu_type = '变更'.
it_zmm02ul-zoldvl = zz_ibin_chang.
it_zmm02ul-znewvl = gs_input-zz_ibin.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ENDIF.
ENDIF.
ENDIF.
"配件码addD20220522
SELECT SINGLE zz_pjcode FROM mara INTO zz_pjcode_chang WHERE matnr = gs_input-material.
IF zz_pjcode_chang IS INITIAL.
IF gs_input-zz_pjcode IS NOT INITIAL.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_PJCODE'.
it_zmm02ul-zfield1n = '配件码'.
it_zmm02ul-zu_type = '插入'.
it_zmm02ul-zoldvl = zz_pjcode_chang.
it_zmm02ul-znewvl = gs_input-zz_pjcode.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ENDIF.
ELSE.
IF gs_input-zz_pjcode IS INITIAL.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_PJCODE'.
it_zmm02ul-zfield1n = '配件码'.
it_zmm02ul-zu_type = '删除'.
it_zmm02ul-zoldvl = zz_pjcode_chang.
it_zmm02ul-znewvl = gs_input-zz_pjcode.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ELSE.
IF gs_input-zz_pjcode <> zz_pjcode_chang.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_PJCODE'.
it_zmm02ul-zfield1n = '配件码'.
it_zmm02ul-zu_type = '变更'.
it_zmm02ul-zoldvl = zz_pjcode_chang.
it_zmm02ul-znewvl = gs_input-zz_pjcode.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ENDIF.
ENDIF.
ENDIF.
REFRESH it_zmm02ul[].
CLEAR it_zmm02ul.
"激活方式addD20231024
SELECT SINGLE zz_mode FROM mara INTO zz_mode_chang WHERE matnr = gs_input-material.
IF zz_mode_chang IS INITIAL.
IF gs_input-zz_spec IS NOT INITIAL.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_MODE'.
it_zmm02ul-zfield1n = '激活方式'.
it_zmm02ul-zu_type = '插入'.
it_zmm02ul-zoldvl = zz_mode_chang .
it_zmm02ul-znewvl = gs_input-zz_mode.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ENDIF.
ELSE.
IF gs_input-zz_spec IS INITIAL.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_MODE'.
it_zmm02ul-zfield1n = '激活方式'.
it_zmm02ul-zu_type = '删除'.
it_zmm02ul-zoldvl = zz_mode_chang .
it_zmm02ul-znewvl = gs_input-zz_mode.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ELSE.
IF gs_input-zz_spec <> zz_spec_chang.
it_zmm02ul-matnr = gs_input-material.
it_zmm02ul-zfield1 = 'ZZ_MODE'.
it_zmm02ul-zfield1n = '激活方式'.
it_zmm02ul-zu_type = '变更'.
it_zmm02ul-zoldvl = zz_mode_chang.
it_zmm02ul-znewvl = gs_input-zz_mode.
it_zmm02ul-zdata = sy-datum.
it_zmm02ul-ztime = sy-uzeit.
it_zmm02ul-bname = sy-uname.
ENDIF.
ENDIF.
ENDIF.
IF it_zmm02ul IS NOT INITIAL.
APPEND it_zmm02ul.
ENDIF.
CLEAR it_zmm02ul.
IF it_zmm02ul[] IS NOT INITIAL.
CLEAR wk_number.
CALL FUNCTION 'NUMBER_RANGE_ENQUEUE '
EXPORTING
object = 'ZMMRP002'
EXCEPTIONS
foreign_lock = 1
object_not_found = 2
system_failure = 3
OTHERS = 4.
IF sy-subrc = 0.
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = '00'
object = 'ZMMRP002'
IMPORTING
number = wk_number
EXCEPTIONS
interval_not_found = 1
number_range_not_intern = 2
object_not_found = 3
quantity_is_0 = 4
quantity_is_not_1 = 5
interval_overflow = 6
buffer_overflow = 7
OTHERS = 8.
CALL FUNCTION 'NUMBER_RANGE_DEQUEUE '
EXPORTING
object = 'ZMMRP002'
EXCEPTIONS
object_not_found = 1
OTHERS = 2.
ELSE .
RAISE num_range_error .
ENDIF .
LOOP AT it_zmm02ul.
it_zmm02ul-zul_no = wk_number.
MODIFY it_zmm02ul TRANSPORTING zul_no.
CLEAR it_zmm02ul.
ENDLOOP.
MODIFY zmm02ul FROM TABLE it_zmm02ul[].
ENDIF.
ENDFORM.
返回的结果表
数据的传入表
数据的传出表