Skip to Content
avatar image
Former Member

Subtotal in ALV

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.

Add comment
10|10000 characters needed characters exceeded

  • Get RSS Feed

5 Answers

  • Best Answer
    avatar image
    Former Member
    Oct 21, 2008 at 06:23 AM

    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

    Add comment
    10|10000 characters needed characters exceeded

  • Oct 21, 2008 at 05:48 AM

    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

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Oct 21, 2008 at 05:52 AM

    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

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Oct 21, 2008 at 05:55 AM

    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

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Oct 21, 2008 at 06:02 AM

    hI,

    Please view this link.

    how-to-get-sub-totals-in-alv-list

    Thanks.

    Nitesh

    Add comment
    10|10000 characters needed characters exceeded