Pada kesempatan kali ini kita akan mencoba membuat program upload Material menggunkan BDC.
Seperti apa caranya? Langsung saja kita ke TKP.
- Ketikkan program seperti dibawah ini :
*& Report ZBDC_MATERIAL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZBDC_MATERIAL.
TABLES : mara, makt, sscrfields.
TYPE-POOLS icon.
INCLUDE : ztest_top,
zbdcrecx_mat,
ztest_alv.
SELECTION-SCREEN BEGIN OF BLOCK frame1 WITH FRAME.
SELECTION-SCREEN BEGIN OF BLOCK c WITH FRAME TITLE text-001.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(10) text-002 FOR FIELD p_infile.
PARAMETER p_infile LIKE rlgrap-filename OBLIGATORY.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(10) text-003 FOR FIELD pa_row01.
PARAMETERS: pa_row01(4) TYPE n DEFAULT 1. " start row
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(10) text-004 FOR FIELD pa_row02.
PARAMETERS: pa_row02(4) TYPE n DEFAULT 500. " end row
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK c.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 15.
SELECTION-SCREEN PUSHBUTTON 1(10) text-012 USER-COMMAND tam.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN COMMENT /1(43) text-011.
SELECTION-SCREEN END OF BLOCK frame1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_infile.
PERFORM f_get_filename CHANGING p_infile.
INCLUDE ztest_fm_upload_dataf01.
AT SELECTION-SCREEN.
CASE sscrfields.
WHEN 'TAM'.
CLEAR : t_insert[],
t_excel_record[].
REFRESH t_insert[].
CLEAR t_report.
REFRESH t_report.
PERFORM f_gui_message USING 'Reading from excel file, please wait....' ''.
PERFORM f_excell_process.
PERFORM fm_upload_data.
PERFORM fm_display_data.
ENDCASE.
START-OF-SELECTION.
CLEAR : t_insert[],
t_excel_record[].
REFRESH t_insert[].
PERFORM f_gui_message USING 'Reading from excel file, please wait....' ''.
PERFORM f_excell_process.
*&---------------------------------------------------------------------*
*& Form fm_display_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM fm_display_data.
SORT t_header BY matnr.
DELETE ADJACENT DUPLICATES FROM t_header COMPARING matnr.
PERFORM fm_alv_reset_data.
* Mengatur Parameter dan Data ALV
PERFORM fm_alv_set_layout USING 'Display List of Master Material'.
PERFORM fm_alv_set_print.
PERFORM fm_alv_set_column.
gv_i_default = 'X'.
gv_i_save = 'A'.
PERFORM fm_alv_show_hier TABLES t_header t_report.
ENDFORM. "fm_display_data
*&---------------------------------------------------------------------*
*& Form fm_alv_set_column
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM fm_alv_set_column.
PERFORM fm_alv_add_fieldcat USING 'T_HEADER':
'MATNR' 'MARA' 'MATNR' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'X' 'X',
'ICON' '' 'ICON' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'X' 'X'.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_internal_tabname = 'T_HEADER'
* i_structure_name = ''
CHANGING
ct_fieldcat = gi_it_fieldcat[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
* Set Detail Column
PERFORM fm_alv_add_fieldcat USING 'T_DETAIL':
'TYPE' '' 'TYPE' 'M.Type' 'M.Type' 'M.Type' '' '' '' '' '' '' '' '' '' '' '' '' '' 'X' 'X',
'MESSAGE' '' 'MESSAGE' 'Message' 'Message' 'Message' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_internal_tabname = 'T_REPORT'
* i_structure_name = ''
CHANGING
ct_fieldcat = gi_it_fieldcat[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
** Sort and Group by Field
* CLEAR gi_it_sort.
* gi_it_sort-fieldname = 'EBELP'. ">> Filled by Fieldname
* gi_it_sort-up = 'X'. ">> 'X' = Ascending ; ' ' = Descending
* gi_it_sort-subtot = 'X'.
* gi_it_sort-group = '*'. ">> '*' = Grouped by field ; ' ' = Not grouped by this field
* APPEND gi_it_sort.
ENDFORM. "fm_alv_set_column
*&---------------------------------------------------------------------*
*& Form fm_build_keyinfo
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FU_KEYINFO text
*----------------------------------------------------------------------*
FORM fm_build_keyinfo USING fu_keyinfo TYPE slis_keyinfo_alv .
fu_keyinfo-header01 = 'MATNR'.
fu_keyinfo-item01 = 'MATNR'.
ENDFORM. "fm_build_keyinfo
- Buat program include dengan nama ZBDC_TOP lalu ketikkan program seperti dibawah ini:
*& Include ZBDC_TOP
*&---------------------------------------------------------------------*
TYPES : BEGIN OF it_upload,
matnr TYPE matnr,
mbrsh TYPE mbrsh,
mtart TYPE mtart,
maktx TYPE maktx,
matkl TYPE matkl,
bismt TYPE bismt,
meins TYPE meins,
END OF it_upload.
TYPES : BEGIN OF ty_report,
icon(4),
matnr TYPE matnr,
type(1),
message(250),
END OF ty_report.
TYPES : BEGIN OF ty_header,
chbox,
exp,
icon(4),
matnr TYPE matnr,
END OF ty_header.
DATA : t_report TYPE STANDARD TABLE OF ty_report WITH HEADER LINE,
t_header TYPE STANDARD TABLE OF ty_header WITH HEADER LINE.
DATA: t_excel LIKE alsmex_tabline OCCURS 0 WITH HEADER LINE. " itab representation of the excel file
DATA: t_upload TYPE STANDARD TABLE OF it_upload WITH HEADER LINE,
t_excel_record TYPE STANDARD TABLE OF it_upload WITH HEADER LINE,
t_insert TYPE STANDARD TABLE OF it_upload WITH HEADER LINE,
lt_data TYPE STANDARD TABLE OF it_upload WITH HEADER LINE.
DATA : d_currentrow TYPE i.
DATA: BEGIN OF t_msgcoll OCCURS 0.
INCLUDE STRUCTURE bdcmsgcoll.
DATA: END OF t_msgcoll.
DATA l_mode VALUE 'N'.
DATA : lv_start_row TYPE i.
DATA : lv_end_row TYPE i.
DATA : d_counter TYPE i.
DATA: wa_excel_record LIKE t_excel_record.
- Buat program include lagi dengan nama ZBDCRECX_MAT lalu ketikkan program seperti dibawah ini:
*& Include ZBDCRECX_MAT
*&---------------------------------------------------------------------*
***INCLUDE ZBDCRECX1.
* for programs doing a data transfer by creating a batch-input session
* and
* for programs doing a data transfer by CALL TRANSACTION USING
DATA: ctu TYPE c VALUE 'X',
ctumode LIKE ctu_params-dismode VALUE 'N',
cupdate LIKE ctu_params-updmode VALUE 'L',
e_keep TYPE char1,
keep TYPE char1 VALUE 'X',
group(12),
e_group(12),
user(12) TYPE c,
e_user(12) TYPE c,
nodata TYPE c VALUE '\',
session TYPE c VALUE '',
smalllog TYPE c VALUE '',
e_hdate LIKE sy-datum,
holddate TYPE c.
e_user = sy-uname.
user = sy-uname.
*----------------------------------------------------------------------*
* data definition
*----------------------------------------------------------------------*
* Batchinputdata of single transaction
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
* messages of call transaction
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
* error session opened (' ' or 'X')
DATA: e_group_opened.
* message texts
TABLES: t100.
*----------------------------------------------------------------------*
* open dataset *
*----------------------------------------------------------------------*
FORM open_dataset USING p_dataset.
OPEN DATASET p_dataset
FOR INPUT IN TEXT MODE
ENCODING DEFAULT.
IF sy-subrc <> 0.
WRITE: / text-e00, sy-subrc.
STOP.
ENDIF.
ENDFORM. "OPEN_DATASET
*----------------------------------------------------------------------*
* close dataset *
*----------------------------------------------------------------------*
FORM close_dataset USING p_dataset.
CLOSE DATASET p_dataset.
ENDFORM. "CLOSE_DATASET
*----------------------------------------------------------------------*
* create batchinput session *
* (not for call transaction using...) *
*----------------------------------------------------------------------*
FORM open_group.
IF session = 'X'.
SKIP.
WRITE: /(20) 'Create group'(i01), group.
SKIP.
* open batchinput group
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = group
user = user
keep = keep
holddate = holddate.
WRITE: /(30) 'BDC_OPEN_GROUP'(i02),
(12) 'returncode:'(i05),
sy-subrc.
ENDIF.
ENDFORM. "OPEN_GROUP
*----------------------------------------------------------------------*
* end batchinput session *
* (call transaction using...: error session) *
*----------------------------------------------------------------------*
FORM close_group.
IF session = 'X'.
* close batchinput group
CALL FUNCTION 'BDC_CLOSE_GROUP'.
WRITE: /(30) 'BDC_CLOSE_GROUP'(i04),
(12) 'returncode:'(i05),
sy-subrc.
ELSE.
IF e_group_opened = 'X'.
CALL FUNCTION 'BDC_CLOSE_GROUP'.
WRITE: /.
WRITE: /(30) 'Fehlermappe wurde erzeugt'(i06).
e_group_opened = ' '.
ENDIF.
ENDIF.
ENDFORM. "CLOSE_GROUP
*----------------------------------------------------------------------*
* Start new transaction according to parameters *
*----------------------------------------------------------------------*
FORM bdc_transaction USING tcode.
DATA: l_mstring(480).
DATA: l_subrc LIKE sy-subrc.
* batch input session
IF session = 'X'.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = tcode
TABLES
dynprotab = bdcdata.
IF smalllog <> 'X'.
WRITE: / 'BDC_INSERT'(i03),
tcode,
'returncode:'(i05),
sy-subrc,
'RECORD:',
sy-index.
ENDIF.
* call transaction using
ELSE.
REFRESH messtab.
sy-binpt = space.
CALL TRANSACTION tcode USING bdcdata
MODE ctumode
UPDATE cupdate
MESSAGES INTO messtab.
l_subrc = sy-subrc.
IF smalllog <> 'X'.
WRITE: / 'CALL_TRANSACTION',
tcode,
'returncode:'(i05),
l_subrc,
'RECORD:',
sy-index.
LOOP AT messtab.
SELECT SINGLE * FROM t100 WHERE sprsl = messtab-msgspra
AND arbgb = messtab-msgid
AND msgnr = messtab-msgnr.
IF sy-subrc = 0.
l_mstring = t100-text.
IF l_mstring CS '&1'.
REPLACE '&1' WITH messtab-msgv1 INTO l_mstring.
REPLACE '&2' WITH messtab-msgv2 INTO l_mstring.
REPLACE '&3' WITH messtab-msgv3 INTO l_mstring.
REPLACE '&4' WITH messtab-msgv4 INTO l_mstring.
ELSE.
REPLACE '&' WITH messtab-msgv1 INTO l_mstring.
REPLACE '&' WITH messtab-msgv2 INTO l_mstring.
REPLACE '&' WITH messtab-msgv3 INTO l_mstring.
REPLACE '&' WITH messtab-msgv4 INTO l_mstring.
ENDIF.
CONDENSE l_mstring.
IF messtab-msgv1 <> t_insert-matnr.
t_report-matnr = t_insert-matnr.
t_header-matnr = t_insert-matnr.
IF messtab-msgtyp = 'S' OR messtab-msgtyp = 'W'.
WRITE icon_yellow_light AS ICON TO t_header-icon.
ELSEIF messtab-msgtyp = 'E'.
WRITE icon_red_light AS ICON TO t_header-icon.
ENDIF.
ELSE.
t_report-matnr = messtab-msgv1.
t_header-matnr = messtab-msgv1.
IF messtab-msgtyp = 'S'.
WRITE icon_green_light AS ICON TO t_header-icon.
ENDIF.
ENDIF.
t_report-type = messtab-msgtyp.
t_report-message = l_mstring.
APPEND t_report.
CLEAR t_report.
APPEND t_header.
CLEAR t_header.
WRITE: / messtab-msgtyp, l_mstring(250).
ELSE.
WRITE: / messtab.
ENDIF.
ENDLOOP.
SKIP.
ENDIF.
** Erzeugen fehlermappe ************************************************
IF l_subrc <> 0 AND e_group <> space.
IF e_group_opened = ' '.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = e_group
user = e_user
keep = e_keep
holddate = e_hdate.
e_group_opened = 'X'.
ENDIF.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = tcode
TABLES
dynprotab = bdcdata.
ENDIF.
ENDIF.
REFRESH bdcdata.
ENDFORM. "BDC_TRANSACTION
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
IF fval <> nodata.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDIF.
ENDFORM. "BDC_FIELD
- Buat program include lagi dengan nama ZBDC_ALV lalu ketikkan program seperti dibawa ini:
*& Include ZCMMRD0204_ALV
*&---------------------------------------------------------------------*
type-pools : slis.
data : gw_is_layout type slis_layout_alv,
gi_it_fieldcat type slis_t_fieldcat_alv with header line,
gi_it_excluding type slis_t_extab with header line,
gi_it_special_groups type slis_t_sp_group_alv with header line,
gi_it_sort type slis_t_sortinfo_alv with header line,
gi_it_filter type slis_t_filter_alv with header line,
gw_is_sel_hide type slis_sel_hide_alv,
gv_i_default,
gv_i_save,
gw_is_variant like disvariant,
gi_it_events type slis_t_event with header line,
gi_it_event_exit type slis_t_event_exit with header line,
gw_is_print type slis_print_alv,
gw_is_reprep_id type slis_reprep_id,
gw_alv_keyinfo type slis_keyinfo_alv.
*&---------------------------------------------------------------------*
*& Form fm_alv_show_hier
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FT_HEADER text
* -->FT_DETAIL text
*----------------------------------------------------------------------*
form fm_alv_show_hier tables ft_header ft_detail.
perform fm_build_keyinfo using gw_alv_keyinfo.
clear gi_it_event_exit.
gi_it_event_exit-ucomm = '&OUP'.
gi_it_event_exit-after = 'X'.
append gi_it_event_exit.
clear gi_it_event_exit.
gi_it_event_exit-ucomm = '&ODN'.
gi_it_event_exit-after = 'X'.
append gi_it_event_exit.
clear gi_it_event_exit.
gi_it_event_exit-ucomm = '&ETA'.
gi_it_event_exit-after = 'X'.
append gi_it_event_exit.
clear gi_it_event_exit.
gi_it_event_exit-ucomm = '&IC1'.
gi_it_event_exit-after = 'X'.
append gi_it_event_exit.
call function 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
exporting
* I_INTERFACE_CHECK = ' '
i_callback_program = sy-repid
i_callback_pf_status_set = 'FM_ALV_SET_PF_STATUS'
i_callback_user_command = 'FM_ALV_USER_COMMAND'
is_layout = gw_is_layout
it_fieldcat = gi_it_fieldcat[]
it_sort = gi_it_sort[]
it_filter = gi_it_filter[]
is_sel_hide = gw_is_sel_hide
i_default = gv_i_default
i_save = gv_i_save
is_variant = gw_is_variant
it_events = gi_it_events[]
it_event_exit = gi_it_event_exit[]
is_print = gw_is_print
is_reprep_id = gw_is_reprep_id
i_screen_start_column = 0
i_tabname_header = 'T_HEADER'
i_tabname_item = 'T_DETAIL'
is_keyinfo = gw_alv_keyinfo
tables
t_outtab_header = ft_header
t_outtab_item = ft_detail.
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. "fm_build_keyinfo
*&--------------------------------------------------------------------*
*& Form fm_alv_show
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->FT_ITAB text
*---------------------------------------------------------------------*
form fm_alv_show tables ft_itab.
clear gi_it_event_exit.
gi_it_event_exit-ucomm = '&OUP'.
gi_it_event_exit-after = 'X'.
append gi_it_event_exit.
clear gi_it_event_exit.
gi_it_event_exit-ucomm = '&ODN'.
gi_it_event_exit-after = 'X'.
append gi_it_event_exit.
clear gi_it_event_exit.
gi_it_event_exit-ucomm = '&ETA'.
gi_it_event_exit-after = 'X'.
append gi_it_event_exit.
clear gi_it_event_exit.
gi_it_event_exit-ucomm = '&IC1'.
gi_it_event_exit-after = 'X'.
append gi_it_event_exit.
call function 'REUSE_ALV_LIST_DISPLAY'
exporting
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE = ' '
i_callback_program = sy-repid
i_callback_pf_status_set = 'FM_ALV_SET_PF_STATUS'
i_callback_user_command = 'FM_ALV_USER_COMMAND'
* I_STRUCTURE_NAME =
is_layout = gw_is_layout
it_fieldcat = gi_it_fieldcat[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
it_sort = gi_it_sort[]
it_filter = gi_it_filter[]
is_sel_hide = gw_is_sel_hide
i_default = gv_i_default
i_save = gv_i_save
is_variant = gw_is_variant
it_events = gi_it_events[]
it_event_exit = gi_it_event_exit[]
is_print = gw_is_print
is_reprep_id = gw_is_reprep_id
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
tables
t_outtab = ft_itab
exceptions
program_error = 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. "fm_alv_show
*&--------------------------------------------------------------------*
*& Form fm_alv_reset_data
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
form fm_alv_reset_data.
clear : gw_is_layout,
gi_it_fieldcat,
gi_it_excluding,
gi_it_special_groups,
gi_it_sort,
gi_it_filter,
gw_is_sel_hide,
gv_i_default,
gv_i_save,
gw_is_variant,
gi_it_events,
gi_it_event_exit,
gw_is_print,
gw_is_reprep_id.
refresh : gi_it_fieldcat,
gi_it_excluding,
gi_it_special_groups,
gi_it_sort,
gi_it_filter,
gi_it_events,
gi_it_event_exit.
endform. "fm_alv_reset_data
*&--------------------------------------------------------------------*
*& Form fm_alv_set_layout
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
form fm_alv_set_layout using fu_title.
gw_is_layout-window_titlebar = fu_title.
gw_is_layout-zebra = 'X'.
gw_is_layout-colwidth_optimize = 'X'.
gw_is_layout-no_colhead = space.
gw_is_layout-group_change_edit = 'X'.
* gw_is_layout-box_fieldname = 'CHBOX'.
gw_is_layout-box_fieldname = 'CHBOX'.
gw_is_layout-box_tabname = 'T_HEADER'.
gw_is_layout-expand_fieldname = 'EXP'.
gw_is_layout-expand_all = 'X'.
endform. "fm_alv_set_layout
*&--------------------------------------------------------------------*
*& Form fm_alv_set_print
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
form fm_alv_set_print.
gw_is_print-no_print_listinfos = 'X'.
gw_is_print-no_print_selinfos = 'X'.
gw_is_print-no_coverpage = 'X'.
gw_is_print-no_print_hierseq_item = 'X'.
endform. "fm_alv_set_print
*&--------------------------------------------------------------------*
*& Form fm_alv_add_fieldcat
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->FU_1 text
* -->FU_2 text
* -->FU_3 text
* -->FU_4 text
* -->FU_5 text
* -->FU_6 text
* -->FU_7 text
* -->FU_8 text
* -->FU_9 text
* -->FU_10 text
* -->FU_11 text
* -->FU_12 text
* -->FU_13 text
* -->FU_14 text
* -->FU_15 text
* -->FU_16 text
* -->FU_17 text
* -->FU_18 text
* -->FU_19 text
* -->FU_20 text
* -->FU_21 text
*---------------------------------------------------------------------*
form fm_alv_add_fieldcat using fu_0 fu_1 fu_2 fu_3 fu_4 fu_5 fu_6 fu_7 fu_8 fu_9 fu_10
fu_11 fu_12 fu_13 fu_14 fu_15 fu_16 fu_17 fu_18 fu_19 fu_20 fu_21.
clear: gi_it_fieldcat.
gi_it_fieldcat-tabname = fu_0. " Tablename
gi_it_fieldcat-fieldname = fu_1. " Fieldname
gi_it_fieldcat-ref_tabname = fu_2. " Reference Tablename
gi_it_fieldcat-ref_fieldname = fu_3. " Reference Fieldname
gi_it_fieldcat-no_out = fu_4. " (O)blig.(X)no out
gi_it_fieldcat-outputlen = fu_5. " Output length
gi_it_fieldcat-seltext_l = fu_6. " long key word
gi_it_fieldcat-seltext_m = fu_7. " middle key word
gi_it_fieldcat-seltext_s = fu_8. " short key word
gi_it_fieldcat-reptext_ddic = fu_9. " heading (ddic)
gi_it_fieldcat-round = fu_10. " round in write statement
gi_it_fieldcat-do_sum = fu_11. " sum up
gi_it_fieldcat-hotspot = fu_12. " 'X' = hotspot is active -> Event click
gi_it_fieldcat-decimals_out = fu_13. " decimals in write statement
gi_it_fieldcat-currency = fu_14.
gi_it_fieldcat-quantity = fu_15.
gi_it_fieldcat-qfieldname = fu_16. " field with quantity unit
gi_it_fieldcat-cfieldname = fu_17. " field with currency unit
gi_it_fieldcat-checkbox = fu_18. " 'X' = checkbox or ' ' = not checkbox
gi_it_fieldcat-icon = fu_19. " 'X' = icon or ' ' = not icon
gi_it_fieldcat-fix_column = fu_20. " 'X' = Fix Column On or ' ' = Fix Column off gi_it_fieldcat-key = &21. "
gi_it_fieldcat-key = fu_21. " 'X' = Key or ' ' = not Key
append gi_it_fieldcat.
endform. "fm_alv_add_fieldcat
*&--------------------------------------------------------------------*
*& Form FM_ALV_SET_PF_STATUS
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->RT_EXTAB text
*---------------------------------------------------------------------*
form fm_alv_set_pf_status using rt_extab type slis_t_extab.
set pf-status 'ZSTANDARD'.
endform. "fm_alv_set_pf_status
*&--------------------------------------------------------------------*
*& Form FM_USER_COMMAND
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
form fm_alv_user_command using fu_ucomm like sy-ucomm
fu_selfield type slis_selfield.
data: lt_dynpread like dynpread occurs 0 with header line,
lv_ok_code like sy-ucomm,
temps like t_header,
tempx like t_report.
move fu_ucomm to lv_ok_code.
read table t_header index fu_selfield-tabindex into temps.
read table t_report index fu_selfield-tabindex into tempx.
case lv_ok_code.
when '&IC1'.
* PERFORM fm_alv_event_double_click.
* case fu_selfield-fieldname.
* when 'EBELN'.
* if temps-ebeln <> ''.
* set parameter id 'BES' field temps-ebeln.
* call transaction 'ME23N' and skip first screen.
* endif.
*
* when 'MATNR'.
* if tempx-matnr <> '' and tempx-werks <> ''.
* set parameter id 'MAT' field tempx-matnr.
* set parameter id 'WRK' field tempx-werks.
** SET PARAMETER ID 'LAG' FIELD temps-lgort.
* call transaction 'MMBE' and skip first screen.
* endif.
*
* when others.
* endcase.
when '&ETA'.
* PERFORM fm_alv_event_double_click.
when '&F03' or '&F15' or '&F12'.
endcase.
move 'X' to fu_selfield-refresh.
endform. "FM_USER_COMMAND
- Buat program include sekali lagi dengan nama ZTEST_FM_UPLOAD_DATAF01.
- Bingung ta ga koen kakean includtan. wes g usah bingung ketikkan program seperti dibawah ini:
*& Include ZTEST_FM_UPLOAD_DATAF01
*&---------------------------------------------------------------------*
FORM f_get_filename CHANGING fc_file.
DATA ld_loc LIKE dxfields-location.
DATA ld_path LIKE dxfields-longpath." value '/usr/sap'.
CALL FUNCTION '/SAPDMC/LSM_F4_FRONTEND_FILE'
CHANGING
pathfile = fc_file
EXCEPTIONS
canceled_by_user = 1
system_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
ENDIF.
ENDFORM. " F_GET_FILENAME
*&---------------------------------------------------------------------*
*& Form f_gui_message
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FU_TEXT1 text
* -->FU_TEXT2 text
*----------------------------------------------------------------------*
FORM f_gui_message USING fu_text1 fu_text2.
DATA: ld_text1(100) TYPE c.
CONCATENATE fu_text1 fu_text2 INTO ld_text1
SEPARATED BY space.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = 40
text = ld_text1.
ENDFORM. " F_GUI_MESSAGE
*&---------------------------------------------------------------------*
*& Form f_excell_process
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_excell_process .
DATA : batas(4) TYPE n.
CLEAR : lv_start_row, lv_end_row, batas.
batas = pa_row02 + 1.
lv_start_row = pa_row01.
lv_end_row = batas.
DATA: lv_tabix TYPE sy-tabix.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_infile
i_begin_col = '1'
i_begin_row = lv_start_row " Start at 8nd row used no heading
i_end_col = '43'
i_end_row = lv_end_row
TABLES
intern = t_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE e000(0k) WITH text-001. "Problem uploading Excel Spreadsheet
ENDIF.
* Sort table by rows and colums
SORT t_excel BY row col.
* Get first row retrieved
DELETE t_excel WHERE row EQ '0001'.
READ TABLE t_excel INDEX 1.
* Set first row retrieved to current row
d_currentrow = t_excel-row.
LOOP AT t_excel.
* Reset values for next row
IF t_excel-row NE d_currentrow.
APPEND wa_excel_record TO t_excel_record.
CLEAR wa_excel_record.
d_currentrow = t_excel-row.
ENDIF.
CASE t_excel-col.
WHEN '0001'.
wa_excel_record-matnr = t_excel-value.
WHEN '0002'.
wa_excel_record-mbrsh = t_excel-value.
WHEN '0003'.
wa_excel_record-mtart = t_excel-value.
WHEN '0004'.
wa_excel_record-maktx = t_excel-value.
WHEN '0005'.
wa_excel_record-meins = t_excel-value.
WHEN '0006'.
wa_excel_record-matkl = t_excel-value.
WHEN '0007'.
wa_excel_record-bismt = t_excel-value.
ENDCASE.
ENDLOOP.
APPEND wa_excel_record TO t_excel_record.
d_counter = 0.
PERFORM f_gui_message USING 'Processing transaction...' ''.
t_insert[] = t_excel_record[].
ENDFORM. "f_excell_process
*&---------------------------------------------------------------------*
*& Form FM_UPLOAD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form FM_UPLOAD_DATA .
LOOP AT t_insert.
PERFORM open_group.
PERFORM bdc_dynpro USING 'SAPLMGMM' '0060'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RMMG1-MATNR'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTR'.
PERFORM bdc_field USING 'RMMG1-MATNR'
t_insert-matnr.
PERFORM bdc_field USING 'RMMG1-MBRSH'
t_insert-mbrsh.
PERFORM bdc_field USING 'RMMG1-MTART'
t_insert-mtart.
PERFORM bdc_dynpro USING 'SAPLMGMM' '0070'.
PERFORM bdc_field USING 'BDC_CURSOR'
'MSICHTAUSW-DYTXT(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTR'.
PERFORM bdc_field USING 'MSICHTAUSW-KZSEL(01)'
'X'.
PERFORM bdc_dynpro USING 'SAPLMGMM' '4004'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=BU'.
PERFORM bdc_field USING 'MAKT-MAKTX'
t_insert-maktx.
PERFORM bdc_field USING 'BDC_CURSOR'
'MARA-BISMT'.
PERFORM bdc_field USING 'MARA-MEINS'
t_insert-meins.
PERFORM bdc_field USING 'MARA-MATKL'
t_insert-matkl.
PERFORM bdc_field USING 'MARA-BISMT'
t_insert-bismt.
PERFORM bdc_transaction USING 'MM01'.
PERFORM close_group.
ENDLOOP.
endform. " FM_UPLOAD_DATA
- Copy Gui Status dari program SAPLKKBL, wes tak anggep wes mudeng ae.
- Aktifkan semua program lalu jalankan.
- Masukkan file excell dalam format seperti gambara berikut :
- Setelah file dimasukkan langsung hajara aja programnya dengan cara tekan tombol Upload jangan diF8.
- Berhasil Beeerooooo!!!.
wow. postingan anda sangat luar biasa :D
BalasHapusKlo tabelnya bukan MARA, MAKT, dan sscrfields gimana mas.....?
BalasHapusapa cuman ganti field2nya saja udah bisa.
Tolong pencerahannya, saya nyoba kok error....
Kasih cluenya saja point2 yang diganti.
Thanks