Report (702) - ALV_Class_Reporting

<< Click to Display Table of Contents >>

Navigation:  All About ABAP Technique > Indonesia > ABAP Report > Class in ALV >

Report (702) - ALV_Class_Reporting

Objektif

Membuat Report

Hasil

Kode Sintak

Call Method "ycl_report_mm=>get_data"

Kode Transaksi

SE38 - ABAP Editor

Tabel

MARA - General Material Data (Data Material Umum)

Support

Video

Video (Tips)

Kontributor

Danar Andri Prasetyo ( danaruto131@yahoo.com )

 

 

Membuat Report

1.Buka SE38

2.Kopi Program "SAPBC400RUD_ALV_GRID" menjadi "ZSAPBC400RUD_ALV_GRID_MM"

ar0107

3.Seleksi Semua Object

ar0108

4.Klik "ar0109" dan simpan di local object

5.Ubah Nama Program "ZSAPBC400RUD_ALV_GRID_MM"

6.Simpan, Aktifkan dan Tes jalankan program

7.Ketika kita klik pada data,tidak muncul pesan, maka kita akan mengubahnya agar keluar

ar0120

8.Pertama kita modifikasi deklarasi tabel

Sebelum

tables sbc400_carrier.

 

Setelah

*tables sbc400_carrier.

 

9.Tambahkan Sintak sebelum start-of-selection

TABLES: mara.

INCLUDE zcl_event_receiver.

 

TYPE-POOLS: icon, ole2.

TYPES : BEGIN OF gt_header,

          icon(4),

END OF gt_header.

 

DATA: tc_header TYPE REF TO cl_gui_custom_container,

      tg_header TYPE REF TO cl_gui_alv_grid,

      tc_detail TYPE REF TO cl_gui_custom_container,

      tg_detail TYPE REF TO cl_gui_alv_grid,

      go_event_receiver_header TYPE REF TO zcl_event_receiver,

      go_event_receiver_detail TYPE REF TO zcl_event_receiver.

DATA: gw_fieldcat_header TYPE lvc_t_fcat,

      gw_fieldcat_detail TYPE lvc_t_fcat.

DATA: gv_row_no TYPE i.

 

DATA : gi_data TYPE ytta_header_101 WITH HEADER LINE.

 

10.Modifikasi MODULE CREATE CONTROL OUTPUT

Sebelum

MODULE CREATE_CONTROL OUTPUT.

 if container_ref is initial.

  create object container_ref

         exporting container_name = 'CONTAINER_1'.

  create object grid

         exporting i_parent = container_ref.

 

 

  call method grid->set_table_for_first_display

         exporting i_structure_name = 'SPFLI'

         changing  it_outtab        = itab.

 else.

  select * from spfli into table itab

                      where carrid = sbc400_carrier-carrid.

  call method grid->refresh_table_display

         exporting I_SOFT_REFRESH = 'X'.

 

 endif.

ENDMODULE.                             " CREATE_CONTROL  OUTPUT

 

Setelah

MODULE create_control OUTPUT.

  IF container_ref IS INITIAL.

    CREATE OBJECT container_ref

           EXPORTING container_name = 'CONTAINER_1'.

    CREATE OBJECT grid

           EXPORTING i_parent = container_ref.

 

    CALL METHOD grid->set_table_for_first_display

      EXPORTING

        i_structure_name = 'SPFLI'

      CHANGING

        it_outtab        = itab.

  ELSE.

    CALL METHOD YCL_REPORT_MM=>get_data

      EXPORTING

        gv_matkl   = mara-matkl

        gv_matnr   = '001-001'

        gv_max_row = '100'

      CHANGING

        data       = gi_data[].

 

    CALL METHOD grid->refresh_table_display

      EXPORTING

        i_soft_refresh = 'X'.

 

  ENDIF.

ENDMODULE.                             " CREATE_CONTROL  OUTPUT

 

*) pada MODULE create_control OUTPUT, kita gunakan class YCL_REPORT_MM yang kita buat pada Report(701)

 

11.Kemudian kita buat in program include baru "zlc_event_receiver", kita hanya mengeklik ganda pada zlc_event_receiver

ar0121 kemudian klik ar0122

12.Akan ditampilkan

ar0123 Klik ar0124 ke local object

13. Tambahkan Kode sintak berikut ke zlc_event_receiver

*&---------------------------------------------------------------------*

*&  Include           ZCL_EVENT_RECEIVER                               *

*&---------------------------------------------------------------------*

 

CLASS ZCL_EVENT_RECEIVER DEFINITION.

  PUBLIC SECTION.

    METHODS:

     HANDLE_TOOLBAR FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID

       IMPORTING

         E_OBJECT E_INTERACTIVE,

     HANDLE_USER_COMMAND FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID

       IMPORTING E_UCOMM,

     HANDLE_HOTSPOT_CLICK FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID

        IMPORTING E_ROW_ID E_COLUMN_ID ES_ROW_NO,

     HANDLE_BUTTON_CLICK FOR EVENT BUTTON_CLICK OF CL_GUI_ALV_GRID

        IMPORTING ES_COL_ID ES_ROW_NO,

     HANDLE_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID

        IMPORTING E_ROW E_COLUMN ES_ROW_NO.

ENDCLASS.                    "lcl_event_receiver DEFINITION

 

 

CLASS ZCL_EVENT_RECEIVER IMPLEMENTATION.

  METHOD HANDLE_TOOLBAR.

*  Event handler method for event toolbar.

    CONSTANTS:

*  Constants for button type

      C_BUTTON_NORMAL           TYPE I VALUE 0,

      C_MENU_AND_DEFAULT_BUTTON TYPE I VALUE 1,

      C_MENU                    TYPE I VALUE 2,

      C_SEPARATOR               TYPE I VALUE 3,

      C_RADIO_BUTTON            TYPE I VALUE 4,

      C_CHECKBOX                TYPE I VALUE 5,

      C_MENU_ENTRY              TYPE I VALUE 6.

    DATA:

        LS_TOOLBAR  TYPE STB_BUTTON.

*   Append seperator to the normal toolbar

    CLEAR LS_TOOLBAR.

    MOVE C_SEPARATOR TO LS_TOOLBAR-BUTN_TYPE..

    APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.

*   Append a new button that to the toolbar. Use E_OBJECT of

*   event toolbar. E_OBJECT is of type CL_ALV_EVENT_TOOLBAR_SET.

*   This class has one attribute MT_TOOLBAR which is of table type

*   TTB_BUTTON. The structure is STB_BUTTON

*    CLEAR LS_TOOLBAR.

*    MOVE 'BATALKAN_SKET'        TO LS_TOOLBAR-FUNCTION.

*    MOVE ICON_SYSTEM_MODUS_DELETE  TO LS_TOOLBAR-ICON.

*    MOVE 'BATALKAN SKET'     TO LS_TOOLBAR-QUICKINFO.

*    MOVE 'BATALKAN SKET'     TO LS_TOOLBAR-TEXT.

*    MOVE ' '              TO LS_TOOLBAR-DISABLED.

*    APPEND LS_TOOLBAR     TO E_OBJECT->MT_TOOLBAR.

 

 

*

  ENDMETHOD.                    "handle_toolbar

 

  METHOD HANDLE_USER_COMMAND.

*   Handle own functions defined in the toolbar

*    CASE E_UCOMM.

**      WHEN 'BATALKAN_SKET'.

**        PERFORM FM_BATALKAN_SKET.

*    ENDCASE.

  ENDMETHOD.                    "handle_user_command

 

  METHOD HANDLE_HOTSPOT_CLICK.

    PERFORM FM_ON_CLICK_HOTSPOT USING E_ROW_ID

                                      E_COLUMN_ID

                                      ES_ROW_NO.

  ENDMETHOD.                    "handle_hotspot_click

 

  METHOD HANDLE_BUTTON_CLICK.

    PERFORM FM_ON_BUTTON_CLICK USING ES_COL_ID

                                      ES_ROW_NO.

  ENDMETHOD.                    "HANDLE_BUTTON_CLICK

 

  METHOD HANDLE_DOUBLE_CLICK.

    PERFORM FM_ON_DOUBLE_CLICK USING E_ROW

                                     E_COLUMN

                                     ES_ROW_NO.

  ENDMETHOD.

 

ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION

 

14.Edit Status 0100 dengan mengeklik ar0125 kemudian Klik ganda pada PBO Module -> STATUS_0100

ar0126

15.Modifikasi Module status_0100 output

Sebelum

module status_0100 output.

  SET PF-STATUS 'STATUS_100'.

*  SET TITLEBAR 'xxx'.

 

endmodule.                 " STATUS_0100  OUTPUT

 

Setelah

MODULE status_0100 OUTPUT.

  SET PF-STATUS 'STATUS_100'.

*  SET TITLEBAR 'xxx'.

  IF tc_header IS INITIAL.

 

    PERFORM fm_build_alv_object_header.

 

  ELSE.

    CALL METHOD

      tg_header->refresh_table_display

      EXPORTING

        i_soft_refresh = 'X'.

 

  ENDIF.

ENDMODULE.                 " STATUS_0100  OUTPUT

 

16.Tambahkan pada akhir kode sintak

*&---------------------------------------------------------------------*

*&      Form  fm_on_BUTTON_CLICK

*&---------------------------------------------------------------------*

**       text

**----------------------------------------------------------------------*

*      -->P_ES_COL_ID  text

*      -->P_ES_ROW_NO  text

*----------------------------------------------------------------------*

FORM fm_on_button_click  USING    p_es_col_id

                                  p_es_row_no..

  READ TABLE gi_data INDEX p_es_row_no.

  IF sy-subrc IS INITIAL.

*    GV_ROW_NO = P_ES_ROW_NO.

    MESSAGE 'Test' TYPE 'E'.

  ENDIF.

ENDFORM.                    " fm_on_BUTTON_CLICK

 

 

*&--------------------------------------------------------------------*

*&      Form  FM_BUILD_ALV_OBJECT_HEADER

*&--------------------------------------------------------------------*

*       text

*---------------------------------------------------------------------*

FORM fm_build_alv_object_header.

  CREATE OBJECT tc_header

     EXPORTING container_name = 'FC_HEADER'.

  CREATE OBJECT tg_header

     EXPORTING i_parent = tc_header.

 

  CREATE OBJECT go_event_receiver_header.

  PERFORM fm_build_fieldcat_header TABLES gw_fieldcat_header.

 

  CREATE OBJECT go_event_receiver_header.

*  SET HANDLER GO_EVENT_RECEIVER_HEADER->HANDLE_TOOLBAR FOR TG_HEADER.

*  SET HANDLER GO_EVENT_RECEIVER_HEADER->HANDLE_USER_COMMAND FOR TG_HEADER.

*  SET HANDLER GO_EVENT_RECEIVER_HEADER->HANDLE_HOTSPOT_CLICK FOR TG_HEADER.

  SET HANDLER go_event_receiver_header->handle_button_click FOR tg_header.

  SET HANDLER go_event_receiver_header->handle_double_click FOR tg_header.

 

  CALL METHOD

    tg_header->set_table_for_first_display

    EXPORTING

      i_save           = 'U'

      i_structure_name = 'GI_DATA'

    CHANGING

      it_outtab        = gi_data[]

      it_fieldcatalog  = gw_fieldcat_header[].

 

ENDFORM.                    "FM_BUILD_ALV_OBJECT_HEADER

 

*&--------------------------------------------------------------------*

*&      Form  FM_BUILD_FIELDCAT_HEADER

*&--------------------------------------------------------------------*

*       text

*---------------------------------------------------------------------*

*      -->FT_REPORT  text

*---------------------------------------------------------------------*

FORM fm_build_fieldcat_header TABLES ft_report.

  PERFORM f_fieldcatg USING gw_fieldcat_header 'GI_DATA' :

*  'CHK' '' 'CHK' '' '1' '' '' '' '' '' '' '' '' '' '' 'X' 'X' '' 'X' '',

  'MATKL' 'GI_DATA' 'MATKL' '' '10' '' '' 'Material Number' '' '' '' '' '' '' '' '' '' '' '' '',

  'MATNR' 'GI_DATA' 'MATNR' '' '13' '' '' 'Material' '' '' '' '' '' '' '' '' '' '' '' ''.

ENDFORM.                    "FM_BUILD_FIELDCAT_HEADER

 

 

*&--------------------------------------------------------------------*

*&      Form  F_FIELDCATG

*&--------------------------------------------------------------------*

*       text

*---------------------------------------------------------------------*

*      -->T_ALV_FIELDtext

*      -->VALUE(FU_TYtext

*      -->VALUE(FU_FNtext

*      -->VALUE(FU_REtext

*      -->VALUE(FU_REtext

*      -->VALUE(FU_NOtext

*      -->VALUE(FU_OUtext

*      -->VALUE(FU_FLtext

*      -->VALUE(FU_REtext)

*      -->VALUE(FU_COtext)

*      -->VALUE(FU_DOtext

*      -->VALUE(FU_HOtext

*      -->VALUE(FU_DEtext

*      -->VALUE(FU_WAtext

*      -->VALUE(FU_MEtext

*      -->VALUE(FU_MEtextF)

*      -->VALUE(FU_WAtextF)

*      -->VALUE(FU_CHtextOX)

*      -->VALUE(FU_FItextUMN)

*      -->VALUE(FU_ICtext

*      -->VALUE(FU_EDtext

*      -->VALUE(FU_KEtext

*---------------------------------------------------------------------*

FORM f_fieldcatg USING

                      t_alv_fieldcat TYPE lvc_t_fcat

                      value(fu_types)  "0

                      value(fu_fname)  "1

                      value(fu_reftb)  "2

                      value(fu_refld)  "3

                      value(fu_noout)  "4

                      value(fu_outln)  "5

                      value(fu_fltxt)  "6

                      value(fu_reptxt) "7

                      value(fu_coltxt) "8

                      value(fu_dosum)  "9

                      value(fu_hotsp)  "10

                      value(fu_dec)    "11

                      value(fu_waers)

                      value(fu_meins)

                      value(fu_meins_f)

                      value(fu_waers_f)

                      value(fu_checkbox)

                      value(fu_fixcolumn)

                      value(fu_icon)

                      value(fu_edit)

                      value(fu_key)

                      .

 

 

  DATA: ld_fieldcat  TYPE lvc_t_fcat WITH HEADER LINE.

  CLEAR: ld_fieldcat.

  ld_fieldcat-tabname       = fu_types.

  ld_fieldcat-fieldname     = fu_fname.

  ld_fieldcat-ref_table     = fu_reftb.

  ld_fieldcat-ref_field     = fu_refld.

  ld_fieldcat-no_out        = fu_noout.

  ld_fieldcat-outputlen     = fu_outln.

  ld_fieldcat-seltext       = fu_fltxt.

  ld_fieldcat-reptext       = fu_reptxt.

  ld_fieldcat-coltext       = fu_coltxt.

  ld_fieldcat-do_sum        = fu_dosum.

  ld_fieldcat-hotspot       = fu_hotsp.

  ld_fieldcat-decimals_o    = fu_dec.

  ld_fieldcat-currency      = fu_waers.

  ld_fieldcat-quantity      = fu_meins.

  ld_fieldcat-qfieldname    = fu_meins_f.

  ld_fieldcat-cfieldname    = fu_waers_f.

  ld_fieldcat-checkbox      = fu_checkbox.

  ld_fieldcat-fix_column    = fu_fixcolumn.

  ld_fieldcat-icon          = fu_icon.

  ld_fieldcat-edit          = fu_edit.

  ld_fieldcat-key          = fu_key.

  APPEND ld_fieldcat TO t_alv_fieldcat.

 

ENDFORM.                    "F_FIELDCATG

 

*&---------------------------------------------------------------------*

*&      Form  FM_ON_CLICK_HOTSPOT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->I_ROW_ID     text

*      -->                 text

*      -->I_COLUMN_ID  text

*      -->                 text

*      -->IS_ROW_NO    text

*----------------------------------------------------------------------*

FORM FM_ON_CLICK_HOTSPOT USING I_ROW_ID TYPE LVC_S_ROW

             I_COLUMN_ID TYPE LVC_S_COL

            IS_ROW_NO TYPE LVC_S_ROID.

 

*  READ TABLE GI_HEADER INDEX I_ROW_ID.

*  IF SY-SUBRC IS INITIAL.

*    GV_ROW_NO = I_ROW_ID.

*  ENDIF.

  READ TABLE GI_DATA INDEX I_ROW_ID.

*  IF GI_DATA-ICON IS INITIAL.

*

*  ELSEIF GI_DATA-ICON = ICON_EXPAND.

*    PERFORM FM_LOAD_CHILD_HEADER USING GI_HEADER-PRUEFLOS GI_HEADER-WERK I_ROW_ID.

*  ELSEIF GI_HEADER-ICON = ICON_COLLAPSE.

*    PERFORM FM_UNLOAD_CHILD_HEADER USING GI_HEADER-PRUEFLOS I_ROW_ID.

*  ENDIF.

ENDFORM.                    "FM_ON_CLICK_HOTSPOT

 

*&---------------------------------------------------------------------*

*&      Form  FM_ON_DOUBLE_CLICK

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->P_E_ROW  text

*      -->P_E_COLUMN  text

*      -->P_ES_ROW_NO  text

*----------------------------------------------------------------------*

FORM fm_on_double_click  USING    p_e_row

                                  p_e_column

                                  p_es_row_no TYPE lvc_s_roid.

*  BREAK ABAP08.

  DATA: lv_row_id TYPE i.

  lv_row_id = p_es_row_no-row_id.

  READ TABLE gi_data INDEX lv_row_id.

  MESSAGE gi_data-matkl TYPE 'I'.

 

ENDFORM.                    " FM_ON_DOUBLE_CLICK

 

17.Modifikasi screen 0100 dengan mengeklik ar0125 kemudian klik ganda pada Screens -> 0100

ar0127

akan ditampilkan ar0128 kemudian klik ar0122

Kemudian ditampilkan ar0129 kemudian klik ar0130

 

18.Kemudian Klik tombol Layout ar0131

19.Klik pada ar0132 ubah properti ar0133

20.Klik pada ar0135 ubah properti ar0134

21.Simpan, Aktifkan screen dan tutup screen

22.Klik Tab 'Element List', ubah 'CONTAINER1' menjadi 'FC_HEADER'

ar0136

23.Aktifkan Screen Painter

24.kembali ke program utama dengan mengelik ganda pada ar0137

25.Simpan dan Aktifkan semua.

26.Program siap dijalankan.

27.Tampilanya akan seperti berikut

ar0289