Application Development and Automation 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: 
Read only

ALV Coding for SubTotal

Former Member
0 Likes
627

HI

IN ALV'S HOW TO FIND THE SUB TOTAL, CODING TO FIND THE SUBTOTAL.

Edited by: Alvaro Tejada Galindo on Jan 11, 2008 4:09 PM

4 REPLIES 4
Read only

Former Member
Read only

Former Member
0 Likes
602

Hi Jyothsna,

Try the below code.


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.

<REMOVED BY MODERATOR>

Thankyou,

Regards.

Edited by: Alvaro Tejada Galindo on Jan 11, 2008 4:10 PM

Read only

0 Likes
602

Hi

You have to use ls_fieldcat-do_sum statement in your coding

Check this sample report to display output in total & subtotal


&---------------------------------------------------------------------
*& Report ZALVTOTAL *
*& *
&---------------------------------------------------------------------
*& *
*& *
&---------------------------------------------------------------------

REPORT ZALVTOTAL .

TYPES :
BEGIN OF ty_vbak,
vkorg TYPE vbak-vkorg, " Sales organization
kunnr TYPE vbak-kunnr, " Sold-to party
vbeln TYPE vbak-vbeln, " Sales document
netwr TYPE vbak-netwr, " Net Value of the Sales Order
waerk TYPE vbak-waerk, " Document currency
END OF ty_vbak.

DATA:
vbak TYPE vbak,
gt_vbak TYPE TABLE OF ty_vbak.

SELECT-OPTIONS :
s_vkorg FOR vbak-vkorg, " Sales organization
s_kunnr FOR vbak-kunnr, " Sold-to party
s_vbeln FOR vbak-vbeln. " Sales document

SELECTION-SCREEN :
SKIP, BEGIN OF LINE,COMMENT 5(27) v_1 FOR FIELD p_max.
PARAMETERS p_max(2) TYPE n DEFAULT '20' OBLIGATORY.
SELECTION-SCREEN END OF LINE.

---------------------------------------------------------------------
INITIALIZATION.

v_1 = 'Maximum of records to read'.

---------------------------------------------------------------------
START-OF-SELECTION.

PERFORM f_read_data.

PERFORM f_display_data.

---------------------------------------------------------------------

Form f_read_data 
---------------------------------------------------------------------
FORM f_read_data.

SELECT vkorg kunnr vbeln netwr waerk
UP TO p_max ROWS
INTO TABLE gt_vbak
FROM vbak
WHERE kunnr IN s_kunnr
AND vbeln IN s_vbeln
AND vkorg IN s_vkorg.

ENDFORM. " F_READ_DATA
---------------------------------------------------------------------

Form f_display_data 
---------------------------------------------------------------------
FORM f_display_data.

TYPE-POOLS: slis. " ALV Global types

DEFINE m_fieldcat.
add 1 to ls_fieldcat-col_pos.
ls_fieldcat-fieldname = &1.
ls_fieldcat-ref_tabname = 'VBAK'.
ls_fieldcat-do_sum = &2.
ls_fieldcat-cfieldname = &3.
append ls_fieldcat to lt_fieldcat.
END-OF-DEFINITION.

DEFINE m_sort.
add 1 to ls_sort-spos.
ls_sort-fieldname = &1.
ls_sort-up = 'X'.
ls_sort-subtot = &2.
append ls_sort to lt_sort.
END-OF-DEFINITION.

DATA:
ls_fieldcat TYPE slis_fieldcat_alv,
lt_fieldcat TYPE slis_t_fieldcat_alv,
lt_sort TYPE slis_t_sortinfo_alv,
ls_sort TYPE slis_sortinfo_alv,
ls_layout TYPE slis_layout_alv.

m_fieldcat 'VKORG' '' ''.
m_fieldcat 'KUNNR' '' ''.
m_fieldcat 'VBELN' '' ''.
m_fieldcat 'NETWR' 'X' 'WAERK'.
m_fieldcat 'WAERK' '' ''.

m_sort 'VKORG' 'X'. " Sort by vkorg and subtotal
m_sort 'KUNNR' 'X'. " Sort by kunnr and subtotal
m_sort 'VBELN' ''. " Sort by vbeln

ls_layout-cell_merge = 'X'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = ls_layout
it_fieldcat = lt_fieldcat
it_sort = lt_sort
TABLES
t_outtab = gt_vbak.

ENDFORM. " F_DISPLAY_DATA

Regards

Pavan

Code Formatted by: Alvaro Tejada Galindo on Jan 11, 2008 4:11 PM

Read only

Former Member
0 Likes
602

Save yourself time... do not write code to get subtotal.

Set the Display Variant of the ALV grid to calc that for automatically.