BAPI实现批量创建物料 BAPI_TRANSACTION_COMMIT

  1. 上传EXCEL文件,读取EXCEL文件内容保存到内表。
  2. bapi赋值
  3. 调用BAPI_TRANSACTION_COMMIT创建物料

DATA: lv_unit TYPE meins, "基本计量单位
bapi_exe_result(1) TYPE c."bapi执行结果标识

DATA: BEGIN OF wa_material,
marc_plant TYPE werks_d, "工厂
mard_stge_loc TYPE lgort_d, "库存地点
mvke_sales_org TYPE vkorg, "销售组织
mvke_distr_chan TYPE vtweg, "分销渠道
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, "物料组
mara_extmatlgrp TYPE extwg, "外部物料组
mara_item_cat TYPE mtpos_mara, "普通项目组类别
t_marm_gross_wt TYPE brgew, "毛重
t_marm_unit_of_wt TYPE gewei, "重量单位
mara_net_weight TYPE ntgew, "净重
t_marm_volume TYPE volum, "标准箱
t_marm_volumeunit TYPE voleh, "体积单位
mvke_sales_unit TYPE vrkme, "销售单位
t_mlan_taxclass1 TYPE taxkm, "税分类1
t_mlan_taxclass2 TYPE taxkm, "税分类2
mvke_matl_stats TYPE stgma, "物料统计组
mvke_acct_assgt TYPE ktgrm, "科目设置组
mvke_item_cat TYPE mtpos, "来自物料主文件的项目主类别
marc_availcheck TYPE mtvfp, "可用性检查
mara_trans_grp TYPE tragr, "运输组
marc_loadinggrp TYPE ladgr, "装载组
marc_pur_group TYPE ekgrp, "采购组
marc_batch_mgmt TYPE xchpf, "批次管理标示
marc_auto_p_ord TYPE kautb, "自动采购订单
marc_ind_post_to_insp_stock TYPE insmk_mat, "过账到检验库存
marc_quotausage TYPE usequ, "配额安排
marc_sourcelist TYPE kordb, "源清单
marc_mrp_group TYPE disgr, "MRP组
marc_mrp_type TYPE dismm, ""MRP类型
marc_mrp_ctrler TYPE dispo, "MRP控制者
marc_lotsizekey TYPE disls, "批量
marc_minlotsize TYPE bstmi, "最小批量
marc_maxlotsize TYPE bstma, "最大批量
marc_round_val TYPE bstrf, "舍入值
marc_proc_type TYPE beskz, "采购类型
marc_backflush TYPE rgekm, "反冲
marc_plnd_delry TYPE plifz, "计划交货时间
marc_gr_pr_time TYPE webaz, "收货处理时间
marc_safety_stk TYPE eisbe, "安全库存
marc_sm_key TYPE fhori, " 计划边际码
marc_plan_strgp TYPE strgp, "策略组
marc_alt_bom_id TYPE altsl, "选择方法
stge_loc TYPE lgort_d, "库存地点,占位,不用取出赋值,同上边库存地点
mbew_val_class TYPE bklas, "评估类
mbew_price_ctrl TYPE vprsv, "价格控制
mbew_price_unit TYPE peinh, "价格单位
mbew_moving_pr TYPE verpr_bapi, "移动平均价
mbew_std_price TYPE stprs_bapi, "标准价格
mbew_qty_struct TYPE ck_ekalrel, "用QS的成本估算
mbew_orig_mat TYPE hkmat, "物料来源
mbew_vclass_py type vjbkl, "上一年评估类
mbew_pr_ctrl_py type vjvpr, " 价格控制
mbew_vclass_pp type vmbkl, "价格控制标识
mbew_pr_ctrl_pp type vmvpr, "价格控制标识
END OF wa_material.

DATA: lt_material LIKE TABLE OF wa_material.

DATA: BEGIN OF wa_message,
material TYPE matnr,
description TYPE maktx,
message(97) TYPE c,
END OF wa_message.

DATA: lt_message LIKE TABLE OF wa_message.

*输入参数
DATA: headdata TYPE bapimathead, "表头数据
clientdata TYPE bapi_mara, "基本数据
clientdatax TYPE bapi_marax,
plantdata TYPE bapi_marc, "工厂级别数据
plantdatax TYPE bapi_marcx,
forecastparameters TYPE bapi_mpop, "预测
forecastparametersx TYPE bapi_mpopx,
planningdata TYPE bapi_mpgd, "计划
planningdatax TYPE bapi_mpgdx,
storagelocationdata TYPE bapi_mard, "存储位置
storagelocationdatax TYPE bapi_mardx,
valuationdata TYPE bapi_mbew, "评估数据
valuationdatax TYPE bapi_mbewx,
warehousenumberdata TYPE bapi_mlgn, "仓库数据
warehousenumberdatax TYPE bapi_mlgnx,
salesdata TYPE bapi_mvke, "销售数据
salesdatax TYPE bapi_mvkex,
storagetypedata TYPE bapi_mlgt, "存储类型数据
storagetypedatax TYPE bapi_mlgtx.

*Table参数
DATA: materialdescription TYPE TABLE OF bapi_makt WITH HEADER LINE, "描述
unitsofmeasure TYPE TABLE OF bapi_marm WITH HEADER LINE, "单位
unitsofmeasurex TYPE TABLE OF bapi_marmx WITH HEADER LINE,
taxclassifications TYPE TABLE OF bapi_mlan WITH HEADER LINE. "税分类

*Return
DATA return TYPE bapiret2.

"data
types:BEGIN OF ty_data,
head_material type mara-matnr,
t_makt_matl_desc type makt-maktx,
head_ind_sector type mara-mbrsh,
head_matl_type type mara-mtart,
mara_matl_group type mara-matkl,
marc_plant type marc-werks,
chadi type mara-zzcountry,
marc_minlotsize type marc-bstmi,
marc_round_val type marc-bstrf,
marc_plnd_delry type marc-webaz,
sd type char1,
mara_base_uom TYPE meins,
marc_proc_type type beskz,
marc_mrp_type TYPE dismm,
mbew_vclass_py type vjbkl,
mbew_pr_ctrl_py type vjvpr,
mbew_vclass_pp type vmbkl,
mbew_pr_ctrl_pp type vmvpr,
mbew_price_ctrl type vprsv,
t_marm_unit_of_wt TYPE gewei,
marc_mrp_ctrler TYPE dispo,
marc_lotsizekey TYPE disls,
mbew_val_class TYPE bklas,
END OF ty_data.

data: gt_data type STANDARD TABLE OF ty_data,
gs_data type ty_data.

DATA:gv_title_folder TYPE string,
gv_window_title TYPE string,
gv_file_table TYPE filetable,
gv_rc TYPE i.

PARAMETERS:p_file TYPE localfile .

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
gv_window_title = ‘Upload Purchase Order’.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = gv_window_title
* default_extension =
* default_filename =
file_filter = cl_gui_frontend_services=>filetype_excel
* with_encoding =
* initial_directory =
* multiselection =
CHANGING
file_table = gv_file_table
rc = gv_rc
* user_action =
* file_encoding =
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSEIF gv_rc GE 1.
TRY .
p_file = gv_file_table[ 1 ]-filename.
CATCH cx_sy_itab_line_not_found.
ENDTRY.
ENDIF.

START-OF-SELECTION.
PERFORM get_data.
PERFORM create_matnr_data.

FORM get_data.
CHECK p_file IS NOT INITIAL.
TRANSLATE p_file TO UPPER CASE.

FIND ‘.XLS’ IN p_file.
IF sy-subrc = 0.
DATA lt_raw TYPE truxs_t_text_data.
CALL FUNCTION ‘TEXT_CONVERT_XLS_TO_SAP’
EXPORTING
i_field_seperator = ‘X’
i_line_header = ‘X’
i_tab_raw_data = lt_raw
i_filename = p_file
TABLES
i_tab_converted_data = gt_data
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.

loop at gt_data ASSIGNING FIELD-SYMBOL(<fs>).
   <fs>-mara_base_uom = 'PC'.
  <fs>-marc_proc_type = 'F' .   "采购类型
  <fs>-marc_mrp_type = 'PD'.
  <fs>-mbew_vclass_py = 'A010'.
  <fs>-mbew_pr_ctrl_py = 'V'.
  <fs>-mbew_vclass_pp = 'A010'.
  <fs>-mbew_pr_ctrl_pp = 'V'.
  <fs>-mbew_price_ctrl = 'V'.
  <fs>-t_marm_unit_of_wt = 'G'.
   <fs>-mbew_val_class = 'A010'.
  case <fs>-marc_plant.
    when '1001'.
      <fs>-marc_mrp_ctrler = 'HSE'.
    when '1101'.
      <fs>-marc_mrp_ctrler = 'MEE'.
    when '2001'.
      <fs>-marc_mrp_ctrler = 'MSE'.
    when '2101'.
      <fs>-marc_mrp_ctrler = 'SHE'.
  endcase.

 <fs>-marc_lotsizekey = 'EX'.
endloop.

MOVE-CORRESPONDING gt_data to lt_material.

ENDIF.
ENDFORM.

FORM create_matnr_data.
DATA: total TYPE i,
num TYPE i.
num = 0.
DESCRIBE TABLE lt_material LINES total.
CLEAR lt_message.

LOOP AT lt_material INTO wa_material.

num = num + 1.

CLEAR headdata.
headdata-material = wa_material-head_material.
headdata-matl_type = wa_material-head_matl_type.
headdata-ind_sector = wa_material-head_ind_sector.
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 = wa_material-mara_matl_group.
PERFORM get_pr_unit USING wa_material-mara_base_uom CHANGING lv_unit.
clientdata-base_uom = lv_unit.
clientdata-extmatlgrp = wa_material-mara_extmatlgrp.
clientdata-item_cat = wa_material-mara_item_cat.
clientdata-net_weight = wa_material-mara_net_weight.
clientdata-trans_grp = wa_material-mara_trans_grp.

CLEAR clientdatax.
clientdatax-matl_group = ‘X’.
clientdatax-base_uom = ‘X’.
clientdatax-extmatlgrp = ‘X’.
clientdatax-item_cat = ‘X’.
clientdatax-net_weight = ‘X’.
clientdatax-trans_grp = ‘X’.

"工厂级别数据
CLEAR plantdata.
plantdata-plant = wa_material-marc_plant.
plantdata-availcheck = wa_material-marc_availcheck.
plantdata-loadinggrp = wa_material-marc_loadinggrp.
plantdata-pur_group = wa_material-marc_pur_group.
plantdata-batch_mgmt = wa_material-marc_batch_mgmt.
plantdata-auto_p_ord = wa_material-marc_auto_p_ord.
plantdata-ind_post_to_insp_stock = wa_material-marc_ind_post_to_insp_stock.
plantdata-quotausage = wa_material-marc_quotausage.
plantdata-sourcelist = wa_material-marc_sourcelist.
plantdata-mrp_group = wa_material-marc_mrp_group.
plantdata-mrp_type = wa_material-marc_mrp_type.
plantdata-mrp_ctrler = wa_material-marc_mrp_ctrler.
plantdata-lotsizekey = wa_material-marc_lotsizekey.
plantdata-minlotsize = wa_material-marc_minlotsize.
plantdata-maxlotsize = wa_material-marc_maxlotsize.
plantdata-round_val = wa_material-marc_round_val.
plantdata-proc_type = wa_material-marc_proc_type.
plantdata-backflush = wa_material-marc_backflush.
plantdata-plnd_delry = wa_material-marc_plnd_delry.
plantdata-gr_pr_time = wa_material-marc_gr_pr_time.
plantdata-safety_stk = wa_material-marc_safety_stk.
plantdata-sm_key = wa_material-marc_sm_key.
plantdata-plan_strgp = wa_material-marc_plan_strgp.
plantdata-alt_bom_id = wa_material-marc_alt_bom_id.

CLEAR plantdatax.
plantdatax-plant = wa_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_material-marc_plant.
"storagelocationdata-stge_loc = wa_material-mard_stge_loc.
storagelocationdata-stge_loc = ‘D101’.

CLEAR storagelocationdatax.
storagelocationdatax-plant = wa_material-marc_plant.
storagelocationdatax-stge_loc = ‘D101’.

"销售数据
CLEAR salesdata.
salesdata-sales_org = wa_material-mvke_sales_org.
salesdata-distr_chan = wa_material-mvke_distr_chan.
salesdata-sales_unit = wa_material-mvke_sales_unit.
salesdata-matl_stats = wa_material-mvke_matl_stats.
salesdata-acct_assgt = wa_material-mvke_acct_assgt.
salesdata-item_cat = wa_material-mvke_item_cat.

CLEAR salesdatax.
salesdatax-sales_org = wa_material-mvke_sales_org.
salesdatax-distr_chan = wa_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_material-marc_plant.
valuationdata-val_class = wa_material-mbew_val_class.
valuationdata-price_ctrl = wa_material-mbew_price_ctrl.
valuationdata-price_unit = wa_material-mbew_price_unit.
valuationdata-moving_pr = wa_material-mbew_moving_pr.
valuationdata-std_price = wa_material-mbew_std_price.
valuationdata-qty_struct = wa_material-mbew_qty_struct.
valuationdata-orig_mat = wa_material-mbew_orig_mat.
valuationdata-vclass_py = wa_material-mbew_vclass_py.
valuationdata-pr_ctrl_py = wa_material-mbew_pr_ctrl_py.
valuationdata-vclass_pp = wa_material-mbew_vclass_pp.
valuationdata-pr_ctrl_pp = wa_material-mbew_pr_ctrl_pp.

CLEAR valuationdatax.
valuationdatax-val_area = wa_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’.
valuationdatax-vclass_py = ‘X’.
valuationdatax-pr_ctrl_py = ‘X’.
valuationdatax-vclass_pp = ‘X’.
valuationdatax-pr_ctrl_pp = ‘X’.

"物料描述
CLEAR materialdescription[].
materialdescription-langu_iso = ‘ZH’.
materialdescription-matl_desc = wa_material-t_makt_matl_desc.
APPEND materialdescription.

"单位
CLEAR unitsofmeasure[]. unitsofmeasure-alt_unit = lv_unit.
unitsofmeasure-gross_wt = wa_material-t_marm_gross_wt.
unitsofmeasure-unit_of_wt = wa_material-t_marm_unit_of_wt.
unitsofmeasure-volume = wa_material-t_marm_volume.
unitsofmeasure-volumeunit = wa_material-t_marm_volumeunit.
APPEND unitsofmeasure.

CLEAR unitsofmeasurex[].
unitsofmeasurex-alt_unit = lv_unit.
unitsofmeasurex-gross_wt = ‘X’.
unitsofmeasurex-unit_of_wt = ‘X’.
unitsofmeasurex-volume = ‘X’.
unitsofmeasurex-volumeunit = ‘X’.
APPEND unitsofmeasurex.

"税分类
CLEAR taxclassifications[].
taxclassifications-depcountry = ‘CN’.
taxclassifications-tax_type_1 = ‘MWST’.
taxclassifications-taxclass_1 = wa_material-t_mlan_taxclass1.
taxclassifications-taxclass_2 = wa_material-t_mlan_taxclass2.
APPEND taxclassifications.

PERFORM savedata USING num total.

CLEAR wa_message.
wa_message-material = wa_material-head_material.
wa_message-description = wa_material-t_makt_matl_desc.
wa_message-message = return-message.
APPEND wa_message TO lt_message.
ENDLOOP.

ENDFORM.

*获取基本计量单位内码

FORM get_pr_unit USING unit1 CHANGING unit2.

SELECT SINGLE msehi INTO unit2 FROM t006a WHERE spras = 1 AND mseh3 = unit1.
IF sy-subrc <> 0.
unit2 = unit1.
ENDIF.

ENDFORM.

*保存数据,调用BAPI_MATERIAL_SAVEDATA

FORM savedata USING num total.
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 = ’ ’
IMPORTING
return = return
TABLES
materialdescription = materialdescription[]
unitsofmeasure = unitsofmeasure[]
unitsofmeasurex = unitsofmeasurex
* INTERNATIONALARTNOS =
* MATERIALLONGTEXT =
taxclassifications = taxclassifications[]
* RETURNMESSAGES =
* PRTDATA =
* PRTDATAX =
* EXTENSIONIN =
* EXTENSIONINX =
.
IF sy-subrc = 0.
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
EXPORTING
wait = ‘X’
* IMPORTING
* RETURN =
.
bapi_exe_result = ‘X’.
ELSE.
bapi_exe_result = ‘’.
ENDIF.

WAIT UP TO 1 SECONDS.
DATA: per TYPE f,
txt TYPE string.
per = ( num / total ) * 100.

DATA: str1 TYPE string,
str2 TYPE string.
str1 = num.
str2 = total.

CONCATENATE ‘正在批量创建物料…已完成:(’ str1 ‘/’ str2 ‘)’ INTO txt.

CALL FUNCTION ‘SAPGUI_PROGRESS_INDICATOR’
EXPORTING
percentage = per
text = txt.

ENDFORM. "SAVEDATA

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹影卿心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值