Material Extension Full Program Example in SAP ABAP.
BAPI_MATERIAL_SAVEDATA Use For Material Extension in SAP ABAP.
REPORT zrmm_material_master_upld.
INCLUDE zrmm_material_master_upld_top.
INCLUDE zrmm_material_master_upld_ss.
INCLUDE zrmm_material_master_upld_sub.
****************** I N I T I A L I Z A T I O N *************
INITIALIZATION.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
PERFORM f4_help.
START-OF-SELECTION.
PERFORM get_data.
IF r_int = abap_true.
PERFORM f_fill_matnr.
ELSEIF r_ext = abap_true.
gt_final[] = gt_final_ext[].
ENDIF.
IF gt_final[] IS NOT INITIAL.
PERFORM f_create_material_master.
***** MSG Handling
PERFORM : f_build_header,
f_download_msg.
ENDIF.
**&---------------------------------------------------------------------*
**& Form F4_HELP
**&---------------------------------------------------------------------*
**& text
**&---------------------------------------------------------------------*
**& --> p1 text
**& <-- p2 text
**&---------------------------------------------------------------------*
FORM f4_help .
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
IMPORTING
file_name = p_path.
ENDFORM.
================================================================
TABLES:bapimathead,
bapi_makt,
bapi_mara,
bapi_marax,
bapi_marc,
bapi_marcx,
bapi_mard,
bapi_mardx,
bapi_mpop,
bapi_mpopx,
bapi_mbew,
bapi_mbewx,
bapi_mvke,
bapi_mvkex,
bapi_mlgt,
bapi_mlgtx,
bapi_mpgd,
bapi_mpgdx .
TYPES : BEGIN OF ty_ext_final,
matnr(40),
mtart(4),
werks(4),
lgort(4),
vkorg(4),
vtweg(2),
maktx(40),
meins(3),
matkl(9),
bismt(40), """"
spart(2),
mtpos_mara(4),
brgew(17),
* gewei(3),
ntgew(13),
taxkm(1),
taxkm1(1),
taxkm2(1),
taxkm3(1),
taxkm4(1),
ktgrm(2),
mtpos(4),
*** New ADD
* MVGR1(3),
* MVGR2(3),
* MVGR3(3),
* MVGR4(3),
* MVGR5(3),
**** New ADD
**** new add
mtbfp(2),
xchpf(1),
* kautb(1),
****
tragr(4),
ladgr(4),
prctr(10),
steuc(16),
ekgrp(3),
vabme(1),
taxim(1),
disgr(4),
dismm(2),
minbe(10), "New added
dispo(3),
mabst(17),
disls(2),
beskz(1),
dzeit(3),
plifz(3),
webaz(3),
* perkz(1),
* strgr(2),
* mtvfp(2),
* sbdkz(1),
* prmod(1),
* peran(3),
* anzpr(3),
* kzini(1),
* siggr(9),
* modav(1),
fevor(3),
sfcpf(6),
mhdrz(4),
mhdhb(4),
iprkz(1),
*
sled_bbd(1),
sernp(4),
bwtty(1),
bklas(4),
mlast(1),
* stprs_1(14),
peinh_1(5),
vprsv_1(1),
losgr(17),
** vprsv(1),
** peinh(5),
** stprs(14),
umren2_1(5),
umren3_1(5),
umren4_1(5),
meinh2_1(3),
umren2_2(5),
umren3_2(5),
umren4_2(5),
meinh2_2(3),
* umren2_3(5),
* umren3_3(5),
* umren4_3(5),
* meinh2_3(3),
"po_text(250),
po_text1(50),
po_text2(50),
po_text3(50),
po_text4(50),
po_text5(50),
END OF ty_ext_final,
BEGIN OF ty_int_final,
mtart(4),
werks(4),
lgort(4),
vkorg(4),
vtweg(2),
maktx(40),
meins(3),
matkl(9),
bismt(40), """"
spart(2),
mtpos_mara(4),
brgew(17),
* gewei(3),
ntgew(13),
taxkm(1),
taxkm1(1),
taxkm2(1),
taxkm3(1),
taxkm4(1),
ktgrm(2),
mtpos(4),
*** New ADD
* MVGR1(3),
* MVGR2(3),
* MVGR3(3),
* MVGR4(3),
* MVGR5(3),
**** New ADD
**** new add
mtbfp(2),
xchpf(1),
* kautb(1),
****
tragr(4),
ladgr(4),
prctr(10),
steuc(16),
ekgrp(3),
vabme(1),
taxim(1),
disgr(4),
dismm(2),
minbe(10), "New added
dispo(3),
mabst(17),
disls(2),
beskz(1),
dzeit(3),
plifz(3),
webaz(3),
* perkz(1),
* strgr(2),
* mtvfp(2),
* sbdkz(1),
* prmod(1),
* peran(3),
* anzpr(3),
* kzini(1),
* siggr(9),
* modav(1),
fevor(3),
sfcpf(6),
mhdrz(4),
mhdhb(4),
iprkz(1),
sled_bbd(1),
sernp(4),
bwtty(1),
bklas(4),
mlast(1),
* stprs_1(14),
peinh_1(5),
vprsv_1(1),
losgr(17),
** vprsv(1),
** peinh(5),
** stprs(14),
umren2_1(5),
umren3_1(5),
umren4_1(5),
meinh2_1(3),
umren2_2(5),
umren3_2(5),
umren4_2(5),
meinh2_2(3),
* umren2_3(5),
* umren3_3(5),
* umren4_3(5),
* meinh2_3(3),
po_text1 TYPE TDLINE , "(50),
po_text2(50),
po_text3(50),
po_text4(50),
po_text5(50),
END OF ty_int_final.
DATA : gt_final TYPE STANDARD TABLE OF ty_ext_final,
gs_final TYPE ty_ext_final,
gt_final_ext TYPE STANDARD TABLE OF ty_ext_final,
gs_final_ext TYPE ty_ext_final,
gt_final_int TYPE STANDARD TABLE OF ty_int_final,
gs_final_int TYPE ty_int_final.
DATA: gt_file_data TYPE truxs_t_text_data.
DATA : it_mlan TYPE STANDARD TABLE OF bapi_mlan,
wa_mlan TYPE bapi_mlan,
it_marm TYPE STANDARD TABLE OF bapi_marm,
it_marmx TYPE STANDARD TABLE OF bapi_marmx,
it_makt TYPE STANDARD TABLE OF bapi_makt,
wa_makt TYPE bapi_makt,
wa_marm TYPE bapi_marm,
wa_marmx TYPE bapi_marmx.
DATA : it_return LIKE bapiret2,
wa_return TYPE bapiret2.
DATA :it_excel TYPE STANDARD TABLE OF alsmex_tabline,
wa_excel TYPE alsmex_tabline.
FIELD-SYMBOLS: <fs>.
TYPES : BEGIN OF ty_header,
f_name TYPE char75,
END OF ty_header,
BEGIN OF msg,
line TYPE i,
type TYPE char10,
message_v1 TYPE symsgv,
maktx TYPE makt-maktx,
message TYPE bapi_msg,
END OF msg.
DATA : lv_desktop TYPE string,
lv_line TYPE i.
DATA: lt_header TYPE STANDARD TABLE OF ty_header,
ls_header TYPE ty_header,
it_msg TYPE STANDARD TABLE OF msg,
wa_msg TYPE msg.
=======================================================================================
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS : P_PATH LIKE RLGRAP-FILENAME OBLIGATORY,
P_STROW TYPE I OBLIGATORY,
P_EDROW TYPE I OBLIGATORY.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN : BEGIN OF BLOCK b2 WITH FRAME title text-002.
PARAMETERS : r_int RADIOBUTTON GROUP rd1 DEFAULT 'X',
r_ext RADIOBUTTON GROUP rd1.
SELECTION-SCREEN : end of BLOCK b2.
======================================================================================
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_data .
DATA : index TYPE i.
IF r_ext = abap_true.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_path
i_begin_col = 1
i_begin_row = p_strow
i_end_col = 100
i_end_row = p_edrow
TABLES
intern = it_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE 'ERROR OCCUR IN READING THE EXCEL FILE' TYPE 'I'.
STOP.
ENDIF.
LOOP AT it_excel INTO wa_excel.
index = wa_excel-col.
ASSIGN COMPONENT index OF STRUCTURE gs_final_ext TO <fs>.
<fs> = wa_excel-value.
AT END OF row.
* APPEND wa_final TO it_final.
APPEND gs_final_ext TO gt_final_ext.
CLEAR gs_final_ext.
ENDAT.
ENDLOOP.
* CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
* EXPORTING
* i_line_header = abap_true
* i_tab_raw_data = gt_file_data
* i_filename = p_file
* TABLES
* i_tab_converted_data = gt_final_ext[]
* EXCEPTIONS
* conversion_failed = 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.
* SORT gt_final_ext BY matnr.
ELSEIF r_int = abap_true.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_path
i_begin_col = 1
i_begin_row = p_strow
i_end_col = 100
i_end_row = p_edrow
TABLES
intern = it_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE 'ERROR OCCUR IN READING THE EXCEL FILE' TYPE 'I'.
STOP.
ENDIF.
LOOP AT it_excel INTO wa_excel.
index = wa_excel-col.
ASSIGN COMPONENT index OF STRUCTURE gs_final_int TO <fs>.
<fs> = wa_excel-value.
AT END OF row.
* APPEND wa_final TO it_final.
APPEND gs_final_int TO gt_final_int.
CLEAR gs_final_int.
ENDAT.
ENDLOOP.
* BREAK-POINT.
* CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
* EXPORTING
* i_line_header = abap_true
* i_tab_raw_data = gt_file_data
* i_filename = p_file
* TABLES
* i_tab_converted_data = gt_final_int[]
* EXCEPTIONS
* conversion_failed = 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.
ENDIF.
* BREAK-POINT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form UPLOAD_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM f_fill_matnr .
DATA : lv_lines TYPE i.
DATA :lv_new_mat_total TYPE bapimatall-req_numbers,
required_numbers LIKE bapimatall-req_numbers,
lt_material TYPE STANDARD TABLE OF bapimatinr,
lt_material1 TYPE STANDARD TABLE OF bapimatinr,
ls_material TYPE bapimatinr,
material_type LIKE bapimatdoa-matl_type.
DESCRIBE TABLE gt_final_int LINES lv_lines.
IF lv_lines > 255 .
MESSAGE : 'For Internal material Number range only 255 line is allowed.' TYPE 'E'.
ENDIF.
DESCRIBE TABLE gt_final_int LINES lv_new_mat_total ."lv_lines.
READ TABLE gt_final_int INTO DATA(ls_f_int) INDEX 1.
CALL FUNCTION 'BAPI_MATERIAL_GETINTNUMBER'
EXPORTING
material_type = ls_f_int-mtart "'ZROH'
* INDUSTRY_SECTOR = ' '
required_numbers = lv_new_mat_total
* IMPORTING
* RETURN =
TABLES
material_number = lt_material.
LOOP AT gt_final_int INTO gs_final_int.
MOVE-CORRESPONDING gs_final_int TO gs_final_ext.
READ TABLE lt_material INTO ls_material INDEX 1.
IF sy-subrc = 0.
gs_final_ext-matnr = ls_material-material.
ENDIF.
APPEND gs_final_ext TO gt_final.
DELETE lt_material WHERE material = ls_material-material.
CLEAR : gs_final_int ,gs_final_ext , ls_material.
ENDLOOP.
* BREAK-POINT.
ENDFORM.
**&---------------------------------------------------------------------*
**& Form F_CREATE_MATERIAL_MASTER
**&---------------------------------------------------------------------*
**& text
**&---------------------------------------------------------------------*
**& --> p1 text
**& <-- p2 text
**&---------------------------------------------------------------------*
FORM f_create_material_master .
DATA: ls_header LIKE thead,
lt_lines TYPE STANDARD TABLE OF tline WITH HEADER LINE.
lv_line = p_strow.
LOOP AT gt_final INTO gs_final.
CLEAR : bapimathead , bapi_mara , bapi_marax , bapi_makt, bapi_marc, bapi_marcx,
bapi_mard, bapi_mardx, bapi_mpop, bapi_mpopx, bapi_mbew, bapi_mbewx,
bapi_mvke, bapi_mvkex, bapi_mlgt, bapi_mlgtx, bapi_mpgd, bapi_mpgdx.
**************** Feeling Header data
IF r_ext = abap_true .
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = gs_final-matnr
IMPORTING
output = gs_final-matnr
* EXCEPTIONS
* LENGTH_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF .
bapimathead-material = gs_final-matnr.
bapimathead-material_long = gs_final-matnr.
bapimathead-matl_type = gs_final-mtart.
bapimathead-ind_sector = 'S'.
bapimathead-basic_view = 'X'.
bapimathead-sales_view = 'X'.
bapimathead-purchase_view = 'X'.
bapimathead-forecast_view = 'X'.
bapimathead-storage_view = 'X'.
bapimathead-account_view = 'X'.
bapimathead-cost_view = 'X'.
bapimathead-mrp_view = 'X'.
bapimathead-work_sched_view = 'X'.
bapimathead-quality_view = 'X'.
************** End of header data
************** Feeling Material description : MAKT
REFRESH : it_makt.
wa_makt-langu = 'E'.
wa_makt-langu_iso = 'EN'.
wa_makt-matl_desc = gs_final-maktx.
APPEND wa_makt TO it_makt.
************** ENd of material description
************** Feelinf material data : MARA
bapi_mara-matl_group = gs_final-matkl.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = gs_final-meins
language = sy-langu
IMPORTING
output = gs_final-meins
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
bapi_mara-base_uom = gs_final-meins.
bapi_mara-old_mat_no = gs_final-bismt.
*BAPI_MARA- = gs_final-brgew.
IF gs_final-ntgew IS NOT INITIAL.
bapi_mara-net_weight = gs_final-ntgew.
bapi_mara-unit_of_wt = 'KG' ." Joy gs_final-gewei.
ENDIF.
bapi_mara-division = gs_final-spart.
bapi_mara-item_cat = gs_final-mtpos_mara.
bapi_mara-trans_grp = gs_final-tragr.
* bapi_mara-minremlife = gs_final-mhdrz.
* bapi_mara-shelf_life = gs_final-mhdhb.
* bapi_mara-sled_bbd = gs_final-sled_bbd.
bapi_mara-var_ord_un = gs_final-vabme.
* CALL FUNCTION 'CONVERSION_EXIT_PERKZ_INPUT'
* EXPORTING
* input = gs_final-iprkz
* IMPORTING
* output = bapi_mara-period_ind_expiration_date.
* bapi_mara-period_ind_expiration_date = gs_final-iprkz.
bapi_mara-batch_mgmt = gs_final-xchpf.
bapi_marax-matl_group = 'X'.
bapi_marax-base_uom = 'X'.
* bapi_marax-old_mat_no = 'X'.
*BAPI_MARA- = gs_final-brgew.'X'.
IF gs_final-ntgew IS NOT INITIAL.
bapi_marax-net_weight = 'X'.
bapi_marax-unit_of_wt = 'X'.
ENDIF.
bapi_marax-division = 'X'.
bapi_marax-item_cat = 'X'.
bapi_marax-trans_grp = 'X'.
bapi_marax-minremlife = 'X'.
bapi_marax-shelf_life = 'X'.
bapi_marax-sled_bbd = 'X'.
bapi_marax-var_ord_un = 'X'.
bapi_marax-period_ind_expiration_date = 'X'.
bapi_marax-batch_mgmt = 'X'.
bapi_marax-old_mat_no = gs_final-bismt.
*********** Material Data at plant level : MARC
bapi_marc-plant = gs_final-werks.
bapi_marc-ctrl_code = gs_final-steuc.
bapi_marc-pur_group = gs_final-ekgrp.
* bapi_marc-profit_ctr = gs_final-prctr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gs_final-prctr
IMPORTING
output = bapi_marc-profit_ctr.
IF gs_final-dismm = 'PD' OR gs_final-dismm = 'VB'.
bapi_marc-mrp_group = gs_final-disgr.
bapi_marc-mrp_type = gs_final-dismm.
bapi_marc-mrp_ctrler = gs_final-dispo.
bapi_marc-max_stock = gs_final-mabst.
bapi_marc-lotsizekey = gs_final-disls.
bapi_marc-proc_type = gs_final-beskz.
bapi_marc-inhseprodt = gs_final-dzeit.
ELSE.
bapi_marc-mrp_type = gs_final-dismm.
ENDIF.
bapi_marc-loadinggrp = gs_final-ladgr.
bapi_marc-serno_prof = gs_final-sernp.
bapi_marc-plnd_delry = gs_final-plifz.
bapi_marc-gr_pr_time = gs_final-webaz.
* bapi_marc-period_ind = gs_final-perkz.
* bapi_marc-plan_strgp = gs_final-strgr.
bapi_marc-availcheck = '02'."gs_final-mtvfp.
* bapi_marc-dep_req_id = gs_final-sbdkz.
bapi_marc-production_scheduler = gs_final-fevor.
bapi_marc-lot_size = gs_final-losgr.
* bapi_marc-auto_p_ord = gs_final-kautb.
bapi_marc-prodprof = gs_final-sfcpf.
*BAPI_MARC- = gs_final-
*BAPI_MARC- = gs_final-
*BAPI_MARCx- = ='X'.
*BAPI_MARCx- = ='X'.
*BAPI_MARCx- = ='X'.
bapi_marcx-plant = gs_final-werks."'X'.
bapi_marcx-ctrl_code = 'X'.
bapi_marcx-pur_group = 'X'.
bapi_marcx-profit_ctr = 'X'.
bapi_marcx-loadinggrp = 'X'.
IF gs_final-dismm = 'PD' OR gs_final-dismm = 'VB'.
bapi_marcx-mrp_group = 'X'.
bapi_marcx-mrp_type = 'X'.
bapi_marcx-mrp_ctrler = 'X'.
bapi_marcx-max_stock = 'X'.
bapi_marcx-lotsizekey = 'X'.
bapi_marcx-proc_type = 'X'.
bapi_marcx-inhseprodt = 'X'.
bapi_marcx-serno_prof = 'X' .
ELSE.
bapi_marcx-mrp_type = 'X'.
ENDIF.
bapi_marcx-plnd_delry = 'X'.
bapi_marcx-gr_pr_time = 'X'.
bapi_marcx-period_ind = 'X'.
bapi_marcx-plan_strgp = 'X'.
bapi_marcx-availcheck = 'X'.
bapi_marcx-dep_req_id = 'X'.
bapi_marcx-lot_size = 'X'.
bapi_marcx-production_scheduler = 'X'.
bapi_marcx-prodprof = 'X'.
bapi_marcx-auto_p_ord = 'X'.
IF gs_final-dismm = 'VB'.
bapi_marc-reorder_pt = gs_final-minbe.
bapi_marcx-reorder_pt = 'X'.
ENDIF.
************* End of Material Data at plant level : MARC
************* Material Data at Storage Location Level : MARD
IF gs_final-mtart NE 'ZSRV'.
bapi_mard-plant = gs_final-werks.
bapi_mard-stge_loc = gs_final-lgort.
bapi_mardx-plant = gs_final-werks ."'X'.
bapi_mardx-stge_loc = gs_final-lgort ."'X'.
ENDIF.
************* End of Material Data at Storage Location Level : MARD
************* Forecast Parameters : MPOP
bapi_mpop-plant = gs_final-werks.
* bapi_mpop-fore_model = gs_final-prmod.
* bapi_mpop-hist_vals = gs_final-peran.
* bapi_mpop-fore_pds = gs_final-anzpr.
* bapi_mpop-initialize = gs_final-kzini.
* bapi_mpop-tracklimit = gs_final-siggr.
* bapi_mpop-model_sp = gs_final-modav.
bapi_mpopx-plant = gs_final-werks.
bapi_mpopx-fore_model = 'X'.
bapi_mpopx-hist_vals = 'X'.
bapi_mpopx-fore_pds = 'X'.
bapi_mpopx-initialize = 'X'.
bapi_mpopx-tracklimit = 'X'.
bapi_mpopx-model_sp = 'X'.
************* End of Forecast Parameters : MPOP
************* TAX Data
REFRESH it_mlan.
CLEAR wa_mlan.
wa_mlan-depcountry = 'IN'.
wa_mlan-depcountry_iso = 'IN'.
wa_mlan-tax_type_1 = 'JOSG'.
wa_mlan-taxclass_1 = gs_final-taxkm.
wa_mlan-tax_ind = gs_final-taxim.
APPEND wa_mlan TO it_mlan.
wa_mlan-depcountry = 'IN'.
wa_mlan-depcountry_iso = 'IN'.
wa_mlan-tax_type_1 = 'JOCG'.
wa_mlan-taxclass_1 = gs_final-taxkm1.
wa_mlan-tax_ind = gs_final-taxim.
APPEND wa_mlan TO it_mlan.
wa_mlan-depcountry = 'IN'.
wa_mlan-depcountry_iso = 'IN'.
wa_mlan-tax_type_1 = 'JOIG'.
wa_mlan-taxclass_1 = gs_final-taxkm2.
wa_mlan-tax_ind = gs_final-taxim.
APPEND wa_mlan TO it_mlan.
wa_mlan-depcountry = 'IN'.
wa_mlan-depcountry_iso = 'IN'.
wa_mlan-tax_type_1 = 'JOUG'.
wa_mlan-taxclass_1 = gs_final-taxkm3.
wa_mlan-tax_ind = gs_final-taxim.
APPEND wa_mlan TO it_mlan.
wa_mlan-depcountry = 'IN'.
wa_mlan-depcountry_iso = 'IN'.
wa_mlan-tax_type_1 = 'JTC1'.
wa_mlan-taxclass_1 = gs_final-taxkm4.
wa_mlan-tax_ind = gs_final-taxim.
APPEND wa_mlan TO it_mlan.
* wa_mlan-taxclass_2 = gs_final-taxkm1.
* wa_mlan-taxclass_3 = gs_final-taxkm2.
* wa_mlan-taxclass_4 = gs_final-taxkm3.
************* End of TAX Data
************* Sales Data : MVKE
bapi_mvke-sales_org = gs_final-vkorg.
bapi_mvke-distr_chan = gs_final-vtweg.
bapi_mvke-acct_assgt = gs_final-ktgrm.
bapi_mvke-item_cat = gs_final-mtpos.
IF r_ext = abap_true.
* bapi_mvke-matl_grp_1 = gs_final-mvgr1.
* bapi_mvke-matl_grp_2 = gs_final-mvgr2.
* bapi_mvke-matl_grp_3 = gs_final-mvgr3.
* bapi_mvke-matl_grp_4 = gs_final-mvgr4.
* bapi_mvke-matl_grp_5 = gs_final-mvgr5.
ENDIF.
bapi_mvkex-sales_org = gs_final-vkorg.
bapi_mvkex-distr_chan = gs_final-vtweg.
bapi_mvkex-acct_assgt = 'X'.
bapi_mvkex-item_cat = 'X'.
IF r_ext = abap_true.
bapi_mvkex-matl_grp_1 = 'X'.
bapi_mvkex-matl_grp_2 = 'X'.
bapi_mvkex-matl_grp_3 = 'X'.
bapi_mvkex-matl_grp_4 = 'X'.
bapi_mvkex-matl_grp_5 = 'X'.
ENDIF.
************* End of Sales Data : MVKE
************* Valuation Area : MBEW
bapi_mbew-val_area = gs_final-werks.
bapi_mbew-val_class = gs_final-bklas.
bapi_mbew-price_ctrl = gs_final-vprsv_1.
bapi_mbew-price_unit = gs_final-peinh_1.
bapi_mbew-val_cat = gs_final-bwtty.
* bapi_mbew-std_price = gs_final-stprs.
bapi_mbew-ml_settle = gs_final-mlast.
*BAPI_MBEW- = gs_final-
bapi_mbewx-val_area = gs_final-werks.
bapi_mbewx-val_class = 'X'.
bapi_mbewx-price_ctrl = 'X'.
bapi_mbewx-price_unit = 'X'.
bapi_mbewx-std_price = 'X'.
bapi_mbewx-val_cat = 'X'.
bapi_mbewx-ml_settle = 'X'.
IF gs_final-mtart = 'ZSRV'.
bapi_mbew-pr_ctrl_pp = 'V'.
bapi_mbewx-pr_ctrl_pp = 'X'.
bapi_mbew-price_ctrl = 'V'.
bapi_mbewx-price_ctrl = 'X'.
bapi_mbew-pr_ctrl_py = 'V'.
bapi_mbewx-pr_ctrl_py = 'X'.
ENDIF.
*BAPI_MBEWX- = 'X'.
************* END of Valuation Area : MBEW
************* Unit of measure
REFRESH : it_marm , it_marmx.
CLEAR : wa_marm.
* bapi_mara-base_uom
**** Gross weight
wa_marm-unit_of_wt = 'KG'. "bapi_mara-base_uom.
wa_marm-alt_unit = bapi_mara-base_uom."'KG'. "bapi_mara-base_uom.
wa_marm-gross_wt = gs_final-brgew.
APPEND wa_marm TO it_marm.
wa_marmx-unit_of_wt = 'KG'. "bapi_mara-base_uom.
wa_marmx-alt_unit = bapi_mara-base_uom.
wa_marmx-gross_wt = 'X'."gs_final-brgew.
APPEND wa_marmx TO it_marmx.
***
* CLEAR : wa_marm , wa_marmx.
IF gs_final-umren2_1 IS NOT INITIAL AND gs_final-umren3_1 IS NOT INITIAL
AND gs_final-umren4_1 IS NOT INITIAL AND gs_final-meinh2_1 IS NOT INITIAL.
wa_marm-denominatr = gs_final-umren2_1.
wa_marm-alt_unit = gs_final-umren3_1.
wa_marm-numerator = gs_final-umren4_1.
wa_marm-alt_unit_iso = gs_final-meinh2_1.
APPEND wa_marm TO it_marm.
wa_marmx-denominatr = 'X'.
wa_marmx-numerator = 'X'.
wa_marmx-alt_unit = gs_final-umren3_1 .
wa_marmx-alt_unit_iso = gs_final-meinh2_1.
APPEND wa_marmx TO it_marmx.
ELSE.
* REFRESH: it_marm , it_marmx.
ENDIF.
* wa_marm-denominatr = gs_final-umren3.
* wa_marm-numerator = gs_final-umrez3.
* APPEND wa_marm TO it_marm.
*
* wa_marm-denominatr = gs_final-umren4.
* wa_marm-numerator = gs_final-umrez4.
* APPEND wa_marm TO it_marm.
* wa_marm-denominatr = gs_final-.
* APPEND wa_marm TO it_marm.
*************
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
headdata = bapimathead
clientdata = bapi_mara
clientdatax = bapi_marax
plantdata = bapi_marc
plantdatax = bapi_marcx
forecastparameters = bapi_mpop
forecastparametersx = bapi_mpopx
* PLANNINGDATA =
* PLANNINGDATAX =
storagelocationdata = bapi_mard
storagelocationdatax = bapi_mardx
valuationdata = bapi_mbew
valuationdatax = bapi_mbewx
* WAREHOUSENUMBERDATA =
* WAREHOUSENUMBERDATAX =
salesdata = bapi_mvke
salesdatax = bapi_mvkex
storagetypedata = bapi_mlgt
storagetypedatax = bapi_mlgtx
* FLAG_ONLINE = ' '
* FLAG_CAD_CALL = ' '
* NO_DEQUEUE = ' '
* NO_ROLLBACK_WORK = ' '
* CLIENTDATACWM =
* CLIENTDATACWMX =
* VALUATIONDATACWM =
* VALUATIONDATACWMX =
IMPORTING
return = it_return
TABLES
materialdescription = it_makt
unitsofmeasure = it_marm
unitsofmeasurex = it_marmx
* INTERNATIONALARTNOS =
* MATERIALLONGTEXT =
taxclassifications = it_mlan
* RETURNMESSAGES =
* PRTDATA =
* PRTDATAX =
* EXTENSIONIN =
* EXTENSIONINX =
* UNITSOFMEASURECWM =
* UNITSOFMEASURECWMX =
.
IF it_return-type NE 'E' .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* WAIT =
* IMPORTING
* RETURN =
.
wa_msg-line = lv_line.
wa_msg-message = it_return-message.
wa_msg-message_v1 = it_return-message_v1.
wa_msg-maktx = gs_final-maktx.
wa_msg-type = it_return-type.
APPEND wa_msg TO it_msg.
IF gs_final-po_text1 IS NOT INITIAL.
CLEAR: ls_header .
REFRESH : lt_lines.
ls_header-tdobject = 'MATERIAL'.
ls_header-tdname = gs_final-matnr.
ls_header-tdid = 'BEST'.
ls_header-tdspras = sy-langu.
CONCATENATE gs_final-po_text1 ' '
INTO DATA(lv_text) SEPARATED BY space .
lt_lines-tdline = lv_text ."gs_final-po_text.
APPEND lt_lines.
CLEAR lv_text.
CONCATENATE gs_final-po_text2 ' '
INTO lv_text SEPARATED BY space .
lt_lines-tdline = lv_text ."gs_final-po_text.
APPEND lt_lines.
CLEAR lv_text.
CONCATENATE gs_final-po_text3 ' '
INTO lv_text SEPARATED BY space .
lt_lines-tdline = lv_text ."gs_final-po_text.
APPEND lt_lines.
CLEAR lv_text.
CONCATENATE gs_final-po_text4 ' '
INTO lv_text SEPARATED BY space .
lt_lines-tdline = lv_text ."gs_final-po_text.
APPEND lt_lines.
CLEAR lv_text.
CONCATENATE gs_final-po_text5 ' '
INTO lv_text SEPARATED BY space .
lt_lines-tdline = lv_text ."gs_final-po_text.
APPEND lt_lines.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
client = sy-mandt
header = ls_header
savemode_direct = 'X'
TABLES
lines = lt_lines
EXCEPTIONS
OTHERS = 1.
* REFRESH :lt_lines.
* CONCATENATE gs_final-po_text3 gs_final-po_text4
* INTO DATA(lv_text1) SEPARATED BY space .
* lt_lines-tdline = lv_text1 ."gs_final-po_text.
* APPEND lt_lines.
*
* CALL FUNCTION 'SAVE_TEXT'
* EXPORTING
* client = sy-mandt
* header = ls_header
* savemode_direct = 'X'
* TABLES
* lines = lt_lines
* EXCEPTIONS
* OTHERS = 1.
ENDIF.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.
wa_msg-line = lv_line.
wa_msg-message = it_return-message.
wa_msg-message_v1 = it_return-message_v1.
wa_msg-type = it_return-type.
APPEND wa_msg TO it_msg.
ENDIF.
* BREAK-POINT.
lv_line = lv_line + 1.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_BUILD_HEADER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM f_build_header .
ls_header-f_name = 'Line Number'.
APPEND ls_header TO lt_header.
CLEAR ls_header.
ls_header-f_name = 'Type'.
APPEND ls_header TO lt_header.
CLEAR ls_header.
ls_header-f_name = 'Material Number'.
APPEND ls_header TO lt_header.
CLEAR ls_header.
ls_header-f_name = 'Material Desc'.
APPEND ls_header TO lt_header.
CLEAR ls_header.
ls_header-f_name = 'Message'.
APPEND ls_header TO lt_header.
CLEAR ls_header.
ls_header-f_name = ''.
APPEND ls_header TO lt_header.
CLEAR ls_header.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DOWNLOAD_MSG
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM f_download_msg .
CALL METHOD cl_gui_frontend_services=>get_desktop_directory
CHANGING
desktop_directory = lv_desktop
EXCEPTIONS
cntl_error = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL METHOD cl_gui_cfw=>update_view.
CONCATENATE lv_desktop '\Shakambari' '\Material Master' '\Material Upload' '_' sy-datum '_' sy-uzeit '.xls' INTO lv_desktop.
*BREAK-POINT.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
filename = lv_desktop
filetype = 'DAT'
* APPEND = 'X'
write_field_separator = 'X'
TABLES
data_tab = it_msg
fieldnames = lt_header
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.