SAP物料主数据接口(无ECN升版)
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_forecastparameters TYPE bapi_mpop,
ls_forecastparametersx TYPE bapi_mpopx,
ls_storagelocationdata TYPE bapi_mard,
ls_storagelocationdatax TYPE bapi_mardx,
ls_storagetypedata TYPE bapi_mlgt,
ls_storagetypedatax TYPE bapi_mlgtx,
ls_warehousenumberdata TYPE bapi_mlgn,
ls_warehousenumberdatax TYPE bapi_mlgnx,
ls_salesdata TYPE bapi_mvke,
ls_salesdatax TYPE bapi_mvkex,
ls_valuationdata TYPE bapi_mbew,
ls_valuationdatax TYPE bapi_mbewx,
ls_makt TYPE bapi_makt,
ls_mlan TYPE bapi_mlan,
ls_unitsofmeasure TYPE bapi_marm,
ls_unitsofmeasurex TYPE bapi_marmx,
ls_return TYPE bapiret2,
ls_selfields LIKE sdibe_massfields,
ls_mdma LIKE mdma,
ls_dpop LIKE dpop,
ls_return3 LIKE bapireturn1,
lt_makt TYPE TABLE OF bapi_makt,
lt_mlan TYPE TABLE OF bapi_mlan,
lt_marm TYPE TABLE OF bapi_marm,
lt_marmx TYPE TABLE OF bapi_marmx,
lt_makt_ga TYPE TABLE OF bapi_makt_ga,
lt_mlan_ga TYPE TABLE OF bapi_mlan_ga,
lt_marm_ga TYPE TABLE OF bapi_marm_ga,
lt_unitsofmeasure TYPE TABLE OF bapi_marm,
lt_unitsofmeasurex TYPE TABLE OF bapi_marmx,
lt_return1 TYPE TABLE OF bapiret2,
lt_temp TYPE TABLE OF zsplm004.
.
DATA: lt_return TYPE TABLE OF bapiret2,
lv_matnr TYPE bapi1003_key-object,
lv_classtype TYPE bapi1003_key-classtype,
lv_classnum TYPE bapi1003_key-classnum,
lv_objectkeynew TYPE bapi1003_key-object,
lv_objecttablenew TYPE bapi1003_key-objecttable,
lv_classnumnew TYPE bapi1003_key-classnum,
lv_classtypenew TYPE bapi1003_key-classtype,
lv_berid LIKE mdma-berid,
lv_temp TYPE i,
lv_msg TYPE string.
IF NOT it_data[] IS INITIAL.
"销售组织
SELECT
tvkwz~vkorg,
tvkwz~vtweg,
t001w~werks,
t001w~land1
FROM
tvkwz
INNER JOIN t001w ON tvkwz~werks = t001w~werks
INTO TABLE @DATA(lt_tmp)
FOR ALL ENTRIES IN @it_data
WHERE
tvkwz~werks = @it_data-werks AND
tvkwz~vtweg = @it_data-vtweg AND
tvkwz~vkorg = @it_data-vkorg.
"公司
SELECT
bukrs
FROM
t001k
INTO TABLE @DATA(lt_t001k)
FOR ALL ENTRIES IN @it_data
WHERE
bwkey = @it_data-werks.
"MRP区域
SELECT
berid
INTO TABLE @DATA(lt_berid)
FROM
mdlv
FOR ALL ENTRIES IN @it_data
WHERE
werzg = @it_data-werks AND
berty NE '01'.
IF NOT lt_t001k IS INITIAL.
SELECT
t001~land1
FROM
t001
INNER JOIN tvko ON t001~bukrs = tvko~bukrs
APPENDING CORRESPONDING FIELDS OF TABLE @lt_tmp
FOR ALL ENTRIES IN @lt_t001k
WHERE
t001~bukrs = @lt_t001k-bukrs.
ENDIF.
SORT lt_tmp BY land1.
DELETE ADJACENT DUPLICATES FROM lt_tmp COMPARING land1.
IF NOT lt_tmp IS INITIAL.
SELECT
*
FROM
tstl
INTO TABLE @DATA(lt_tstl)
FOR ALL ENTRIES IN @lt_tmp
WHERE
talnd = @lt_tmp-land1.
ENDIF.
"物料MRP范围
SELECT
*
INTO TABLE @DATA(lt_mdma)
FROM
mdma
FOR ALL ENTRIES IN @it_data
WHERE
matnr = @it_data-matnr AND
werks = @it_data-werks
.
LOOP AT it_data .
MOVE-CORRESPONDING it_data TO ot_data.
"物料增加前导零
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = it_data-matnr
IMPORTING
output = it_data-matnr
EXCEPTIONS
length_error = 1
OTHERS = 2.
it_data-gewei = 'KG'.
"header
ls_headdata-material = it_data-matnr. "物料
ls_headdata-ind_sector = it_data-mbrsh."行业类型
ls_headdata-matl_type = it_data-mtart. "物料类型
************基本视图***********
IF i_basic = 'X'.
ls_headdata-basic_view = 'X'.
ls_makt-langu = 'E'.
ls_makt-matl_desc = it_data-maktx_en. "中文物料描述
APPEND ls_makt TO lt_makt.
ls_makt-langu = '1'.
ls_makt-matl_desc = it_data-maktx_zh. "英文物料描述
APPEND ls_makt TO lt_makt.
ls_clientdata-matl_group = it_data-matkl."物料组
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = it_data-meins
language = sy-langu
IMPORTING
output = it_data-meins
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
ls_clientdata-base_uom = it_data-meins."单位
ls_clientdata-old_mat_no = it_data-bismt."旧物料代码
ls_clientdata-extmatlgrp = it_data-extwg."外部物料组
ls_clientdata-dsn_office = it_data-labor."追溯标识
ls_clientdata-prod_alloc = it_data-kosch."产品分配确定程序
ls_clientdata-prod_hier = it_data-prdha."产品层次
ls_clientdata-allowed_wt = it_data-brgew."毛重
ls_clientdata-net_weight = it_data-ntgew."净重
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = it_data-gewei
language = sy-langu
IMPORTING
output = it_data-gewei
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
ls_clientdata-unit_of_wt = it_data-gewei."重量单位
ls_clientdata-size_dim = it_data-groes."大小/量纲
ls_clientdata-basic_matl = it_data-wrkst."基本物料号
ls_clientdata-prod_memo = it_data-ferth."生产/检验备忘录
ls_clientdata-std_descr = it_data-normt."工业标准描述
ls_clientdata-pageformat = it_data-formt."生产备忘录的页格式
ls_clientdata-document = it_data-zeinr."文档编号
ls_clientdata-doc_chg_no = it_data-aeszn."文档变更号(
ls_clientdata-doc_format = it_data-zeifo."文档页码
ls_clientdata-division = it_data-spart."产品组
ls_clientdata-item_cat = it_data-mtpos_mara."普通项目类别组
ls_clientdata-trans_grp = it_data-tragr."运输组
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = it_data-bstme
language = sy-langu
IMPORTING
output = it_data-bstme
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
ls_clientdata-po_unit = it_data-bstme."采购订单计量单位
ls_clientdata-pur_valkey = it_data-ekwsl."采购价值代码
ls_clientdata-manuf_prof = it_data-mprof."制造商档案
ls_clientdata-manu_mat = it_data-mfrpn."制造商
ls_clientdata-mfr_no = it_data-mfrnr."制造商号码
ls_clientdata-stor_conds = it_data-raube."仓储类型
ls_clientdata-stor_conds = it_data-raube."仓储类型
IF sy-mandt = '890'.
CASE it_data-mtart.
WHEN 'YA00'. it_data-xchpf = 'X'. "原材料
WHEN 'YB00'. it_data-xchpf = 'X'. "半成品
WHEN 'YC00'. it_data-xchpf = 'X'. "产成品
WHEN 'YD00'. it_data-xchpf = 'X'. "研发物料
WHEN 'YE00'. it_data-xchpf = ''. "辅料
WHEN 'YF00'. it_data-xchpf = ''. "备品备件
WHEN 'YG00'. it_data-xchpf = ''. "劳保用品
WHEN 'YX00'. it_data-xchpf = ''. "虚拟物料
WHEN OTHERS.
ENDCASE.
ENDIF.
ls_clientdata-batch_mgmt = it_data-xchpf."批次管理
ls_clientdatax-batch_mgmt = 'X'.
ls_clientdatax-matl_group = 'X'.
ls_clientdatax-base_uom = 'X'.
ls_clientdatax-old_mat_no = 'X'.
ls_clientdatax-extmatlgrp = 'X'.
ls_clientdatax-dsn_office = 'X'.
ls_clientdatax-prod_alloc = 'X'.
ls_clientdatax-prod_hier = 'X'.
ls_clientdatax-allowed_wt = 'X'.
ls_clientdatax-net_weight = 'X'.
IF ls_clientdata-unit_of_wt <> ''.
ls_clientdatax-unit_of_wt = 'X'.
ENDIF.
ls_clientdatax-size_dim = 'X'.
ls_clientdatax-basic_matl = 'X'.
ls_clientdatax-prod_memo = 'X'.
ls_clientdatax-std_descr = 'X'.
ls_clientdatax-pageformat = 'X'.
ls_clientdatax-document = 'X'.
ls_clientdatax-doc_chg_no = 'X'.
ls_clientdatax-doc_format = 'X'.
ls_clientdatax-division = 'X'.
ls_clientdatax-item_cat = 'X'.
ls_clientdatax-trans_grp = 'X'.
IF it_data-bstme NE it_data-meins.
ls_clientdatax-po_unit = 'X'.
ENDIF.
ls_clientdatax-manuf_prof = 'X'.
ls_clientdatax-manu_mat = 'X'."制造商
ls_clientdatax-mfr_no = 'X'."制造商号码
ls_clientdatax-stor_conds = 'X'."仓储类型
ENDIF.
************销售视图***********
IF i_sales = 'X'.
ls_headdata-sales_view = 'X'.
"税相关
LOOP AT lt_tstl INTO DATA(ls_tstl).
ls_mlan-depcountry = ls_tstl-talnd.
ls_mlan-tax_type_1 = ls_tstl-tatyp.
IF it_data-taxkm <> ''.
ls_mlan-taxclass_1 = it_data-taxkm.
ELSE.
ls_mlan-taxclass_1 = '0'.
ENDIF.
APPEND ls_mlan TO lt_mlan.
CLEAR: ls_tstl , ls_mlan.
ENDLOOP.
ls_salesdata-sales_org = it_data-vkorg."销售组织
ls_salesdata-distr_chan = it_data-vtweg."分销渠道
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = it_data-vrkme
language = sy-langu
IMPORTING
output = it_data-vrkme
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
ls_salesdata-sales_unit = it_data-vrkme."销售单位
ls_salesdata-delyg_plnt = it_data-dwerk."交货工厂
ls_salesdata-mat_pr_grp = it_data-versg."物料定价组
ls_salesdata-acct_assgt = it_data-ktgrm."科目设置组
ls_salesdata-item_cat = it_data-mtpos."来自物料主文件的项目类别组
ls_salesdata-matl_grp_3 = it_data-mvgr3."物料组3
ls_salesdata-matl_grp_4 = it_data-mvgr4."物料组4
ls_salesdatax-sales_org = it_data-vkorg.
ls_salesdatax-distr_chan = it_data-vtweg.
ls_salesdatax-sales_unit = 'X'.
ls_salesdatax-delyg_plnt = 'X'.
ls_salesdatax-mat_pr_grp = 'X'.
ls_salesdatax-acct_assgt = 'X'.
ls_salesdatax-item_cat = 'X'.
ls_salesdatax-matl_grp_3 = 'X'.
ls_salesdatax-matl_grp_4 = 'X'.
ENDIF.
***********采购视图***********
IF i_purchase = 'X'.
ls_headdata-purchase_view = 'X'.
ls_plantdata-plant = it_data-werks."工厂
ls_plantdata-loadinggrp = it_data-ladgr."装载组
ls_plantdata-base_qty_plan = it_data-vbamg."在装运中有关能力计划的基准数量
ls_plantdata-pur_group = it_data-ekgrp."采购组
ls_plantdata-auto_p_ord = it_data-kautb."标识: "允许自动采购订单"
ls_plantdata-batch_mgmt = it_data-xchpf."批次管理
ls_plantdata-quotausage = it_data-usequ."配额管理
ls_plantdata-sourcelist = it_data-kordb."源清单
ls_plantdata-gr_pr_time = it_data-webaz."收货处理时间
ls_plantdata-ind_post_to_insp_stock = it_data-insmk."过帐到检验库存
ls_plantdata-countryori = 'CN' .
ls_plantdatax-countryori = 'X'.
ls_plantdatax-plant = it_data-werks.
ls_plantdatax-loadinggrp = 'X'.
ls_plantdatax-base_qty_plan = 'X'.
ls_plantdatax-pur_group = 'X'.
ls_plantdatax-auto_p_ord = 'X'."
ls_plantdatax-batch_mgmt = 'X'.
ls_plantdatax-quotausage = 'X'.
ls_plantdatax-sourcelist = 'X'.
ls_plantdatax-gr_pr_time = 'X'."
ls_plantdatax-ind_post_to_insp_stock = 'X'.
IF NOT it_data-umren IS INITIAL AND NOT it_data-umrez IS INITIAL.
ls_unitsofmeasure-alt_unit = it_data-bstme. "订单单位
ls_unitsofmeasure-alt_unit_iso = it_data-bstme. "订单单位
ls_unitsofmeasure-denominatr = it_data-umren.
ls_unitsofmeasure-numerator = it_data-umrez.
APPEND ls_unitsofmeasure TO lt_unitsofmeasure.
CLEAR ls_unitsofmeasure.
ELSE.
ls_unitsofmeasure-alt_unit = it_data-bstme. "订单单位
ls_unitsofmeasure-alt_unit_iso = it_data-bstme. "订单单位
ls_unitsofmeasure-denominatr = 1.
ls_unitsofmeasure-numerator = 1.
APPEND ls_unitsofmeasure TO lt_unitsofmeasure.
CLEAR ls_unitsofmeasure.
ENDIF.
ls_unitsofmeasurex-alt_unit = it_data-bstme.
ls_unitsofmeasurex-alt_unit_iso = it_data-bstme.
ls_unitsofmeasurex-denominatr = 'X'.
ls_unitsofmeasurex-numerator = 'X'.
APPEND ls_unitsofmeasurex TO lt_unitsofmeasurex.
CLEAR ls_unitsofmeasurex.
IF NOT it_data-umren1 IS INITIAL AND NOT it_data-umrez1 IS INITIAL.
ls_unitsofmeasure-alt_unit = it_data-bstme. "订单单位
ls_unitsofmeasure-alt_unit_iso = it_data-bstme. "订单单位
ls_unitsofmeasure-denominatr = it_data-umren.
ls_unitsofmeasure-numerator = it_data-umrez.
APPEND ls_unitsofmeasure TO lt_unitsofmeasure.
CLEAR ls_unitsofmeasure.
ENDIF.
ls_unitsofmeasurex-alt_unit = it_data-bstme.
ls_unitsofmeasurex-alt_unit_iso = it_data-bstme.
ls_unitsofmeasurex-denominatr = 'X'.
ls_unitsofmeasurex-numerator = 'X'.
APPEND ls_unitsofmeasurex TO lt_unitsofmeasurex.
CLEAR ls_unitsofmeasurex.
ENDIF.
***********MRP视图***********
IF i_purchase = 'X'.
ls_headdata-mrp_view = 'X'.
ls_plantdata-mrp_group = it_data-disgr."MRP 组
ls_plantdata-abc_id = it_data-maabc."ABC标识
ls_plantdata-mrp_type = it_data-dismm."MRP类型
ls_plantdata-reorder_pt = it_data-minbe."再订货点
ls_plantdata-mrp_ctrler = it_data-dispo."MRP控制者
ls_plantdata-lotsizekey = it_data-disls."批量控制
ls_plantdata-max_stock = it_data-mabst."最大库存水平
ls_plantdata-round_prof = it_data-rdprf."舍入参数文件
ls_plantdata-round_val = it_data-bstrf."采购订单数量的舍入值
ls_plantdata-assy_scrap = it_data-ausss."装配报废率
ls_plantdata-proc_type = it_data-beskz."采购类型
ls_plantdata-spproctype = it_data-sobsl."特殊采购类
ls_plantdata-iss_st_loc = it_data-lgpro."发货存储地点
ls_plantdata-backflush = it_data-rgekz."是否反冲
ls_plantdata-sloc_exprc = it_data-lgfsb."外部采购默认仓码
ls_plantdata-plnd_delry = it_data-plifz."交期
ls_plantdata-sm_key = it_data-fhori."浮动排产时间容余码
ls_plantdata-safety_stk = it_data-eisbe."安全库存
ls_plantdata-safty_t_id = it_data-shflg."安全时间标识
ls_plantdata-safetytime = it_data-shzet."安全时间
ls_plantdata-mixed_mrp = it_data-miskz."综合MRP标识
ls_plantdata-availcheck = it_data-mtvfp."可用性
ls_plantdata-dep_req_id = it_data-sbdkz."独立/相关需求
ls_plantdata-rep_manuf = it_data-sauft."标识:允许的重复制造
ls_plantdata-repmanprof = it_data-sfepr."重复生产参数文
ls_plantdata-comp_scrap = it_data-kausf."组件报废率
ls_plantdata-period_ind = it_data-perkz."期间标识
ls_plantdata-auto_reset = it_data-autru."自动重置预测模式
ls_plantdata-production_scheduler = it_data-fevor."生产管理员
ls_plantdata-variance_key = it_data-awsls."差异码
ls_plantdata-profit_ctr = it_data-prctr."利润中心
ls_plantdata-plan_strgp = it_data-strgr.
ls_plantdata-pur_status = 'Z9'.
ls_plantdatax-lotsizekey = 'X'.
ls_plantdatax-plan_strgp = 'X'.
ls_plantdatax-pur_status = 'X'.
ls_plantdatax-mrp_group = 'X'.
ls_plantdatax-abc_id = 'X'.
ls_plantdatax-mrp_type = 'X'.
ls_plantdatax-reorder_pt = 'X'.
ls_plantdatax-mrp_ctrler = 'X'.
ls_plantdatax-max_stock = 'X'.
ls_plantdatax-round_prof = 'X'.
ls_plantdatax-round_val = 'X'.
ls_plantdatax-assy_scrap = 'X'.
ls_plantdatax-proc_type = 'X'.
ls_plantdatax-spproctype = 'X'.
ls_plantdatax-iss_st_loc = 'X'.
ls_plantdatax-backflush = 'X'.
ls_plantdatax-sloc_exprc = 'X'.
ls_plantdatax-plnd_delry = 'X'.
ls_plantdatax-sm_key = 'X'.
ls_plantdatax-safety_stk = 'X'.
ls_plantdatax-safty_t_id = 'X'.
ls_plantdatax-safetytime = 'X'.
ls_plantdatax-mixed_mrp = 'X'.
ls_plantdatax-availcheck = 'X'.
ls_plantdatax-dep_req_id = 'X'.
ls_plantdatax-rep_manuf = 'X'.
ls_plantdatax-repmanprof = 'X'.
ls_plantdatax-comp_scrap = 'X'.
ls_plantdatax-period_ind = 'X'.
ls_plantdatax-auto_reset = 'X'.
ls_plantdatax-production_scheduler = 'X'.
ls_plantdatax-variance_key = 'X'.
ls_plantdatax-profit_ctr = 'X'.
ENDIF.
***********存储视图***********
IF i_storage = 'X'.
ls_headdata-storage_view = 'X'.
ls_clientdata-shelf_life = it_data-mhdhb."总货架寿命
ls_clientdata-minremlife = it_data-mhdrz."最短剩余货架寿命
ls_clientdata-batch_mgmt = it_data-xchpf."批次管理需求
ls_clientdatax-shelf_life = 'X'.
ls_clientdatax-minremlife = 'X'.
ls_clientdatax-batch_mgmt = 'X'.
ls_plantdata-plant = it_data-werks. "工厂
ls_plantdata-production_scheduler = it_data-fevor. "生产管理员
ls_plantdata-batch_mgmt = it_data-xchpf. "批次管理
ls_plantdata-availcheck = it_data-mtvfp. "可用性检查
ls_plantdatax-plant = it_data-werks.
ls_plantdatax-production_scheduler = 'X'.
ls_plantdatax-batch_mgmt = 'X'.
ls_plantdatax-availcheck = 'X'.
ENDIF.
***********质量视图***********
IF i_quality = 'X'.
ls_headdata-quality_view = 'X'.
ls_plantdata-plant = it_data-werks. "工厂
ls_plantdata-gr_pr_time = it_data-webaz. "收货处理时间
ls_plantdata-ind_post_to_insp_stock = it_data-insmk. "过账到检验库存
ls_plantdata-insp_int = it_data-prfrq. "检查间隔
ls_plantdatax-plant = it_data-werks.
ls_plantdatax-gr_pr_time = 'X'.
ls_plantdatax-ind_post_to_insp_stock = 'X'.
ls_plantdatax-insp_int = 'X'.
ENDIF.
***********仓库管理视图***********
IF i_warehouse = 'X'.
ls_headdata-warehouse_view = 'X'.
ls_plantdata-plant = it_data-werks. "工厂
ls_warehousenumberdata-whse_no = it_data-lgnum. "仓库号
ls_storagetypedata-whse_no = it_data-lgnum. "仓库号
ls_storagetypedata-stge_type = it_data-lgtyp. "存储类型
ls_plantdatax-plant = it_data-werks.
ls_warehousenumberdatax-whse_no = it_data-lgnum.
ls_storagetypedatax-whse_no = it_data-lgnum.
ls_storagetypedatax-stge_type = it_data-lgtyp.
ENDIF.
***********预测视图***********
IF i_forecast = 'X'.
ls_headdata-forecast_view = 'X'.
ls_forecastparameters-fore_model = it_data-prmod."预测模型
ls_forecastparameters-hist_vals = it_data-peran."历史的期间数
ls_forecastparameters-fore_pds = it_data-anzpr."预测期间数
ls_forecastparameters-season_pds = it_data-perio."每季节循环的期间数
ls_forecastparameters-initialize = it_data-kzini."初始化标识
ls_forecastparameters-tracklimit = it_data-siggr."追踪限制
ls_forecastparameters-model_sp = it_data-modav."模型选择过程
ls_forecastparametersx-fore_model = 'X'.
ls_forecastparametersx-hist_vals = 'X'.
ls_forecastparametersx-fore_pds = 'X'.
ls_forecastparametersx-season_pds = 'X'.
ls_forecastparametersx-initialize = 'X'.
ls_forecastparametersx-tracklimit = 'X'.
ls_forecastparametersx-model_sp = 'X'.
ENDIF.
***********财务视图***********
IF i_finance = 'X'.
ls_headdata-account_view = 'X'. "会计视图
ls_headdata-cost_view = 'X'. "成本视图
IF it_data-mlast IS INITIAL.
IF it_data-bklas = '3000' OR it_data-bklas = '3010' OR it_data-bklas = '7900' OR it_data-bklas = '7920' .
it_data-mlast = '3'.
ENDIF.
IF it_data-bklas = '5000' OR it_data-bklas = '5010' OR it_data-bklas = '5020' OR it_data-bklas = '5990' .
it_data-mlast = '2'.
ENDIF.
ENDIF.
ls_valuationdata-val_area = it_data-werks. "bwkey
ls_valuationdata-val_class = it_data-bklas. "评估类
ls_valuationdata-price_ctrl = it_data-vprsv. "价格控制
ls_valuationdata-price_unit = it_data-peinh. "格单位
ls_valuationdata-ml_active = it_data-mlmaa. "ML作业
ls_valuationdata-ml_settle = it_data-mlast. "价格确定
ls_valuationdata-qty_struct = it_data-ekalr. "用QS的成本估算
ls_valuationdata-orig_mat = it_data-hkmat. "源物料
ls_valuationdata-orig_group = it_data-hrkft_1."原始组
ls_valuationdata-overhead_grp = it_data-kosgr. "成本核算间接费用组
ls_valuationdata-plndprice1 = it_data-zplp1. "计划价格1
ls_valuationdata-plndprdate1 = it_data-zpld1. "计划价格日期1
ls_valuationdatax-val_area = it_data-werks.
ls_valuationdatax-val_class = 'X'.
ls_valuationdatax-price_ctrl = 'X'.
ls_valuationdatax-price_unit = 'X'.
ls_valuationdatax-ml_active = 'X'.
ls_valuationdatax-ml_settle = 'X'.
ls_valuationdatax-qty_struct = 'X'.
ls_valuationdatax-orig_mat = 'X'.
ls_valuationdatax-orig_group = 'X'.
ls_valuationdatax-overhead_grp = 'X'.
ls_valuationdatax-plndprice1 = 'X'.
ls_valuationdatax-plndprdate1 = 'X'.
ENDIF.
ls_headdata-work_sched_view = 'X'.
ls_headdata-quality_view = 'X'.
"创建物料主数据
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
headdata = ls_headdata
clientdata = ls_clientdata
clientdatax = ls_clientdatax
plantdata = ls_plantdata
plantdatax = ls_plantdatax
storagelocationdata = ls_storagelocationdata
storagelocationdatax = ls_storagelocationdatax
warehousenumberdata = ls_warehousenumberdata
warehousenumberdatax = ls_warehousenumberdatax
forecastparameters = ls_forecastparameters
forecastparametersx = ls_forecastparametersx
valuationdata = ls_valuationdata
valuationdatax = ls_valuationdatax
salesdata = ls_salesdata
salesdatax = ls_salesdatax
storagetypedata = ls_storagetypedata
storagetypedatax = ls_storagetypedatax
IMPORTING
return = ls_return
TABLES
materialdescription = lt_makt
unitsofmeasure = lt_marm
unitsofmeasurex = lt_marmx
taxclassifications = lt_mlan.
IF ls_return-type CA 'EAX'..
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
o_type = 'E'.
o_msg = ls_return-message.
ot_data-ztype = ls_return-type.
ot_data-zmsg = ls_return-message.
* PERFORM update_status(zfunc) USING lv_zz_log_id 'E' l_msgtxt.
* INCLUDE zfunc_end.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
CALL FUNCTION 'CONVERSION_EXIT_CCMAT_INPUT'
EXPORTING
input = it_data-matnr
IMPORTING
output = lv_matnr.
* ""修改版次
* CALL FUNCTION 'CCAP_REV_LEVEL_MAINTAIN'
* EXPORTING
* change_no = it_data-aennr
* material = lv_matnr
* rev_level_new = it_data-revlv
* fl_commit_and_wait = 'X'
* EXCEPTIONS
* change_no_not_exists = 1
* error = 2
* revision_level_exists = 3
* OTHERS = 4.
*
* IF sy-subrc = 0.
*
* CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* wait = 'X'.
*
* ELSE.
*
* CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*
* o_type = 'E'.
*
* IF NOT o_msg IS INITIAL.
* o_msg = o_msg && '/' && ls_return3-message.
* ELSE.
* o_msg = lv_msg.
* ENDIF.
*
* ot_data-ztype = 'E'.
*
* MESSAGE ID sy-msgid
* TYPE sy-msgty
* NUMBER sy-msgno
* WITH sy-msgv1
* sy-msgv2
* sy-msgv3
* sy-msgv4
* INTO lv_msg.
*
* IF ot_data-zmsg IS INITIAL.
* ot_data-zmsg = ot_data-zmsg && '/' && lv_msg.
* ELSE.
* ot_data-zmsg = lv_msg.
* ENDIF.
*
** PERFORM update_status(zfunc) USING lv_zz_log_id 'E' l_msgtxt.
** INCLUDE zfunc_end.
* ENDIF.
***********分类视图***********
* IF o_type NE 'E'.
IF ot_data-ztype NE 'E'.
IF it_data-classtype IS NOT INITIAL.
lv_objectkeynew = ls_headdata-material.
lv_classtypenew = it_data-classtype.
lv_classnumnew = it_data-classnum.
CALL FUNCTION 'BAPI_OBJCL_CREATE'
EXPORTING
objectkeynew = lv_objectkeynew
objecttablenew = lv_objecttablenew
classnumnew = lv_classnumnew
classtypenew = lv_classtypenew
* STATUS = '1'
standardclass = 'X' "此处务必赋值‘X’,是为了bapi执行成功之后,MM03查看物料可以看到分类视图
TABLES
return = lt_return1.
IF line_exists( lt_return1[ type = 'E' ] ) OR line_exists( lt_return1[ type = 'A' ] ).
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CLEAR lv_msg.
LOOP AT lt_return1 INTO DATA(ls_return1).
lv_msg = lv_msg && ls_return1-message.
CLEAR ls_return1.
ENDLOOP.
ot_data-ztype = 'E'.
IF NOT ot_data-zmsg IS INITIAL.
ot_data-zmsg = ot_data-zmsg && '/' && lv_msg.
ELSE.
ot_data-zmsg = lv_msg.
ENDIF.
o_type = 'E'.
IF NOT o_msg IS INITIAL.
o_msg = o_msg && '/' && ls_return3-message.
ELSE.
o_msg = lv_msg.
ENDIF.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
IF lt_mdma IS INITIAL.
"MRP区域扩充
LOOP AT lt_berid INTO DATA(ls_berid).
ls_selfields-xdispo = 'X'.
ls_selfields-xdismm = 'X'.
ls_selfields-xdisls = 'X'.
ls_mdma-matnr = it_data-matnr.
ls_mdma-werks = it_data-werks.
ls_mdma-berid = ls_berid-berid.
ls_mdma-dispo = it_data-dispo.
ls_mdma-dismm = 'ND'."MRP类型
CALL FUNCTION 'MD_MRP_LEVEL_CREATE_DATA'
EXPORTING
i_matnr = it_data-matnr
i_werk = it_data-werks
i_mrp_area = ls_berid-berid
i_selfields = ls_selfields
i_mdma = ls_mdma
i_dpop = ls_dpop
IMPORTING
e_error_return = ls_return3.
IF ls_return3-type CA 'EAX'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
IF NOT o_msg IS INITIAL.
o_msg = o_msg && '/' && ls_return3-message.
ELSE.
o_msg = lv_msg.
ENDIF.
ot_data-ztype = 'E'.
IF NOT ot_data-zmsg IS INITIAL.
ot_data-zmsg = ot_data-zmsg && '/' && ls_return3-message.
ELSE.
ot_data-zmsg = lv_msg.
ENDIF.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
CLEAR:ls_berid,
ls_selfields,
ls_mdma,
ls_dpop,
ls_return3.
ENDLOOP.
ENDIF.
APPEND ot_data.
CLEAR: it_data,
ot_data,
ls_headdata,
ls_clientdata,
ls_clientdatax,
ls_plantdata,
ls_plantdatax,
ls_forecastparameters,
ls_forecastparametersx,
ls_storagelocationdata,
ls_storagelocationdatax,
ls_storagetypedata,
ls_storagetypedatax,
ls_warehousenumberdata,
ls_warehousenumberdatax,
ls_salesdata,
ls_salesdatax,
ls_valuationdata,
ls_valuationdatax,
ls_makt,
ls_mlan,
ls_unitsofmeasure,
ls_unitsofmeasurex,
ls_return,
ls_selfields,
ls_mdma,
ls_dpop,
ls_return3,
lt_makt,
lt_mlan,
lt_marm,
lt_marmx,
lt_makt_ga,
lt_mlan_ga,
lt_marm_ga,
lt_return1,
lt_return,
lv_matnr,
lv_classtype,
lv_classnum,
lv_objectkeynew,
lv_objecttablenew,
lv_classnumnew,
lv_classtypenew,
lv_berid,
lv_msg.
ENDLOOP.
* IF o_type IS INITIAL.
* o_type = 'S'.
* o_msg = '物料主数据创建成功'.
* ELSE.
* lt_temp = VALUE #( FOR lt_data IN ot_data[] WHERE ( ztype EQ 'E' ) ( lt_data ) ).
* DESCRIBE TABLE lt_temp LINES lv_temp.
* ENDIF.
lt_temp = VALUE #( FOR ls_temp IN ot_data[] WHERE ( ztype = 'E' ) ( ls_temp ) ).
DESCRIBE TABLE lt_temp LINES lv_temp.
IF lv_temp GT 1.
o_type = 'E'.
o_msg = '物料主数据创建失败请查看明细数据'.
ELSEIF lv_temp EQ 0.
o_type = 'S'.
o_msg = '物料主数据创建成功'.
ENDIF.
ELSE.
o_type = 'E'.
o_msg = '无输入数据'.
ENDIF.
总结
物料主数据字段较多,大家可以在使用过程中酌情对字段进行调整,这一版是没有物料版次的,后续会更新通过ECN进行物料升版的接口