Kamis, 28 April 2011

Abap Create ALV Report

Untuk membuat ALV report langkah-langkahnya adalah sebagai berikut:

1. Buka t-code se38 lalu buat program baru dengan nama ZREPORT_ALV.
2. Ketikkan kode program seperti di bawah ini:

*&-------------------------------------------*
*& Report  ZREPORT_ALV
*&
*&--------------------------------------------*
*&
*&
*&---------------------------------------------*

REPORT  zreport_alv.
TABLES : mara, makt.

TYPES BEGIN OF ty_gab,
        chbox,
        matnr LIKE mara-matnr,
        matkl LIKE mara-matkl,
        meins LIKE mara-meins,
        mtart LIKE mara-mtart,
        maktx LIKE makt-maktx,
  END OF ty_gab.

DATA : gi_makt LIKE STANDARD TABLE OF makt WITH HEADER LINE,
       gi_gab TYPE STANDARD TABLE OF ty_gab WITH HEADER LINE.

SELECTION-SCREEN BEGIN OF BLOCK head1 WITH FRAME TITLE text-101.

SELECT-OPTIONS so_matkl FOR mara-matkl.
SELECT-OPTIONS so_matnr FOR mara-matnr.

SELECTION-SCREEN END OF BLOCK head1.

START-OF-SELECTION.

  PERFORM fm_collect_data.
  PERFORM fm_process_data.
  PERFORM fm_display_data.

END-OF-SELECTION.

*&---------------------------------------------*
*&      Form  :
*&---------------------------------------------*
*       text
*------------------------------------------------------*
FORM : fm_collect_data.
  SELECT matnr matkl mtart meins
    INTO CORRESPONDING FIELDS OF TABLE gi_gab
    FROM mara
    WHERE matnr IN so_matnr
    AND matkl IN so_matkl.

  SELECT matnr maktx
    INTO CORRESPONDING FIELDS OF TABLE gi_makt
    FROM makt
    FOR ALL ENTRIES IN gi_gab
    WHERE matnr = gi_gab-matnr.

ENDFORM.                    ":

*&--------------------------------------------*
*&      Form  :
*&---------------------------------------------*
*       text
*------------------------------------------------------*
data: lv_message type char100. 

FORM : fm_process_data.
  LOOP AT gi_gab.

    clear lv_message.
      concatenate 'Harap Tunggu, sedang memproses ' gi_gab-matnr '...'
        into lv_message separated by space.
      call function 'SAPGUI_PROGRESS_INDICATOR'
        exporting
          text = lv_message. 

    READ TABLE gi_makt WITH KEY matnr = gi_gab-matnr.
    IF sy-subrc = 0.
      gi_gab-maktx = gi_makt-maktx.
    ENDIF.
    modify gi_gab.
  ENDLOOP.
ENDFORM.                    ":

*&------------------------------------------*
*&      Form  :
*&-------------------------------------------*
*       text
*-----------------------------------------------------*
FORM : fm_display_data.


ENDFORM.                    ":

3. Klik pada menu bar.
4. Buiat program include baru.


5. Beri nama dengan "ZINCLUDE" Lalu tekan tombol Centang atau Enter.


6. Save program.


7. Isikan kode program berikut ke dalam program include yang telah kita buat tadi.


*&---------------------------------------------------------------------*
*&  Include           ZINCLUDE
*&---------------------------------------------------------------------*

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,
       zcalvlogo type char40 value '',
        zcalvbackground like bapibds01-objkey value 'ALV_BACKGROUND'. .


*&--------------------------------------------------------------------*
*&      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_GRID_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_CALLBACK_TOP_OF_PAGE         = 'FM_ALV_TOP_OF_PAGE'
      i_background_id                = zcalvbackground
*      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-no_totalline           = '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_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 fu_22 fu_23.
  CLEAR: gi_it_fieldcat.
  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
  gi_it_fieldcat-key           = fu_21 " 'X' = Key or ' ' = not Key
 gi_it_fieldcat-no_zero       = fu_22. " 'X' = Remove Zero
 gi_it_fieldcat-edit          = fu_23. "sets whole column to be editable

  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 'YSTANDARD'.
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.
  MOVE fu_ucomm TO lv_ok_code.
  CASE lv_ok_code.
    WHEN '&IC1'.
*      PERFORM fm_alv_event_double_click.
    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

8. Aktifkan program include tersebut.
9.Buka sesi baru denga mengetikkan "/ose38" lalu isi nama program dengan "SAPLKKBL" lalu display.


10. Klik lau buka Gui Status pada Tree Menu.
11. Copy Gui Status -> "Standard".


 12. Isi Program dengan "ZREPORT_ALV" dan Status dengan "YSTANDARD".


13.Klik Copy.


14. Kembali ke program ZREPORT.

Tambahkan kode berikut di dalam form fm_display_data.
  PERFORM fm_alv_reset_data.

*  Set ALV Parameters and Data
  PERFORM fm_alv_set_layout USING 'Display List of Master Material'.
  "PERFORM fm_set_header USING 'Pembayaran Valas'.
  PERFORM fm_alv_set_print.
  PERFORM fm_alv_set_column.

  gv_i_default = 'X'.
  gv_i_save = 'A'.
  PERFORM fm_alv_show TABLES gi_gab.

15. Tambahkan kode berikut di bawah form fm_display_data.


FORM fm_alv_set_column.

*  Displaying Column by Fieldname
    PERFORM fm_alv_add_fieldcat USING :
      'MATNR' 'MARA'  'MATNR' '' '' ''    '' '' '' '' '' '' '' '' '' '' '' '' '' 'X' 'X' '' '',
      'MATKL' 'MARA'  'MATKL' '' '' ''   '' '' '' '' '' '' '' '' '' '' '' '' '' 'X' 'X' '' '',
      'MTART' 'MARA'  'MTART' '' '' ''    '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '',
      'MAKTX' 'MAKT'  'MAKTX' '' '' ''   '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''.

*  Sort and Group by Field
*  CLEAR gi_it_sort.
*  gi_it_sort-fieldname = 'LIFNR'. ">> 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_alv_top_of_page.
 DATA: t_header TYPE slis_t_listheader,
        wa_header TYPE slis_listheader,
        t_line LIKE wa_header-info,
        ld_lines TYPE i,

        ld_linesc(10) TYPE c.
* Title
  wa_header-typ  = 'H'.

  wa_header-info = 'Laporan Material'.

*  APPEND wa_header TO t_header.
*  CLEAR wa_header.
*  wa_header-typ  = 'S'.
*  wa_header-key = 'Company    : '.
*  wa_header-info = so_bukrs.
*
*  APPEND wa_header TO t_header.
*  CLEAR wa_header.
*  wa_header-typ  = 'S'.
*  wa_header-key = 'Vendor    : '.
*  wa_header-info = so_lifnr.
*  APPEND wa_header TO t_header.
*  CLEAR wa_header.


*  wa_header-typ  = 'S'.
*  wa_header-key = 'Periode: '.
**  wa_header-info = so_budat.
*  CONCATENATE so_budat+9(2)'.' so_budat+7(2)'.' so_budat+3(4) '  ' ' - ' '  '
*              so_budat+17(2)'.' so_budat+15(2)'.' so_budat+11(4) INTO wa_header-info.
  APPEND wa_header TO t_header.
  CLEAR: wa_header.


  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = t_header.
ENDFORM.                    "FM_ALV_TOP_OF_PAGE

16. Aktifkan semua program lalu jalankan.

Tidak ada komentar:

Posting Komentar