您的位置:首页 > 其它

调用BAPI_MATERIAL_SAVEDATA批量创建/修改物料

2014-07-17 10:02 806 查看
report  ytest_savemat.

data: headdata                type bapimathead,     "表头数据

      clientdata              type bapi_mara,       "基本数据

      clientdatax             type bapi_marax.
data: materialdescription type table of bapi_makt with header line."描述
data: unitsofmeasure type table of bapi_marm with header line."
data: unitsofmeasurex type table of bapi_marmx with header line."

  data pr_unit type meins."基本单位

  data pr_unit2 type meins."重量单位

  data return type bapiret2.

data: begin of msg occurs 0,

material type matnr,

description type maktx,
message(97) type c,
end of msg.

data:begin of itab occurs 0,

  head_material type matnr,"物料号

  head_ind_sector type mbrsh,"行业领域

  head_matl_type type mtart,"物料类型

  t_makt_matl_desc type maktx,"物料描述

  mara_base_uom type meins,"基本计量单位

  mara_matl_group type matkl,"物料组

  t_old_mat_no type bismt,"型号

  mara_division type spart,"产品组

  t_dsn_office type labor,"实验室/办公室

  mara_item_cat type mtpos_mara,"普通项目组类别

  t_marm_gross_wt type brgew,"毛重

  mara_unit_of_wt type gewei,"重量单位

  mara_net_weight type ntgew,"净重

  mara_size_dim type groes,"大小/量纲

end of itab.
data itab1 type itab occurs 0 with header line.

perform putdata.
perform run.

form run.
loop at itab.

  clear headdata.

  headdata-material       = itab-head_material.

  headdata-matl_type      = itab-head_matl_type.

  headdata-ind_sector     = itab-head_ind_sector.

  headdata-basic_view     = 'X'.  "基本数据视图

  clear pr_unit.

  clear pr_unit2.

  perform frm_unit using itab-mara_base_uom changing pr_unit."基本单位

  perform frm_unit using itab-mara_unit_of_wt changing pr_unit2."重量单位

  clear clientdata.

  clientdata-base_uom = pr_unit."基本计量单位

  clientdata-matl_group = itab-mara_matl_group."物料组

  clientdata-old_mat_no = itab-t_old_mat_no."型号

  clientdata-division = itab-mara_division."产品组

  clientdata-dsn_office = itab-t_dsn_office."实验室/办公室

  clientdata-item_cat = itab-mara_item_cat."普通项目组类别

  clientdata-unit_of_wt = pr_unit2."重量单位

  clientdata-net_weight = itab-mara_net_weight."净重

  clientdata-size_dim = itab-mara_size_dim."大小/量纲

  "bapi_mara 的复选框结构

  clear clientdatax.

  clientdatax-base_uom = 'X'."基本计量单位

  clientdatax-matl_group = 'X'."物料组

  clientdatax-old_mat_no = 'X'."型号

  clientdatax-division = 'X'."产品组

  clientdatax-dsn_office = 'X'."实验室/办公室

  clientdatax-item_cat = 'X'."普通项目组类别

  clientdatax-unit_of_wt = 'X'."重量单位

  clientdatax-net_weight = 'X'."净重

  clientdatax-size_dim = 'X'."大小/量纲

  "计量单位

  unitsofmeasure-alt_unit = pr_unit.    "替换单位(必须为基本计量单位,否则会报错,说没有转换因子什么的)

  unitsofmeasure-numerator = 1.    "分子

  unitsofmeasure-denominatr = 1.    "分母

  unitsofmeasure-gross_wt = itab-t_marm_gross_wt."毛重

  unitsofmeasure-unit_of_wt = pr_unit2."需要填充毛重的话,注意此处需要添加重量单位,否则会一直提示你没有指定单位

  append unitsofmeasure.

  clear unitsofmeasure.

  unitsofmeasurex-alt_unit = pr_unit."注意此处不是填充'X'

  unitsofmeasurex-numerator = 'X'.

  unitsofmeasurex-denominatr = 'X'.

  unitsofmeasurex-gross_wt = 'X'.

  unitsofmeasurex-unit_of_wt = 'X'."此处填充'X'

  if unitsofmeasurex-alt_unit is not initial and unitsofmeasurex-numerator is not initial and unitsofmeasurex-denominatr is not initial.

    append unitsofmeasurex.

  endif.

  clear unitsofmeasurex.

  "物料描述

  clear materialdescription[].

  materialdescription-langu_iso = 'ZH'.

  materialdescription-matl_desc = itab-t_makt_matl_desc.

  append materialdescription.

  clear return.

    call function 'BAPI_MATERIAL_SAVEDATA'

      exporting

        headdata            = headdata

        clientdata          = clientdata

        clientdatax         = clientdatax

      importing

        return              = return

      tables

        materialdescription = materialdescription[]

        unitsofmeasure = unitsofmeasure[]

        unitsofmeasurex = unitsofmeasurex[].

    if return-type ne 'E'.

      call function 'BAPI_TRANSACTION_COMMIT'

      exporting

        wait          = 'X' .

    else.

      call function 'bapi_transaction_rollback'.

    endif.

endloop.
write : return-type,return-message.
endform.

form putdata.

  itab-head_material = '10101010105'.

  itab-head_ind_sector = 'M'.

  itab-head_matl_type = 'zroh'.

  itab-mara_base_uom = '个'."基本计量单位

  itab-mara_matl_group = '10235'."物料组

  itab-t_old_mat_no = 'testbapi05'."型号

  itab-mara_division = '00'."产品组

  itab-t_dsn_office = '001'."实验室/办公室

  itab-mara_item_cat = 'NORM'."普通项目组类别

  itab-mara_net_weight = 2."净重
*  itab-mara_normt = ''."行业标准描述

  itab-mara_size_dim = '2*3'."大小/量纲

  itab-t_marm_gross_wt = 22 / 10."毛重

  itab-mara_unit_of_wt = 'KG'."重量单位

  itab-t_makt_matl_desc = 'test mat 0005'.

    call function 'CONVERSION_EXIT_ALPHA_INPUT'"

      exporting

        input  = itab-head_material

      importing

        output = itab-head_material.

  append itab.

endform.

*获取基本计量单位内码

form frm_unit using unit1 changing unit2.

  call function 'CONVERSION_EXIT_CUNIT_INPUT'

    exporting      input          = unit1

                   language       = sy-langu

    importing      output         = unit2

    exceptions      unit_not_found = 1

    others         = 2.

  if sy-subrc <> 0.
*   message id sy-msgid type sy-msgty number sy-msgno
*           with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  endif.
endform.                    "frm_unit
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: