hI,
you need to use the do_sum statement in the modify field catalogue perform .
checkout this program...
----
Type pools
----
TYPE-POOLS : SLIS.
----
Tables
----
TABLES: VBAK,VBAP,ICON.
----
DATA Declaration
----
*--Table to hold the Header Sales data
DATA: BEGIN OF TB_VBAK OCCURS 0,
INDICAT LIKE ICON-ID, " Icon
VBELN LIKE VBAK-VBELN, " Sales Document
AUDAT LIKE VBAK-AUDAT, " Document date
VBTYP LIKE VBAK-VBTYP, " SD document category
AUART LIKE VBAK-AUART, " Sales Document Type
AUGRU LIKE VBAK-AUGRU, " Order reason
NETWR LIKE VBAK-NETWR, " Net Value
WAERK LIKE VBAK-WAERK, " SD document currency
END OF TB_VBAK.
*--Table to hold the Icons
DATA: BEGIN OF TB_ICON OCCURS 0,
ID TYPE ICON-ID, " Icon
NAME TYPE ICON-NAME, " Name of an Icon
END OF TB_ICON.
*--Table to hold the Item Sales data
DATA: BEGIN OF TB_VBAP OCCURS 0,
VBELN LIKE VBAP-VBELN, " Sales Document
POSNR LIKE VBAP-POSNR, " Sales Document Item
MATNR LIKE VBAP-MATNR, " Material Number
END OF TB_VBAP.
*--Declaration of ALV Tables
DATA : TB_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, " Field Catalog
TB_FIELDCAT1 TYPE SLIS_T_FIELDCAT_ALV, " Field Catalog
TB_EVENTS TYPE SLIS_T_EVENT, " ALV Events
TB_SORT_ALV TYPE SLIS_T_SORTINFO_ALV, " ALV Sort
TB_COMMENTS TYPE SLIS_T_LISTHEADER. " Comment
*--Declaration of Local Variables
DATA : G_REPID LIKE SY-REPID. " For Program name
DATA : L_TABIX TYPE SY-TABIX.
----
STRUCTURES
----
*-- Declaration of ALV structures
DATA : X_FIELDCAT TYPE SLIS_FIELDCAT_ALV, " For Field Catalog
X_LAYOUT TYPE SLIS_LAYOUT_ALV, " For Layout
X_EVENTS TYPE SLIS_ALV_EVENT, " For Events
X_SORT TYPE SLIS_SORTINFO_ALV, " For Sort
X_COMMENTS TYPE SLIS_LISTHEADER. " For Comments
----
C O N S T A N T S
----
*--Declaration of Constants
CONSTANTS : C_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE',
C_PF_STATUS TYPE SLIS_FORMNAME VALUE 'FRM_PF_STATUS',
C_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'FRM_USER_COMMAND',
C_GREEN(40) TYPE C VALUE 'ICON_GREEN_LIGHT',
C_RED(40) TYPE C VALUE 'ICON_RED_LIGHT',
C_YELLOW(40) TYPE C VALUE 'ICON_YELLOW_LIGHT',
C_X TYPE C VALUE 'X', " Flag
C_H TYPE C VALUE 'H', " For Commenet-Type
C_S TYPE C VALUE 'S'. " For Commenet-Type
----
INITIALIZATION
----
*--Intialization.
INITIALIZATION.
G_REPID = SY-REPID.
----
SELECTION SCREEN
----
*--Block 1.
SELECTION-SCREEN : BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETER: P_AUDAT LIKE VBAK-AUDAT
DEFAULT '20050101'(003). " doc date.
SELECTION-SCREEN: END OF BLOCK B1.
*--bLOCK 2.
SELECTION-SCREEN : BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
PARAMETER :P_ALVDIS AS CHECKBOX. " For List/Grid
SELECTION-SCREEN : END OF BLOCK B2.
----
START OF SELECTION
----
START-OF-SELECTION.
*--Populating the header data from VBAK
PERFORM POPULATE_VBAK.
*--Populating all icons from ICON table
PERFORM POPULATE_ICONS.
*--Populating the final dispaly table
PERFORM FINAL_POPULATION.
----
END OF SELECTION
----
END-OF-SELECTION.
IF NOT TB_VBAK[] IS INITIAL.
*--Populating the field catalog for final display table
PERFORM BUILD-FIELDCATALOG.
*--Modifying the field catalog table
PERFORM MODIFY_FIELDCATALOG.
*--Generating all the events into the table
PERFORM GET_EVENTS.
*--sorting the Final table
PERFORM SORT_TABLE.
*--Dispalying the Fianl ALV Table
PERFORM DISPLAY_TABLE.
ELSE.
MESSAGE I999 WITH 'No Records found for the selection criteria'(006)
.
ENDIF.
&----
*& Form build-fieldcatalog
&----
Populating the fieldcatalog table for the Final display
----
FORM BUILD-FIELDCATALOG .
DATA :L_TABNAME TYPE SLIS_TABNAME. " Table Name
L_TABNAME = 'TB_VBAK'.
REFRESH : TB_FIELDCAT.
CLEAR : TB_FIELDCAT.
*--calling a function to build fieldcatalog for header data
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = G_REPID
I_INTERNAL_TABNAME = L_TABNAME
I_INCLNAME = G_REPID
CHANGING
CT_FIELDCAT = TB_FIELDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
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. " build-fieldcatalog
&----
*& Form display_table
&----
Module to display the ALV Grid/List
----
FORM DISPLAY_TABLE .
*--Layout settings
CLEAR X_LAYOUT.
X_LAYOUT-ZEBRA = C_X.
X_LAYOUT-COLWIDTH_OPTIMIZE = C_X.
X_LAYOUT-NO_COLHEAD = SPACE.
*--for list format settings
IF P_ALVDIS = C_X.
X_LAYOUT-NO_VLINE = C_X.
X_LAYOUT-NO_HLINE = C_X.
ENDIF.
*--Displaying the ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
I_CALLBACK_PF_STATUS_SET = C_PF_STATUS
IS_LAYOUT = X_LAYOUT
IT_EVENTS = TB_EVENTS
IT_FIELDCAT = TB_FIELDCAT
IT_SORT = TB_SORT_ALV
TABLES
T_OUTTAB = TB_VBAK
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_table
&----
*& Form get_events
&----
Module to GET EVENTS for ALV Dispaly
----
FORM GET_EVENTS .
REFRESH : TB_EVENTS.
CLEAR : TB_EVENTS.
*--functin to get events
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = TB_EVENTS
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Modifing Top of Page event
READ TABLE TB_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
INTO X_EVENTS.
CLEAR L_TABIX.
L_TABIX = SY-TABIX.
IF SY-SUBRC = 0.
X_EVENTS-FORM = C_TOP_OF_PAGE.
MODIFY TB_EVENTS FROM X_EVENTS INDEX L_TABIX.
CLEAR X_EVENTS.
ENDIF.
Modifing User comand event
READ TABLE TB_EVENTS WITH KEY NAME = SLIS_EV_USER_COMMAND
INTO X_EVENTS.
CLEAR L_TABIX.
L_TABIX = SY-TABIX.
IF SY-SUBRC = 0.
X_EVENTS-FORM = C_USER_COMMAND.
MODIFY TB_EVENTS FROM X_EVENTS INDEX L_TABIX.
CLEAR X_EVENTS.
ENDIF.
ENDFORM. " get_events
&----
*& Form TOP_OF_PAGE
&----
Top Of Page for the ALV format
----
FORM TOP_OF_PAGE.
DATA : L_DATE(02) TYPE C, "Date
L_MONTH(02) TYPE C, "Month
L_YEAR(04) TYPE C, "Year
L_DATE_INFO(10) TYPE C, "DATE
L_TEMP1(100) TYPE C, "temp
L_TEMP(100) TYPE C, "temp
L_TITLE(50) TYPE C. "title
CLEAR : TB_COMMENTS,
TB_COMMENTS[].
Filling Comments for Top of Page
X_COMMENTS-TYP = C_H.
L_TITLE = SY-TITLE.
X_COMMENTS-INFO = L_TITLE.
APPEND X_COMMENTS TO TB_COMMENTS.
CLEAR X_COMMENTS.
CLEAR :L_TEMP,L_TEMP1.
X_COMMENTS-TYP = C_S.
date
L_DATE = SY-DATUM+6(2).
L_MONTH = SY-DATUM+4(2).
L_YEAR = SY-DATUM+0(4).
L_TEMP = 'Date :'(005).
CONCATENATE L_YEAR '-' L_MONTH '-' L_DATE INTO L_DATE_INFO.
CONCATENATE L_TEMP L_DATE_INFO
INTO L_TEMP1 SEPARATED BY SPACE.
X_COMMENTS-INFO = L_TEMP1.
APPEND X_COMMENTS TO TB_COMMENTS.
*--Function to write Comments
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = TB_COMMENTS.
ENDFORM. " TOP_OF_PAGE
&----
*& Form FINAL_POPULATION
&----
Populating the FINAL table
----
FORM FINAL_POPULATION .
CLEAR SY-TABIX.
LOOP AT TB_VBAK.
L_TABIX = SY-TABIX.
IF TB_VBAK-NETWR <= 10.
READ TABLE TB_ICON WITH KEY NAME = C_GREEN BINARY SEARCH.
IF SY-SUBRC = 0.
TB_VBAK-INDICAT = TB_ICON-ID.
MODIFY TB_VBAK INDEX L_TABIX.
CLEAR TB_ICON.
ENDIF.
ELSEIF TB_VBAK-NETWR > 10 AND TB_VBAK-NETWR < 100.
READ TABLE TB_ICON WITH KEY NAME = C_YELLOW BINARY SEARCH.
IF SY-SUBRC = 0.
TB_VBAK-INDICAT = TB_ICON-ID.
MODIFY TB_VBAK INDEX L_TABIX.
CLEAR TB_ICON.
ENDIF.
ELSEIF TB_VBAK-NETWR => 100.
READ TABLE TB_ICON WITH KEY NAME = C_RED BINARY SEARCH.
IF SY-SUBRC = 0.
TB_VBAK-INDICAT = TB_ICON-ID.
MODIFY TB_VBAK INDEX L_TABIX.
CLEAR TB_ICON.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " FINAL_POPULATION
&----
*& Form MODIFY_FIELDCATALOG
&----
Modifying the FIELD CATALOG
----
FORM MODIFY_FIELDCATALOG .
DATA: L_DDICTXT TYPE C VALUE 'L'. "FLAG
LOOP AT TB_FIELDCAT INTO X_FIELDCAT.
CLEAR L_TABIX.
L_TABIX = SY-TABIX.
CASE X_FIELDCAT-FIELDNAME.
WHEN 'INDICAT'. " icon
X_FIELDCAT-SELTEXT_L = 'Status indicator'(008).
X_FIELDCAT-DDICTXT = L_DDICTXT.
WHEN 'VBELN'. " sales doc
X_FIELDCAT-SELTEXT_L = 'Sales Doc #'(009).
X_FIELDCAT-DDICTXT = L_DDICTXT.
WHEN 'AUDAT'. " doc date
X_FIELDCAT-SELTEXT_L = 'Document Date'(010).
X_FIELDCAT-DDICTXT = L_DDICTXT.
WHEN 'VBTYP'. " doc category
X_FIELDCAT-SELTEXT_L = 'Category'(011).
X_FIELDCAT-DDICTXT = L_DDICTXT.
WHEN 'AUART'. " doc type
X_FIELDCAT-SELTEXT_L = 'Doc Type'(012).
X_FIELDCAT-DDICTXT = L_DDICTXT.
WHEN 'AUGRU'. " reason
X_FIELDCAT-SELTEXT_L = 'Reason'(013).
X_FIELDCAT-DDICTXT = L_DDICTXT.
WHEN 'WAERK'. " Currency unit
X_FIELDCAT-SELTEXT_L = 'Unit'(014).
X_FIELDCAT-DDICTXT = L_DDICTXT.
WHEN 'NETWR' . " Amount
X_FIELDCAT-SELTEXT_L = 'Net Value'(015).
X_FIELDCAT-DDICTXT = L_DDICTXT.
*-- TO display the total sum at the end.
X_FIELDCAT-DO_SUM = C_X.
ENDCASE.
MODIFY TB_FIELDCAT FROM X_FIELDCAT INDEX L_TABIX.
ENDLOOP.
ENDFORM. " MODIFY_FIELDCATALOG
&----
*& Form SORT_TABLE
&----
SORTING the ALV
----
FORM SORT_TABLE .
*--sorting the fields
CLEAR X_SORT.
X_SORT-SPOS = '1'.
X_SORT-FIELDNAME = 'AUART'.
X_SORT-TABNAME = 'TB_VBAK'.
X_SORT-UP = C_X.
APPEND X_SORT TO TB_SORT_ALV.
CLEAR X_SORT.
X_SORT-SPOS = '2'.
X_SORT-FIELDNAME = 'VBTYP'.
X_SORT-TABNAME = 'TB_VBAK'.
X_SORT-UP = C_X.
APPEND X_SORT TO TB_SORT_ALV.
CLEAR X_SORT.
X_SORT-SPOS = '3'.
X_SORT-FIELDNAME = 'WAERK'.
X_SORT-TABNAME = 'TB_VBAK'.
X_SORT-UP = C_X.
X_SORT-SUBTOT = C_X.
APPEND X_SORT TO TB_SORT_ALV.
ENDFORM. " SORT_TABLE
&----
*& Form FRM_PF_STATUS
&----
Customizing the PF-STATUS
----
FORM FRM_PF_STATUS USING EXTAB TYPE SLIS_T_EXTAB .
DATA: L_EXTAB TYPE SLIS_EXTAB.
CLEAR EXTAB[].
L_EXTAB-FCODE = '&EB9'.
APPEND L_EXTAB TO EXTAB.
L_EXTAB-FCODE = '&SUM'.
APPEND L_EXTAB TO EXTAB.
L_EXTAB-FCODE = '&OAD'.
APPEND L_EXTAB TO EXTAB.
L_EXTAB-FCODE = '&UMC'.
APPEND L_EXTAB TO EXTAB.
L_EXTAB-FCODE = '&AVE'.
APPEND L_EXTAB TO EXTAB.
L_EXTAB-FCODE = '&RNT'.
APPEND L_EXTAB TO EXTAB.
*--excluding some the tool buttons from the PF status
SET PF-STATUS 'PRACTICE_ALV' EXCLUDING EXTAB.
ENDFORM. " FRM_PF_STATUS
&----
*& Form FRM_USER_COMMAND
&----
USER COMMAND for the ALV event
----
FORM FRM_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD .
CASE R_UCOMM.
WHEN '&IC1'.
READ TABLE TB_VBAK INDEX RS_SELFIELD-TABINDEX.
IF SY-SUBRC = 0.
*--selecting the line items for the selected VBELN
SELECT VBELN POSNR MATNR
FROM VBAP
INTO TABLE TB_VBAP
WHERE VBELN = TB_VBAK-VBELN.
IF SY-SUBRC = 0.
*--Perforrming the field catalog for line item table
PERFORM FIELDCAT_ITEM.
PERFORM DISPLAY_POPUP.
ELSE.
MESSAGE I999 WITH 'NO item data existing for the record'(007).
ENDIF.
ENDIF.
ENDCASE.
ENDFORM. " FRM_USER_COMMAND
&----
*& Form FIELDCAT_ITEM
&----
Build field catalog for the line items
----
FORM FIELDCAT_ITEM .
DATA : L_TABNAME TYPE SLIS_TABNAME.
L_TABNAME = 'TB_VBAP'.
CLEAR : TB_FIELDCAT1,TB_FIELDCAT1[].
*-- building catalog for line items
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = G_REPID
I_INTERNAL_TABNAME = L_TABNAME
I_INCLNAME = G_REPID
CHANGING
CT_FIELDCAT = TB_FIELDCAT1
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
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. " FIELDCAT_ITEM
&----
*& Form POPULATE_VBAK
&----
Populating the Sales header data
----
FORM POPULATE_VBAK .
*-- selecting from VBAK
SELECT VBELN
AUDAT
VBTYP
AUART
AUGRU
NETWR
WAERK
INTO CORRESPONDING FIELDS OF TABLE TB_VBAK
FROM VBAK
WHERE AUDAT > P_AUDAT AND
NETWR > 0.
IF SY-SUBRC <> 0.
SORT TB_VBAK BY AUART VBTYP WAERK .
ENDIF.
ENDFORM. " POPULATE_VBAK
&----
*& Form POPULATE_ICONS
&----
Populating the ICON table
----
FORM POPULATE_ICONS .
*--selecting from ICON table
SELECT ID
NAME
INTO TABLE TB_ICON
FROM ICON.
IF SY-SUBRC = 0.
SORT TB_ICON BY NAME .
ENDIF.
ENDFORM. " POPULATE_ICONS
&----
*& Form DISPLAY_POPUP
&----
Displaying the POP UP with line item details
----
FORM DISPLAY_POPUP .
DATA: L_TITLE(40) TYPE C . " For pop up title
L_TITLE = 'Sales document Item Data'(004).
*--Function to display the pop up with line item details
CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
EXPORTING
I_TITLE = L_TITLE
I_TABNAME = 'TB_VBAP'
IT_FIELDCAT = TB_FIELDCAT1
I_CALLBACK_PROGRAM = G_REPID
TABLES
T_OUTTAB = TB_VBAP
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_POPUP
regards,
sateesh
Hi Ginni,
REPORT z_demo_alv_sort.
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.
<b> 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.
</b>
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'.
<b>CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = ls_layout
it_fieldcat = lt_fieldcat
it_sort = lt_sort
TABLES
t_outtab = gt_vbak.
</b>ENDFORM. " F_DISPLAY_DATA
also chk this link
Add a comment