05-02-2006 9:04 AM
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
05-02-2006 10:02 AM
Hello guys, my total worked but I can't seem to show the subtotal. Thanks!
05-02-2006 10:24 AM
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.