Dear SAPLearners, in the ALV ABAP tutorials, we will learn how to add Sub- total text in ABAP ALV Grid.
Step-by-Step Procedure
- Create an ABAP Program in SE38 transaction.
- Create and ALV report using the function module REUSE_ALV_GRID_DISPLAY.
- Populate the SUBTOTAL_EVENT in IT_EVENTS parameter in the REUSE_ALV_GRID_DISPLAY.
You can find the full ABAP code below.
REPORT Z_ALV_SUBTOTAL_TEXT.
*-------------------------------------------------------------*
* www.saplearners.com *
*-------------------------------------------------------------*
* Sub Total Text *
*-------------------------------------------------------------*
*--- Table declaration
TABLES: ekko.
*-- Type pool declaration
TYPE-POOLS: slis.
*--- Selection screen
SELECT-OPTIONS: s_ebeln FOR ekko-ebeln.
*--- Type declaration
TYPES: BEGIN OF lty_ekpo,
ebeln TYPE char30, " Document no.
ebelp TYPE ebelp, " Item no
matnr TYPE matnr, " Material no
matnr1 TYPE matnr, " Material no
werks TYPE werks_d, " Plant
werks1 TYPE werks_d, " Plant
ntgew TYPE entge, " Net weight
gewe TYPE egewe, " Unit of weight
END OF lty_ekpo.
*--- Internal table declaration
DATA: lt_ekpo TYPE STANDARD TABLE OF lty_ekpo,
lt_fieldcat TYPE slis_t_fieldcat_alv,
lt_alv_top_of_page TYPE slis_t_listheader,
lt_events TYPE slis_t_event,
lt_sort TYPE slis_t_sortinfo_alv,
i_event TYPE slis_t_event.
*--- Work area declaration
DATA: wa_ekko TYPE lty_ekpo,
wa_layout TYPE slis_layout_alv,
wa_events TYPE slis_alv_event,
wa_sort TYPE slis_sortinfo_alv.
*--- Start-of-selection event
START-OF-SELECTION.
* Select data from ekpo
SELECT ebeln " Doc no
ebelp " Item
matnr " Material
matnr " Material
werks " Plant
werks " Plant
ntgew " Quantity
gewei " Unit
FROM ekpo
INTO TABLE lt_ekpo
WHERE ebeln IN s_ebeln
AND ntgew NE '0.00'.
IF sy-subrc = 0.
SORT lt_ekpo BY ebeln ebelp matnr .
ENDIF.
*--- Field Catalog
PERFORM f_field_catalog.
*--- Layout
PERFORM f_build_layout.
* Perform to populate the sort table.
PERFORM f_populate_sort.
* Perform to populate ALV event
PERFORM f_get_event.
END-OF-SELECTION.
* Perform to display ALV report
PERFORM f_alv_report_display.
*&---------------------------------------------------------------------*
*& Form sub_field_catalog
*&---------------------------------------------------------------------*
* Build Field Catalog
*----------------------------------------------------------------------*
* No Parameter
*----------------------------------------------------------------------*
FORM f_field_catalog .
DATA: lwa_fcat TYPE slis_fieldcat_alv.
* Build Field Catalog
lwa_fcat-col_pos = 1. "Column
lwa_fcat-fieldname = 'EBELN'. "Field Name
lwa_fcat-tabname = 'LT_EKPO'. "Internal Table Name
lwa_fcat-seltext_l = 'Doc. No'. "Field Text
APPEND lwa_fcat TO lt_fieldcat.
lwa_fcat-col_pos = 2. "Column
lwa_fcat-fieldname = 'EBELP'. "Field Name
lwa_fcat-tabname = 'LT_EKPO'. "Internal Table Name
lwa_fcat-seltext_l = 'Item No'. "Field Text
APPEND lwa_fcat TO lt_fieldcat.
CLEAR:lwa_fcat.
lwa_fcat-col_pos = 3. "Column
lwa_fcat-fieldname = 'WERKS1'. "Field Name
lwa_fcat-tabname = 'LT_EKPO'. "Internal Table Name
lwa_fcat-seltext_l = 'Plant'. "Field Text
APPEND lwa_fcat TO lt_fieldcat.
CLEAR:lwa_fcat.
lwa_fcat-col_pos = 3. "Column
lwa_fcat-fieldname = 'WERKS'. "Field Name
lwa_fcat-tabname = 'LT_EKPO'. "Internal Table Name
lwa_fcat-no_out = 'X'.
lwa_fcat-tech = 'X'.
lwa_fcat-seltext_l = 'Plant'. "Field Text
APPEND lwa_fcat TO lt_fieldcat.
CLEAR:lwa_fcat.
lwa_fcat-col_pos = 4. "Column
lwa_fcat-fieldname = 'MATNR1'. "Field Name
lwa_fcat-tabname = 'LT_EKPO'. "Internal Table Name
lwa_fcat-seltext_l = 'Material'. "Field Text
APPEND lwa_fcat TO lt_fieldcat.
CLEAR:lwa_fcat.
lwa_fcat-col_pos = 4. "Column
lwa_fcat-fieldname = 'MATNR'. "Field Name
lwa_fcat-tabname = 'LT_EKPO'. "Internal Table Name
lwa_fcat-no_out = 'X'.
lwa_fcat-tech = 'X'.
lwa_fcat-seltext_l = 'Material'. "Field Text
APPEND lwa_fcat TO lt_fieldcat.
CLEAR:lwa_fcat.
lwa_fcat-col_pos = 5. "Column
lwa_fcat-fieldname = 'NTGEW'. "Field Name
lwa_fcat-tabname = 'LT_EKPO'. "Internal Table Name
lwa_fcat-seltext_l = 'Quantity'. "Field Text
lwa_fcat-do_sum = 'X'. "Sum
APPEND lwa_fcat TO lt_fieldcat.
CLEAR:lwa_fcat.
ENDFORM. " sub_field_catalog
*&---------------------------------------------------------------------*
*& Form f_populate_layout
*&---------------------------------------------------------------------*
* Populate ALV layout
*----------------------------------------------------------------------*
* No Parameter
*----------------------------------------------------------------------*
FORM f_build_layout.
CLEAR wa_layout.
wa_layout-colwidth_optimize = 'X'." Optimization of Col width
ENDFORM. " f_populate_layout
*&---------------------------------------------------------------------*
*& Form f_populate_sort
*&---------------------------------------------------------------------*
FORM f_populate_sort .
* Sort on plant
wa_sort-spos = 1.
wa_sort-fieldname = 'WERKS'.
wa_sort-tabname = 'I_EKPO'.
wa_sort-up = 'X'.
wa_sort-subtot = 'X'.
APPEND wa_sort TO lt_sort .
CLEAR wa_sort.
* Sort on material
wa_sort-spos = 2.
wa_sort-fieldname = 'MATNR'.
wa_sort-tabname = 'I_EKPO'.
wa_sort-up = 'X'.
wa_sort-subtot = 'X'.
APPEND wa_sort TO lt_sort .
CLEAR wa_sort.
ENDFORM. " f_populate_sort
*&---------------------------------------------------------------------*
*& Form f_get_event
*&---------------------------------------------------------------------*
FORM f_get_event.
DATA: lwa_event TYPE slis_alv_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
IMPORTING
et_events = lt_events
EXCEPTIONS
list_type_wrong = 0
OTHERS = 0.
* Subtotal
READ TABLE lt_events INTO lwa_event
WITH KEY name = slis_ev_subtotal_text.
IF sy-subrc = 0.
lwa_event-form = 'SUBTOTAL_TEXT'.
MODIFY lt_events FROM lwa_event INDEX sy-tabix.
ENDIF.
ENDFORM. " f_get_event
*&---------------------------------------------------------------------*
*& Form f_alv_report_display
*&---------------------------------------------------------------------*
FORM f_alv_report_display .
* ALV report
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
is_layout = wa_layout
it_fieldcat = lt_fieldcat
it_sort = lt_sort
it_events = lt_events
TABLES
t_outtab = lt_ekpo
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ENDFORM. " f_alv_report_display
*&---------------------------------------------------------------------*
*& Form subtotal_text
*&---------------------------------------------------------------------*
* Build subtotal text
*----------------------------------------------------------------------*
FORM subtotal_text CHANGING
p_total TYPE any
p_subtot_text TYPE slis_subtot_text.
* Material level sub total
IF p_subtot_text-criteria = 'MATNR'.
p_subtot_text-display_text_for_subtotal = 'Material Level Sub-Total'.
ENDIF.
* Plant level sub total
IF p_subtot_text-criteria = 'WERKS'.
p_subtot_text-display_text_for_subtotal = 'Plant Level Sub-Total'.
ENDIF.
ENDFORM. "subtotal_text
ALV Output:

Please feel free to comment and let us know your feedback. Subscribe for more updates
If you liked it, please share it! Thanks!




