Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Creating ALV reports using OOP concept

Jay_Kamdar
Participant
0 Likes
2,115

After creating many reports i found out that 90% of the coding in a report is copy paste i.e. only 10% of coding effort is required which includes

    creating the custom data types and internal table variables  ...

    populating the data

    creating screen,GUI status and GUI title

Just copy paste the below code and do as stated  :

*ALV TEMPLATE

*create screen no. 2000

*change flow logic in screen if necessary

*create GUI status and GUI title

*change selection texts and text symbols*

REPORT  Y_TEMPLATE_ALV.

TABLES : ."use if range of values required on selection screen.

DATA: zcl_alvgrid        TYPE REF TO cl_gui_alv_grid,

       zcl_ccontainer     TYPE REF TO cl_gui_docking_container,

       wa_layout    TYPE lvc_s_layo,

       it_fieldcat  TYPE STANDARD TABLE OF lvc_s_fcat,

       wa_fieldcat  TYPE lvc_s_fcat,

       z_document         TYPE REF TO cl_dd_document,

       o_docking TYPE REF TO cl_gui_docking_container,"Docking Container

       o_split TYPE REF TO cl_gui_easy_splitter_container, "Splitter

       o_top_container TYPE REF TO cl_gui_container,   "Top Container

       o_bottom_container TYPE REF TO cl_gui_container."Bottom Container

TYPES : BEGIN OF TY_FINAL,

"All columns which are to be displayed in the report should be included here

END OF TY_FINAL.

*Add additional Internal Tables's if data is to be extracted from multiple tables

*Then loop at main table and Read the other tables

DATA :IT_DATA TYPE STANDARD TABLE OF , "data extracted from tables can be stored in this internal table variable ..

       WA_DATA TYPE ,

       iT_alv      TYPE STANDARD TABLE OF TY_FINAL, " pass to  the method SET_TABLE_FOR_FIRST_DISPLAY of class
ZCL_ALVGRID [Already done ; its  just fyi]

       WA_alv      TYPE                   TY_FINAL.

DATA :V_CLN(255) TYPE C, " For no. of records

       V_LINE TYPE I. " for conversion of integer to character

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

*                 Selection Screen                                     *

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

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.

PARAMETERS:

SELECT-OPTIONS: " PARAMETERS and Range on selection screen

SELECTION-SCREEN END OF BLOCK B1.

AT SELECTION-SCREEN OUTPUT.

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

*                        START  OF  SELECTION                          *

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

START-OF-SELECTION.

*  SELECT * FROM INTO CORRESPONDING FIELDS OF TABLE IT_DATA WHERE ....in ....

   IF SY-SUBRC = 0.

     LOOP AT IT_DATA INTO WA_DATA.

       MOVE-CORRESPONDING WA_DATA TO wa_alv. " if data is fetched from only one table

       APPEND wa_alv TO it_alv.

       CLEAR : wa_alv,WA_DATA.

     ENDLOOP.

     DESCRIBE TABLE it_alv LINES V_LINE.

     V_CLN = V_LINE.

   ENDIF.

END-OF-SELECTION.

   PERFORM DISPLAY_ALV.

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

*&      Module  STATUS  OUTPUT

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

*       text

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

MODULE STATUS_2000 OUTPUT.

   SET PF-STATUS 'STATUS'.

   SET TITLEBAR 'ALV'.

*  ** Creating Docking Container

   CREATE OBJECT o_docking

   EXPORTING

*    side = cl_gui_docking_container=>dock_at_right

     ratio = '95'.

   IF sy-subrc EQ 0.

* Splitting the Docking container

     CREATE OBJECT o_split

     EXPORTING

       parent        = o_docking

       sash_position = 05 "Position of Splitter Bar (in Percent)

       with_border   = 0. "With Border = 1 Without Border = 0

*   Placing the containers in the splitter

     o_top_container = o_split->top_left_container .

     o_bottom_container = o_split->bottom_right_container .

*   Creating the document

     CREATE OBJECT z_document

     EXPORTING

       style = 'ALV_GRID'.

   ENDIF.

* Calling the methods for dynamic text

   CALL METHOD z_document->add_text

   EXPORTING

     TEXT         = 'No. of Records:'

     sap_emphasis = cl_dd_area=>strong. " For bold

* Adding GAP

   CALL METHOD z_document->add_gap

   EXPORTING

     width = 10.

* Adding Text

   CALL METHOD z_document->add_text

   EXPORTING

     TEXT = v_cln.

* Adding Line

   CALL METHOD z_document->new_line.

* Display the data

   CALL METHOD z_document->display_document

   EXPORTING

     parent = o_top_container.

   IF zcl_alvgrid IS INITIAL .

*----Creating ALV Grid instance

     CREATE OBJECT zcl_alvgrid

     EXPORTING

       i_parent          = o_bottom_container

     EXCEPTIONS

       error_cntl_create = 1

       error_cntl_init   = 2

       error_cntl_link   = 3

       error_dp_create   = 4

       OTHERS            = 5.

     IF sy-subrc <> 0.

       MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

       WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

     ENDIF.

* Calling the method of ALV to process top of page

     CALL METHOD zcl_alvgrid->list_processing_events

     EXPORTING

       i_event_name = 'TOP_OF_PAGE'

       i_dyndoc_id  = z_document.

* Preparing field catalog.

     PERFORM T_FIELDCAT USING:

                '1'        'BRNCD'      'BRAND'.

*          'Column no' 'FIELDNAME' 'Column Heading' 

 

     WA_LAYOUT-CWIDTH_OPT = 'X'.

     WA_LAYOUT-ZEBRA = 'X'.

     WA_LAYOUT-SEL_MODE =  'A'.

* Setting table for first display

     CALL METHOD ZCL_ALVGRID->SET_TABLE_FOR_FIRST_DISPLAY

     EXPORTING

       IS_LAYOUT                     = WA_LAYOUT

     CHANGING

       IT_OUTTAB                     = it_alv

       IT_FIELDCATALOG               = IT_FIELDCAT

     EXCEPTIONS

       INVALID_PARAMETER_COMBINATION = 1

       PROGRAM_ERROR                 = 2

       TOO_MANY_LINES                = 3

       OTHERS                        = 4.

     IF SY-SUBRC <> 0.

       MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

     ENDIF.

   ELSE.

     CALL METHOD ZCL_ALVGRID->REFRESH_TABLE_DISPLAY

     EXCEPTIONS

       FINISHED = 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.

   ENDIF.

ENDMODULE.                 " STATUS  OUTPUT

MODULE USER_COMMAND_2000 INPUT.

   DATA: V_OK_CODE TYPE SY-UCOMM,

         V_SAVE_OK TYPE SY-UCOMM.

   V_OK_CODE = SY-UCOMM.

   V_SAVE_OK = V_OK_CODE.

   CASE SY-UCOMM.

     WHEN 'BACK'.

       SET SCREEN 1000.

     WHEN 'EXIT'.

       LEAVE program.

     WHEN OTHERS.

       SET SCREEN 1000.

   ENDCASE.

   CLEAR V_SAVE_OK.

   SET SCREEN 0.

   LEAVE SCREEN.

ENDMODULE.                 " USER_COMMAND_2000  INPUT

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

*&      Form  T_FIELDCAT

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

*       text

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

*      -->x   text

*      -->y   text

*      -->z   text

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

FORM T_FIELDCAT  USING VALUE(X) TYPE ANY

       VALUE(Y) TYPE ANY

       VALUE(Z) TYPE ANY.

   WA_FIELDCAT-COL_POS = X.

   WA_FIELDCAT-FIELDNAME = Y.

   WA_FIELDCAT-COLTEXT  = Z.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

ENDFORM.                      " T_FIELDCAT

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

*&      Form  DISPLAY_ALV

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

*       text

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

*  -->  p1        text

*  <--  p2        text

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

FORM DISPLAY_ALV .

   IF NOT it_alv[] IS INITIAL.

     CALL SCREEN 2000.

   ELSE.

     MESSAGE 'No data for Display' TYPE 'I'.

   ENDIF.

ENDFORM.                    " DISPLAY_ALV

7 REPLIES 7
Read only

matt
Active Contributor
0 Likes
874

You've got forms in there. That's not very OO.

Read only

0 Likes
874

yes you are right,

not all is oop but main ALV part is oop oriented .

you can remove the forms if you want

Read only

SuhaSaha
Product and Topic Expert
Product and Topic Expert
0 Likes
874

Hello Jay,

Calling methods, creating instances, casting etc are not OOP. When you say you've developed an OO-report you think OO, refer to this blog to see what i mean -

BR,

Suhas

Read only

0 Likes
874

I agree with Matthew, you could change you report to define a local class, replacing form with methods, or even create a standalone interface/class to use as sample ?

Regards,

Raymond

Read only

0 Likes
874

i wish i could change the subject of the discussion or delete this and create a new one named : Create ALV reports without much coding effort

Read only

SuhaSaha
Product and Topic Expert
Product and Topic Expert
0 Likes
874

If you wish to develop ALV reports easily then try SALV Object Model, it's easier & super fast!

- Suhas

Read only

0 Likes
874

thanks for the info
Forever Learning