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: 

My subtotal and totals(in ALV) does not work...

aris_hidalgo
Contributor
0 Kudos

Hello experts,

It seems that subtotals and totals that I declared is not working. My logic for subtotal is that for every group(records are grouped by asset_dum field) it will do a subtotal and at the end of the records it will give total. Anyway, here is my code for ALV:

TYPES: BEGIN OF t_finaltab,

asset_dum LIKE iloa-anlnr,

asset LIKE iloa-anlnr,

parent LIKE iloa-anlnr,

accq_cost LIKE anlc-kansw,

acc_dep LIKE anlc-kansw,

anlc_val LIKE anlc-kansw,

anlp_val LIKE anlc-kansw,

asset_book_val LIKE anlc-kansw,

location LIKE t499s-ktext,

description LIKE iflo-pltxt,

END OF t_finaltab.

data: it_finaltab type standard table t_finaltab with header line.

FORM display_alv.

SORT it_finaltab BY asset_dum asset parent.

PERFORM f_build_comment USING gt_list_top_of_page[].

PERFORM f_build_layout USING gs_layout.

PERFORM f_init_fieldcat USING gt_fieldcat[].

PERFORM f_init_events USING 'TOP' gt_events[].

  • PERFORM f_init_fieldsum USING gt_fieldsum[].

PERFORM f_init_events USING 'SUM' gt_events_sum[].

PERFORM f_init_sort USING gt_sort[].

  • PERFORM f_init_sort_del USING gt_sort_del[]. "AVH - 04/04/06

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'

EXPORTING

i_callback_program = g_repid

i_callback_user_command = 'USER_COMMAND'.

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'

EXPORTING

it_fieldcat = gt_fieldcat[]

is_layout = gs_layout

i_tabname = 'IT_FINALTAB'

it_events = gt_events[]

it_sort = gt_sort

i_text = '1ST'

TABLES

t_outtab = it_finaltab.

gt_print-reserve_lines = 2.

gt_print-no_coverpage = 'X'.

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'

EXPORTING

is_print = gt_print.

ENDFORM. " DISPLAY_ALV

----


  • FORM f_build_comment *

----


  • ........ *

----


  • --> %TOP_OF_PAGE *

----


FORM f_build_comment USING %top_of_page TYPE slis_t_listheader.

DATA: ls_line TYPE slis_listheader,

d_name(60),

lv_date(10),

lv_time(10),

lc_dttm(50).

**-REPORT NAME

CLEAR: d_name, ls_line.

MOVE: sy-title TO d_name.

ls_line-typ = 'H'.

ls_line-info = d_name.

APPEND ls_line TO %top_of_page.

**-USER ID AND DATE/TIME

CLEAR: d_name, ls_line.

CONCATENATE: 'Generated by:' sy-uname INTO d_name SEPARATED BY space.

ls_line-typ = 'H'.

ls_line-info = d_name.

APPEND ls_line TO %top_of_page.

CLEAR: d_name, ls_line.

WRITE: sy-datum TO lv_date MM/DD/YYYY,

sy-uzeit TO lv_time USING EDIT MASK '__:__:__'.

CONCATENATE: 'Generated on:' lv_date lv_time

INTO d_name SEPARATED BY space.

ls_line-typ = 'H'.

ls_line-info = d_name.

APPEND ls_line TO %top_of_page.

ENDFORM. " F_BUILD_COMMENT

----


  • FORM f_build_layout *

----


  • ........ *

----


  • --> %LAYOUT *

----


FORM f_build_layout USING %layout TYPE slis_layout_alv.

%layout-detail_popup = 'X'.

%layout-zebra = 'X'.

%layout-totals_text = 'Total'.

ENDFORM. " F_BUILD_LAYOUT

----


  • FORM f_init_fieldcat *

----


  • ........ *

----


  • --> %FIELDCAT *

----


FORM f_init_fieldcat USING %fieldcat TYPE slis_t_fieldcat_alv.

DATA: lc_fieldcat TYPE slis_fieldcat_alv.

CLEAR lc_fieldcat.

DEFINE m_field.

add 1 to lc_fieldcat-col_pos.

lc_fieldcat-fieldname = &1.

lc_fieldcat-outputlen = &2.

lc_fieldcat-seltext_l = &3.

lc_fieldcat-do_sum = &4.

lc_fieldcat-inttype = &5.

lc_fieldcat-hotspot = &6.

lc_fieldcat-fix_column = &7.

lc_fieldcat-ddictxt = 'L'.

lc_fieldcat-no_zero = 'X'.

append lc_fieldcat to %fieldcat.

END-OF-DEFINITION.

m_field 'ASSET' '12' 'Asset' '' '' '' '' .

m_field 'PARENT' '12' 'Parent' '' '' '' '' .

m_field 'DESCRIPTION' '40' 'Description' '' '' '' '' .

m_field 'LOCATION' '40' 'Location' '' '' '' '' .

m_field 'ASSET_BOOK_VAL' '20' 'Net Book Value' 'X' 'X' '' ''.

ENDFORM. " f_init_fieldcat

----


  • FORM f_init_events *

----


  • ........ *

----


  • --> P_TYPE *

  • --> %EVENTS *

----


FORM f_init_events USING p_type CHANGING %events TYPE slis_t_event.

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'

EXPORTING

i_list_type = 0

IMPORTING

et_events = %events

EXCEPTIONS

list_type_wrong = 1

OTHERS = 2.

IF sy-subrc = 0.

PERFORM f_build_events USING: slis_ev_user_command.

IF p_type = 'TOP'.

PERFORM f_build_events USING: gc_top.

ELSEIF p_type = 'SUM'.

PERFORM f_build_events_sum USING: gc_topsum.

ENDIF.

ELSE.

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

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

ENDIF.

ENDFORM. " F_INIT_EVENTS

----


  • FORM f_build_events *

----


  • ........ *

----


  • --> %EVENT *

----


FORM f_build_events USING %event.

READ TABLE gt_events WITH KEY name = %event.

IF sy-subrc = 0.

MOVE: %event TO gt_events-form.

  • MOVE 'USER_COMMAND' TO gt_events-form.

MODIFY gt_events INDEX sy-tabix.

ENDIF.

ENDFORM. " F_BUILD_EVENTS

----


  • FORM top_of_page *

----


  • ........ *

----


FORM top_of_page.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

EXPORTING

it_list_commentary = gt_list_top_of_page.

ENDFORM.

----


  • FORM f_init_sort *

----


  • ........ *

----


  • --> %SORT *

----


FORM f_init_sort USING %sort TYPE slis_t_sortinfo_alv.

DATA: gs_sort TYPE slis_sortinfo_alv.

CLEAR gs_sort.

gs_sort-fieldname = 'ASSET_DUM'.

gs_sort-group = 'UL'.

APPEND gs_sort TO %sort.

ENDFORM. " F_INIT_SORT

----


  • FORM f_build_events_sum *

----


  • ........ *

----


  • --> %EVENT *

----


FORM f_build_events_sum USING %event.

READ TABLE gt_events_sum WITH KEY name = %event.

IF sy-subrc = 0.

MOVE: %event TO gt_events_sum-form.

  • MOVE 'USER_COMMAND' TO gt_events-form.

MODIFY gt_events_sum INDEX sy-tabix.

ENDIF.

ENDFORM. " F_BUILD_EVENTS

2 REPLIES 2

aris_hidalgo
Contributor
0 Kudos

Hello guys, my total worked but I can't seem to show the subtotal. Thanks!

0 Kudos

Hi Viray,

Please refer to the code below and rewards points if found helpful

-Regards

Amit Mishra

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.