Report (702) - ALV_Class_Reporting

<< Click to Display Table of Contents >>

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

Report (702) - ALV_Class_Reporting

Objective

Creating Report

Result

Source Code

Call Method "ycl_report_mm=>get_data"

Transaction Code

SE38 - ABAP Editor

Tables

MARA - General Material Data

Support

Video

Video (Tips)

Contributors

Danar Andri Prasetyo ( danaruto131@yahoo.com )

 

 

Creating Report

1.Open SE38

2.Copy Program "SAPBC400RUD_ALV_GRID" to "ZSAPBC400RUD_ALV_GRID_MM"

ar0107

3.Select All Object

ar0108

4.Click "ar0109" and save in local object

5.Change Program "ZSAPBC400RUD_ALV_GRID_MM"

6.Save, Activate and Test running program

7.When we click  it at data, it isn't appear message, so we will change it

ar0120

8.First we modified table declaration

Before

tables sbc400_carrier.

 

After

*tables sbc400_carrier.

 

9.Add before 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.Modified MODULE CREATE CONTROL OUTPUT

Before

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

 

After

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

 

*) at MODULE create_control OUTPUT, we use class YCL_REPORT_MM which we made at Report(701)

 

11.Then we make new include program "zlc_event_receiver", we just doble click at zlc_event_receiver

ar0121 then klik ar0122

12.It will be shown

ar0123 just click ar0124 to local object

13. Add line coding to 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 by click ar0125 then double click at PBO Module -> STATUS_0100

ar0126

15.Modified Module status_0100 output

Before

module status_0100 output.

  SET PF-STATUS 'STATUS_100'.

*  SET TITLEBAR 'xxx'.

 

endmodule.                 " STATUS_0100  OUTPUT

 

After

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.Add to the last of line coding

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

*&      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.Modified screen 0100 by click ar0125 then double click at Screens -> 0100

ar0127

will show ar0128 then click ar0122

then show ar0129 then click ar0130

 

18.Then Click button Layout ar0131

19.Click at ar0132 change properties ar0133

20.Click at ar0135 change properties ar0134

21.Save, activate screen and close screen

22.Click Tab 'Element List', change 'CONTAINER1' to 'FC_HEADER'

ar0136

23.Activate Screen Painter

24.Back to main program by double click at ar0137

25.Save and Activate.

26.The program is ready to run.

27.Views like this

ar0289