Subtotals in ALV
Hi
SAP Guru s
I am facing a dump when i pass the Gt_sort in reuse alv display FM
I am tryingto display the subtotals on the kunnr for dollars and count via ALV
following is the code
ur advice is highly appreciated
thanks
report orders .
DICTIONARY TABLES
tables: vbak, "Sales Document: Header Data
vbpa, "Sales Document: Partner
vbuk, "Sales Document: Header Status and Administrative Data
adrc.
ALV Declarations *
type-pools: slis, kkblo.
data: g_repid like sy-repid,
gs_layout type slis_layout_alv,
gt_fieldcat type slis_t_fieldcat_alv,
fieldcat_in like line of gt_fieldcat,
cos_pos type i,
gt_events type slis_t_event,
gt_sort type slis_t_sortinfo_alv,
months like komp-anz_monate.
data: g_anzlines type i.
data : t_list_top_of_page type slis_t_listheader.
data : t_list_end_of_list type slis_t_listheader.
data : t_events type slis_t_event.
DATA
data: gv_netwr like vbak-netwr,
gv_netwr0 like vbak-netwr,
zvbeln like vbak-vbeln,
gv_count(6) type n,
gv_count0(6) type n,
erdat1 like vbak-erdat,
temp like vbak-erdat,
temp1(10),
erdat2 like vbak-erdat,
vkorg like vbak-vkorg,
erdat(25),
hyphen(3) value '---',
p_name1 like adrc-name1,
zlines type i,
g_tabix like sy-tabix,
month_nme(10),
zline type i,
gv_tot like vbak-netwr,
gv_kcount type i,
gv_ktot like vbak-netwr,
l_tabix like sy-tabix.
INTERNAL TABLES
data: begin of zvbak occurs 0,
vbeln like vbak-vbeln, "order no
erdat like vbak-erdat,
vgbel like vbak-vgbel, "reference doc num
netwr like vbak-netwr, " amount
end of zvbak.
data: zvbak0 like zvbak occurs 0 with header line.
data: begin of zvbpa occurs 0,
name1 like adrc-name1,
month(2),
vbeln like vbpa-vbeln,
parvw like vbpa-parvw, " partner function
kunnr like vbpa-kunnr,
adrnr like vbpa-adrnr,
netwr like vbak-netwr,
erdat like vbak-erdat,
end of zvbpa.
data: zvbpa0 like zvbpa occurs 0 with header line.
data: alv_dat like zvbpa occurs 0 with header line,
alv_data0 like zvbpa occurs 0 with header line.
data: begin of alv0 occurs 0,
kunnr like vbak-kunnr,
name1 like adrc-name1,
count type i,
dollars like vbak-netwr ,
kcount type i,
kdollars like vbak-netwr,
month_nme(10),
erdat like vbak-erdat,
netwr like vbak-netwr,
vbeln like vbpa-vbeln,
end of alv0.
data: begin of zvbuk occurs 0,
vbeln like vbak-vbeln,
netwr like vbak-netwr,
erdat like vbak-erdat,
end of zvbuk.
data: begin of ztab_period occurs 0,
sindex like scscp_period_str-sindex,
datuv like scscp_period_str-datuv,
datub like scscp_period_str-datub,
id like scscp_period_str-id,
name(10) type c,
end of ztab_period.
data: begin of ztab_perio0 occurs 0,
sindex like scscp_period_str-sindex,
datuv like scscp_period_str-datuv,
id like scscp_period_str-id,
name(10) type c,
end of ztab_perio0.
SELECTION SCREEN
selection-screen begin of block b with frame title text-001 .
select-options: s_erdat for vbak-erdat obligatory,
s_vkorg for vbak-vkorg obligatory.
selection-screen end of block b.
*INITIALIZATION.
initialization.
g_repid = sy-repid.
*START-OF-SELECTION.
start-of-selection.
data:t_index like sy-tabix.
perform select_orders tables alv_data0.
loop at alv_data0.
t_index = sy-tabix.
move alv_data0-erdat+4(2) to alv_data0-month.
modify alv_data0 index t_index transporting month.
clear alv_data0.
endloop.
sort alv_data0 by name1 month.
loop at alv_data0.
if alv_data0-name1 = space.
delete alv_data0.
endif.
move alv_data0-kunnr to alv0-kunnr.
at new name1.
move: alv_data0-name1 to alv0-name1.
endat.
gv_netwr = alv_data0-netwr + gv_netwr.
gv_count = gv_count + 1.
at end of month.
call function 'MONTH_TO_MONTHNAME'
exporting
monthnum = alv_data0-month
importing
monthname = month_nme.
move month_nme to alv0-month_nme.
move gv_count to alv0-count.
move gv_netwr to alv0-dollars.
append alv0.
clear: alv0, gv_netwr, gv_count.
endat.
endloop.
**END-OF-SELECTION.
end-of-selection.
loop at alv0 .
gv_tot = gv_tot + alv0-dollars.
endloop.
describe table alv0 lines g_anzlines.
if g_anzlines gt 0.
perform display_list.
endif.
*& Form select_orders
text
--> p1 text
<-- p2 text
form select_orders tables alv_dat structure zvbpa.
data: gv_index like sy-tabix,
ztab like ztab_period,
erdath like vbak-erdat,
erdat_h like vbak-erdat.
erdat1 = s_erdat-low(8).
erdath = s_erdat-high(8).
concatenate erdat1 hyphen erdat_h erdath into erdat.
vkorg = s_vkorg+3(4).
*calculate the no of orders and dollars month wise from the selection
*date
call function 'CSCP_PARA1_GET_PERIODS'
exporting
i_datuv = s_erdat-low
i_datub = s_erdat-high
i_timeunit = 'D'
tables
et_dates = ztab_period.
clear ztab_period.
clear gv_index.
describe table ztab_period lines zlines.
loop at ztab_period.
move-corresponding ztab_period to ztab_perio0.
append ztab_perio0.
clear ztab_perio0.
endloop.
sort ztab_perio0 by datuv.
loop at ztab_perio0.
if zlines = 2 and ztab_perio0-sindex = 1.
delete ztab_perio0.
clear ztab_perio0.
exit.
endif.
endloop.
*always delete first and last records in the internal table
loop at ztab_perio0.
if ( ztab_perio0-sindex = 1 ) .
delete ztab_perio0.
endif.
endloop.
*Assign Month name and calculate no of orders
clear gv_index.
clear: ztab, ztab_perio0.
describe table ztab_perio0 lines zline.
loop at ztab_perio0 into ztab.
gv_index = sy-tabix.
if ( ( ztab-datuv+4(2) = '01' ) or
( ztab-datuv+4(2) = '02' ) or
( ztab-datuv+4(2) = '03' ) or
( ztab-datuv+4(2) = '04' ) or
( ztab-datuv+4(2) = '05' ) or
( ztab-datuv+4(2) = '06' ) or
( ztab-datuv+4(2) = '07' ) or
( ztab-datuv+4(2) = '08' ) or
( ztab-datuv+4(2) = '09' ) or
( ztab-datuv+4(2) = '10' ) or
( ztab-datuv+4(2) = '11' ) or
( ztab-datuv+4(2) = '12' ) ).
erdat1 = ztab-datuv.
perform cal_no_of_orders tables alv_dat
using erdat1
changing gv_count0 gv_netwr0.
clear : erdat1 , ztab.
endif.
clear ztab.
endloop.
endform. " select_orders
*& Form DISPLAY_LIST
text
--> p1 text
<-- p2 text
form display_list.
g_repid = sy-repid.
sort alv0 by kunnr.
loop at alv0.
gv_ktot = gv_ktot + alv0-dollars.
gv_kcount = gv_kcount + alv0-count.
at end of kunnr.
move gv_ktot to alv0-kdollars.
move gv_kcount to alv0-kcount.
append alv0.
clear: alv0, gv_kcount, gv_ktot.
endat.
endloop.
perform fillevents.
perform comment_build using t_list_top_of_page.
perform create_layout.
perform create_fieldcat.
call function 'REUSE_ALV_GRID_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_callback_top_of_page = 'TOP_OF_PAGE'
I_CALLBACK_HTML_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_END_OF_LIST = ' '
I_STRUCTURE_NAME =
I_BACKGROUND_ID = ' '
I_GRID_TITLE =
I_GRID_SETTINGS = gs_settings
is_layout = gs_layout
it_fieldcat = gt_fieldcat
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
it_sort = gt_sort[] ===========================>[ a dump is created here
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
i_save = 'A'
IS_VARIANT =
it_events = t_events
IT_EVENT_EXIT =
IS_PRINT =
IS_REPREP_ID =
I_SCREEN_START_COLUMN = 0
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
IT_ALV_GRAPHICS =
IT_ADD_FIELDCAT =
IT_HYPERLINK =
I_HTML_HEIGHT_TOP =
I_HTML_HEIGHT_END =
IT_EXCEPT_QINFO =
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
tables
t_outtab = alv0
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_LIST
*& Form comment_build
text
-->P_t_list_top_of_page text
form comment_build using t_list_top_of_page type slis_t_listheader.
data : ls_line type slis_listheader.
data : ldate(10),hdate(10).
data : lv_dat(20).
clear lv_dat.
refresh : t_list_top_of_page.
clear ls_line.
ls_line-info = sy-repid.
ls_line-typ = 'H'.
ls_line-info = 'ORDERS AND DOLLARS REPORT'.
append ls_line to t_list_top_of_page.
write sy-datum to ldate using edit mask '__.__.____' .
clear ls_line.
ls_line-typ = 'A'.
concatenate 'Run Date :' ldate
into ls_line-info separated by space.
append ls_line to t_list_top_of_page.
clear ls_line.
ls_line-typ = 'A'.
ls_line-info = 'User ID :'.
ls_line-info+12 = sy-uname.
append ls_line to t_list_top_of_page.
clear ls_line.
ls_line-typ = 'A'.
ls_line-info = 'No OF ORDERS :'.
ls_line-info+17 = gv_count.
append ls_line to t_list_top_of_page.
clear ls_line.
ls_line-typ = 'A'.
ls_line-info = 'TOTAL dOLLAR AMOUNT :'.
ls_line-info+25 = gv_tot.
append ls_line to t_list_top_of_page.
clear ls_line.
concatenate s_erdat3(8) '----' s_erdat11(8) into lv_dat.
ls_line-typ = 'A'.
ls_line-info = 'Date Range for Documents :'.
ls_line-info+25 = lv_dat.
append ls_line to t_list_top_of_page.
clear ls_line.
ls_line-typ = 'A'.
ls_line-info = 'Sales Organization :'.
ls_line-info+25 = vkorg.
append ls_line to t_list_top_of_page.
endform. " comment_build
*& Form fillevents
text
--> p1 text
<-- p2 text
form fillevents.
data l_events type line of slis_t_event.
clear l_events.
l_events-name = 'TOP_OF_PAGE'.
l_events-form = 'TOP_OF_PAGE'.
append l_events to t_events.
*perform top-of-page1.
endform. " fillevents
*& Form create_fieldcat
text
--> p1 text
<-- p2 text
form create_fieldcat.
perform fill_fieldcat using:
'NAME1' 'ALV0' 'NAME' '1' '',
'MONTH_NME' 'ALV0' 'EDIMONTH' '2' '',
'DOLLARS' 'ALV0' 'DOLLARS' '3' '',
'COUNT' 'ALV0' 'COUNT' '4' ''.
endform. " create_fieldcat
*& Form create_layout
text
--> p1 text
<-- p2 text
form create_layout.
gs_layout-colwidth_optimize = 'X'.
gs_layout-zebra = 'X'.
gs_layout-no_totalline = 'X'.
endform. " create_layout
*& Form fill_fieldcat
text
-->P_0564 text
-->P_0565 text
-->P_0566 text
-->P_0567 text
-->P_0568 text
form fill_fieldcat using p_fname
p_tabname
p_seltext
p_colpos
p_do_sum.
clear fieldcat_in.
fieldcat_in-fieldname = p_fname.
fieldcat_in-tabname = p_tabname.
fieldcat_in-seltext_m = p_seltext.
fieldcat_in-col_pos = p_colpos.
fieldcat_in-do_sum = p_do_sum.
append fieldcat_in to gt_fieldcat.
clear fieldcat_in.
fieldcat_in-fieldname = 'DOLLARS'.
fieldcat_in-tabname = 'ALV0'.
fieldcat_in-no_out = ' '.
fieldcat_in-do_sum = 'X'. "SUM UPON DISPLAY
append fieldcat_in to gt_fieldcat.
clear fieldcat_in.
fieldcat_in-fieldname = 'COUNT'.
fieldcat_in-tabname = 'ALV0'.
fieldcat_in-no_out = ' '.
fieldcat_in-do_sum = 'X'. "SUM UPON DISPLAY
append fieldcat_in to gt_fieldcat.
data sorting and subtotal
data: gs_sort type slis_sortinfo_alv.
clear gs_sort.
gs_sort-tabname = 'ALV0'.
gs_sort-fieldname = 'KUNNR'.
gs_sort-spos = 1.
gs_sort-up = 'X'.
gs_sort-subtot = 'X'.
append gs_sort to gt_sort.
gs_sort-tabname = 'ALV0'.
gs_sort-fieldname = 'DOLLARS'.
gs_sort-spos = 3.
gs_sort-up = 'X'.
gs_sort-subtot = 'X'.
append gs_sort to gt_sort.
gs_sort-tabname = 'ALV0'.
gs_sort-fieldname = 'COUNT'.
gs_sort-spos = 4.
gs_sort-up = 'X'.
gs_sort-subtot = 'X'.
append gs_sort to gt_sort.
Gs_layout-cell_merge = 'X'.
endform. " fill_fieldcat
*& Form TOP_OF_PAGE
form top_of_page.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
i_logo = 'ENJOYSAP_LOGO'
it_list_commentary = t_list_top_of_page.
endform.
*& Form cal_no_of_orders
text
-->P_ALV_dat text
-->P_ERDAT1 text
<--P_KUNNR text
<--P_GV_COUNT text
<--P_GV_NETWR text
<--P_GV_NAME1 text
form cal_no_of_orders tables alv_tab structure zvbpa
using p_erdat1
changing p_gv_count
p_gv_netwr.
clear: alv_tab, p_gv_count, p_gv_netwr, g_tabix, zvbak, zvbpa.
refresh: zvbak, zvbpa.
data: g_tabix like sy-tabix,
gv_index like sy-tabix.
data: av_tab like zvbpa occurs 0 with header line.
*Select Orders Processed
select vbeln erdat netwr vgbel from vbak
into corresponding fields of table zvbak where
erdat = p_erdat1 and
vkorg in s_vkorg and
auart = 'ZEDI' and
( ( bsark = 'DFUA' ) or
( bsark = 'DFUE' ) or
( bsark = 'DFUI' ) ).
if sy-subrc = 0.
clear sy-subrc .
sort zvbak by vbeln.
select vbeln parvw kunnr adrnr from vbpa
into corresponding fields of table zvbpa
for all entries in zvbak
where vbeln = zvbak-vbeln
and parvw = 'AG'.
if sy-subrc = 0.
clear zvbpa.
loop at zvbpa.
g_tabix = sy-tabix.
read table zvbak with key vbeln = zvbpa-vbeln binary search.
if sy-subrc eq 0.
move :zvbak-netwr to zvbpa-netwr,
zvbak-erdat to zvbpa-erdat.
modify zvbpa index g_tabix.
endif.
select single name1 into (p_name1 )
from adrc
where addrnumber = zvbpa-adrnr.
if sy-subrc = 0.
move p_name1 to zvbpa-name1.
modify zvbpa index g_tabix.
endif.
endloop.
endif.
endif.
move Processed Orders to ALV display table
clear zvbpa.
loop at zvbpa.
move-corresponding zvbpa to alv_tab.
append alv_tab.
clear alv_tab.
endloop.
endform. " cal_no_of_orders<i></i>
Message was edited by:
sap learner
this is the short dump
What happened?
The current application program detected a situation which really
should not occur. Therefore, a termination with a short dump was
triggered on purpose by the key word MESSAGE (type X).
What can you do?
0060 *" CHANGING
0070 *" VALUE(CT_SORT) TYPE LVC_T_SORT
0080 *"
0090 -

0100 FIELD-SYMBOLS: <LS_FIELDCAT> TYPE LVC_S_FCAT.
000110 DATA: LS_SORT TYPE LVC_S_SORT.
000120 DATA: LFLG_MODIFY(1) TYPE C.
000130 DATA: LFLG_EXPA_DEFAULT_SET(1) TYPE C.
000140 DATA: L_COUNT LIKE SY-TABIX.
000150
000160 SORT IT_FIELDCAT BY FIELDNAME.
000170 SORT CT_SORT STABLE BY SPOS ASCENDING.
000180 LOOP AT CT_SORT INTO LS_SORT.
000190 LS_SORT-SPOS = SY-TABIX.
000200 MODIFY CT_SORT FROM LS_SORT.
000210 ENDLOOP.
000220
000230 SORT CT_SORT BY SPOS DESCENDING.
000240
000250 * Default settings for subtotals
000260 READ TABLE CT_SORT WITH KEY COMP = 'X' TRANSPORTING NO FIELDS.
000270 IF SY-SUBRC NE 0.
000280 LFLG_MODIFY = 'X'.
000290 ENDIF.
000300
000310 LOOP AT CT_SORT INTO LS_SORT.
000320
000330 READ TABLE IT_FIELDCAT ASSIGNING <LS_FIELDCAT>
000340 WITH KEY FIELDNAME = LS_SORT-FIELDNAME BINARY SEARCH.
000350 IF SY-SUBRC NE 0.
> MESSAGE X000(0K).
000370 ENDIF.
000380
000390 LS_SORT-SELTEXT = <LS_FIELDCAT>-SELTEXT.
000400
000410 * Zwischensummenstufen ermitteln
000420 IF NOT LS_SORT-SUBTOT IS INITIAL.
000430 L_COUNT = L_COUNT + 1.
000440 ENDIF.
000450
000460 IF L_COUNT = 1 AND LFLG_EXPA_DEFAULT_SET = 'X'.
000470 LS_SORT-EXPA = 'X'.
000480 ENDIF.
000490 * Default setzten (s.o.)
000500 IF LFLG_MODIFY = 'X'.
000510 LS_SORT-COMP = 'X'.
000520 ENDIF.
000530
000540 MODIFY CT_SORT FROM LS_SORT.
000550 ENDLOOP.
Similar Messages
-
hi ,
i need to find subtotals in alv
Please suggest me on how to proceed on this.
Any sample code would be appreciated.
thanks n regards,
kalyanHi Kalyan,
Try this sample code. It may help you.
the code below produces alv display with 2 columns: field1 & field2.
field1 is character based & the int. table passed to the alv is sorted on this field.
field2 is numeric, whose subtotals are desired.
so while populating the gt_sort table the option gs_sort-subtot is set for field1 bcoz the subtotals are to be based on the groups existing in this column.whereas the same option is NOT set for field2, even though the subtotal appears in that column.i have marked these 2 statements in the code for your convenience.
execute the code below & you will surely understand what i said above.
bye!!
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. -
How to write code for totals and subtotals in alv programing?
how to write code for totals and subtotals in alv programing?
hi,
1. <u><b>TOTAL.</b></u>
http://www.sapdevelopment.co.uk/reporting/alv/alvgrid_basic.htm
2. <u><b>How do I add subtotals</b></u>
http://www.sapfans.com/forums/viewtopic.php?t=20386
http://www.sapfans.com/forums/viewtopic.php?t=85191
http://www.sapfans.com/forums/viewtopic.php?t=88401
http://www.sapfans.com/forums/viewtopic.php?t=17335
Regards
Anver -
Subtotals in ALV report for ALPHA-NUMERIC field
Hi Experts,
I have problem while subtotalling values in ALV report.
I have 8 fields in my fieldcatalog. Now, I have to do the subtotal based on 3rd field having name 'ABC'. This field is having type CHAR & having lenght 3.
Now I wanted to do subtotalling for field 7 & 8 as 'NETWR' & 'MENGE' based on 3rd field.
How we can do the subtotal?Hi,
Refer this code
*& Form sub_display_data
text
FORM sub_display_data .
*--To sort the output through material number
DATA : lwa_sort TYPE slis_sortinfo_alv.
DATA : lit_sort TYPE slis_t_sortinfo_alv.
*--Pass the values to the table
lwa_sort-fieldname = 'PERNR'. "Field name in o/p inttable
lwa_sort-tabname = 'it_final2'. "Output Internal table
lwa_sort-spos = '1'. "Sort sequence
lwa_sort-up = 'X'. "Sort in ascending order
lwa_sort-down = ' '. "Sort in descending order
lwa_sort-subtot = 'X'. "Subtotal
APPEND lwa_sort TO lit_sort.
*--Pass the values to the table
lwa_sort-fieldname = 'WORKDATE'. "Field name in o/p inttable
lwa_sort-tabname = 'it_final2'. "Output Internal table
lwa_sort-spos = '2'. "Sort sequence
lwa_sort-up = 'X'. "Sort in ascending order
lwa_sort-down = ' '. "Sort in descending order
lwa_sort-subtot = ' '. "Subtotal
APPEND lwa_sort TO lit_sort.
*--Pass the values to the table
lwa_sort-fieldname = 'WEKLY'. "Field name in o/p inttable
lwa_sort-tabname = 'it_final2'. "Output Internal table
lwa_sort-spos = '3'. "Sort sequence
lwa_sort-up = 'X'. "Sort in ascending order
lwa_sort-down = ' '. "Sort in descending order
lwa_sort-subtot = ' '. "Subtotal
APPEND lwa_sort TO lit_sort.
wa_layout-colwidth_optimize = 'X'.
IF NOT it_final2[] IS INITIAL.
*--Call the function module to display the ALV report
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = wa_layout
i_callback_program = v_repid
it_fieldcat = it_fieldcat1[]
i_default = c_chk
i_save = c_save
it_sort = lit_sort
TABLES
t_outtab = it_final2
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.
ELSE.
*--Message No data found
MESSAGE i888 WITH text-017.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM. " sub_display_data
Regards,
Prashant -
Hello,
I am developing a report using ALV FM, i have field catalog(vbeln posnr matnr netpr). i know how to set subtotals using layout settings once after program execution.but i want subtotals to set before execution( i mean that, in coding itself). does any one worked on this before..?if so. plz send some sample code..
thanks in advance..
leoiz.Hai Komal Rani ,
As u said that i worked on subtotals in my report but that doesn't give any result to me.As we know that before going to work on subtots we must sum at least one column,then only we can do subtots, similarly i did using do_sum attribute in fieldcatalog table on netprice column.
then i passed
s_sort_info-fieldname = 'VBELN'.
s_sort_info-subtot = 'X'.
append s_sort_info to t_sort_info.
then i passed t_sort_info to
IT_SORT = t_sort_info in
REUSE_ALV_GRID_DISPLAY fm.
but that doesn't give any result...
if i did mistake, can u explain once again..?
leoiz. -
Display Subtotals on ALV Report W/O changing Layout
Hi ,
I need to display subtotals of quantity fields in my output of report ,with corresponding production order by using ALV container,Layout default seetings won't work here because user has to do many operations such as sorting filtering etc ,after displaying the reportCheck these threads out
http://www.sap-basis-abap.com/sapalv.htm
http://help.sap.com/saphelp_nw04/helpdata/en/ee/b99d37e188a049e10000009b38f8cf/content.htm
http://www.sapfans.com/forums/viewtopic.php?t=20386
http://www.sapfans.com/forums/viewtopic.php?t=85191
http://www.sapfans.com/forums/viewtopic.php?t=88401
http://www.sapfans.com/forums/viewtopic.php?t=17335
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'.
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'.
APPEND GS_SORT TO GT_SORT.
Regards -
Runtime error when implementing subtotals in ALV
Hi,
I have implement subtotalling in a ALV report program.
Dump message is:
Short text
The current application triggered a termination with a short dump.
What happened?
The current application program detected a situation which really
should not occur. Therefore, a termination with a short dump was
triggered on purpose by the key word MESSAGE (type X).
2729 add 1 to ls_lvc_data-col_pos.
2730
2731 assign component <ls_fcat>-fieldname
2732 of structure <ls_data> to <l_f
2733 if sy-subrc ne 0.
>>>> message x000(0k).
2735 endif.
2736
2737 *... work on average
2738 if <ls_fcat>-do_sum eq 'C'.
2739 clear l_entries.
2740
2741 assign space to <l_unit>.
2742 if not <ls_fcat>-cfieldname is initial.
2743 assign component <ls_fcat>-cfieldname
2744 of structure <ls_data> to <l_unit>.
2745 endif.
2746 if not <ls_fcat>-qfieldname is initial.
2747 assign component <ls_fcat>-qfieldname
2748 of structure <ls_data> to <l_unit>.
2749 endif.
2750
2751 l_from = ls_grpl-index_from.
2752 l_to = ls_grpl-index_to.
2753 if ls_grpl-index_from is initial
Edited by: Marc Winston Ng on Apr 4, 2008 11:55 AM
Edited by: Marc Winston Ng on Apr 4, 2008 11:55 AMHi,
Just have a look on the following sample code and compare it with your code.
TABLES : vbak.
TYPE-POOLS: slis. " ALV Global types
DATA:
BEGIN OF gt_vbak OCCURS 0,
vkorg LIKE vbak-vkorg, " Sales organization
kunnr LIKE vbak-kunnr, " Sold-to party
vbeln LIKE vbak-vbeln, " Sales document
netwr LIKE vbak-netwr, " Net Value of the Sales Order
waerk LIKE vbak-waerk, " Document currency
END OF gt_vbak.
*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 * INTO CORRESPONDING FIELDS OF TABLE gt_vbak
FROM vbak
UP TO 20 ROWS.
ENDFORM. " F_READ_DATA
Form f_display_data
FORM f_display_data.
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. "currency unit field name
"(Value set: SPACE, output table field name)
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
Reward,if useful.
Thanks,
Chandu -
How to do monthwise subtotals in alv
Hi folks,
How to do monthwise subtotals for the shipped quantity using alv.
Please reply urgent
Thanks in advance
RaoHi,
As per the standard SAP, it is not possible to display the subtotal in a different field. The solution is remove the subtotal field from the internal table.
In the slis_t_sortinfo_alv table pass the kunnr field with subtot = 'X'.
I hope this will solve your query.
Reward all useful answers.
Thank you. -
How to calculate the subtotals in alv for curr field(bsik-wrbtr)
I want to calculate subtotal for netamt for every new lifnr(vendor )
this is my program
REPORT Z23PRAC1.
*& Report ZRFI_AP_AGING_REPORT
TABLES : lfa1,lfb1.
CONSTANTS : gc_linedat(1) TYPE c VALUE 'X',
gc_duedate(1) TYPE c VALUE 'X',
gc_koart(1) TYPE c VALUE 'K',
gc_tname(9) TYPE c VALUE 'GT_OUTPUT'.
TYPE-POOLS: slis.
TYPES: BEGIN OF ty_output,
bukrs TYPE bsik-bukrs, "Company Code
lifnr TYPE bsik-lifnr, "Vendor Account
blart TYPE bsik-blart, "Document Type
name1 TYPE lfa1-name1, "Vendor Name
ktokk TYPE lfa1-ktokk, "Account Group
belnr TYPE bsik-belnr, "Invoice
ebeln TYPE bsik-ebeln, "Purchasing Order
bldat TYPE bsik-bldat, "Document Date
netdt TYPE bsega-netdt, "Due Date
wrbtr1 TYPE bsik-wrbtr, "Aged 1-30
wrbtr2 TYPE bsik-wrbtr, "Aged 31-60
wrbtr3 TYPE bsik-wrbtr, "Aged 61-90
wrbtr4 TYPE bsik-wrbtr, "Aged Over 90
grossamt TYPE bsik-wrbtr, "Gross Amount Due
psskt TYPE regup-psskt, "Discount
netamt(13) TYPE P decimals 2, "Net Amount Due
NETAMT TYPE BSIK-WRBTR,
END OF ty_output.
TYPES: BEGIN OF ty_vendor1,
lifnr TYPE lfa1-lifnr,
name1 TYPE lfa1-name1,
ktokk TYPE lfa1-ktokk,
END OF ty_vendor1.
TYPES :BEGIN OF ty_vendor,
bukrs TYPE bsik-bukrs, "COMPANY CODE
lifnr TYPE bsik-lifnr, "CUSTOMER ACCOUNT
END OF ty_vendor.
TYPES :BEGIN OF ty_ekko,
bukrs TYPE ekko-bukrs, "COMPANY CODE
lifnr TYPE ekko-lifnr, "CUSTOMER ACCOUNT
ebeln TYPE ekko-ebeln,
END OF ty_ekko.
DATA: gt_output TYPE TABLE OF ty_output, "OUTPUT TABLE
gt_lineitem TYPE TABLE OF bapi3008_2, "LINE ITEMS TABLE
gt_custdet TYPE TABLE OF ty_custdet, "CUSTOMER ACCOUNT VALIDATION
gt_fieldcat TYPE slis_t_fieldcat_alv, "FIELD CATALOG
gt_events TYPE slis_t_event, "EVENTS CATALOG
gt_sort TYPE slis_t_sortinfo_alv, "SORT CATALOG
gt_text_top_of_page TYPE slis_t_listheader, "TOP OF THE PAGE
gt_vendor1 TYPE TABLE OF ty_vendor1,
gt_vendor TYPE TABLE OF ty_vendor,
gt_ekko TYPE TABLE OF ty_ekko.
DATA: st_output TYPE ty_output, "OUTPUT WORK AREA
st_lineitem TYPE bapi3008_2, "LINE ITEMS WORK AREA
st_custdet TYPE ty_custdet, "CUSTOMER ACCOUNT VALIDATION
st_faede TYPE faede, "DUE DATE CALCULATION
st_fieldcat LIKE LINE OF gt_fieldcat,
st_events LIKE LINE OF gt_events,
st_sort LIKE LINE OF gt_sort,
st_text_top_of_page LIKE LINE OF gt_text_top_of_page,
st_vendor1 TYPE ty_vendor1,
st_vendor TYPE ty_vendor,
st_ekko TYPE ty_ekko.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS : s_lifnr FOR lfa1-lifnr,
s_bukrs FOR lfb1-bukrs,
s_ktokk FOR lfa1-ktokk.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
PARAMETERS : p_astid TYPE rfpdo-allgstid DEFAULT sy-datum.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
PARAMETERS: p_summed AS CHECKBOX,
p_linedt AS CHECKBOX DEFAULT gc_linedat.
SELECTION-SCREEN END OF BLOCK b3.
SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-004.
PARAMETERS: p_docdat AS CHECKBOX,
p_duedat AS CHECKBOX DEFAULT gc_duedate.
SELECTION-SCREEN END OF BLOCK b4.
START-OF-SELECTION.
SELECT lifnr name1 ktokk FROM lfa1
INTO TABLE gt_vendor1
WHERE lifnr IN s_lifnr.
SELECT bukrs
lifnr
ebeln
FROM ekko
INTO TABLE gt_ekko
WHERE bukrs IN s_bukrs
AND lifnr IN s_lifnr.
IF s_bukrs IS NOT INITIAL AND s_lifnr IS NOT INITIAL.
SELECT bukrs
lifnr
FROM lfb1
INTO TABLE gt_vendor
WHERE bukrs IN s_bukrs
AND lifnr IN s_lifnr.
*LOOP AT GT_OUTPUT INTO ST_OUTPUT.
*endif.
LOOP AT gt_vendor INTO st_vendor.
READ TABLE gt_vendor1 INTO st_vendor1 WITH KEY lifnr = st_vendor-lifnr.
READ TABLE gt_ekko INTO st_ekko WITH KEY lifnr = st_vendor-lifnr
bukrs = st_vendor-bukrs.
CALL FUNCTION 'BAPI_AP_ACC_GETOPENITEMS'
EXPORTING
companycode = st_vendor-bukrs
vendor = st_vendor-lifnr
keydate = p_astid
TABLES
lineitems = gt_lineitem.
LOOP AT gt_lineitem INTO st_lineitem.
st_faede-shkzg = st_lineitem-db_cr_ind.
st_faede-koart = gc_koart.
st_faede-zfbdt = st_lineitem-bline_date.
st_faede-zbd1t = st_lineitem-dsct_days1.
st_faede-zbd2t = st_lineitem-dsct_days2.
st_faede-zbd3t = st_lineitem-netterms.
st_faede-rebzg = st_lineitem-inv_ref.
st_faede-rebzt = st_lineitem-nxt_doctyp.
st_faede-bldat = st_lineitem-doc_date.
CALL FUNCTION 'DETERMINE_DUE_DATE'
EXPORTING
i_faede = st_faede
IMPORTING
e_faede = st_faede
EXCEPTIONS
account_type_not_supported = 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.
st_output-bukrs = st_vendor-bukrs.
st_output-lifnr = st_vendor-lifnr.
st_output-name1 = st_vendor1-name1.
st_output-ktokk = st_vendor1-ktokk.
st_output-blart = st_lineitem-doc_type.
st_output-belnr = st_lineitem-doc_no.
st_output-ebeln = st_ekko-ebeln.
st_output-bldat = st_faede-bldat.
st_output-netdt = st_faede-netdt.
DATA : lv_date TYPE i.
IF p_docdat = 'X'.
lv_date = p_astid - st_output-bldat.
IF lv_date < 30 .
st_output-wrbtr1 = st_lineitem-amt_doccur.
ELSEIF lv_date < 60 .
st_output-wrbtr2 = st_lineitem-amt_doccur.
ELSEIF lv_date < 90 .
st_output-wrbtr3 = st_lineitem-amt_doccur.
ELSEIF lv_date > 90 .
st_output-wrbtr4 = st_lineitem-amt_doccur.
ENDIF.
ELSE.
lv_date = p_astid - st_output-bldat.
IF lv_date < 30 .
st_output-wrbtr1 = st_lineitem-amt_doccur.
ELSEIF lv_date < 60 .
st_output-wrbtr2 = st_lineitem-amt_doccur.
ELSEIF lv_date < 90 .
st_output-wrbtr3 = st_lineitem-amt_doccur.
ELSEIF lv_date > 90 .
st_output-wrbtr4 = st_lineitem-amt_doccur.
ENDIF.
ENDIF.
DATA : A TYPE BSIK-WRBTR,
C TYPE STRING.
st_output-grossamt = st_output-wrbtr1 +
st_output-wrbtr2 +
st_output-wrbtr3 +
st_output-wrbtr4 .
A = st_output-grossamt - ( st_output-grossamt * st_output-psskt ) / 100.
MOVE A TO C.
MOVE C TO st_output-netamt .
*st_output-netamt = st_output-grossamt - ( st_output-grossamt * st_output-psskt ) / 100.
APPEND st_output TO gt_output.
CLEAR st_output.
ENDLOOP.
ENDLOOP.
SORT gt_output.
END-OF-SELECTION.
PERFORM fill_field_catalog.
PERFORM fill_event_catalog.
PERFORM sort_catalog.
PERFORM display_alv_list.
*& Form fill_field_catalog
text
FORM fill_field_catalog .
*Definition
DEFINE field_cat.
st_fieldcat-tabname = &1.
st_fieldcat-fieldname = &2.
st_fieldcat-ref_tabname = &3.
st_fieldcat-seltext_m = &4.
st_fieldcat-do_sum = &5.
append st_fieldcat to gt_fieldcat.
clear st_fieldcat.
END-OF-DEFINITION.
field_cat gc_tname 'BUKRS' 'BSIK' 'Company Code' ''.
field_cat 'GT_OUTPUT' 'LIFNR' 'BSIK' 'Customer Account' ''.
field_cat 'GT_OUTPUT' 'BLART' 'BSIK' 'Document Type' ''.
field_cat 'GT_OUTPUT' 'NAME1' 'LFA1' 'Vendor Name' ''.
field_cat 'GT_OUTPUT' 'KTOKK' 'LFA1' 'Account Group' ''.
field_cat gc_TNAME 'ALLGSTID' 'RFPDO' 'Key Date' ''.
field_cat gc_tname 'BELNR' 'BSIK' 'Invoice' ''.
field_cat gc_tname 'EBELN' 'EKKO' 'Purchasing Order' ''.
field_cat gc_tname 'BLDAT' 'BSIK' 'Document Date' ''.
field_cat gc_tname 'NETDT' 'BSEGA' 'Due Date' ''.
field_cat gc_tname 'WRBTR1' 'BSIK' 'Aged 1-30' ''.
field_cat gc_tname 'WRBTR2' 'BSIK' 'Aged 31-60' ''.
field_cat gc_tname 'WRBTR3' 'BSIK' 'Aged 61-90' ''.
field_cat gc_tname 'WRBTR4' 'BSIK' 'Aged Over 90' ''.
field_cat gc_tname 'GROSSAMT' 'BSIK' 'Gross Amount' ''.
field_cat gc_tname 'PSSKT' 'REGUP' 'Discount' ''.
field_cat gc_tname 'NETAMT' 'BSIK' 'Net Amount' 'X' .
ENDFORM. " fill_field_catalog
*& Form fill_event_catalog
EVENTS FILLING SUBROUTINE TO FIND THE TOP OF THE PAGE EVENT
FORM fill_event_catalog .
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = gt_events
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 gt_events TRANSPORTING NO FIELDS WITH KEY name = 'TOP_OF_PAGE'.
IF sy-subrc EQ 0.
st_events-form = 'FILL_HEADER'.
MODIFY gt_events FROM st_events INDEX sy-tabix TRANSPORTING form.
ENDIF.
ENDFORM. " fill_event_catalog
*& Form FILL_HEADER
FILL HEADER DATA
FORM fill_header .
st_text_top_of_page-typ = 'S'.
st_text_top_of_page-info = sy-mandt.
APPEND st_text_top_of_page TO gt_text_top_of_page.
st_text_top_of_page-info = sy-uname.
APPEND st_text_top_of_page TO gt_text_top_of_page.
WRITE sy-datum TO st_text_top_of_page-info.
APPEND st_text_top_of_page TO gt_text_top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = gt_text_top_of_page.
ENDFORM. "fill header
*& Form sort_catalog
text
--> p1 text
<-- p2 text
FORM sort_catalog .
st_sort-up = 'X'.
st_sort-spos = 1.
st_sort-subtot = 'X'.
st_sort-fieldname = 'LIFNR'.
APPEND st_sort TO Gt_sort.
CLEAR st_sort.
st_sort-up = 'X'.
st_sort-spos = '2'.
st_sort-subtot = ''.
st_sort-fieldname = 'NETAMT'.
APPEND st_sort TO gt_sort.
CLEAR st_sort.
ENDFORM. " sort_catalog
*& Form display_alv_list
CREATE THE OUTPUT IN THE ALV LIST FORMAT
FORM display_alv_list .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
it_fieldcat = gt_fieldcat
it_sort = gt_sort
i_default = 'X'
it_events = gt_events
TABLES
t_outtab = gt_output
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_alv_listHi,
This is the sample report for ALV SUBTOTAL.
REPORT YMS_ALVSUBTOTAL.
*REPORT z_alv_sub_totals .
TYPE-POOLS: slis.
DATA: BEGIN OF it_output OCCURS 0,
var1(8) TYPE n,
var2(10),
var3 TYPE I,
END OF it_output.
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
t_fieldcat TYPE slis_fieldcat_alv,
it_sort TYPE slis_t_sortinfo_alv,
t_sort TYPE slis_sortinfo_alv,
v_repid LIKE sy-repid.
INITIALIZATION.
v_repid = sy-repid.
START-OF-SELECTION.
PERFORM get_data.
PERFORM sort_fields.
PERFORM fill_fieldcat.
PERFORM list_display.
*& Form GET_DATA
text
--> p1 text
<-- p2 text
FORM get_data.
it_output-var1 = 1000.
it_output-var2 = 'anupama'.
it_output-var3 = '10000'.
it_output-key = 'X'.
APPEND it_output.
CLEAR it_output.
it_output-var1 = 1000.
it_output-var2 = 'siddhu'.
it_output-var3 = '20000'.
APPEND it_output.
CLEAR it_output.
it_output-var1 = 1000.
it_output-var2 = 'chinni'.
it_output-var3 = '100000'.
APPEND it_output.
CLEAR it_output.
it_output-var1 = 2000.
it_output-var2 = 'chicchu'.
it_output-var3 = '10000'.
APPEND it_output.
CLEAR it_output.
it_output-var1 = 2000.
it_output-var2 = 'candy'.
it_output-var3 = '10000'.
APPEND it_output.
CLEAR it_output.
it_output-var1 = 1000.
it_output-var2 = 'anupama'.
it_output-var3 = '10000'.
APPEND it_output.
CLEAR it_output.
it_output-var1 = 4000.
it_output-var2 = 'anupama'.
it_output-var3 = '10000'.
APPEND it_output.
CLEAR it_output.
ENDFORM. " GET_DATA
*& Form fill_fieldcat
text
--> p1 text
<-- p2 text
FORM fill_fieldcat.
PERFORM fill_fields USING: 'IT_OUTPUT' 'VAR1' 'Variable 1' ' ',
'IT_OUTPUT' 'VAR2' 'Variable 2' ' ',
'IT_OUTPUT' 'VAR3' 'Variable 3' 'X'.
ENDFORM. " fill_fieldcat
*& Form fill_fields
text
-->P_0146 text
-->P_0147 text
-->P_0148 text
-->P_0149 text
FORM fill_fields USING value(tabname) TYPE slis_tabname
value(fieldname) TYPE slis_fieldname
value(seltext_m) LIKE dd03p-scrtext_m
value(do_sum) TYPE c.
t_fieldcat-tabname = tabname.
t_fieldcat-fieldname = fieldname.
t_fieldcat-seltext_m = seltext_m.
IF do_sum = 'X'.
t_fieldcat-datatype = 'CURR'.
ENDIF.
t_fieldcat-do_sum = do_sum.
APPEND t_fieldcat TO it_fieldcat.
CLEAR t_fieldcat.
ENDFORM. " fill_fields
*& Form list_display
text
--> p1 text
<-- p2 text
FORM list_display.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = v_repid
it_fieldcat = it_fieldcat
it_sort = it_sort[]
TABLES
t_outtab = it_output
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. " list_display
*& Form sort_fields
text
--> p1 text
<-- p2 text
FORM sort_fields.
t_sort-fieldname = 'VAR1'.
t_sort-tabname = 'IT_OUTPUT'.
t_sort-spos = 1.
t_sort-up = 'X'.
t_sort-subtot = 'X'.
APPEND t_sort TO it_sort.
CLEAR t_sort.
t_sort-fieldname = 'VAR3'.
t_sort-tabname = 'IT_OUTPUT'.
t_sort-spos = 2.
t_sort-up = 'X'.
APPEND t_sort TO it_sort.
CLEAR t_sort.
ENDFORM. " sort_fields
Thanks,
Sankar M -
IN ALV HOW WE CAN TOTALS AND SUBTOTALS?
HI EXPERTS?
IN ALV HOW WE CAN TOTALS AND SUBTOTALS?Hi
FOR DISPLAYING TOTALA AND SUBTOTALS IN ALV USE THIS:
data: wa_fieldcat type slis_fieldcat_alv,
it_fieldcat type slis_t_fieldcat_alv.
data: wa_sort type slis_sortinfo_alv,
it_sort type slis_t_sortinfo_alv.
wa_fieldcat-do_sum = 'X'.
append wa_fieldcat to it_fieldcat.
wa_sort-fieldname = 'KUNNR'.
wa_sort-tabname = 'IT_FINAL'.
wa_sort-subtot = 'X'.
append wa_sort to it_sort.
AN EXAMPLE RELATED TO IT:
This ALV program have all the basic report requirements such as page heading, page no, sub-total and a grand total.
This is a basic ALV with the followings:-
- Page Heading
- Page No
- Sub-Total
- Grand Total
REPORT ZALV.
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'.
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'.
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.
thnx
Sravani
Plz reward if useful -
ALV Subtotals calculation - Urgent
Hi All,
How can I caliculate subtotals in ALV ?
How to increase column size in alv?
RegardsHi,
Refer this code
*& Form sub_display_data
text
FORM sub_display_data .
*--To sort the output through material number
DATA : lwa_sort TYPE slis_sortinfo_alv.
DATA : lit_sort TYPE slis_t_sortinfo_alv.
*--Pass the values to the table
lwa_sort-fieldname = 'PERNR'. "Field name in o/p inttable
lwa_sort-tabname = 'it_final2'. "Output Internal table
lwa_sort-spos = '1'. "Sort sequence
lwa_sort-up = 'X'. "Sort in ascending order
lwa_sort-down = ' '. "Sort in descending order
lwa_sort-subtot = 'X'. "Subtotal
APPEND lwa_sort TO lit_sort.
*--Pass the values to the table
lwa_sort-fieldname = 'WORKDATE'. "Field name in o/p inttable
lwa_sort-tabname = 'it_final2'. "Output Internal table
lwa_sort-spos = '2'. "Sort sequence
lwa_sort-up = 'X'. "Sort in ascending order
lwa_sort-down = ' '. "Sort in descending order
lwa_sort-subtot = ' '. "Subtotal
APPEND lwa_sort TO lit_sort.
*--Pass the values to the table
lwa_sort-fieldname = 'WEKLY'. "Field name in o/p inttable
lwa_sort-tabname = 'it_final2'. "Output Internal table
lwa_sort-spos = '3'. "Sort sequence
lwa_sort-up = 'X'. "Sort in ascending order
lwa_sort-down = ' '. "Sort in descending order
lwa_sort-subtot = ' '. "Subtotal
APPEND lwa_sort TO lit_sort.
wa_layout-colwidth_optimize = 'X'. to increase collumn length
IF NOT it_final2[] IS INITIAL.
*--Call the function module to display the ALV report
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = wa_layout
i_callback_program = v_repid
it_fieldcat = it_fieldcat1[]
i_default = c_chk
i_save = c_save
it_sort = lit_sort
TABLES
t_outtab = it_final2
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.
ELSE.
*--Message No data found
MESSAGE i888 WITH text-017.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM. " sub_display_data
Regards,
Prashant -
Hi,
Can you please tell how to write subtotal text in ALV Report.
770016 MTNL Gas 770018143 KGST 7/24/2005 DG -157.77
770016 MTNL Gas 770018203 KGST 7/24/2005 DG -1,354.75
770016 MTNL Gas 770018219 KGST 7/24/2005 DG -499.26
770016 MTNL Gas 770018220 KGST 7/17/2005 DG -609.34
770016 MTNL Gas 770018253 KGST 7/24/2005 DG -332.84
770016 MTNL Gas 770018257 KGST 7/24/2005 DG -630.05
770016 MTNL Gas 770018299 KGST 7/31/2005 DG -158.01
770016 A/R Open Balances (3,742.02)
770016 Unapplied Customer Credits 3,742.02
Please let me know how to write description <b>A/R Open</b> <b>Balances(Debit)</b> and <b>Unapplied Customer</b> <b>Credits(Credit)</b> for the subtotals in ALV.
Thanks in advance.
Regards,
Baba.hi
try this out this may help u.............
populate Table IT_SORT with the sort criteria for the different fields.
sorting and subtotaling are specified by the caller in the internal table I_SORT.
call this function and mention the fields. -
hi all,
I want to modify subtotals in alv OO, somebody knows how can i do that?
regards.
Thanks.Hi,
While modifying field catalog , try the following.
Field-symbols: <lfs_fieldcat> TYPE lvc_s_fcat.
LOOP AT i_fieldcat ASSIGNING <lfs_fieldcat>.
CASE <lfs_fieldcat>-fieldname.
WHEN 'LOSGR'.
<lfs_fieldcat>-coltext = text-007.
<lfs_fieldcat>-do_sum = c_x.
ENDCASE.
ENDLOOP.
Or if you want to use field symbols.
data: total type ref to data,
subtotal1 type ref to data.
field-symbols <total> like gt_sflight.
field-symbols <subtotal1> like gt_sflight.
call method grid1->get_subtotals
importing
ep_collect00 = total
ep_collect01 = subtotal1.
assign total->* to <total>.
assign subtotal1->* to <subtotal1>.
Hope this helps.
Thanks
Arun kayal -
How to accumlate and use sort in ALV
Hi
I am using collect statement for accumalation.
but it is not working.
the code is like this:
IF NOT p_otrstk IS INITIAL.
CLEAR it_zresult_tab1.
LOOP AT it_mard_tab INTO wa_mard_tab.
l_tabix = sy-tabix.
READ TABLE it_zresult_tab1 INTO wa_zresult_tab1
WITH KEY lgort = s_lgort1
lgort = s_lgort2
werks = s_werks
matnr = s_matnr.
IF sy-subrc EQ 0.
wa_zresult_tab1-speme = wa_mard_tab-speme.
wa_zresult_tab1-umlme = wa_mard_tab-umlme.
wa_zresult_tab1-insme = wa_mard_tab-insme.
wa_zresult_tab1-retme = wa_mard_tab-retme.
COLLECT wa_zresult_tab1 INTO it_zresult_tab1.
ENDIF.
ENDLOOP.
ENDIF.
do i need to use modify? but it is with modify it is giving dump.
and how to do subtotals in ALV grid?
the code is like this:
IF grid1 IS INITIAL .
Instantiate the grid container.
CREATE OBJECT g_custom_container
EXPORTING container_name = 'CCCONTAINER'.
*Instantiate the grid itself within the container.
CREATE OBJECT grid1
EXPORTING
i_parent = g_custom_container.
i_appl_events = 'X'.
Call method of grid1 class object to build/display the grid.
CALL METHOD grid1->set_table_for_first_display
EXPORTING
i_structure_name = 'ZRESULT_TAB'
is_variant = variant
i_save = 'U'
is_layout = gs_layout
CHANGING
it_outtab = it_zresult_tab
it_fieldcatalog = gt_fcat
IT_SORT = VT_SORT
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
and in the fieldcatalog
IF p_some = 'X'.
CLEAR: ls_sort.
t_fcat-no_out = 'X'.
ls_sort-fieldname = 'MATNR'.
ls_sort-subtot = 'X'.
APPEND ls_sort TO vt_sort.
but this is also not working.
Please help me.....
Thanks
AlekhyaHi,
go thru this sample program which uses sort and sums the data
report yalv2 .
declare data areas for listviewer******************
type-pools:slis.
data:g_repid like sy-repid,
gs_layout type slis_layout_alv,
gt_fieldcat type slis_t_fieldcat_alv,
fieldcat_ln type slis_fieldcat_alv,
gt_sort type slis_t_sortinfo_alv,
gs_sort type slis_sortinfo_alv,
gt_events type slis_t_event,
gs_event type slis_alv_event,
gt_list_top_of_page type slis_t_listheader,
gs_line type slis_listheader,
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.
initialization.
g_repid = sy-repid.
start-of-selection.
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 200 times.
append itab1.
enddo.
end-of-selection.
<b>perform build_fieldcat.</b>
<b>perform build_sortcat.</b>
perform build_eventcat changing gt_events.
perform build_commentcat changing gt_list_top_of_page.
perform call_alv.
*& Form build_fieldcat
text
--> p1 text
<-- p2 text
form build_fieldcat . "data field catalog, explain field desc
"to alv
fieldcat_ln-fieldname = 'FIELD1'.
fieldcat_ln-tabname = 'ITAB1'.
fieldcat_ln-key = ' '. "subtotal key
fieldcat_ln-no_out = ' '.
fieldcat_ln-seltext_l = 'HEAD1'.
append fieldcat_ln to gt_fieldcat.
fieldcat_ln-fieldname = 'FIELD2'.
fieldcat_ln-tabname = 'ITAB1'.
fieldcat_ln-no_out = ' '.
fieldcat_ln-seltext_l = 'HEAD2'.
append fieldcat_ln to gt_fieldcat.
fieldcat_ln-fieldname = 'FIELD3'.
fieldcat_ln-tabname = 'ITAB1'.
fieldcat_ln-ref_tabname = 'MSEG'.
fieldcat_ln-ref_fieldname = 'MENGE'.
fieldcat_ln-no_out = ' '.
fieldcat_ln-do_sum = 'X'. "sum upon display
append fieldcat_ln to gt_fieldcat.
endform. " build_fieldcat
*& Form build_sortcat
text
--> p1 text
<-- p2 text
form build_sortcat . "data sorting and displaying subtotal
clear gs_sort.
gs_sort-fieldname = 'FIELD1'.
gs_sort-spos = '1'.
gs_sort-up = 'X'.
append gs_sort to gt_sort.
clear gs_sort.
gs_sort-fieldname = 'FIELD2'.
gs_sort-spos = '2'.
gs_sort-up = 'X'.
append gs_sort to gt_sort.
endform. " build_sortcat
*& Form build_eventcat
text
<--P_GT_EVENTS text
form build_eventcat changing lt_events type slis_t_event.
constants:
gc_formname_top_of_page type slis_formname value 'TOP-OF-PAGE'.
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 gs_event.
if sy-subrc = 0.
move gc_formname_top_of_page to gs_event-form.
append gs_event to lt_events.
endif.
endform. " build_eventcat
*& Form build_commentcat
text
<--P_GT_LIST_TOP_OF_PAGE text
form build_commentcat changing gt_top_of_page type slis_t_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.
clear gs_line.
gs_line-typ = 'S'.
gs_line-key = 'STATUS 2'.
gs_line-info = 'INFO 2'.
append gs_line to gt_top_of_page.
endform. " build_commentcat
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.
*& Form call_alv
text
--> p1 text
<-- p2 text
form call_alv .
call function 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = g_repid
I_STRUCTURE_NAME = 'ITAB1'
IS_LAYOUT = gs_layout
IT_FIELDCAT = gt_fieldcat
IT_SORT = gt_sort
IT_EVENTS = gt_events
tables
t_outtab = ITAB1
endform. " call_alv
Regards,
Sowjanya.
Message was edited by: sowjanya suggula -
hi gurus,
In my report program i have a monthly report displaying the data for that month.
1. Now in my ALV grid i want The SUB-TOTALS for the work center wise data for a field of the alv. there are many workcenters data in my report. So after the end of each work center , i want the subtotal of a calculated TAT field.
2. At the end of the report, I want the average TAT(field calculated by my report program) for that month.
So how can i make the coding for the above.
Iam a fresher to this field, so give me in detail.
regards,
chaitanyaHi
i am giving a sample example for subtotals of alv.
REPORT z_alv_subtotal.
*& Table declaration
TABLES: EKKO.
*& Type pool declaration
TYPE-POOLS: SLIS. " Type pool for ALV
*& Selection screen
SELECT-OPTIONS: S_EBELN FOR EKKO-EBELN.
*& Type declaration
Type declaration for internal table to store EKPO data
TYPES: BEGIN OF X_DATA,
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 X_DATA.
*& Internal table declaration
DATA:
Internal table to store EKPO data
I_EKPO TYPE STANDARD TABLE OF X_DATA INITIAL SIZE 0,
Internal table for storing field catalog information
I_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
Internal table for Top of Page info. in ALV Display
I_ALV_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER,
Internal table for ALV Display events
I_EVENTS TYPE SLIS_T_EVENT,
Internal table for storing ALV sort information
I_SORT TYPE SLIS_T_SORTINFO_ALV,
I_EVENT TYPE SLIS_T_EVENT.
*& Work area declaration
DATA:
WA_EKKO TYPE X_DATA,
WA_LAYOUT TYPE SLIS_LAYOUT_ALV,
WA_EVENTS TYPE SLIS_ALV_EVENT,
WA_SORT TYPE SLIS_SORTINFO_ALV.
*& Constant declaration
CONSTANTS:
C_HEADER TYPE CHAR1
VALUE 'H', "Header in ALV
C_ITEM TYPE CHAR1
VALUE 'S'.
*& 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 I_EKPO
WHERE EBELN IN S_EBELN
AND NTGEW NE '0.00'.
IF SY-SUBRC = 0.
SORT I_EKPO BY EBELN EBELP MATNR .
ENDIF.
To build the Page header
PERFORM SUB_BUILD_HEADER.
To prepare field catalog
PERFORM SUB_FIELD_CATALOG.
Perform to populate the layout structure
PERFORM SUB_POPULATE_LAYOUT.
Perform to populate the sort table.
PERFORM SUB_POPULATE_SORT.
Perform to populate ALV event
PERFORM SUB_GET_EVENT.
END-OF-SELECTION.
Perform to display ALV report
PERFORM SUB_ALV_REPORT_DISPLAY.
*& Form sub_build_header
To build the header
No Parameter
FORM SUB_BUILD_HEADER .
Local data declaration
DATA: L_SYSTEM TYPE CHAR10 , "System id
L_R_LINE TYPE SLIS_LISTHEADER, "Hold list header
L_DATE TYPE CHAR10, "Date
L_TIME TYPE CHAR10, "Time
L_SUCCESS_RECORDS TYPE I, "No of success records
L_TITLE(300) TYPE C. " Title
Title Display
L_R_LINE-TYP = C_HEADER. " header
L_TITLE = 'Test report'(001).
L_R_LINE-INFO = L_TITLE.
APPEND L_R_LINE TO I_ALV_TOP_OF_PAGE.
CLEAR L_R_LINE.
Run date Display
CLEAR L_DATE.
L_R_LINE-TYP = C_ITEM. " Item
WRITE: SY-DATUM TO L_DATE MM/DD/YYYY.
L_R_LINE-KEY = 'Run Date :'(002).
L_R_LINE-INFO = L_DATE.
APPEND L_R_LINE TO I_ALV_TOP_OF_PAGE.
CLEAR: L_R_LINE,
L_DATE.ENDFORM. " sub_build_header
*& Form sub_field_catalog
Build Field Catalog
No Parameter
FORM SUB_FIELD_CATALOG .
Build Field Catalog
PERFORM SUB_FILL_ALV_FIELD_CATALOG USING:
'01' '01' 'EBELN' 'I_EKPO' 'L' 'Doc No'(003) ' ' ' ' ' ' ' ',
'01' '02' 'EBELP' 'I_EKPO' 'L' 'Item No'(004) 'X' 'X' ' ' ' ',
'01' '03' 'MATNR' 'I_EKPO' 'L' 'Material No'(005) 'X' 'X' ' ' ' ',
'01' '03' 'MATNR1' 'I_EKPO' 'L' 'Material No'(005) ' ' ' ' ' ' ' ',
'01' '04' 'WERKS' 'I_EKPO' 'L' 'Plant'(006) 'X' 'X' ' ' ' ',
'01' '04' 'WERKS1' 'I_EKPO' 'L' 'Plant'(006) ' ' ' ' ' ' ' ',
'01' '05' 'NTGEW' 'I_EKPO' 'R' 'Net Weight'(007) ' ' ' ' 'GEWE' 'I_EKPO'
ENDFORM. " sub_field_catalog
*& Form sub_fill_alv_field_catalog
*& For building Field Catalog
*& p_rowpos Row position
*& p_colpos Col position
*& p_fldnam Fldname
*& p_tabnam Tabname
*& p_justif Justification
*& p_seltext Seltext
*& p_out no out
*& p_tech Technical field
*& p_qfield Quantity field
*& p_qtab Quantity table
FORM SUB_FILL_ALV_FIELD_CATALOG USING P_ROWPOS TYPE SYCUROW
P_COLPOS TYPE SYCUCOL
P_FLDNAM TYPE FIELDNAME
P_TABNAM TYPE TABNAME
P_JUSTIF TYPE CHAR1
P_SELTEXT TYPE DD03P-SCRTEXT_L
P_OUT TYPE CHAR1
P_TECH TYPE CHAR1
P_QFIELD TYPE SLIS_FIELDNAME
P_QTAB TYPE SLIS_TABNAME.
Local declaration for field catalog
DATA: WA_LFL_FCAT TYPE SLIS_FIELDCAT_ALV.
WA_LFL_FCAT-ROW_POS = P_ROWPOS. "Row
WA_LFL_FCAT-COL_POS = P_COLPOS. "Column
WA_LFL_FCAT-FIELDNAME = P_FLDNAM. "Field Name
WA_LFL_FCAT-TABNAME = P_TABNAM. "Internal Table Name
WA_LFL_FCAT-JUST = P_JUSTIF. "Screen Justified
WA_LFL_FCAT-SELTEXT_L = P_SELTEXT. "Field Text
WA_LFL_FCAT-NO_OUT = P_OUT. "No output
WA_LFL_FCAT-TECH = P_TECH. "Technical field
WA_LFL_FCAT-QFIELDNAME = P_QFIELD. "Quantity unit
WA_LFL_FCAT-QTABNAME = P_QTAB . "Quantity table
IF P_FLDNAM = 'NTGEW'.
WA_LFL_FCAT-DO_SUM = 'X'.
ENDIF.
APPEND WA_LFL_FCAT TO I_FIELDCAT.
CLEAR WA_LFL_FCAT.
ENDFORM. " sub_fill_alv_field_catalog
*& Form sub_populate_layout
Populate ALV layout
No Parameter
FORM SUB_POPULATE_LAYOUT . CLEAR WA_LAYOUT.
WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X'." Optimization of Col width
ENDFORM. " sub_populate_layout
*& Form sub_populate_sort
Populate ALV sort table
No Parameter
FORM SUB_POPULATE_SORT .
Sort on material
WA_SORT-SPOS = '01' .
WA_SORT-FIELDNAME = 'MATNR'.
WA_SORT-TABNAME = 'I_EKPO'.
WA_SORT-UP = 'X'.
WA_SORT-SUBTOT = 'X'.
APPEND WA_SORT TO I_SORT .
CLEAR WA_SORT.
Sort on plant
WA_SORT-SPOS = '02'.
WA_SORT-FIELDNAME = 'WERKS'.
WA_SORT-TABNAME = 'I_EKPO'.
WA_SORT-UP = 'X'.
WA_SORT-SUBTOT = 'X'.
APPEND WA_SORT TO I_SORT .
CLEAR WA_SORT.
ENDFORM. " sub_populate_sort
*& Form sub_get_event
Get ALV grid event and pass the form name to subtotal_text
event
No Parameter
FORM SUB_GET_EVENT .
CONSTANTS : C_FORMNAME_SUBTOTAL_TEXT TYPE SLIS_FORMNAME VALUE
'SUBTOTAL_TEXT'.
DATA: L_S_EVENT TYPE SLIS_ALV_EVENT.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 4
IMPORTING
ET_EVENTS = I_EVENT
EXCEPTIONS
LIST_TYPE_WRONG = 0
OTHERS = 0.
Subtotal
READ TABLE I_EVENT INTO L_S_EVENT
WITH KEY NAME = SLIS_EV_SUBTOTAL_TEXT.
IF SY-SUBRC = 0.
MOVE C_FORMNAME_SUBTOTAL_TEXT TO L_S_EVENT-FORM.
MODIFY I_EVENT FROM L_S_EVENT INDEX SY-TABIX.
ENDIF.
ENDFORM. " sub_get_event
*& Form sub_alv_report_display
For ALV Report Display
No Parameter
FORM SUB_ALV_REPORT_DISPLAY .
DATA: L_REPID TYPE SYREPID .
L_REPID = SY-REPID .
This function module for displaying the ALV report
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = L_REPID
I_CALLBACK_TOP_OF_PAGE = 'SUB_ALV_TOP_OF_PAGE'
IS_LAYOUT = WA_LAYOUT
IT_FIELDCAT = I_FIELDCAT
IT_SORT = I_SORT
IT_EVENTS = I_EVENT
I_DEFAULT = 'X'
I_SAVE = 'A'
TABLES
T_OUTTAB = I_EKPO
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE i000 WITH 'Error in ALV report display'(055).
ENDIF.ENDFORM. " sub_alv_report_display
FORM sub_alv_top_of_page
Call ALV top of page
No parameter
FORM SUB_ALV_TOP_OF_PAGE. "#EC CALLED
To write header for the ALV
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = I_ALV_TOP_OF_PAGE.
ENDFORM. "alv_top_of_page
*& Form subtotal_text
Build subtotal text
P_total Total
p_subtot_text Subtotal text info
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 total'(009).
ENDIF.
Plant level sub total
IF P_SUBTOT_TEXT-CRITERIA = 'WERKS'.
P_SUBTOT_TEXT-DISPLAY_TEXT_FOR_SUBTOTAL = 'Plant level total'(010).
ENDIF.
Maybe you are looking for
-
Can't get "Open in new window" to work
Having my Macbook Pro on service I had to setup my good old Powerbook G4 again. The only stupid problem I have is that how ever I make the settings in Safari 5.0.1 it wont open any links in a new window. They always open in a new tab. Even is the lin
-
ITunes settings lost on every Windows 8 reboot
I have a Windows 8 laptop and I am using iTunes 64bit version. This problem occured in the previous version and the newly released 11.0.5.5. Every day I properly close all open programs and shutdown. When I reboot the next day, I open iTunes to annoy
-
How to write output to file in flash
hi all experts. I want to monitor a specific link. Lets say when it goes down, i want to write the following to a file in flash called link_mon.txt link down <show clock output> When it gets back up link up <show clock output> I know how to write the
-
Hi PS gurus, I have one PO for Material a created against WBS. As PO was created manually how to do delivery/PGI for Material a. We can see the Stock in MMBE for that WBS & Material Note: - In CNS0 material a will not appear as PO was created manual
-
I am trying the trial of CC and it won't take my Nikon raw image.How do I convert it?