Subtotal in alv display

Hi all ,
I am using resuse alv list display , i am getting the grand total using the
do_sums = 'X' , but not able to get the subtotal of quantities and value for some customer . pls help and suggest how to get the subtotals.
thanks in advance,
vivek

Hi,
Refer this example
http://www.sap-basis-abap.com/abap/alv-grid-list-with-sub-totals.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
Reward if useful.
Regards,
Umasankar.

Similar Messages

  • How to display subtotal in ALV, where the field is not a numeric.

    Hi
    We are having a requirement to display the sub total for a field using ALV grid display, where the field is not numeric.
    The field is characte, Status field(consists of values Submit, Approve ,Reject), where the subtotal should be value of count of group by status .
    say status with submit are 10 records, so after all records with submit status are, displyed, we need to display its subtotal as 10.
    Thanks & Advance

    Hi Satya,
    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 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.                    "subtotal_text
    Regards,
    Pravin

  • Subtotal in alv grid output.

    hi experts,
                   i want to display subtotal in the alv output using control break statement, without using alv functionality and layout.
    my code is given below, how can i add subtotal field and display them in alv ,
    *& Report  Y_VARUNSHARMA
    REPORT  Y_VARUNSHARMA.
    TABLES: VBAK.
    TYPE-POOLS: SLIS.
    TYPES: BEGIN OF T_ITAB,
           VBELN LIKE VBAK-VBELN,
           ERDAT LIKE VBAK-ERDAT,
           ERNAM LIKE VBAK-ERNAM,
           ANGDT LIKE VBAK-ANGDT,
           BNDDT LIKE VBAK-BNDDT,
           AUART LIKE VBAK-AUART,
           POSNR LIKE VBAP-POSNR,
           MATNR LIKE VBAP-MATNR,
           CHARG LIKE VBAP-CHARG,
           MAKTX LIKE MAKT-MAKTX,
           NETPR LIKE VBAP-NETPR,
           VGBEL LIKE VBAK-VGBEL,
           MEINS LIKE VBAP-MEINS,
           SMENG LIKE VBAP-SMENG,
            END OF T_ITAB.
    DATA: G_REPID LIKE SY-REPID.
    DATA: WA_LAYOUT TYPE SLIS_LAYOUT_ALV.
    DATA: I_ITAB TYPE T_ITAB OCCURS 0,
          WA_ITAB TYPE T_ITAB.
    DATA: I_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV ,
          WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
    DATA: I_LISTHEADER TYPE SLIS_T_LISTHEADER,
          WA_LISTHEADER TYPE SLIS_LISTHEADER.
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
    SELECT-OPTIONS: DOCNO FOR VBAK-VBELN.
    PARAMETER DOCTYPE LIKE VBAK-AUART.
    SELECT-OPTIONS: DATE FOR SY-DATUM.
    SELECTION-SCREEN SKIP 2.
    PARAMETER P_CHECK AS CHECKBOX.
    SELECTION-SCREEN END OF BLOCK B1.
    INITIALIZATION.
    G_REPID = SY-REPID.
    PERFORM BUILD_CATALOGE.
    PERFORM LIST_HEADER.
    PERFORM SET_LAYOUT.
    AT SELECTION-SCREEN.
    IF DOCNO-LOW = '' .
    MESSAGE E000(ZVARUN) .
    elseif DOCNO-HIGH = '' .
    MESSAGE E001(ZVARUN) .
    ENDIF.
    START-OF-SELECTION.
    PERFORM GET_DATA.
    *PERFORM DISPLAY.
    END-OF-SELECTION.
    IF P_CHECK = 'X'.
    PERFORM DOWNLOAD_EXCEL.
    ELSE.
    PERFORM DISPLAY.
    ENDIF.
    FORM DOWNLOAD_EXCEL.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
      BIN_FILESIZE                    =
        FILENAME                        = 'C:\FILE.XLS'
      FILETYPE                        = 'XLS'
      APPEND                          = ' '
      WRITE_FIELD_SEPARATOR           = ' '
      HEADER                          = '00'
      TRUNC_TRAILING_BLANKS           = ' '
      WRITE_LF                        = 'X'
      COL_SELECT                      = ' '
      COL_SELECT_MASK                 = ' '
      DAT_MODE                        = ' '
      CONFIRM_OVERWRITE               = ' '
      NO_AUTH_CHECK                   = ' '
      CODEPAGE                        = ' '
      IGNORE_CERR                     = ABAP_TRUE
      REPLACEMENT                     = '#'
      WRITE_BOM                       = ' '
      TRUNC_TRAILING_BLANKS_EOL       = 'X'
      WK1_N_FORMAT                    = ' '
      WK1_N_SIZE                      = ' '
      WK1_T_FORMAT                    = ' '
      WK1_T_SIZE                      = ' '
    IMPORTING
      FILELENGTH                      =
      TABLES
        DATA_TAB                        = I_ITAB
      FIELDNAMES                      =
    EXCEPTIONS
      FILE_WRITE_ERROR                = 1
      NO_BATCH                        = 2
      GUI_REFUSE_FILETRANSFER         = 3
      INVALID_TYPE                    = 4
      NO_AUTHORITY                    = 5
      UNKNOWN_ERROR                   = 6
      HEADER_NOT_ALLOWED              = 7
      SEPARATOR_NOT_ALLOWED           = 8
      FILESIZE_NOT_ALLOWED            = 9
      HEADER_TOO_LONG                 = 10
      DP_ERROR_CREATE                 = 11
      DP_ERROR_SEND                   = 12
      DP_ERROR_WRITE                  = 13
      UNKNOWN_DP_ERROR                = 14
      ACCESS_DENIED                   = 15
      DP_OUT_OF_MEMORY                = 16
      DISK_FULL                       = 17
      DP_TIMEOUT                      = 18
      FILE_NOT_FOUND                  = 19
      DATAPROVIDER_EXCEPTION          = 20
      CONTROL_FLUSH_ERROR             = 21
      OTHERS                          = 22
    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.
    FORM BUILD_CATALOGE.
    WA_FIELDCAT-FIELDNAME = 'VBELN'.
    WA_FIELDCAT-SELTEXT_M = 'SALES DOC'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'ERDAT'.
    WA_FIELDCAT-SELTEXT_M = 'DATE'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'ERNAM'.
    WA_FIELDCAT-SELTEXT_M = 'NAME'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'ANGDT'.
    WA_FIELDCAT-SELTEXT_M = 'VALID FR'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'BNDDT'.
    WA_FIELDCAT-SELTEXT_M = 'VALID TO'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'AUART'.
    WA_FIELDCAT-SELTEXT_M = 'DOC TYPE'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'POSNR'.
    WA_FIELDCAT-SELTEXT_M = 'DOC ITEM'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'MATNR'.
    WA_FIELDCAT-SELTEXT_M = 'MATERIAL NO'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'CHARG'.
    WA_FIELDCAT-SELTEXT_M = 'BATCH NO'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'MAKTX'.
    WA_FIELDCAT-SELTEXT_M = 'MATERIAL DESC'.
    WA_FIELDCAT-EDIT = 'X'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'NETPR'.
    WA_FIELDCAT-SELTEXT_M = 'UNIT PRICE'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'VGBEL'.
    WA_FIELDCAT-SELTEXT_M = 'RFR DOC NO'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'MEINS'.
    WA_FIELDCAT-SELTEXT_M = 'UNIT'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'SMENG'.
    WA_FIELDCAT-SELTEXT_M = 'QUANTITY'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    ENDFORM.
    FORM LIST_HEADER.
    WA_LISTHEADER-TYP = 'H'.
    WA_LISTHEADER-INFO = 'RJT COMPUSOLUTIONS'.
    APPEND WA_LISTHEADER TO I_LISTHEADER.
    CLEAR WA_LISTHEADER.
    ENDFORM.
    FORM SET_LAYOUT.
    WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
    ENDFORM.
    FORM DISPLAY.
    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           = '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                   =
       IS_LAYOUT                         = WA_LAYOUT
       IT_FIELDCAT                       = I_FIELDCAT[]
      IT_EXCLUDING                      =
      IT_SPECIAL_GROUPS                 =
      IT_SORT                           =
      IT_FILTER                         =
      IS_SEL_HIDE                       =
      I_DEFAULT                         = 'X'
      I_SAVE                            = ' '
      IS_VARIANT                        =
      IT_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
      I_HTML_HEIGHT_TOP                 = 0
      I_HTML_HEIGHT_END                 = 0
      IT_ALV_GRAPHICS                   =
      IT_HYPERLINK                      =
      IT_ADD_FIELDCAT                   =
      IT_EXCEPT_QINFO                   =
      IR_SALV_FULLSCREEN_ADAPTER        =
    IMPORTING
      E_EXIT_CAUSED_BY_CALLER           =
      ES_EXIT_CAUSED_BY_USER            =
      TABLES
        T_OUTTAB                          = I_ITAB
    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.
    FORM TOP_OF_PAGE.
    CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
      EXPORTING
        IT_LIST_COMMENTARY       = I_LISTHEADER
       I_LOGO                   = 'RJT'
      I_END_OF_LIST_GRID       =
      I_ALV_FORM               =
    ENDFORM.
    FORM GET_DATA.
    SELECT AVBELN AERDAT AERNAM AANGDT ABNDDT AAUART AVGBEL BPOSNR BMATNR BCHARG BMEINS BSMENG BNETPR CMAKTX  INTO CORRESPONDING FIELDS OF TABLE I_ITAB FROM  ( ( VBAK AS A INNER JOIN VBAP AS B
    ON AVBELN = BVBELN ) INNER JOIN MAKT AS C  ON BMATNR = CMATNR )  WHERE AVBELN IN DOCNO AND AAUART = DOCTYPE .
    ENDFORM.
    FORM USER_COMMAND USING L_UCOMM LIKE SY-UCOMM L_SELFIELD TYPE SLIS_SELFIELD.
    CASE L_UCOMM.
    WHEN '&IC1'.
    IF L_SELFIELD-FIELDNAME  = 'VBELN'.
    CALL TRANSACTION 'VA02'.
    ELSEIF
    L_SELFIELD-FIELDNAME = 'MATNR'.
    CALL TRANSACTION 'MM02'.
    ENDIF.
    ENDCASE.
    ENDFORM.

    Hi,
    That I guess is difficult. Only way is to append a new line with your subtotal to the output table with the subtotal filled in appro. field.
    Santhosh

  • Subtotal in alv

    hi experts,
                   i want to display subtotal in the alv output using control break statement, without using alv functionality and layout.
    my code is given below, how can i add subtotal field and display them in alv ,
    *& Report  Y_VARUNSHARMA
    REPORT  Y_VARUNSHARMA.
    TABLES: VBAK.
    TYPE-POOLS: SLIS.
    TYPES: BEGIN OF T_ITAB,
           VBELN LIKE VBAK-VBELN,
           ERDAT LIKE VBAK-ERDAT,
           ERNAM LIKE VBAK-ERNAM,
           ANGDT LIKE VBAK-ANGDT,
           BNDDT LIKE VBAK-BNDDT,
           AUART LIKE VBAK-AUART,
           POSNR LIKE VBAP-POSNR,
           MATNR LIKE VBAP-MATNR,
           CHARG LIKE VBAP-CHARG,
           MAKTX LIKE MAKT-MAKTX,
           NETPR LIKE VBAP-NETPR,
           VGBEL LIKE VBAK-VGBEL,
           MEINS LIKE VBAP-MEINS,
           SMENG LIKE VBAP-SMENG,
            END OF T_ITAB.
    DATA: G_REPID LIKE SY-REPID.
    DATA: WA_LAYOUT TYPE SLIS_LAYOUT_ALV.
    DATA: I_ITAB TYPE T_ITAB OCCURS 0,
          WA_ITAB TYPE T_ITAB.
    DATA: I_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV ,
          WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
    DATA: I_LISTHEADER TYPE SLIS_T_LISTHEADER,
          WA_LISTHEADER TYPE SLIS_LISTHEADER.
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
    SELECT-OPTIONS: DOCNO FOR VBAK-VBELN.
    PARAMETER DOCTYPE LIKE VBAK-AUART.
    SELECT-OPTIONS: DATE FOR SY-DATUM.
    SELECTION-SCREEN SKIP 2.
    PARAMETER P_CHECK AS CHECKBOX.
    SELECTION-SCREEN END OF BLOCK B1.
    INITIALIZATION.
    G_REPID = SY-REPID.
    PERFORM BUILD_CATALOGE.
    PERFORM LIST_HEADER.
    PERFORM SET_LAYOUT.
    AT SELECTION-SCREEN.
    IF DOCNO-LOW = '' .
    MESSAGE E000(ZVARUN) .
    elseif DOCNO-HIGH = '' .
    MESSAGE E001(ZVARUN) .
    ENDIF.
    START-OF-SELECTION.
    PERFORM GET_DATA.
    *PERFORM DISPLAY.
    END-OF-SELECTION.
    IF P_CHECK = 'X'.
    PERFORM DOWNLOAD_EXCEL.
    ELSE.
    PERFORM DISPLAY.
    ENDIF.
    FORM DOWNLOAD_EXCEL.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
      BIN_FILESIZE                    =
        FILENAME                        = 'C:\FILE.XLS'
      FILETYPE                        = 'XLS'
      APPEND                          = ' '
      WRITE_FIELD_SEPARATOR           = ' '
      HEADER                          = '00'
      TRUNC_TRAILING_BLANKS           = ' '
      WRITE_LF                        = 'X'
      COL_SELECT                      = ' '
      COL_SELECT_MASK                 = ' '
      DAT_MODE                        = ' '
      CONFIRM_OVERWRITE               = ' '
      NO_AUTH_CHECK                   = ' '
      CODEPAGE                        = ' '
      IGNORE_CERR                     = ABAP_TRUE
      REPLACEMENT                     = '#'
      WRITE_BOM                       = ' '
      TRUNC_TRAILING_BLANKS_EOL       = 'X'
      WK1_N_FORMAT                    = ' '
      WK1_N_SIZE                      = ' '
      WK1_T_FORMAT                    = ' '
      WK1_T_SIZE                      = ' '
    IMPORTING
      FILELENGTH                      =
      TABLES
        DATA_TAB                        = I_ITAB
      FIELDNAMES                      =
    EXCEPTIONS
      FILE_WRITE_ERROR                = 1
      NO_BATCH                        = 2
      GUI_REFUSE_FILETRANSFER         = 3
      INVALID_TYPE                    = 4
      NO_AUTHORITY                    = 5
      UNKNOWN_ERROR                   = 6
      HEADER_NOT_ALLOWED              = 7
      SEPARATOR_NOT_ALLOWED           = 8
      FILESIZE_NOT_ALLOWED            = 9
      HEADER_TOO_LONG                 = 10
      DP_ERROR_CREATE                 = 11
      DP_ERROR_SEND                   = 12
      DP_ERROR_WRITE                  = 13
      UNKNOWN_DP_ERROR                = 14
      ACCESS_DENIED                   = 15
      DP_OUT_OF_MEMORY                = 16
      DISK_FULL                       = 17
      DP_TIMEOUT                      = 18
      FILE_NOT_FOUND                  = 19
      DATAPROVIDER_EXCEPTION          = 20
      CONTROL_FLUSH_ERROR             = 21
      OTHERS                          = 22
    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.
    FORM BUILD_CATALOGE.
    WA_FIELDCAT-FIELDNAME = 'VBELN'.
    WA_FIELDCAT-SELTEXT_M = 'SALES DOC'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'ERDAT'.
    WA_FIELDCAT-SELTEXT_M = 'DATE'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'ERNAM'.
    WA_FIELDCAT-SELTEXT_M = 'NAME'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'ANGDT'.
    WA_FIELDCAT-SELTEXT_M = 'VALID FR'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'BNDDT'.
    WA_FIELDCAT-SELTEXT_M = 'VALID TO'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'AUART'.
    WA_FIELDCAT-SELTEXT_M = 'DOC TYPE'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'POSNR'.
    WA_FIELDCAT-SELTEXT_M = 'DOC ITEM'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'MATNR'.
    WA_FIELDCAT-SELTEXT_M = 'MATERIAL NO'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'CHARG'.
    WA_FIELDCAT-SELTEXT_M = 'BATCH NO'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'MAKTX'.
    WA_FIELDCAT-SELTEXT_M = 'MATERIAL DESC'.
    WA_FIELDCAT-EDIT = 'X'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'NETPR'.
    WA_FIELDCAT-SELTEXT_M = 'UNIT PRICE'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'VGBEL'.
    WA_FIELDCAT-SELTEXT_M = 'RFR DOC NO'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'MEINS'.
    WA_FIELDCAT-SELTEXT_M = 'UNIT'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME = 'SMENG'.
    WA_FIELDCAT-SELTEXT_M = 'QUANTITY'.
    *WA_FIELDCAT-OUTPUTLEN = 10.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
    CLEAR WA_FIELDCAT.
    ENDFORM.
    FORM LIST_HEADER.
    WA_LISTHEADER-TYP = 'H'.
    WA_LISTHEADER-INFO = 'RJT COMPUSOLUTIONS'.
    APPEND WA_LISTHEADER TO I_LISTHEADER.
    CLEAR WA_LISTHEADER.
    ENDFORM.
    FORM SET_LAYOUT.
    WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
    ENDFORM.
    FORM DISPLAY.
    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           = '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                   =
       IS_LAYOUT                         = WA_LAYOUT
       IT_FIELDCAT                       = I_FIELDCAT[]
      IT_EXCLUDING                      =
      IT_SPECIAL_GROUPS                 =
      IT_SORT                           =
      IT_FILTER                         =
      IS_SEL_HIDE                       =
      I_DEFAULT                         = 'X'
      I_SAVE                            = ' '
      IS_VARIANT                        =
      IT_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
      I_HTML_HEIGHT_TOP                 = 0
      I_HTML_HEIGHT_END                 = 0
      IT_ALV_GRAPHICS                   =
      IT_HYPERLINK                      =
      IT_ADD_FIELDCAT                   =
      IT_EXCEPT_QINFO                   =
      IR_SALV_FULLSCREEN_ADAPTER        =
    IMPORTING
      E_EXIT_CAUSED_BY_CALLER           =
      ES_EXIT_CAUSED_BY_USER            =
      TABLES
        T_OUTTAB                          = I_ITAB
    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.
    FORM TOP_OF_PAGE.
    CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
      EXPORTING
        IT_LIST_COMMENTARY       = I_LISTHEADER
       I_LOGO                   = 'RJT'
      I_END_OF_LIST_GRID       =
      I_ALV_FORM               =
    ENDFORM.
    FORM GET_DATA.
    SELECT AVBELN AERDAT AERNAM AANGDT ABNDDT AAUART AVGBEL BPOSNR BMATNR BCHARG BMEINS BSMENG BNETPR CMAKTX  INTO CORRESPONDING FIELDS OF TABLE I_ITAB FROM  ( ( VBAK AS A INNER JOIN VBAP AS B
    ON AVBELN = BVBELN ) INNER JOIN MAKT AS C  ON BMATNR = CMATNR )  WHERE AVBELN IN DOCNO AND AAUART = DOCTYPE .
    ENDFORM.
    FORM USER_COMMAND USING L_UCOMM LIKE SY-UCOMM L_SELFIELD TYPE SLIS_SELFIELD.
    CASE L_UCOMM.
    WHEN '&IC1'.
    IF L_SELFIELD-FIELDNAME  = 'VBELN'.
    CALL TRANSACTION 'VA02'.
    ELSEIF
    L_SELFIELD-FIELDNAME = 'MATNR'.
    CALL TRANSACTION 'MM02'.
    ENDIF.
    ENDCASE.
    ENDFORM.

    if u dont want std alv functionality,u have to explicitly sum it and insert it to ur itab.
    for dat u have to change ur itab declaration like dis..
    assuming u want to display the subtotals of NETPR based on vbeln...
    TYPES: BEGIN OF T_ITAB,
    VBELN LIKE VBAK-VBELN,
    NETPR LIKE VBAP-NETPR,
    ERDAT LIKE VBAK-ERDAT,
    ERNAM LIKE VBAK-ERNAM,
    ANGDT LIKE VBAK-ANGDT,
    BNDDT LIKE VBAK-BNDDT,
    AUART LIKE VBAK-AUART,
    POSNR LIKE VBAP-POSNR,
    MATNR LIKE VBAP-MATNR,
    CHARG LIKE VBAP-CHARG,
    MAKTX LIKE MAKT-MAKTX,
    VGBEL LIKE VBAK-VGBEL,
    MEINS LIKE VBAP-MEINS,
    SMENG LIKE VBAP-SMENG,
    END OF T_ITAB.
    den in form get_data.
    aftr select statement. itab2 is the final table
    sort itab by vbeln.
    loop at it itab into wa.
    move wa TO wa1.
    v_netpr = v_netpr +  wa-netpr.
    append wa1 to itab2.
    at end of vbeln.
      clear wa1.
      wa1-netpr = v_netpr.
      append wa1 to itab2.
    endat.
    endloop.

  • ALV Display - sub totals

    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,
    chaitanya

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

  • Alv display - colors

    hi gurus,
    I have a ALV Display report with Sub totals at two levels.
    plant wise and category wise
    plant1
          category1
      subtot
          category2
       subtot
    subtot
    plant2
          category1
    subtot
          category2
      subtot
    subtot
    Now the subtotals are being displayed for both the plant wise and category wise, but they are displayed with the same row color.
    so, now i want these two subtotal rows with different ROW COLORS.
    so where should i change for acheving the above.
    thanks in advance.
    chaitanya

    Hi,
    Check this coding it will help you alot and also check the TCode LIBS & BIBS u can find more examples here
    code&----
    *& Report ZALVCOLOR *
    REPORT ZALVCOLOR .
    DATA : mara TYPE mara. " General Material Data
    TYPE-POOLS: slis. " ALV Global types
    FIELD-SYMBOLS :
    <data> TYPE table. " Data to display
    SELECT-OPTIONS :
    s_matnr FOR mara-matnr. " Material number
    SELECTION-SCREEN :
    SKIP, BEGIN OF LINE,COMMENT 5(27) v_1 FOR FIELD p_max. "#EC NEEDED
    PARAMETERS p_max(2) TYPE n DEFAULT '50' OBLIGATORY.
    SELECTION-SCREEN END OF LINE.
    INITIALIZATION.
    v_1 = 'Maximum of lines to display'.
    START-OF-SELECTION.
    PERFORM f_read_data.
    PERFORM f_display_data.
    Form f_read_data
    FORM f_read_data.
    FIELD-SYMBOLS :
    <field> TYPE ANY,
    <field2> TYPE ANY,
    <header> TYPE ANY,
    <header2> TYPE ANY,
    <lt_data> TYPE table. " Data read from DB
    DATA:
    lp_struct TYPE REF TO data,
    lp_struct2 TYPE REF TO data,
    lp_table TYPE REF TO data, " Pointer to dynamic table
    lp_table2 TYPE REF TO data, " Pointer to dynamic table
    ls_lvc_cat TYPE lvc_s_fcat,
    lt_lvc_cat TYPE lvc_t_fcat. " Field catalog
    First column
    CLEAR ls_lvc_cat.
    ls_lvc_cat-fieldname = 'MATNR'.
    ls_lvc_cat-ref_table = 'MARA'.
    APPEND ls_lvc_cat TO lt_lvc_cat.
    2nd column
    CLEAR ls_lvc_cat.
    ls_lvc_cat-fieldname = 'MAKTX'.
    ls_lvc_cat-ref_table = 'MAKT'.
    APPEND ls_lvc_cat TO lt_lvc_cat.
    3rd column
    CLEAR ls_lvc_cat.
    ls_lvc_cat-fieldname = 'MATKL'.
    ls_lvc_cat-ref_table = 'MARA'.
    APPEND ls_lvc_cat TO lt_lvc_cat.
    Create 1st internal table
    CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING it_fieldcatalog = lt_lvc_cat
    IMPORTING ep_table = lp_table.
    ASSIGN lp_table->* TO <lt_data>.
    Read data into 1st internal table
    SELECT matnr maktx matkl
    INTO TABLE <lt_data>
    FROM v_matnr
    UP TO p_max ROWS
    WHERE matnr IN s_matnr.
    Create 2nd internal table
    Checkbox
    CLEAR ls_lvc_cat.
    ls_lvc_cat-fieldname = 'CHECKBOX'.
    APPEND ls_lvc_cat TO lt_lvc_cat.
    Table color
    CLEAR ls_lvc_cat.
    ls_lvc_cat-fieldname = 'TABCOLOR'.
    ls_lvc_cat-ref_table = 'CALENDAR_TYPE'.
    ls_lvc_cat-ref_field = 'COLTAB'.
    APPEND ls_lvc_cat TO lt_lvc_cat.
    Create 2nd internal table
    CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING it_fieldcatalog = lt_lvc_cat
    IMPORTING ep_table = lp_table2.
    ASSIGN lp_table2->* TO <data>.
    Create structure = structure of the 1st internal table
    CREATE DATA lp_struct LIKE LINE OF <lt_data>.
    ASSIGN lp_struct->* TO <header>.
    Create structure = structure of the 2nd internal table
    CREATE DATA lp_struct2 LIKE LINE OF <data>.
    ASSIGN lp_struct2->* TO <header2>.
    Move data from 1st internal table --> 2nd internal table
    LOOP AT <lt_data> ASSIGNING <header>.
    DESCRIBE TABLE lt_lvc_cat.
    CLEAR <header2>.
    Fill the internal to display <data>
    DO sy-tfill TIMES.
    READ TABLE lt_lvc_cat INTO ls_lvc_cat INDEX sy-index.
    For each field of lt_lvc_cat.
    ASSIGN COMPONENT ls_lvc_cat-fieldname OF STRUCTURE <header>
    TO <field>.
    IF sy-subrc NE 0. EXIT .ENDIF.
    ASSIGN COMPONENT ls_lvc_cat-fieldname OF STRUCTURE <header2>
    TO <field2>.
    IF sy-subrc NE 0. EXIT .ENDIF.
    <field2> = <field>.
    ENDDO.
    Modify color
    ASSIGN COMPONENT 'TABCOLOR' OF STRUCTURE <header2>
    TO <field2>.
    IF sy-subrc EQ 0.
    PERFORM f_modify_color USING 'MAKTX' <field2>.
    PERFORM f_modify_color USING 'MATKL' <field2>.
    ENDIF.
    APPEND <header2> TO <data> .
    ENDLOOP.
    ENDFORM. " f_read_data
    Form F_DISPLAY_DATA
    FORM f_display_data.
    Macro definition
    DEFINE m_sort.
    add 1 to ls_sort-spos.
    ls_sort-fieldname = &1.
    ls_sort-down = 'X'.
    append ls_sort to lt_sort.
    END-OF-DEFINITION.
    DATA:
    ls_layout TYPE slis_layout_alv,
    lt_sort TYPE slis_t_sortinfo_alv,
    ls_sort TYPE slis_sortinfo_alv,
    ls_fieldcat TYPE slis_fieldcat_alv,
    lt_fieldcat TYPE slis_t_fieldcat_alv. " Field catalog
    Build Fieldcatalog - First column
    CLEAR ls_fieldcat.
    ls_fieldcat-fieldname = 'MATNR'.
    ls_fieldcat-ref_tabname = 'MARA'.
    ls_fieldcat-key = 'X'.
    APPEND ls_fieldcat TO lt_fieldcat.
    Build Fieldcatalog - 2nd column
    CLEAR ls_fieldcat.
    ls_fieldcat-fieldname = 'MAKTX'.
    ls_fieldcat-ref_tabname = 'MAKT'.
    APPEND ls_fieldcat TO lt_fieldcat.
    Build Fieldcatalog - 3rd column
    CLEAR ls_fieldcat.
    ls_fieldcat-fieldname = 'MATKL'.
    ls_fieldcat-ref_tabname = 'MARA'.
    APPEND ls_fieldcat TO lt_fieldcat.
    Layout
    ls_layout-zebra = 'X'.
    ls_layout-colwidth_optimize = 'X'.
    ls_layout-box_fieldname = 'CHECKBOX'.
    ls_layout-coltab_fieldname = 'TABCOLOR'.
    m_sort 'MATNR'. " Sort by creation date
    Display data
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
    is_layout = ls_layout
    it_fieldcat = lt_fieldcat
    it_sort = lt_sort
    TABLES
    t_outtab = <data>.
    ENDFORM. " F_DISPLAY_DATA
    Form F_modify_color
    FORM f_modify_color USING u_fieldname TYPE lvc_fname
    ut_tabcolor TYPE table.
    DATA:
    l_rnd_value TYPE datatype-integer2,
    ls_tabcolor TYPE lvc_s_scol.
    Random value
    CALL FUNCTION 'RANDOM_I2'
    EXPORTING
    rnd_min = 0
    rnd_max = 3
    IMPORTING
    rnd_value = l_rnd_value.
    CLEAR ls_tabcolor.
    ls_tabcolor-fname = u_fieldname.
    CASE l_rnd_value.
    WHEN 0.
    ls_tabcolor-color-col = 1. " Blue.
    ls_tabcolor-color-int = 0.
    ls_tabcolor-color-inv = 0.
    WHEN 1.
    ls_tabcolor-color-col = 3. " Yellow.
    ls_tabcolor-color-int = 0.
    ls_tabcolor-color-inv = 0.
    WHEN 2.
    ls_tabcolor-color-col = 5. " Green.
    ls_tabcolor-color-int = 0.
    ls_tabcolor-color-inv = 0.
    WHEN 3.
    ls_tabcolor-color-col = 6. " Red.
    ls_tabcolor-color-int = 0.
    ls_tabcolor-color-inv = 0.
    ENDCASE.
    INSERT ls_tabcolor INTO TABLE ut_tabcolor.
    ENDFORM. " F_MODIFY_COLOR[/code]
    Regards,
    Raj.

  • Only Subtotal in ALV

    Dear all,
    I am using  fieldcat-do_sum = 'x' and sort-subtot = 'x'. for displaying subtotal. but in this alv output total has been also displayed. My requirement is that i only want to display subtotal only not total value of column. If anybody is having any idea , than please help me for same.........
    Thanks

    Hi TVC,
    not sure how it works with CL_GUI_ALV_GRID,
    with CL_SALV_TABLE ist is like
    METHOD set_layout_properties.
      DATA:
        lo_aggregations          TYPE REF TO cl_salv_aggregations,
        lo_columns               TYPE REF TO cl_salv_columns,
        lo_display_settings      TYPE REF TO cl_salv_display_settings,
        lo_sort                  TYPE REF TO cl_salv_sort,
        lo_sorts                 TYPE REF TO cl_salv_sorts,
        lr_data                  TYPE REF TO data,
        lt_column_ref            TYPE salv_t_column_ref,
        lv_colname               TYPE fieldname,
        lv_p_day                 TYPE flag,
        lv_p_hour                TYPE flag,
        lv_p_month               TYPE flag.
      FIELD-SYMBOLS:
        <column_ref>             TYPE LINE OF salv_t_column_ref,
        <table>                  TYPE table,
        <any>                    TYPE ANY.
      lo_display_settings        = mo_salv->get_display_settings( ).
      lo_aggregations            = mo_salv->get_aggregations( ).
      lr_data                    = get_ref_2_t_column( ).
    * subtotal compressed
                    TRY.
                        lo_sort = lo_sorts->add_sort( <column_ref>-columnname ).
                        lo_sort->set_sequence( )." IF_SALV_C_SORT=>SORT_UP
                        lo_sort->set_subtotal( )." IF_SALV_C_BOOL_SAP=>TRUE
                        lo_sorts->set_compressed_subtotal( <column_ref>-columnname ).
                      CATCH cx_root INTO mo_exception.
                    ENDTRY.
    But because SALV internally uses CL_GUI_ALV_GRID, there is a way for sure.
    Regards,
    Clemens

  • ALV Total and Subtotal in ALV

    Hi,
          I want to display the Total and Subtotal in Alv in Webdynpro Abap, and i am getting this  Error( Access via 'NULL' object reference not possible) and also i have checked the Cardinality also. Please get me a Good Solution.

    I think your node( the node which is binded to data node of alv interface controller ) having collection cardinality of 1:1, if yes, then change it to 0:N,
    i hope this will solve the issue.
    If you still get the error, go to st22, open your error, go down that page (keep pressing pagedown button ), then you will find your code and there find this arrow >>>>> then let me know that code line.
    Regards
    Srinivas

  • Subtotal in alv after sort

    i have six fields,
       based upon the sorting of all 5 fields, i should get the subtotal for sixth field in the alv list report(i have used func module alv_list_display').
    How can I set the sorting sequence in IT_SORT?
    and display the sub-total.

    Hai
    Go through the following Example Code
    Refer to this similar thread.
    alv Display :Total and subtotal
    for sub totals you have to use
    sort table.
    sort-fieldname = 'VBELN'.
    sort-tabname = 'ITAB'.
    sort-up = 'X'.
    sort-subtot = 'X'.
    append sort to it_sort.
    Or
    Define SORT table and FIELDCATALOG table .
    Data :i_field type slis_t_fieldcat_alv,
    w_field like line of i_field,
    i_sort type slis_t_sortinfo_alv,
    w_sort like line of i_sort.
    2.Grand Total
    While buildingfieldcatalog,We have to set DO_SUM = 'X' for quantity field .
    ex.
    w_field-fieldname = 'MENGE'.
    w_field-tabname = 'I_TAB'.
    w_field-DO_SUM = 'X'.
    append w_field to i_field.
    clear w_field.
    3.Subtotal
    Whenever WERKS is changed Subtotal is displayed .
    Build sort table .
    Clear: w_sort,i_sort[].
    w_sort-spos = 1.
    w_sort-fieldname = 'WERKS'.
    w_sort-up = 'X'.
    w_sort-subtot = 'X'.
    append w_sort to i_sort.
    clear w_sort.
    4.
    Pass this I_SORT table thru REUSE_ALV_LIST_DISPLAY function module ..like fieldcatalog table.
    Or
    For sub totals you need to sort and pass the sort table to FM.
    But for total you need to pass to field catalog like below
      fieldcatalog-fieldname   = 'NETPR'.
      fieldcatalog-seltext_m   = 'Net Price'.
      fieldcatalog-col_pos     = 7.
      fieldcatalog-outputlen   = 15.
      fieldcatalog-do_sum      = 'X'.       "Display column total
      fieldcatalog-datatype     = 'CURR'.
      append fieldcatalog to fieldcatalog.
    Thanks & regards
    Sreeni

  • Problem in Subtotal in ALV

    Hi Experts,
    I wanted to do the subtotal in ALV report. For subtotal which data type we need to take. Is it really affect with data type??
    My problem is: I wanted to do the subtotal based on Purchase order number. I need to do the subtotal of field LV_VAR based on purchase order number. The field LV_VAR having TYPE packed decimal.
    Do I need to change the data type of field LV_VAR for getting subtotal?
    For implementing the Subtotal functionality in my alv report, I did following changes
    1. Declared one sort catalog as
    gs_sort-fieldname = 'EBELN'.
    gs_sort-up  = 'X'.
    gs-sort-subtot = 'X'.
    append gs_sort to gt_sort.
    2. In fieldcatalog of field LV_VAR
    i_fieldcatalog-fieldname = 'LV_VAR'.
    i_fieldcatalog-tabname = 'ITAB'.
    i_fieldcatalog-do_sum = 'X'.
    append i_fieldcatalog.
    Then in FM REUSE_ALV_GRID_DISPLAY, I had passed sort catalog as
    it_sort = gt_sort[]
    But I did not get the subtotal functionality.
    Any suggestion pls?

    Hi ,
    I will give you one sample code which has a functionality of subtotal and grand total also .
    And this code will help you in many aspects also.
    *& Report  ZSAND_SUBTOTAL                                              *
    REPORT  ZSAND_SUBTOTAL LINE-COUNT 65                        .
    *& Report ZALV_LIST
    TABLES : mseg.
    TYPE-POOLS : slis.
    DATA : BEGIN OF itab OCCURS 0,
            mblnr LIKE mseg-mblnr,
            matnr LIKE mseg-matnr,
            werks LIKE mseg-werks,
            menge LIKE mseg-menge,
            line_color(4) TYPE c,
           END OF itab.
    DATA : BEGIN OF itab1 OCCURS 0,
            mblnr LIKE mseg-mblnr,
            matnr LIKE mseg-matnr,
            werks LIKE mseg-werks,
            menge LIKE mseg-menge,
            line_color(4) TYPE c,
            END OF itab1.
    data: it_sortcat   type slis_sortinfo_alv occurs 1,
           wa_sort like line of it_sortcat.
    DATA: it_header TYPE slis_t_listheader,
            wa_header TYPE slis_listheader.
    data: var1(1).
    DATA  var2.
    data:mytabix like sy-tabix.
    data:wtab1 like line of itab,
         wtab2 like line of itab.
    DATA : t_fcat TYPE slis_t_fieldcat_alv,
    t_eve TYPE slis_t_event,
    t_subtot TYPE slis_t_sortinfo_alv,
    subtot LIKE LINE OF t_subtot,
    wa_fcat LIKE LINE OF t_fcat,
    gd_layout TYPE slis_layout_alv.
    DATA : gt_menge LIKE mseg-menge,
    st_menge LIKE mseg-menge.
    data:it_extab type SLIS_t_EXTAB,
         wa_extab like line of it_extab.
    SELECTION-SCREEN : BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
    SELECT-OPTIONS : doc FOR mseg-mblnr.
    SELECTION-SCREEN : END OF BLOCK blk1.
    START-OF-SELECTION.
    PERFORM build_cat USING t_fcat.
    PERFORM build_layout.
    PERFORM build_eve.
    perform fill_sort.
    PERFORM get_data.
    PERFORM display.
    *& Form build_cat
    *text
    *-->TEMP_FCAT text
    FORM build_cat USING temp_fcat TYPE slis_t_fieldcat_alv.
    wa_fcat-tabname = 'ITAB'.
    wa_fcat-fieldname = 'MBLNR'.
    wa_fcat-seltext_m = 'Material Doc.'.
    APPEND wa_fcat TO temp_fcat.
    CLEAR wa_fcat.
    wa_fcat-tabname = 'ITAB'.
    wa_fcat-fieldname = 'MATNR'.
    wa_fcat-seltext_m = 'Material'.
    APPEND wa_fcat TO temp_fcat.
    CLEAR wa_fcat.
    wa_fcat-tabname = 'ITAB'.
    wa_fcat-fieldname = 'WERKS'.
    wa_fcat-seltext_m = 'Plant'.
    APPEND wa_fcat TO temp_fcat.
    CLEAR wa_fcat.
    wa_fcat-tabname = 'ITAB'.
    wa_fcat-fieldname = 'MENGE'.
    wa_fcat-seltext_m = 'Quantity'.
    wa_fcat-do_sum = 'Y'.
    APPEND wa_fcat TO temp_fcat.
    CLEAR wa_fcat.
    ENDFORM. "build_cat
    *& Form build_eve
    *text
    FORM build_eve.
    DATA : wa_eve TYPE slis_alv_event.
    data:mytabix type sy-tabix.
    CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
    i_list_type = 0
    IMPORTING
    et_events = t_eve
    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 t_eve  into wa_eve WITH KEY name = slis_ev_top_of_page.
    *INTO wa_eve.
    IF sy-subrc = 0.
    mytabix = sy-tabix.
    MOVE 'TOP_OF_PAGE' TO wa_eve-form.
    append  wa_eve  to t_eve.
    *modify t_eve from wa_eve index mytabix transporting form.
    ENDIF.
    READ TABLE t_eve  into wa_eve WITH KEY name = slis_ev_end_of_page.
    *INTO wa_eve.
    IF sy-subrc = 0.
    mytabix = sy-tabix.
    MOVE 'END_OF_PAGE' TO wa_eve-form.
    append  wa_eve  to t_eve.
    *modify t_eve from wa_eve index mytabix transporting form.
    ENDIF.
    ENDFORM. "build_eve
    *& Form build_layout
    *text
    FORM build_layout.
    *gd_layout-no_input = 'X'.
    gd_layout-colwidth_optimize = 'X'.
    gd_layout-info_fieldname = 'LINE_COLOR'.
    gd_layout-subtotals_text = 'SUBTOTAL'.
    *gd_layout-totals_text = 'TOTAL'.
    gd_layout-EDIT = 'X'.
    ENDFORM. " BUILD_LAYOUT
    *& Form get_data
    *text
    FORM get_data.
    SELECT mblnr matnr werks menge FROM mseg INTO CORRESPONDING FIELDS OF
    TABLE itab
    WHERE mblnr IN doc.
    SORT itab BY mblnr.
    sort itab by mblnr matnr.
    read table itab into wtab1 index 1.
    mytabix = 1.
    loop at itab into wtab2 from 2.
    if wtab1-mblnr = wtab2-mblnr and wtab1-matnr = wtab2-matnr.
    wtab1-menge = wtab1-menge + wtab2-menge.
    modify itab from wtab1 index mytabix.
    else.
    modify itab from wtab1 index mytabix.
    clear wtab1.
    mytabix = sy-tabix.
    move wtab2 to wtab1.
    endif.
    clear wtab2.
    endloop.
    delete ADJACENT DUPLICATES  from itab comparing mblnr matnr.
    ENDFORM. "get_data
    *& Form display
    *text
    FORM display.
    wa_extab-fcode = '&ETA'.
    append wa_extab to it_extab.
      wa_header-typ  = 'H'.
       wa_header-info = 'SANDY is Great'.
       append wa_header to it_header.
       clear wa_header.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_INTERFACE_CHECK                 = ' '
      I_BYPASSING_BUFFER                = ' '
      I_BUFFER_ACTIVE                   = ' '
       I_CALLBACK_PROGRAM                = 'ZSAND_SUBTOTAL'
      I_CALLBACK_PF_STATUS_SET          = ' '
       I_CALLBACK_USER_COMMAND           = 'USERCOMMAND'
       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                   =
       IS_LAYOUT                         = gd_layout
       IT_FIELDCAT                       = t_fcat
       IT_EXCLUDING                      = it_extab
      IT_SPECIAL_GROUPS                 =
       IT_SORT                           = it_sortcat
      IT_FILTER                         =
      IS_SEL_HIDE                       =
      I_DEFAULT                         = 'X'
      I_SAVE                            = ' '
      IS_VARIANT                        =
       IT_EVENTS                         = t_eve[]
      IT_EVENT_EXIT                     = 'BUILD_EVE'
      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_HYPERLINK                      =
      IT_ADD_FIELDCAT                   =
      IT_EXCEPT_QINFO                   =
      I_HTML_HEIGHT_TOP                 =
      I_HTML_HEIGHT_END                 =
    IMPORTING
      E_EXIT_CAUSED_BY_CALLER           =
      ES_EXIT_CAUSED_BY_USER            =
      TABLES
        t_outtab                          = itab
    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
    ***& Form top_of_page
    *text
    FORM top_of_page.
    if var1 is initial.
      wa_header-typ  = 'H'.
       wa_header-info = 'SANDY is Great'.
       append wa_header to it_header.
       clear wa_header.
    CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
      EXPORTING
        IT_LIST_COMMENTARY       = it_header
        I_LOGO                   = 'HR_LOGO'
      I_END_OF_LIST_GRID       =
              var1 = 'X'.
    endif.
      ENDFORM. "top_of_page
      FORM end_of_page.
    if var2 is initial.
      wa_header-typ  = 'H'.
       wa_header-info = 'SANDY is Great'.
       append wa_header to it_header.
       clear wa_header.
    CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
      EXPORTING
        IT_LIST_COMMENTARY       = it_header
        I_LOGO                   = 'HR_LOGO'
      I_END_OF_LIST_GRID       =
              var2 = 'X'.
    endif.
      ENDFORM. "top_of_page
    *&      Form  fill_sort
          text
    -->  p1        text
    <--  p2        text
    form fill_sort .
    wa_sort-spos      = 1.
      wa_sort-fieldname = 'MBLNR'.
      wa_sort-SUBTOT    = 'X'. "subtotals any totals column by this field
    gd_sortcat-tabname
      APPEND wa_sort TO it_sortcat.
      wa_sort-spos      = 2.
      wa_sort-fieldname = 'MATNR'.
    gd_sortcat-tabname
      APPEND wa_sort TO it_sortcat.
    endform.                    " fill_sort
    FORM status USING rt_extab TYPE slis_t_extab.
    set pf-status  'ZSTANDARD'.
    endform.
    form USERCOMMAND USING R_UCOMM type sy-ucomm
                           rselfield type slis_selfield .
    set parameter id 'MAT'  field rselfield-value .
    call transaction 'MM03' and  skip first screen.
    endform.
    I hope this program will help you out.
    Help children of U.N World Food Program by rewarding  points and encourage others to answer your queries.

  • How to do subtotal in alv?

    Hi,
    I have a problem to do the subtotal in alv.
    The outlook of alv now is as following:
    Specimen Adversary Amount
    ZZZ 300100089 1050
    ZZZ 300100089 -1050
    90256243 300100000 193410
    90256242 300100000 173250
    90256241 300100000 173250
    90256240 300100000 173250
    90256239 300100000 173250
    90256238 300100000 173250
    90256237 300100000 173250
    What I need to do it to sum up the amount for same "ADVERSARY"
    The out-come image should be
    Specimen Adversary Amount
    ZZZ 300100089 1050
    ZZZ 300100089 -1050
    subtotal 0
    90256243 300100000 193410
    90256242 300100000 173250
    90256241 300100000 173250
    90256240 300100000 173250
    90256239 300100000 173250
    90256238 300100000 173250
    90256237 300100000 173250
    subtotal 1232910
    Question:
    How can I add the subtotal in alv?
    Please help!!
    The following is the original coding:
    END-OF-SELECTION.
    SORT t.
    LOOP AT t.
    AT NEW bukrs.
    CLEAR anz_dl.
    CLEAR htext-anzahl.
    CLEAR htext-datei.
    htext-text1 = ' records writen in file '.
    CLEAR p_pfad.
    CONCATENATE
    i_pfad
    'CU_CC'
    t-bukrs
    sy-datum+6(2)
    sy-datum+4(2)
    sy-datum(4)
    sy-uzeit
    '.txt'
    INTO p_pfad.
    CLEAR outtab.
    REFRESH outtab.
    REFRESH: gt_outalv. "INS MG020207
    ENDAT.
    IF t-shkzg = 'H'.
    h_betrg = t-wrbtr * -1.
    ELSE.
    h_betrg = t-wrbtr.
    h_dmbtr = t-dmbtr.
    ENDIF.
    s-filler1 = s-filler2 = s-filler3 = s-filler4 = s-filler5 = ';'.
    s-filler6 = s-filler7 = s-filler8 = ';'.
    s-filler9 = s-filler10 = s-filler11 = s-filler12 = s-filler13 = ';'.
    s-filler14 = ';'.
    s-belnr = t-belnr.
    IF t-xblnr NE space. "WD041005a
    s-xblnr = t-xblnr. "WD041005a
    ELSE. "WD041005a
    s-xblnr = t-belnr. "WD041005a
    ENDIF. "WD041005a
    WHILE s-xblnr(1) EQ '0'. "INS MG130606
    SHIFT s-xblnr LEFT. "INS MG130606
    ENDWHILE. "INS MG130606
    WRITE t-kunnr TO s-kunnr NO-ZERO.
    s-lifn2 = s-kunnr.
    shift s-lifn2 RIGHT.
    s-lifn2(1) = 'R'.
    S-KUNNR = T-KUNNR+5(5).
    s-bldat+2(1) = '/'.
    s-bldat+5(1) = '/'.
    s-bldat0(2) = t-bldat4(2).
    s-bldat3(2) = t-bldat6(2).
    s-bldat6(4) = t-bldat0(4).
    s-budat+2(1) = '/'.
    s-budat+5(1) = '/'.
    s-budat0(2) = t-budat4(2).
    s-budat3(2) = t-budat6(2).
    s-budat6(4) = t-budat0(4).
    s-netdt+2(1) = '/'.
    s-netdt+5(1) = '/'.
    s-netdt0(2) = t-netdt4(2).
    s-netdt3(2) = t-netdt6(2).
    s-netdt6(4) = t-netdt0(4).
    s-waers = t-waers.
    s-dmbtr = t-dmbtr.
    s-sgtxt = t-sgtxt.
    CLEAR s-twaer.
    SELECT SINGLE waers INTO s-twaer
    FROM t001
    WHERE bukrs = t-bukrs.
    IF h_betrg < 0.
    hs_betrg+0(1) = '-'.
    ELSE.
    hs_betrg+0(1) = ' '.
    ENDIF.
    WRITE h_betrg CURRENCY t-waers TO hs_betrg+1 NO-GROUPING
    NO-SIGN
    LEFT-JUSTIFIED.
    REPLACE ',' WITH '.' INTO hs_betrg.
    WRITE hs_betrg TO s-betrg.
    IF h_dmbtr < 0.
    hs_betrg+0(1) = '-'.
    ELSE.
    hs_betrg+0(1) = ' '.
    ENDIF.
    WRITE h_dmbtr CURRENCY t-waers TO hs_betrg+1 NO-GROUPING
    NO-SIGN
    LEFT-JUSTIFIED.
    REPLACE ',' WITH '.' INTO hs_betrg.
    WRITE hs_betrg TO s-dmbtr.
    s-compcode = t-bukrs. "fw070905
    IF p_downl = 'X'.
    MOVE s TO outtab-s.
    APPEND outtab.
    ADD 1 TO anz_dl.
    ENDIF.
    gs_outalv-belnr = s-belnr. "INS MG020207
    *<<<< CR01 START ADD as_outalv-zuonr
    gs_outalv-zuonr = s-zuonr. "CR01
    *>>>> CR01 EDD ADD as_outalv-zuonr
    gs_outalv-kunnr = s-kunnr. "INS MG020207
    gs_outalv-bldat = s-bldat. "INS MG020207
    gs_outalv-netdt = s-netdt. "INS MG020207
    gs_outalv-betrg = s-betrg. "INS MG020207
    gs_outalv-waers = s-waers. "INS MG020207
    gs_outalv-compcode = s-compcode. "INS MG020207
    gs_outalv-budat = s-budat. "INS MG020207
    gs_outalv-sgtxt = s-sgtxt.
    gs_outalv-kmmnt = s-kmmnt.
    gs_outalv-vbeln = s-vbeln.
    gs_outalv-xblnr = s-xblnr.
    gs_outalv-lifn2 = s-lifn2.
    gs_outalv-dmbtr = s-dmbtr.
    gs_outalv-twaer = s-twaer.
    APPEND gs_outalv TO gt_outalv. "INS MG020207
    AT END OF bukrs.
    WRITE anz_dl TO htext-anzahl.
    WRITE p_pfad TO htext-datei.
    CONDENSE htext.
    IF p_downl = 'X'.
    SKIP 2.
    WRITE: / htext.
    CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
    filename = p_pfad
    filetype = 'ASC'
    TABLES
    data_tab = outtab
    EXCEPTIONS
    file_write_error = 1
    no_batch = 2
    gui_refuse_filetransfer = 3
    invalid_type = 4
    no_authority = 5
    unknown_error = 6
    header_not_allowed = 7
    separator_not_allowed = 8
    filesize_not_allowed = 9
    header_too_long = 10
    dp_error_create = 11
    dp_error_send = 12
    dp_error_write = 13
    unknown_dp_error = 14
    access_denied = 15
    dp_out_of_memory = 16
    disk_full = 17
    dp_timeout = 18
    file_not_found = 19
    dataprovider_exception = 20
    control_flush_error = 21
    OTHERS = 22.
    IF sy-subrc 0.
    write: / 'Error creating File:', P_Pfad, sy-subrc.
    MESSAGE e405 WITH text-002 p_pfad.
    ENDIF.
    ENDIF.
    *<<<<< INS MG020207
    IF p_alvd EQ 'X'.
    PERFORM build_layout_data.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
    i_callback_program = sy-repid
    i_structure_name = 'GT_OUTALV'
    is_layout = gs_layout
    it_fieldcat = gt_fieldcat[]
    i_callback_top_of_page = 'TOP-OF-PAGE'
    TABLES
    t_outtab = gt_outalv.
    ENDIF.
    *>>>>> INS MG020207
    ENDAT.
    ENDLOOP.

    Check this code....it will help you...reward if useful.
    REPORT  ZPP473_VEHICLE_REVERSAL_REP NO STANDARD PAGE HEADING
                                        MESSAGE-ID ZPP.
    TABLES:ZPP18_RT_CORR.
    TYPE-POOLS:SLIS.
    DATA:BEGIN OF WA_VEH_REV,
    VEHNO TYPE ZPP18_RT_CORR-VEHNO,
    MATNR TYPE ZPP18_RT_CORR-MATNR,
    WERKS TYPE ZPP18_RT_CORR-WERKS,
    MDV01 TYPE ZPP18_RT_CORR-MDV01,
    ENGNO TYPE ZPP18_RT_CORR-ENGNO,
    FRMNO TYPE ZPP18_RT_CORR-FRMNO,
    ERFMG TYPE ZPP18_RT_CORR-ERFMG,
    SHIFT TYPE ZPP18_RT_CORR-SHIFT,
    ZUNAME TYPE ZPP18_RT_CORR-ZUNAME,
    ZDATE TYPE ZPP18_RT_CORR-ZDATE,
    MAKTX TYPE MAKT-MAKTX,
    ZREASON_DES TYPE ZPP17_REASON_COD-ZREASON_DES,
    *VTEXT TYPE T179T-VTEXT,
    END OF WA_VEH_REV.
    DATA:IT_VEH_REV LIKE STANDARD TABLE OF WA_VEH_REV.
    DATA:  ALVFLD TYPE SLIS_FIELDCAT_ALV,
           FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
    DATA:  WK_LAYOUT TYPE SLIS_LAYOUT_ALV,
           I_SORT TYPE SLIS_T_SORTINFO_ALV,
           W_SORT LIKE LINE OF I_SORT.
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
    SELECT-OPTIONS:
    SO_ZDATE FOR ZPP18_RT_CORR-ZDATE OBLIGATORY,
    SO_WERKS FOR ZPP18_RT_CORR-WERKS,
    SO_SHIFT FOR ZPP18_RT_CORR-SHIFT,
    SO_MDV01 FOR ZPP18_RT_CORR-MDV01,
    SO_MATNR FOR ZPP18_RT_CORR-MATNR,
    SO_VEHNO FOR ZPP18_RT_CORR-VEHNO,
    SO_ENGNO FOR ZPP18_RT_CORR-ENGNO,
    SO_FRMNO FOR ZPP18_RT_CORR-FRMNO,
    SO_UNAME FOR ZPP18_RT_CORR-ZUNAME.
    SELECTION-SCREEN END OF BLOCK B1.
    START-OF-SELECTION.
    **GET REVERSAL,MATERIAL DESCRIPTIONS, REASON DESCRIPTIONS
      SELECT ZPP18_RT_CORR~VEHNO
             ZPP18_RT_CORR~MATNR
             ZPP18_RT_CORR~WERKS
             ZPP18_RT_CORR~MDV01
             ZPP18_RT_CORR~ENGNO
             ZPP18_RT_CORR~FRMNO
             ZPP18_RT_CORR~ERFMG
             ZPP18_RT_CORR~SHIFT
             ZPP18_RT_CORR~ZUNAME
             ZPP18_RT_CORR~ZDATE
             MAKT~MAKTX
             ZPP17_REASON_COD~ZREASON_DES
      INTO TABLE IT_VEH_REV FROM
      ZPP18_RT_CORR INNER JOIN MAKT
      ON ( ZPP18_RT_CORRMANDT = MAKTMANDT AND
      ZPP18_RT_CORRMATNR = MAKTMATNR )
      INNER JOIN ZPP17_REASON_COD
      ON ( ZPP18_RT_CORRMANDT = ZPP17_REASON_CODMANDT AND
      ZPP18_RT_CORRZREASON = ZPP17_REASON_CODZREASON )
      CLIENT SPECIFIED
      WHERE ZPP18_RT_CORR~MANDT = SY-MANDT
      AND ZPP18_RT_CORR~ZDATE IN SO_ZDATE
      AND ZPP18_RT_CORR~WERKS IN SO_WERKS
      AND ZPP18_RT_CORR~SHIFT IN SO_SHIFT
      AND ZPP18_RT_CORR~MATNR IN SO_MATNR
      AND ZPP18_RT_CORR~MDV01 IN SO_MDV01
      AND ZPP18_RT_CORR~VEHNO IN SO_VEHNO
      AND ZPP18_RT_CORR~ENGNO IN SO_ENGNO
      AND ZPP18_RT_CORR~FRMNO IN SO_FRMNO
      AND ZPP18_RT_CORR~ZUNAME IN SO_UNAME
      AND MAKT~SPRAS = SY-LANGU.
      IF SY-SUBRC = 0.
          SORT IT_VEH_REV ASCENDING BY ZDATE SHIFT WERKS MDV01 MATNR.
      ELSE.
        MESSAGE I961 WITH 'No Data Found...Try Again !!!'.
        STOP.
      ENDIF.
    **BUILD ALV DISPLAY.
      DEFINE ALV_MACRO.
        ALVFLD-FIELDNAME = &1.
        ALVFLD-SELTEXT_M = &2.
        ALVFLD-COL_POS = &3.
        IF &1 = 'ERFMG'.
          ALVFLD-DO_SUM = 'X'.
        ENDIF.
        APPEND ALVFLD TO FIELDCAT.
        CLEAR ALVFLD.
      END-OF-DEFINITION.
      REFRESH FIELDCAT.
      WK_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
      ALV_MACRO 'ZDATE' 'Rev.Date' '1'.
      ALV_MACRO 'SHIFT' 'Shift' '2'.
      ALV_MACRO 'WERKS' 'Plant' '3'.
      ALV_MACRO 'MDV01' 'Conveyor' '4'.
      ALV_MACRO 'MATNR' 'Material.No' '5'.
      ALV_MACRO 'MAKTX' 'Description' '6'.
      ALV_MACRO 'VEHNO' 'Veh.No' '7'.
      ALV_MACRO 'ENGNO' 'Eng.No' '8'.
      ALV_MACRO 'FRMNO' 'Frame.No' '9'.
      ALV_MACRO 'ERFMG' 'Qty' '10'.         <----Do Sum Here
      ALV_MACRO 'ZREASON_DES' 'Reason' '11'.
      ALV_MACRO 'ZUNAME' 'User.Reversed' '12'.
      REFRESH I_SORT.
      W_SORT-SPOS      = 1.
      W_SORT-FIELDNAME = 'ZDATE'.
      W_SORT-UP        = 'X'.
      APPEND W_SORT TO I_SORT.
      CLEAR W_SORT.
      W_SORT-SPOS      = 6.
      W_SORT-FIELDNAME = 'MAKTX'.
      W_SORT-UP        = 'X'.
      W_SORT-SUBTOT      = 'X'.
      APPEND W_SORT TO I_SORT.
      CLEAR W_SORT.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          I_GRID_TITLE  = 'Vehicle Reversal Report'
          IS_LAYOUT     = WK_LAYOUT
          IT_FIELDCAT   = FIELDCAT[]
          IT_SORT       = I_SORT[]
        TABLES
          T_OUTTAB      = IT_VEH_REV[]
        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.
    END-OF-SELECTION.

  • How to get ALV Display with First column alone in sort

    How to get ALV Display with First column alone in sort

    HI,
    You can build Internal Table and send this to the parameter "IT_SORT".
    eg:
    "the sorting Internal Table structure is as whown below.
    DATA:  t_sort_info type slis_t_sortinfo_alv.
    "Build the Sort Internal Table
      t_sort_info-fieldname = 'CARRID'.
      t_sort_info-subtot = 'X'.
      append t_sort_info.
      t_sort_info-fieldname = 'FLDATE'.
      t_sort_info-subtot = 'X'.
      append t_sort_info.
    Then pass this "IT_SORT_INFO" table to the Function module "Reuse_alv_*". (Note send the body of the Internal table only like "<b>IT_SORT = IT_SORT_INFO[]</b>".
    Here i am making ALV output sorted on CARRID & FLDATE.
    You can specify only the First Column name for sorting.
    Regards,
    Manju
    Message was edited by:
            MANJUNATHA KS

  • F4 for Editable field in ALV, display Name but capture ID

    Hi Friends,
    I have a ALV for which i have defined a Structure, which is passed to Fieldcatlog.
    I have defined a Search help - ZUSER_NAME which has following fields to display.
    USERID - USR02-BNAME
    FNAME
    LNAME
    FULLNAME
    So my structure for fieldcatalog has User-id which is linked to this search help with Domain XUBNAME.
    So in my report i made this User-Id as editable and F4 available, everything is working fine.
    when user does a F4, its displaying Userid,Fname,Lname and complete name.upon selection and save i am capturing the id and storing in the ztable.
    But now i have a requirement that when user selects a value from this search help on F4, i need to display Fullname but capture the User Id. How can i do that?
    This is something similar to the one we have in BSP- key-value pair.
    how to do this in ALV.
    Appreciate if someone can guide me thru.
    Thanks,
    Simha
    Edited by: Simha on Sep 6, 2008 2:24 PM

    hai ,  this is example code for editing the F4 display .. check out this
    REPORT zalv_editf4display.
    *Type pools for alv
    TYPE-POOLS : slis.
    *structure for t582a tbale
    TYPES : BEGIN OF ty_table,
            infty TYPE infty,
            pnnnn TYPE pnnnn_d,
            zrmkz TYPE dzrmkz,
            zeitb TYPE dzeitb,
            dname TYPE dianm,
             davo TYPE davo,
            davoe TYPE davoe,
            END OF ty_table.
    *Structure for infotype text
    TYPES : BEGIN OF ty_itext,
            infty TYPE infty,
            itext TYPE intxt,
            sprsl TYPE sprsl,
            END OF ty_itext.
    *Structure for output display
    TYPES : BEGIN OF ty_output,
            infty TYPE infty,
            itext TYPE intxt,
            pnnnn TYPE pnnnn_d,
            zrmkz TYPE dzrmkz,
            zeitb TYPE dzeitb,
            dname TYPE dianm,
            davo TYPE davo,
            davoe TYPE davoe,
           END OF ty_output.
    *internal table and work area declarations
    DATA : it_table TYPE STANDARD TABLE OF ty_table INITIAL SIZE 0,
           it_output TYPE STANDARD TABLE OF ty_output INITIAL SIZE 0,
           it_pbo TYPE STANDARD TABLE OF ty_output INITIAL SIZE 0,
           it_ittext TYPE STANDARD TABLE OF ty_itext INITIAL SIZE 0,
           wa_table TYPE ty_table,
           wa_output TYPE ty_output,
           wa_ittext TYPE ty_itext.
    *Data declarations for dropdown lists for f4
    DATA: it_dropdown TYPE lvc_t_drop,
          ty_dropdown TYPE lvc_s_drop,
    *data declaration for refreshing of alv
          stable TYPE lvc_s_stbl.
    *Global variable declaration
    DATA: gstring TYPE c.
    *Data declarations for ALV
    DATA: c_ccont TYPE REF TO cl_gui_custom_container,         "Custom container object
          c_alvgd         TYPE REF TO cl_gui_alv_grid,         "ALV grid object
          it_fcat            TYPE lvc_t_fcat,                  "Field catalogue
          it_layout          TYPE lvc_s_layo.                  "Layout
    *ok code declaration
    DATA:
      ok_code       TYPE ui_func.
    *initialization event
    INITIALIZATION.
    *start of selection event
    START-OF-SELECTION.
    *select the infotypes maintained
      SELECT infty
              pnnnn
              zrmkz
              zeitb
              dname
              davo
              davoe
              FROM t582a UP TO 10 ROWS
              INTO CORRESPONDING FIELDS OF TABLE it_table.
    *Select the infotype texts
      IF it_table[] IS NOT INITIAL.
        SELECT itext
                 infty
                 sprsl
                 FROM t582s
                 INTO CORRESPONDING FIELDS OF TABLE it_ittext
                 FOR ALL ENTRIES IN it_table
                 WHERE infty = it_table-infty
                 AND sprsl = 'E'.
      ENDIF.
    *Apppending the data to the internal table of ALV output
      LOOP AT it_table INTO wa_table.
        wa_output-infty = wa_table-infty.
        wa_output-pnnnn = wa_table-pnnnn.
        wa_output-zrmkz = wa_table-zrmkz.
        wa_output-zeitb = wa_table-zeitb.
        wa_output-dname = wa_table-dname.
        wa_output-davo = wa_table-davo.
        wa_output-davoe = wa_table-davoe.
    For texts
        READ TABLE it_ittext INTO wa_ittext WITH KEY infty = wa_table-infty.
        wa_output-itext = wa_ittext-itext.
        APPEND wa_output TO it_output.
        CLEAR wa_output.
      ENDLOOP.
    Calling the ALV screen with custom container
      CALL SCREEN 0600.
    *On this statement double click  it takes you to the screen painter SE51.
    *Enter the attributes
    *Create a Custom container and name it CCONT and OK code as OK_CODE.
    *Save check and Activate the screen painter.
    *Now a normal screen with number 600 is created which holds the ALV grid.
    PBO of the actual screen ,
    Here we can give a title and customized menus
    *create 2 buttons with function code 'SAVE' and 'EXIT'.
    GIVE A SUITABLE TITLE
    *&      Module  STATUS_0600  OUTPUT
          text
    MODULE status_0600 OUTPUT.
      SET PF-STATUS 'DISP'.
      SET TITLEBAR 'ALVF4'.
    ENDMODULE.                 " STATUS_0600  OUTPUT
    calling the PBO module ALV_GRID.
    *&      Module  PBO  OUTPUT
          text
    MODULE pbo OUTPUT.
    *Creating objects of the container
      CREATE OBJECT c_ccont
           EXPORTING
              container_name = 'CCONT'.
    create object for alv grid
      create object c_alvgd
      exporting
      i_parent = c_ccont.
    SET field for ALV
      PERFORM alv_build_fieldcat.
    Set ALV attributes FOR LAYOUT
      PERFORM alv_report_layout.
      CHECK NOT c_alvgd IS INITIAL.
    Call ALV GRID
      CALL METHOD c_alvgd->set_table_for_first_display
        EXPORTING
          is_layout                     = it_layout
          i_save                        = 'A'
        CHANGING
          it_outtab                     = it_output
          it_fieldcatalog               = it_fcat
        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.
    ENDMODULE.                 " PBO  OUTPUT
    *&      Form  alv_build_fieldcat
          text
         <--P_IT_FCAT  text
    *subroutine to build fieldcat
    FORM alv_build_fieldcat.
      DATA lv_fldcat TYPE lvc_s_fcat.
      CLEAR lv_fldcat.
      lv_fldcat-row_pos   = '1'.
      lv_fldcat-col_pos   = '1'.
      lv_fldcat-fieldname = 'INFTY'.
      lv_fldcat-tabname   = 'IT_OUTPUT'.
      lv_fldcat-outputlen = 8.
      lv_fldcat-scrtext_m = 'Infotype'.
      lv_fldcat-icon = 'X'.
      APPEND lv_fldcat TO it_fcat.
      CLEAR lv_fldcat.
      lv_fldcat-row_pos   = '1'.
      lv_fldcat-col_pos   = '2'.
      lv_fldcat-fieldname = 'PNNNN'.
      lv_fldcat-tabname   = 'IT_OUTPUT'.
      lv_fldcat-outputlen = 15.
      lv_fldcat-scrtext_m = 'Structure'.
      lv_fldcat-icon = ''.
      APPEND lv_fldcat TO it_fcat.
      CLEAR lv_fldcat.
      lv_fldcat-row_pos   = '1'.
      lv_fldcat-col_pos   = '3'.
      lv_fldcat-fieldname = 'ITEXT'.
      lv_fldcat-tabname   = 'IT_OUTPUT'.
      lv_fldcat-outputlen = 60.
      lv_fldcat-scrtext_m = 'Description'.
      lv_fldcat-icon = ''.
      APPEND lv_fldcat TO it_fcat.
      CLEAR lv_fldcat.
      lv_fldcat-row_pos   = '1'.
      lv_fldcat-col_pos   = '5'.
      lv_fldcat-fieldname = 'ZRMKZ'.
      lv_fldcat-tabname   = 'IT_OUTPUT'.
      lv_fldcat-outputlen = 1.
      lv_fldcat-scrtext_m = 'PERIOD'.
      lv_fldcat-icon = ''.
      APPEND lv_fldcat TO it_fcat.
      CLEAR lv_fldcat.
      lv_fldcat-row_pos   = '1'.
      lv_fldcat-col_pos   = '6'.
      lv_fldcat-fieldname = 'ZEITB'.
      lv_fldcat-tabname   = 'IT_OUTPUT'.
      lv_fldcat-outputlen = 5.
      lv_fldcat-scrtext_m = 'Time constraint'.
      lv_fldcat-edit = 'X'.
    *To avail the existing F4 help these are to
    *be given in the field catalogue
      lv_fldcat-f4availabl = 'X'.
      lv_fldcat-ref_table = 'T582A'.
      lv_fldcat-ref_field = 'ZEITB'.
      APPEND lv_fldcat TO it_fcat.
      CLEAR lv_fldcat.
      lv_fldcat-row_pos   = '1'.
      lv_fldcat-col_pos   = '7'.
      lv_fldcat-fieldname = 'DNAME'.
      lv_fldcat-tabname   = 'IT_OUTPUT'.
      lv_fldcat-outputlen = 15.
      lv_fldcat-scrtext_m = 'Dialogmodule'.
      lv_fldcat-icon = ''.
      APPEND lv_fldcat TO it_fcat.
      CLEAR lv_fldcat.
      lv_fldcat-row_pos   = '1'.
      lv_fldcat-col_pos   = '8'.
      lv_fldcat-fieldname = 'DAVO'.
      lv_fldcat-tabname   = 'IT_OUTPUT'.
      lv_fldcat-outputlen = 15.
      lv_fldcat-scrtext_m = 'Start'.
      lv_fldcat-edit = 'X'.
      APPEND lv_fldcat TO it_fcat.
      CLEAR lv_fldcat.
      lv_fldcat-row_pos   = '1'.
      lv_fldcat-col_pos   = '9'.
      lv_fldcat-fieldname = 'DAVOE'.
      lv_fldcat-tabname   = 'IT_OUTPUT'.
      lv_fldcat-outputlen = 15.
      lv_fldcat-scrtext_m = 'End'.
      lv_fldcat-icon = ''.
      APPEND lv_fldcat TO it_fcat.
      CLEAR lv_fldcat.
    *To create drop down for the field 'DAVO'
    with our own f4 help
      ty_dropdown-handle = '1'.
      ty_dropdown-value = ' '.
      APPEND ty_dropdown TO it_dropdown.
      ty_dropdown-handle = '1'.
      ty_dropdown-value = '1'.
      APPEND ty_dropdown TO it_dropdown.
      ty_dropdown-handle = '1'.
      ty_dropdown-value = '2'.
      APPEND ty_dropdown TO it_dropdown.
      ty_dropdown-handle = '1'.
      ty_dropdown-value = '3'.
      APPEND ty_dropdown TO it_dropdown.
      CALL METHOD c_alvgd->set_drop_down_table
        EXPORTING
          it_drop_down = it_dropdown.
      LOOP AT it_fcat INTO lv_fldcat.
        CASE lv_fldcat-fieldname.
    To assign dropdown in the fieldcataogue
          WHEN 'DAVO'.
            lv_fldcat-drdn_hndl = '1'.
            lv_fldcat-outputlen = 15.
            MODIFY it_fcat FROM lv_fldcat.
        ENDCASE.
      ENDLOOP.
    ENDFORM.                    " alv_build_fieldcat
    *&      Form  alv_report_layout
          text
         <--P_IT_LAYOUT  text
    *Subroutine for setting alv layout
    FORM alv_report_layout.
      it_layout-cwidth_opt = 'X'.
      it_layout-col_opt = 'X'.
      it_layout-zebra = 'X'.
    ENDFORM.                    " alv_report_layout
    PAI module of the screen created. In case we use an interactive ALV or
    *for additional functionalities we can create OK codes
    *and based on the user command we can do the coding.
    *&      Module  PAI  INPUT
          text
    MODULE pai INPUT.
    *To change the existing values and refresh the grid
    *And only values in the dropdown or in the default
    *F4 can be given , else no action takes place for the dropdown
    *and error is thrown for the default F4 help and font changes to red
    *and on still saving, value is not changed
      c_alvgd->check_changed_data( ).
    *Based on the user input
    *When user clicks 'SAVE;
      CASE ok_code.
        WHEN 'SAVE'.
    *A pop up is called to confirm the saving of changed data
          CALL FUNCTION 'POPUP_TO_CONFIRM'
            EXPORTING
              titlebar       = 'SAVING DATA'
              text_question  = 'Continue?'
              icon_button_1  = 'icon_booking_ok'
            IMPORTING
              answer         = gstring
            EXCEPTIONS
              text_not_found = 1
              OTHERS         = 2.
          IF sy-subrc NE 0.
          MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                  WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
          ENDIF.
    *When the User clicks 'YES'
          IF ( gstring = '1' ).
            MESSAGE 'Saved' TYPE 'S'.
    *Now the changed data is stored in the it_pbo internal table
            it_pbo = it_output.
    *Subroutine to display the ALV with changed data.
            PERFORM redisplay.
          ELSE.
    *When user clicks NO or Cancel
            MESSAGE 'Not Saved'  TYPE 'S'.
          ENDIF.
    **When the user clicks the 'EXIT; he is out
        WHEN 'EXIT'.
          LEAVE PROGRAM.
      ENDCASE.
      CLEAR: ok_code.
    ENDMODULE.                 " PAI  INPUT
    *&      Form  REDISPLAY
          text
    -->  p1        text
    <--  p2        text
    FORM redisplay .
    *Cells of the alv are made non editable after entering OK to save
      CALL METHOD c_alvgd->set_ready_for_input
        EXPORTING
          i_ready_for_input = 0.
    *Row and column of the alv are refreshed after changing values
      stable-row = 'X'.
      stable-col = 'X'.
    *REfreshed ALV display with the changed values
    *This ALV is non editable and contains new values
      CALL METHOD c_alvgd->refresh_table_display
        EXPORTING
          is_stable = stable
        EXCEPTIONS
          finished  = 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.                    " REDISPLAY

  • In ALV display model ,how to accept the ENTER key event?

    Dear All,
    I have used ALV by  GRID DISPLAY model ,not class model.
        CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          i_callback_program       = sy-repid
          i_callback_pf_status_set = 'SET_PF_STATUS'
          i_callback_user_command  = 'USER_COMMAND'
          i_structure_name         = 'T_ITAB'
          is_layout                = gs_layout
          it_fieldcat              = t_fieldcat[]
          i_default                = 'X'
          i_save                   = 'A'
        TABLES
          t_outtab                 = t_itab
        EXCEPTIONS
          program_error            = 1
          OTHERS                   = 2.
    For example :
    IN ALV DISPLAY, there are two fields, one is MATNR, the other is MAKTX.
    When user input the material value in MATNR field and press ENTER, then ALV can run my code to select the MAKTX into MAKTX field and display it synchronization.
    Now I have realized update edit in ALV,but I found only I double click ALV row, then the MAKTX can update.
    Please give me help,
    Thanks
    Sun

    This is the document written by me on Interactive ALV.. hope this maybe helpful for u..
    When an Interactive Report is needed in Classical Display, we go for AT LINE-SELECTION. But when the same is needed in ALV Display, this method won't work. Instead, we need to use other way which is explained below:
    We use REUSE_ALV_GRID_DISPLAY for ALV Display. Now, normally we call that FM in the following way:
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
           EXPORTING
                i_callback_program      = 'PROGRAM_NAME'
                it_fieldcat             = tb_fieldcat
           TABLES
                t_outtab                = tb_output.
    When it is needed to get an Interactive ALV, call the same FM in the following manner:
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
           EXPORTING
                i_callback_program      = 'ZTEST75599_1'
                it_fieldcat             = tb_fieldcat
                i_callback_user_command = 'USER_COMMAND'
           TABLES
                t_outtab                = tb_output.
    Now, in the report, create a subroutine with the name USER_COMMAND as follows:
    FORM user_command  USING p_ucomm    LIKE sy-ucomm
                             p_selfield TYPE slis_selfield.
      CASE p_ucomm.
        WHEN '&IC1'.   " &IC1 - SAP standard code for double-clicking
    Based on the requirement, write the logic                          *
      ENDCASE.
    ENDFORM.
    No need to call the subroutine as PERFORM user_command. This will be takane care by REUSE_ALV_GRID_DISPLAY. We need to just write the subroutine in the report. That suffices.
    Some more useful points for Interactive ALV:
    1. If Hotspot is needed, then that should be done by declaring hotspot (one field in slis_t_fieldcat_alv) as 'X' in tb_fieldcat which is of type slis_t_fieldcat_alv. When hotspot is active, single click will be enough or else you should double click on the output data.
    2. In Classical Display, when it is needed to read the record on which we double clicked, we do that in following way:
       AT LINE-SELECTION.
           GET CURSOR LINE wf_line. " wf_line gives the line number on which it has been clicked
             READ LINE wf_line OF CURRENT PAGE.
      But this won't work for ALV. Instead, the following logic can be used:
    FORM user_command  USING p_ucomm    LIKE sy-ucomm
                             p_selfield TYPE slis_selfield.
      CASE p_ucomm.
        WHEN '&IC1'.   " &IC1 - SAP standard code for double-clicking
          READ TABLE tb_output INTO wa_output INDEX p_selfield-tabindex.
          IF sy-subrc EQ 0.
    Based on the requirement, write the logic                          *
          ENDIF.
      ENDCASE.
    ENDFORM.

  • SUBTOTAL  IN  ALV   REPORT

    hello freinds,
    I am facing problem of subtotal in alv report.
    I am explaining my problem.....................
    In my report there are 8 columns...
    in first colum there is <b>'Acount Number'</b> field. I have to sort out it.and I have done it succesfully. Now in my seventh and eighth column there are fields 'PAYMENT GROSS AMOUNT' and ' IVA AMOUNT' respectively.
    Now I have to do subtotal of these two columns (7th & 8th) according to first column value i.e Acount Number.
    Please send me solution.
    Thanks in Advance........

    Hi,
    try this code ,hope usefull to u, please reward point if usefull to u.
    *& Report  ZALV_SUBTOTAL
    This program lists orders (VBAK) with sort and sub-total for        *
    'sold-to-party' (KUNNR) and 'Sales organization' (VKORG)            *
    REPORT  ZALV_SUBTOTAL.
    TABLES : vbak.
    TYPE-POOLS: slis.                      " ALV Global types
    SELECT-OPTIONS :
      s_vkorg FOR vbak-vkorg,              " Sales organization
      s_kunnr FOR vbak-kunnr,              " Sold-to party
      s_vbeln FOR vbak-vbeln.              " Sales document
    SELECTION-SCREEN :
      SKIP, BEGIN OF LINE,COMMENT 5(27) v_1 FOR FIELD p_max.
    PARAMETERS p_max(2) TYPE n DEFAULT '20' OBLIGATORY.
    SELECTION-SCREEN END OF LINE.
    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 p_max ROWS
              WHERE kunnr IN s_kunnr
                AND vbeln IN s_vbeln
                AND vkorg IN s_vkorg.
    ENDFORM.                               " F_READ_DATA
         Form  f_display_data
    FORM f_display_data.
      DEFINE m_fieldcat.
        add 1 to ls_fieldcat-col_pos.
        ls_fieldcat-fieldname   = &1.
        ls_fieldcat-ref_tabname = 'VBAK'.
        ls_fieldcat-do_sum      = &2.
        ls_fieldcat-cfieldname  = &3.
        append ls_fieldcat to lt_fieldcat.
      END-OF-DEFINITION.
      DEFINE m_sort.
        add 1 to ls_sort-spos.
        ls_sort-fieldname = &1.
        ls_sort-up        = 'X'.
        ls_sort-subtot    = &2.
        append ls_sort to lt_sort.
      END-OF-DEFINITION.
      DATA:
        ls_fieldcat TYPE slis_fieldcat_alv,
        lt_fieldcat TYPE slis_t_fieldcat_alv,
        lt_sort     TYPE slis_t_sortinfo_alv,
        ls_sort     TYPE slis_sortinfo_alv,
        ls_layout   TYPE slis_layout_alv.
      m_fieldcat 'VKORG' ''  ''.
      m_fieldcat 'KUNNR' ''  ''.
      m_fieldcat 'VBELN' ''  ''.
      m_fieldcat 'NETWR' 'X' 'WAERK'.
      m_fieldcat 'WAERK' ''  ''.
      m_sort 'VKORG' 'X'.                  " Sort by vkorg and subtotal
      m_sort 'KUNNR' 'X'.                  " Sort by kunnr and subtotal
      m_sort 'VBELN' ''.                   " Sort by vbeln
      ls_layout-cell_merge = 'X'.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
           EXPORTING
                is_layout   = ls_layout
                it_fieldcat = lt_fieldcat
                it_sort     = lt_sort
           TABLES
                t_outtab    = gt_vbak.
    ENDFORM.                               " F_DISPLAY_DATA
    END OF PROGRAM Z_DEMO_ALV_SORT **********************
    Regards
    fareedas

Maybe you are looking for

  • Why is my CPU usage in quicktime on 10.5 so high compared to XP?

    I have a 2.0 Ghz mac mini with the GMA950 and a windows XP machine at work with a 2.1 Ghz core 2 duo and the GMA950 also. When I play one quicktime HD movie I have on the mac it uses about 150-175% out of 200% of the cpu but when I play the same file

  • Problems with reading a pdf-file using Safari/Adobe Acrobat Pro

    Using Adobe Acrobat Pro 9.5.5. and Safari in Snow Leopard I open the pdf-file of  http://dare.uva.nl/document/505726 and small boxes appear in the text f.i. on page 70, 74, on the last page etc. I don't know why those small boxes appear only on my Ma

  • Goldengate replicat slow to process sequence.nextval

    GGS replicat takes 45 minutes to process this statement. Tracing the replicat session shows that replicat is continuously altering the sequence on the target. The statement completes on the source in less than 1 minute. Any ideas on how I can speed t

  • Dual / External Monitor Problems

    I have recently purchased a NB200/007 netbook, and wish to use dual monitors (mainly for displaying photos etc on larger screens) It came preloaded with Windows 7 starter, after finding out that the Starter edition did not support dual monitor i upgr

  • MSGestureHold not working in Windows Phone 8.1 webbrowser control

    Scroll down and try sample no. 1 on the following website: Unifying touch and mouse The hold gesture sample will work with Internet Explorer 11 in WP8.1 but not with the webbrowser control in an app in WP8.1. There seem to be a bug. It worked fine in