Application Development 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: 

about subtotals and totals in ALV list

Former Member
0 Kudos

1. How to write logic to display the subtotals and totals in ALV list?

2.which events should be used to display this functionality?

3.and is there any specific function modules for this functionality? and can anybody provide simple coding for this functionality in ALV?

4. What is field conversions in ALE? what is the significance?

6 REPLIES 6

Former Member
0 Kudos

hi

Refer the program: BALVBT01 as a referance.

regrds

ravish

reward if useful

Former Member
0 Kudos

Hi Murali,

While Defining Field Catalog,Specify do_sum = 'X' for the field which you want the Total.Before that u have to sort that Values.

JUST CHECK THIS SAMPLE PROG

TABLES : STKO,STPO,MAKT,MAST.

TYPE-POOLS : SLIS.

DATA : BEGIN OF ISTKO OCCURS 0,

STLNR LIKE STKO-STLNR,

DATUV LIKE STKO-DATUV,

MATNR LIKE MAST-MATNR,

BMENG LIKE STKO-BMENG,

BMEIN LIKE STKO-BMEIN,

END OF ISTKO.

DATA : BEGIN OF ISTPO OCCURS 0,

STLNR LIKE STPO-STLNR,

IDNRK LIKE STPO-IDNRK,

MENGE LIKE STPO-MENGE,

MEINS LIKE STPO-MEINS,

MAKTX LIKE MAKT-MAKTX,

END OF ISTPO.

DATA : BEGIN OF IMAKT OCCURS 0,

MATNR LIKE MAKT-MATNR,

MAKTX LIKE MAKT-MAKTX,

END OF IMAKT.

DATA : BEGIN OF IMAST OCCURS 0,

MATNR LIKE MAST-MATNR,

STLNR LIKE MAST-STLNR,

END OF IMAST.

DATA : IFIELDCAT TYPE SLIS_T_FIELDCAT_ALV,

WFIELDCAT TYPE SLIS_FIELDCAT_ALV,

ILAYOUT TYPE SLIS_LAYOUT_ALV,

IKEYINFO TYPE SLIS_KEYINFO_ALV,

IEVENT TYPE SLIS_T_EVENT,

WEVENT TYPE SLIS_ALV_EVENT,

ISORT TYPE SLIS_T_SORTINFO_ALV,

WSORT TYPE SLIS_SORTINFO_ALV.

PARAMETERS : P_NUM TYPE I DEFAULT 10.

START-OF-SELECTION.

PERFORM GETDATA.

PERFORM GETHEADERMAT.

PERFORM GET_MAT_DESC.

PERFORM BUILD_FCAT_HEAD.

PERFORM BUILD_FCAT_ITEM.

PERFORM BUILD_KEYINFO.

PERFORM BUILD_EVENT_TAB.

PERFORM BUILD_SORT_TAB.

PERFORM BUILD_LAYOUT.

PERFORM DISPLAY_DATA.

&----


*& Form GETDATA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM GETDATA .

SELECT STLNR DATUV BMENG BMEIN INTO CORRESPONDING FIELDS OF TABLE ISTKO

FROM STKO UP TO P_NUM ROWS.

IF NOT ISTKO[] IS INITIAL.

SELECT STLNR IDNRK MENGE MEINS INTO TABLE ISTPO FROM STPO FOR ALL ENTRIES IN ISTKO

WHERE STLNR = ISTKO-STLNR AND POSTP = 'L'.

ENDIF.

ENDFORM. " GETDATA

&----


*& Form BUILD_FCAT_HEAD

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM BUILD_FCAT_HEAD .

WFIELDCAT-TABNAME = 'ISTKO'.

WFIELDCAT-FIELDNAME = 'STLNR'.

WFIELDCAT-SELTEXT_L = 'BOM no'.

WFIELDCAT-OUTPUTLEN = 15.

APPEND WFIELDCAT TO IFIELDCAT.

CLEAR WFIELDCAT.

WFIELDCAT-TABNAME = 'ISTKO'.

WFIELDCAT-FIELDNAME = 'DATUV'.

WFIELDCAT-SELTEXT_L = 'BOM date'.

WFIELDCAT-OUTPUTLEN = 15.

APPEND WFIELDCAT TO IFIELDCAT.

CLEAR WFIELDCAT.

WFIELDCAT-TABNAME = 'ISTKO'.

WFIELDCAT-FIELDNAME = 'MATNR'.

WFIELDCAT-SELTEXT_L = 'Header mat no'.

WFIELDCAT-OUTPUTLEN = 18.

APPEND WFIELDCAT TO IFIELDCAT.

CLEAR WFIELDCAT.

WFIELDCAT-TABNAME = 'ISTKO'.

WFIELDCAT-FIELDNAME = 'BMENG'.

WFIELDCAT-SELTEXT_L = 'Base qty'.

WFIELDCAT-OUTPUTLEN = 15.

APPEND WFIELDCAT TO IFIELDCAT.

CLEAR WFIELDCAT.

WFIELDCAT-TABNAME = 'ISTKO'.

WFIELDCAT-FIELDNAME = 'BMEIN'.

WFIELDCAT-SELTEXT_L = 'UOM'.

WFIELDCAT-OUTPUTLEN = 3.

APPEND WFIELDCAT TO IFIELDCAT.

CLEAR WFIELDCAT.

ENDFORM. " BUILD_FCAT_HEAD

&----


*& Form BUILD_FCAT_ITEM

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM BUILD_FCAT_ITEM .

WFIELDCAT-TABNAME = 'ISTPO'.

WFIELDCAT-FIELDNAME = 'STLNR'.

WFIELDCAT-SELTEXT_L = 'BOM no'.

WFIELDCAT-NO_OUT = 'X'.

*WFIELDCAT-HOTSPOT = 'X'.

WFIELDCAT-OUTPUTLEN = 10.

APPEND WFIELDCAT TO IFIELDCAT.

CLEAR WFIELDCAT.

WFIELDCAT-TABNAME = 'ISTPO'.

WFIELDCAT-FIELDNAME = 'IDNRK'.

WFIELDCAT-SELTEXT_L = 'Material no'.

*WFIELDCAT-HOTSPOT = 'X'.

WFIELDCAT-OUTPUTLEN = 18.

APPEND WFIELDCAT TO IFIELDCAT.

CLEAR WFIELDCAT.

WFIELDCAT-TABNAME = 'ISTPO'.

WFIELDCAT-FIELDNAME = 'MAKTX'.

WFIELDCAT-SELTEXT_L = 'Material desc'.

WFIELDCAT-JUST = 'C'.

WFIELDCAT-OUTPUTLEN = 30.

APPEND WFIELDCAT TO IFIELDCAT.

CLEAR WFIELDCAT.

WFIELDCAT-TABNAME = 'ISTPO'.

WFIELDCAT-FIELDNAME = 'MENGE'.

WFIELDCAT-SELTEXT_L = 'Item qty'.

WFIELDCAT-OUTPUTLEN = 15.

WFIELDCAT-DO_SUM = 'X'.

APPEND WFIELDCAT TO IFIELDCAT.

CLEAR WFIELDCAT.

WFIELDCAT-TABNAME = 'ISTPO'.

WFIELDCAT-FIELDNAME = 'MEINS'.

WFIELDCAT-SELTEXT_L = 'UOM'.

WFIELDCAT-OUTPUTLEN = 3.

APPEND WFIELDCAT TO IFIELDCAT.

CLEAR WFIELDCAT.

ENDFORM. " BUILD_FCAT_ITEM

&----


*& Form BUILD_KEYINFO

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM BUILD_KEYINFO .

IKEYINFO-HEADER01 = 'STLNR'.

IKEYINFO-ITEM01 = 'STLNR'.

ENDFORM. " BUILD_KEYINFO

&----


*& Form DISPLAY_DATA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM DISPLAY_DATA .

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

I_CALLBACK_PROGRAM = SY-REPID

  • I_CALLBACK_PF_STATUS_SET = ' '

  • I_CALLBACK_USER_COMMAND = 'USER_COM'

IS_LAYOUT = ILAYOUT

IT_FIELDCAT = IFIELDCAT[]

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

IT_SORT = ISORT

  • IT_FILTER =

  • IS_SEL_HIDE =

  • I_SCREEN_START_COLUMN = 0

  • I_SCREEN_START_LINE = 0

  • I_SCREEN_END_COLUMN = 0

  • I_SCREEN_END_LINE = 0

  • I_DEFAULT = 'X'

  • I_SAVE = ' '

  • IS_VARIANT =

IT_EVENTS = IEVENT[]

  • IT_EVENT_EXIT =

I_TABNAME_HEADER = 'ISTKO'

I_TABNAME_ITEM = 'ISTPO'

  • I_STRUCTURE_NAME_HEADER =

  • I_STRUCTURE_NAME_ITEM =

IS_KEYINFO = IKEYINFO

  • IS_PRINT =

  • IS_REPREP_ID =

  • I_BYPASSING_BUFFER =

  • I_BUFFER_ACTIVE =

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

TABLES

T_OUTTAB_HEADER = ISTKO

T_OUTTAB_ITEM = ISTPO

  • EXCEPTIONS

  • PROGRAM_ERROR = 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.

ENDFORM. " DISPLAY_DATA

&----


*& Form GET_MAT_DESC

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM GET_MAT_DESC .

IF NOT ISTPO[] IS INITIAL.

SELECT MATNR MAKTX INTO TABLE IMAKT FROM MAKT FOR ALL ENTRIES IN ISTPO

WHERE MATNR = ISTPO-IDNRK.

ENDIF.

LOOP AT ISTPO.

READ TABLE IMAKT WITH KEY MATNR = ISTPO-IDNRK.

IF SY-SUBRC = 0.

ISTPO-MAKTX = IMAKT-MAKTX.

ENDIF.

MODIFY ISTPO.

ENDLOOP.

ENDFORM. " GET_MAT_DESC

&----


*& Form BUILD_LAYOUT

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM BUILD_LAYOUT .

ILAYOUT-ZEBRA = 'X'.

ILAYOUT-COLWIDTH_OPTIMIZE = 'X'.

ENDFORM. " BUILD_LAYOUT

*FORM USER_COM USING PUCOM LIKE SY-UCOMM PSELFIELD TYPE SLIS_SELFIELD.

*

*CASE PUCOM.

*WHEN '&IC1'.

  • SET PARAMETER ID 'MAT' FIELD PSELFIELD-VALUE.

  • CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.

*ENDCASE.

*

*ENDFORM.

&----


*& Form BUILD_EVENT_TAB

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM BUILD_EVENT_TAB .

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'

EXPORTING

I_LIST_TYPE = 0

IMPORTING

ET_EVENTS = IEVENT

  • EXCEPTIONS

  • LIST_TYPE_WRONG = 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.

READ TABLE IEVENT INTO WEVENT WITH KEY NAME = 'TOP_OF_PAGE'.

IF SY-SUBRC = 0.

WEVENT-FORM = 'TOPOFPAGE'.

MODIFY IEVENT FROM WEVENT INDEX SY-TABIX.

ENDIF.

ENDFORM. " BUILD_EVENT_TAB

&----


*& Form TOPOFPAGE

&----


  • text

----


FORM TOPOFPAGE.

DATA : ILISTHEAD TYPE SLIS_T_LISTHEADER,

WLISTHEAD TYPE SLIS_LISTHEADER.

WLISTHEAD-INFO = 'Its a test hierarchical sequential alv dispaly'.

WLISTHEAD-TYP = 'H'.

APPEND WLISTHEAD TO ILISTHEAD.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

EXPORTING

IT_LIST_COMMENTARY = ILISTHEAD

  • I_LOGO = ''

  • I_END_OF_LIST_GRID =

.

ENDFORM.

&----


*& Form GETHEADERMAT

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM GETHEADERMAT .

IF NOT ISTKO[] IS INITIAL.

SELECT MATNR STLNR INTO TABLE IMAST FROM MAST FOR ALL ENTRIES IN ISTKO

WHERE STLNR = ISTKO-STLNR.

ENDIF.

LOOP AT ISTKO.

READ TABLE IMAST WITH KEY STLNR = ISTKO-STLNR.

IF SY-SUBRC = 0.

ISTKO-MATNR = IMAST-MATNR.

ENDIF.

MODIFY ISTKO.

ENDLOOP.

ENDFORM. " GETHEADERMAT

&----


*& Form BUILD_SORT_TAB

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM BUILD_SORT_TAB .

WSORT-FIELDNAME = 'STLNR'.

WSORT-TABNAME = 'ISTPO'.

WSORT-UP = 'X'.

WSORT-SUBTOT = 'X'.

WSORT-GROUP = 'UL'.

APPEND WSORT TO ISORT.

ENDFORM. " BUILD_SORT_TAB

Thanks.

Former Member
0 Kudos

HI,

report zalv10.

type-pools: slis.

data: g_repid like sy-repid,

gs_print type slis_print_alv,

gt_list_top_of_page type slis_t_listheader,

gt_events type slis_t_event,

gt_sort type slis_t_sortinfo_alv,

gs_layout type slis_layout_alv,

gt_fieldcat type slis_t_fieldcat_alv,

fieldcat_ln like line of gt_fieldcat,

col_pos type i.

data: begin of itab,

field1(5) type c,

field2(5) type c,

field3(5) type p decimals 2,

end of itab.

data: begin of itab1 occurs 0.

include structure itab.

data: end of itab1.

data: begin of itab_fieldcat occurs 0.

include structure itab.

data: end of itab_fieldcat.

  • Print Parameters

parameters:

p_print as checkbox default ' ', "PRINT IMMEDIATE

p_nosinf as checkbox default 'X', "NO SELECTION INFO

p_nocove as checkbox default ' ', "NO COVER PAGE

p_nonewp as checkbox default ' ', "NO NEW PAGE

p_nolinf as checkbox default 'X', "NO PRINT LIST INFO

p_reserv type i. "NO OF FOOTER LINE

initialization.

g_repid = sy-repid.

perform print_build using gs_print. "Print PARAMETERS

start-of-selection.

  • TEST DATA

move 'TEST1' to itab1-field1.

move 'TEST1' to itab1-field2.

move '10.00' to itab1-field3.

append itab1.

move 'TEST2' to itab1-field1.

move 'TEST2' to itab1-field2.

move '20.00' to itab1-field3.

append itab1.

do 50 times.

append itab1.

enddo.

end-of-selection.

perform build.

perform eventtab_build changing gt_events.

perform comment_build changing gt_list_top_of_page.

perform call_alv.

form build.

  • DATA FIELD CATALOG

  • Explain Field Description to ALV

data: fieldcat_in type slis_fieldcat_alv.

clear fieldcat_in.

fieldcat_ln-fieldname = 'FIELD1'.

fieldcat_ln-tabname = 'ITAB1'.

*FIELDCAT_LN-NO_OUT = 'X'. "FIELD NOT DISPLAY, CHOOSE FROM LAYOUT

fieldcat_ln-key = ' '. "SUBTOTAL KEY

fieldcat_ln-no_out = ' '.

fieldcat_ln-seltext_l = 'HEAD1'.

append fieldcat_ln to gt_fieldcat.

clear fieldcat_in.

fieldcat_ln-fieldname = 'FIELD2'.

fieldcat_ln-tabname = 'ITAB1'.

fieldcat_ln-no_out = 'X'.

fieldcat_ln-seltext_l = 'HEAD2'.

append fieldcat_ln to gt_fieldcat.

clear fieldcat_in.

fieldcat_ln-fieldname = 'FIELD3'.

fieldcat_ln-tabname = 'ITAB1'.

fieldcat_ln-ref_fieldname = 'MENGE'. "<- REF FIELD IN THE DICTIONNARY

fieldcat_ln-ref_tabname = 'MSEG'. "<- REF TABLE IN THE DICTIONNARY

fieldcat_ln-no_out = ' '.

fieldcat_ln-do_sum = 'X'. "SUM UPON DISPLAY

append fieldcat_ln to gt_fieldcat.

  • DATA SORTING AND SUBTOTAL

data: gs_sort type slis_sortinfo_alv.

clear gs_sort.

gs_sort-fieldname = 'FIELD1'.

gs_sort-spos = 1.

gs_sort-up = 'X'.

gs_sort-subtot = 'X'. ***CRUCIAL STATEMENT****

append gs_sort to gt_sort.

clear gs_sort.

gs_sort-fieldname = 'FIELD2'.

gs_sort-spos = 2.

gs_sort-up = 'X'.

*GS_SORT-SUBTOT = 'X'. **THIS SHOULD NOT BE UNCOMENTED*

append gs_sort to gt_sort.

endform.

form call_alv.

  • ABAP List Viewer

call function 'REUSE_ALV_LIST_DISPLAY'

exporting

  • I_INTERFACE_CHECK = ' '

  • I_BYPASSING_BUFFER =

  • I_BUFFER_ACTIVE = ' '

i_callback_program = g_repid

  • I_CALLBACK_PF_STATUS_SET = ' '

  • I_CALLBACK_USER_COMMAND = ' '

i_structure_name = 'ITAB1'

is_layout = gs_layout

it_fieldcat = gt_fieldcat[]

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

it_sort = gt_sort[]

  • IT_FILTER =

  • IS_SEL_HIDE =

  • I_DEFAULT = 'X'

  • I_SAVE = ' '

  • IS_VARIANT =

it_events = gt_events[]

  • IT_EVENT_EXIT =

is_print = gs_print

  • IS_REPREP_ID =

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

tables

t_outtab = itab1

exceptions

program_error = 1

others = 2.

endform.

  • HEADER FORM

form eventtab_build changing lt_events type slis_t_event.

constants:

gc_formname_top_of_page type slis_formname value 'TOP_OF_PAGE'.

*GC_FORMNAME_END_OF_PAGE TYPE SLIS_FORMNAME VALUE 'END_OF_PAGE'.

data: ls_event type slis_alv_event.

call function 'REUSE_ALV_EVENTS_GET'

exporting

i_list_type = 0

importing

et_events = lt_events.

read table lt_events with key name = slis_ev_top_of_page

into ls_event.

if sy-subrc = 0.

move gc_formname_top_of_page to ls_event-form.

append ls_event to lt_events.

endif.

  • define END_OF_PAGE event

  • READ TABLE LT_EVENTS WITH KEY NAME = SLIS_EV_END_OF_PAGE

  • INTO LS_EVENT.

  • IF SY-SUBRC = 0.

  • MOVE GC_FORMNAME_END_OF_PAGE TO LS_EVENT-FORM.

  • APPEND LS_EVENT TO LT_EVENTS.

  • ENDIF.

endform.

form comment_build changing gt_top_of_page type slis_t_listheader.

data: gs_line type slis_listheader.

clear gs_line.

gs_line-typ = 'H'.

gs_line-info = 'HEADER 1'.

append gs_line to gt_top_of_page.

clear gs_line.

gs_line-typ = 'S'.

gs_line-key = 'STATUS 1'.

gs_line-info = 'INFO 1'.

append gs_line to gt_top_of_page.

gs_line-key = 'STATUS 2'.

gs_line-info = 'INFO 2'.

append gs_line to gt_top_of_page.

  • CLEAR GS_LINE.

  • GS_LINE-TYP = 'A'.

  • GS_LINE-INFO = 'ACTION'.

  • APPEND GS_LINE TO GT_TOP_OF_PAGE.

endform.

form top_of_page.

call function 'REUSE_ALV_COMMENTARY_WRITE'

exporting

it_list_commentary = gt_list_top_of_page.

write: sy-datum, 'Page No', sy-pagno left-justified.

endform.

form end_of_page.

write at (sy-linsz) sy-pagno centered.

endform.

  • PRINT SETTINGS

form print_build using ls_print type slis_print_alv.

ls_print-print = p_print. "PRINT IMMEDIATE

ls_print-no_print_selinfos = p_nosinf. "NO SELECTION INFO

ls_print-no_coverpage = p_nocove. "NO COVER PAGE

ls_print-no_new_page = p_nonewp.

ls_print-no_print_listinfos = p_nolinf. "NO PRINT LIST INFO

ls_print-reserve_lines = p_reserv.

endform

<b>Reward pts if found usefull:)</b>

Regards

Sathish

Pawan_Kesari
Active Contributor
0 Kudos

To display totals and subtotals follows steps.

1) In fieldcatelog mark DO_SUM = 'X'

2) Field on which you want to group the record and display subtotals, in SORT internal table populate field SUBTOT = 'X' . If you want page break the put GROUP = '*'.

You don't need any event. Just call function module REUSE_ALV_LIST_DISPLAY with right parameter. You can refer programs BALV* .