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: 

Subtotal in ALV

Former Member
0 Kudos

Hi,

I have an internal table as follows

Field1 Field2 Field3 Field4

Now I am summing up Field2 using DO_SUM.

Suppose field4 = year, and now I want to sum as a subtotal all quantities where year = 2006 / 2007 / 2008 and so on.

How can I do this.

Thanks.

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi,

Check the following code:

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

ENDFORM. "subtotal_text

Regards,

Bhaskar

6 REPLIES 6

former_member598013
Active Contributor
0 Kudos

HI ,

First you need to sort the final table on the basis of hte key.

and then you need to set the Field catalog property DO_SUM = 'x'.

Thanks,

Chidanand

0 Kudos

yes perfect answer....

Former Member
0 Kudos

Hi,

For Field4, give sort_up = 'X'.

then you will get year wise totals(sub).

Ex:

wa_fldcat-col_pos = c_4. "Position 4

wa_fldcat-fieldname = text-029.

wa_fldcat-seltext_l = text-010. "Payment Terms

wa_fldcat-tabname = text-058. "I_ANALYHEAD'.

wa_fldcat-outputlen = 39.

append wa_fldcat to i_fldcat.

clear wa_fldcat.

wa_sort-spos = c_4.

wa_sort-fieldname = text-029. "ZTERM.

wa_sort-tabname = text-058. "I_ANALYHEAD

wa_sort-up = c_x.

wa_sort-subtot = c_x.

append wa_sort to i_sort.

clear wa_sort.

Regards

Srinivas

Edited by: SrinivasB on Oct 21, 2008 7:52 AM

Former Member
0 Kudos

HI,

For summing in ALV we have DO_SUm as sytax.Lot of post are existing in SDN check them you may get lots of post and better answers.

Anyways check the below code

fieldcatalog-fieldname = 'menge'.

fieldcatalog-REF_TABNAME = '<TABLE NAME>'.

fieldcatalog-seltext_l = 'QUANTITY'.

fieldcatalog-do_sum = 'X'.

append fieldcatalog to fieldcatalog.

clear fieldcatalog.

Cheers!!

Balu

Former Member
0 Kudos

hI,

Please view this link.

Thanks.

Nitesh

Former Member
0 Kudos

Hi,

Check the following code:

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

ENDFORM. "subtotal_text

Regards,

Bhaskar