Block ALV Report in SAP ABAP


www.zktutorials.com


In SAP ABAP, you can display multiple internal tables in a single output using a block ALV report. Here’s a simple explanation:

A block ALV report allows you to show data from multiple internal tables in a structured format on one screen. Each internal table's data can be displayed in its own block or section, usually grouped by a key field. This makes it convenient for users to compare and analyze related information together without switching between different screens or reports.

The report typically includes features such as sorting, filtering, and subtotaling, enhancing the usability and interactivity of the displayed data. This approach helps in presenting comprehensive information efficiently and effectively to the end user.

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

*& Report ZDEMO_TREE_REPORT1

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

*&

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

REPORT ZDEMO_BLOCK_ALV_REPORT.


tables : ekko.



data : gt_fcat type slis_t_fieldcat_alv,

       gs_fcat type slis_fieldcat_alv,


       gt_fcat1 type slis_t_fieldcat_alv,

       gs_fcat1 type slis_fieldcat_alv,


       gt_fcat2 type slis_t_fieldcat_alv,

       gs_fcat2 type slis_fieldcat_alv,



       gt_events type SLIS_T_EVENT,

       gs_keyinfo type slis_keyinfo_alv,

       gs_layout type SLIS_LAYOUT_ALV,

       hdr_cnt type i,

       itm_cnt type i,

       vend_cnt type i.



SELECTION-SCREEN begin of BLOCK b1 with FRAME TITLE text-001.

  SELECT-OPTIONS : s_ebeln for ekko-ebeln,

                   s_aedat for ekko-aedat,

                   s_lifnr for ekko-lifnr,

                   s_bukrs for ekko-bukrs.

SELECTION-SCREEN end of BLOCK b1.



START-OF-SELECTION.


     perform get_build_data.


end-of-SELECTION.

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

*& Form get_build_data

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

*& text

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

*& -->  p1        text

*& <--  p2        text

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

FORM get_build_data .



"PO header

    select ebeln, bukrs, aedat, lifnr, rlwrt, ' ' as expand

    from ekko into table @data(gt_ekko)

    WHERE ebeln in @s_ebeln

      and bukrs in @s_bukrs

      and aedat in @s_aedat

      and lifnr in @s_lifnr.



  IF gt_ekko[] is NOT INITIAL.


  sort gt_ekko by lifnr.


"Vendor names

  select lifnr, name1 from lfa1 into TABLE @data(gt_lfa1)

  FOR ALL ENTRIES IN @gt_ekko WHERE lifnr = @gt_ekko-lifnr.



  sort gt_ekko by ebeln.


"po line items

  select ebeln, ebelp, txz01, matnr, menge, meins, netwr

  from ekpo into table @data(gt_ekpo)

  for all entries in @gt_ekko where ebeln = @gt_ekko-ebeln.


  sort gt_lfa1 by lifnr.

  sort gt_ekko by lifnr ebeln.

  sort gt_ekpo by ebeln ebelp.



***************************************** build fcat and display data.


  clear : gt_fcat[], gt_fcat1[], gt_fcat2[], gs_fcat, hdr_cnt, itm_cnt, vend_cnt, gs_layout, gs_keyinfo.



  gs_layout-colwidth_optimize = 'X'.


"PO header

  hdr_cnt = hdr_cnt + 1.

  gs_fcat-col_pos   = hdr_cnt.

  gs_fcat-fieldname = 'EBELN'.

  gs_fcat-tabname   = 'GT_EKKO'.

  gs_fcat-seltext_l = 'PO Number'.

  append gs_fcat to gt_fcat.

  clear : gs_fcat.


  hdr_cnt = hdr_cnt + 1.

  gs_fcat-col_pos   = hdr_cnt.

  gs_fcat-fieldname = 'AEDAT'.

  gs_fcat-tabname   = 'GT_EKKO'.

  gs_fcat-seltext_l = 'PO Date'.

  append gs_fcat to gt_fcat.

  clear : gs_fcat.


  hdr_cnt = hdr_cnt + 1.

  gs_fcat-col_pos   = hdr_cnt.

  gs_fcat-fieldname = 'LIFNR'.

  gs_fcat-tabname   = 'GT_EKKO'.

  gs_fcat-seltext_l = 'Vendor ID'.

  append gs_fcat to gt_fcat.

  clear : gs_fcat.


"Vendor

  vend_cnt = vend_cnt + 1.

  gs_fcat1-col_pos   = vend_cnt.

  gs_fcat1-fieldname = 'LIFNR'.

  gs_fcat1-seltext_l = 'Vendor ID'.

  append gs_fcat1 to gt_fcat1.

  clear : gs_fcat1.


  vend_cnt = vend_cnt + 1.

  gs_fcat1-col_pos   = vend_cnt.

  gs_fcat1-fieldname = 'NAME1'.

  gs_fcat1-seltext_l = 'Vendor Name'.

  append gs_fcat1 to gt_fcat1.

  clear : gs_fcat1.


"PO line items

  itm_cnt = itm_cnt + 1.

  gs_fcat2-col_pos   = vend_cnt.

  gs_fcat2-fieldname = 'EBELN'.

  gs_fcat2-seltext_l = 'PO Number'.

  append gs_fcat2 to gt_fcat2.

  clear : gs_fcat2.


  itm_cnt = itm_cnt + 1.

  gs_fcat2-col_pos   = vend_cnt.

  gs_fcat2-fieldname = 'EBELP'.

  gs_fcat2-seltext_l = 'PO Line Item'.

  append gs_fcat2 to gt_fcat2.

  clear : gs_fcat2.


  itm_cnt = itm_cnt + 1.

  gs_fcat2-col_pos   = vend_cnt.

  gs_fcat2-fieldname = 'MATNR'.

  gs_fcat2-seltext_l = 'Material ID'.

  append gs_fcat2 to gt_fcat2.

  clear : gs_fcat2.


  itm_cnt = itm_cnt + 1.

  gs_fcat2-col_pos   = vend_cnt.

  gs_fcat2-fieldname = 'TXZ01'.

  gs_fcat2-seltext_l = 'Material Description'.

  append gs_fcat2 to gt_fcat2.

  clear : gs_fcat2.


  itm_cnt = itm_cnt + 1.

  gs_fcat2-col_pos   = vend_cnt.

  gs_fcat2-fieldname = 'MENGE'.

  gs_fcat2-seltext_l = 'Order Qty'.

  append gs_fcat2 to gt_fcat2.

  clear : gs_fcat2.


  itm_cnt = itm_cnt + 1.

  gs_fcat2-col_pos   = vend_cnt.

  gs_fcat2-fieldname = 'MEINS'.

  gs_fcat2-seltext_l = 'UOM'.

  append gs_fcat2 to gt_fcat2.

  clear : gs_fcat2.


  itm_cnt = itm_cnt + 1.

  gs_fcat2-col_pos   = vend_cnt.

  gs_fcat2-fieldname = 'NETWR'.

  gs_fcat2-seltext_l = 'Item PO Value'.

  append gs_fcat2 to gt_fcat2.

  clear : gs_fcat2.


CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'

  EXPORTING

    i_callback_program             = sy-repid

*   I_CALLBACK_PF_STATUS_SET       = ' '

*   I_CALLBACK_USER_COMMAND        = ' '

*   IT_EXCLUDING                   =

          .


 "Vendor data

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'

  EXPORTING

    is_layout                        = gs_layout

    it_fieldcat                      = gt_fcat1

    i_tabname                        = 'GT_LFA1'

    it_events                        = gt_events

*   IT_SORT                          =

*   I_TEXT                           = ' '

  TABLES

    t_outtab                         = gt_lfa1

 EXCEPTIONS

   PROGRAM_ERROR                    = 1

   MAXIMUM_OF_APPENDS_REACHED       = 2

   OTHERS                           = 3

          .

IF sy-subrc <> 0.

* Implement suitable error handling here

ENDIF.



"PO header

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'

  EXPORTING

    is_layout                        = gs_layout

    it_fieldcat                      = gt_fcat

    i_tabname                        = 'GT_EKKO'

    it_events                        = gt_events

*   IT_SORT                          =

*   I_TEXT                           = ' '

  TABLES

    t_outtab                         = gt_ekko

 EXCEPTIONS

   PROGRAM_ERROR                    = 1

   MAXIMUM_OF_APPENDS_REACHED       = 2

   OTHERS                           = 3

          .

IF sy-subrc <> 0.

* Implement suitable error handling here

ENDIF.




"PO line items

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'

  EXPORTING

    is_layout                        = gs_layout

    it_fieldcat                      = gt_fcat2

    i_tabname                        = 'GT_EKPO'

    it_events                        = gt_events

*   IT_SORT                          =

*   I_TEXT                           = ' '

  TABLES

    t_outtab                         = gt_ekpo

 EXCEPTIONS

   PROGRAM_ERROR                    = 1

   MAXIMUM_OF_APPENDS_REACHED       = 2

   OTHERS                           = 3

          .

IF sy-subrc <> 0.

* Implement suitable error handling here

ENDIF.

"display data

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'

* EXPORTING

*   I_INTERFACE_CHECK             = ' '

*   IS_PRINT                      =

*   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        =

 EXCEPTIONS

   PROGRAM_ERROR                 = 1

   OTHERS                        = 2

          .

IF sy-subrc <> 0.

* Implement suitable error handling here

ENDIF.

*********************************************************************

  else.

    message 'No record found' TYPE 'I'.

    set SCREEN 0.


  endif.


ENDFORM.




 




Post a Comment

0 Comments

Total Pageviews