SAP-PLM创建物料主数据接口

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.

返回的结果表在这里插入图片描述
数据的传入表
在这里插入图片描述在这里插入图片描述
在这里插入图片描述数据的传出表
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值