Selasa, 15 November 2011

Upload Material Using BDC

Sebelumnya kita telah membuat program upload Material Master menggunakan BAPI.
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 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 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 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 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 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 VALUE '\',
      session TYPE VALUE '',
      smalllog TYPE 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 WITH HEADER LINE.
*       messages of call transaction
DATA:   messtab LIKE bdcmsgcoll OCCURS 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 <> 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 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!!!.

2 komentar:

  1. wow. postingan anda sangat luar biasa :D

    BalasHapus
  2. Klo tabelnya bukan MARA, MAKT, dan sscrfields gimana mas.....?

    apa cuman ganti field2nya saja udah bisa.
    Tolong pencerahannya, saya nyoba kok error....

    Kasih cluenya saja point2 yang diganti.
    Thanks

    BalasHapus