Skip to Content
author's profile photo Former Member
Former Member

Regarding subtotal

hi all,

I am using reuse_alv_list_display and

I need to get subtotal for three columns.

I am using wa_sort-subtot but i need other than that one.

Regards

Reddy

Add a comment
10|10000 characters needed characters exceeded

Assigned Tags

Related questions

2 Answers

  • author's profile photo Former Member
    Former Member
    Posted on Jun 19, 2008 at 03:45 AM

    Hi,

    This code will help for the same.

    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 widthENDFORM.                    " 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.

    Hope this helps you,

    Plz reward if useful.

    Thanks,

    Dhanashri.

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Jun 19, 2008 at 03:45 AM

    Hi Ramireddy,

    Please check this link

    http://help.sap.com/saphelp_470/helpdata/en/66/bc7b1343c211d182b30000e829fbfe/content.htm

    Printing Subtotals at the end of an ALV List

    http://www.saptechnical.com/Tutorials/ALV/Subtotals/Define.htm

    *Step 1* 
    
    Define an internal table of type SLIS_T_EVENT, and a work area of type SLIS_ALV_EVENT.   
    
    DATA:	T_EVENT TYPE SLIS_T_EVENT,
    	W_EVENT TYPE SLIS_ALV_EVENT.
    
    *Step 2* 
    Append  AFTER-LINE-OUTPUT event to the internal table T_EVENT.  
    
    CLEAR W_EVENT.
    W_EVENT-FORM = SLIS_EV_AFTER_LINE_OUTPUT. 
    W_EVENT-NAME = SLIS_EV_AFTER_LINE_OUTPUT."AFTER_LINE_OUTPUT event
    APPEND W_EVENT TO T_EVENT. 
    
    *Step 3* 
    he subtotals are calculated and displayed in the list from the subroutine AFTER_LINE_OUTPUT,
     which corresponds to the event AFTER_LINE_OUTPUT.
    This subroutine uses the parameter P_RS_LINEINFO, which contains settings for each line displayed in the list. 
    The actual subtotalu2019s output is created using the WRITE and FORMAT statements. 
    
    FORM AFTER_LINE_OUTPUT
      USING P_RS_LINEINFO TYPE SLIS_LINEINFO.
    
    * Declaration of local variables
      DATA: L_SUCCESS TYPE WRBTR,     "Total For Successful Entries
            L_ERROR   TYPE WRBTR,     "Total For Unsuccessful Entries
            L_COUNT   TYPE I.         "No. Of lines in table T_OUTPUT* Getting No. of Lines in the table T_OUTPUT
      DESCRIBE TABLE T_OUTPUT LINES L_COUNT.
    
    * Displaying the totals after the last record of the internal
    * table T_OUTPUT
      IF P_RS_LINEINFO-TABINDEX = L_COUNT.
    *   Loop At the internal table T_OUTPUT
        LOOP AT T_OUTPUT INTO W_OUTPUT.    
      IF W_OUTPUT-SFLAG = C_CHECKED.
                                 "Flag: Indicates error record
    
    *       Calculate total for unsuccessful entries
            L_ERROR = L_ERROR + W_OUTPUT-WRBTR.   
       ELSE.
    *       Calculate total for successful entries
            L_SUCCESS = L_SUCCESS + W_OUTPUT-WRBTR.     
     ENDIF.
    
    *     Clear workarea W_OUTPUT
          CLEAR W_OUTPUT.    ENDLOOP.
    *   Set format for the total line display
        ULINE AT (P_RS_LINEINFO-LINSZ).        "Dynamic Line Size   
    
     FORMAT INTENSIFIED COLOR COL_TOTAL ON. "Setting the color
                                                "For the total row
                                               "As Yellow   
    
     WRITE : /    SY-VLINE,                 "Vertical Line
                     TEXT-017,                 "Caption For Total
    
    "Sum of Successful            
    "Entries		
                  33 L_SUCCESS,                "Total Of Successful
                                               "Entries
                     C_USD.                    "Currency Type USD   
    
     POSITION     P_RS_LINEINFO-LINSZ.      "Dynamic Line Size    
    
    WRITE :      SY-VLINE.                 "Vertical Line  
    
      ULINE AT     (P_RS_LINEINFO-LINSZ).    "Dynamic Line Size   
    
     WRITE : /    SY-VLINE ,                "Vertical Line
                     TEXT-018,                 "Caption For Total
    
    "Sum of Successful            
    "Entries
                  33 L_ERROR,                  "Total Of Unsuccessful
                                               "Entries
                     C_USD.                    "Currency Type USD  
    
      POSITION     P_RS_LINEINFO-LINSZ.      "Dynamic Line Size  
    
      WRITE :      SY-VLINE.                 "Vertical Line    
    
        FORMAT COLOR OFF.                      "Color Setting Off 
      ENDIF.
    ENDFORM.                                   "AFTER_LINE_OUTPUT
    
    *Step 4* 
    
    The table T_EVENT is passed to the function 'REUSE_ALV_LIST_DISPLAY' while displaying the ALV Report. 
    CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
       EXPORTING
          I_CALLBACK_PROGRAM = L_REPID    "Program Name
          IS_LAYOUT          = W_LAYOUT   "Layout of the Report
          IT_FIELDCAT        = T_FIELDCAT "Field Catalog for Report
          IT_EVENTS          = T_EVENT    "For setting the events
       TABLES
          T_OUTTAB           = T_OUTPUT   "Report data Internal Table 
       EXCEPTIONS
          PROGRAM_ERROR      = 1
          OTHERS             = 2.

    Best regards,

    raam

    Add a comment
    10|10000 characters needed characters exceeded

Before answering

You should only submit an answer when you are proposing a solution to the poster's problem. If you want the poster to clarify the question or provide more information, please leave a comment instead, requesting additional details. When answering, please include specifics, such as step-by-step instructions, context for the solution, and links to useful resources. Also, please make sure that you answer complies with our Rules of Engagement.
You must be Logged in to submit an answer.

Up to 10 attachments (including images) can be used with a maximum of 1.0 MB each and 10.5 MB total.