01-20-2009 7:12 AM
Hi Guys,
Possible to add formula into subtotal field in ALV grid? I'm creating a ALV grid which displays multi level of sub total fields. One of the sub total fields has to be created with formula. Please take below as an example of final ouput,
Item Category ItemNo Amount
========== ====== =======
aaaaa 00001 10.00
aaaaa 00002 20.00
aaaaa 00003 15.00
Sub Total 5.00 (formula (10 + 20 + 15) - 40)
bbbbb 00001 10.00
bbbbb 00005 10.00
Sub Total 20.00 (formula (10 + 10) - 40)
Grand total -15.00
Thanks
Edited by: Seng Ping Gan on Jan 20, 2009 3:12 PM
01-20-2009 7:14 AM
01-20-2009 7:19 AM
01-20-2009 7:43 AM
Hi,
Kindly go through this program,you will get an idea how to do calculation of a field and display it in the field catalog of ALV.
TABLES: bsad,skb1,bseg,SKAT,BKPF,T003.
TYPE-POOLS slis.
&----
TYPES DECLARATION
&----
TYPES: BEGIN OF i_bsad,
belnr TYPE bsad-belnr, " DOCUMENT NUMBER
blart TYPE bsad-blart, " DOCUMENT TYPE
bldat TYPE bsad-bldat, " DOCUMENT DATE
budat TYPE bsad-budat, " POSTING DATE
xblnr TYPE bsad-xblnr, " INV REFER
dmbtr TYPE bsad-dmbtr, " AMOUNT IN LOCAL CURRENCY
mwskz TYPE bsad-mwskz, " TAX CODE
kunnr TYPE bsad-kunnr, " CUSTOMER
sgtxt TYPE bsad-sgtxt, " TEXT
mwsts TYPE bsad-mwsts, " TAX AMOUNT IN LOCAL CURRENCY
tax_r(10) TYPE c, " TAX RATE WHICH NEEDS TO BE CALCULATED
END OF i_bsad.
CONSTANTS : c_per(1) VALUE '%'.
&----
DATA DECLARATIONS
&----
DATA: it_bsad TYPE STANDARD TABLE OF i_bsad WITH HEADER LINE.
it_bseg TYPE STANDARD TABLE OF i_bseg WITH HEADER LINE,
it_skb1 TYPE STANDARD TABLE OF i_skb1 WITH HEADER LINE.
DATA: it_field TYPE slis_t_fieldcat_alv,
wa_field TYPE slis_fieldcat_alv,
itab_sort TYPE slis_t_sortinfo_alv,
wa_sort TYPE slis_sortinfo_alv,
it_header TYPE slis_t_listheader,
wa_header TYPE slis_listheader,
itab_events TYPE slis_t_event,
wa_events TYPE slis_alv_event,
it_end TYPE slis_t_listheader,
wa_end TYPE slis_listheader,
it_title TYPE lvc_title,
it_layout TYPE slis_layout_alv.
DATA: v_repid TYPE sy-repid,
v_acc TYPE bseg-hkont,
v_desc TYPE SKAT-TXT50,
v_code TYPE SKB1-bukrs,
v_okcode TYPE sy-ucomm,
v_per TYPE p DECIMALS 2,
V_DOCTYP TYPE BSAD-BLART,
v_cper(10).
&----
INITIALIZATION
&----
INITIALIZATION.
v_repid = sy-repid.
&----
AT SELECTION SCREEN
&----
&----
SELECTION SCREEN FIELDS VALIDATIONS
&----
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_glacc FOR bseg-hkont no INTERVALS ,"OBLIGATORY,
pos_dat FOR bsad-budat ."OBLIGATORY,
parameter: doc_typ type bKPF-blart ."OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN .
IF POS_DAT-LOW > SY-DATUM OR POS_DAT-HIGH > SY-DATUM. "VALIDATING POSTING DATE ENTERED ON THE SELECTION SCREEN
MESSAGE E001.
ENDIF.
SELECT SINGLE BLART FROM T003 INTO (V_DOCTYP) WHERE BLART = DOC_TYP. "VALIDATING DOCUMENT TYPE ENTERED ON THE SELECTION SCREEN
IF SY-SUBRC <> 0.
MESSAGE E007.
ENDIF.
SELECT SINGLE TXT50 FROM SKAT INTO (v_desc) WHERE SAKNR In S_GLACC AND SPRAS = SY-LANGU.
IF SY-SUBRC <> 0.
MESSAGE E003.
ENDIF.
SELECT SINGLE bukrs FROM SKB1 INTO (v_code) WHERE SAKNR IN s_glacc.
IF SY-SUBRC <> 0.
MESSAGE E003.
ENDIF.
&----
START-OF-SELECTION
&----
START-OF-SELECTION.
&----
POPULATING INTERNAL TABLE WITH DATA
&----
it_bsad-belnr = 300000.it_bsad-blart = 'RV'.it_bsad-bldat = sy-datum .
it_bsad-budat = sy-datum .it_bsad-xblnr = 230. it_bsad-dmbtr = 5000.
it_bsad-mwskz = 'AO'.
it_bsad-kunnr = 'SPARTA CONSULTING'.it_bsad-sgtxt = 'CST'.it_bsad-mwsts = 12500.APPEND it_bsad.
it_bsad-belnr = 400000.it_bsad-blart = 'RV'.it_bsad-bldat = sy-datum .
it_bsad-budat = sy-datum. it_bsad-xblnr = 230. it_bsad-dmbtr = 4000.
it_bsad-mwskz = 'AO'.
it_bsad-kunnr = 'SPARTA CONSULTING'. it_bsad-sgtxt = 'CST'.it_bsad-mwsts = 8000.APPEND it_bsad.
it_bsad-belnr = 500000.it_bsad-blart = 'RV'.it_bsad-bldat = sy-datum.
it_bsad-budat = sy-datum .it_bsad-xblnr = 230. it_bsad-dmbtr = 6000.
it_bsad-mwskz = 'AO'.
it_bsad-kunnr = 'SPARTA CONSULTING'. it_bsad-sgtxt = 'CST'.it_bsad-mwsts = 12000.APPEND it_bsad.
it_bsad-belnr = 600000.it_bsad-blart = 'RV'.it_bsad-bldat = sy-datum .
it_bsad-budat = sy-datum.it_bsad-xblnr = 230. it_bsad-dmbtr = 8000.
it_bsad-mwskz = 'AO'.
it_bsad-kunnr = 'SPARTA CONSULTING'. it_bsad-sgtxt = 'CST'.it_bsad-mwsts = 15000.APPEND it_bsad.
&----
SELECT QUERIES AS PER REQUIREMENTS
&----
*SELECT belnr blart bldat budat xblnr mwskz kunnr sgtxt
*FROM bsad INTO CORRESPONDING FIELDS OF TABLE it_bsad.
"WHERE hkont IN s_glacc AND bukrs = v_code.
*IF sy-subrc = 0.
&----
CALCULATING TAX RATE CORRESPONDING TO EACH TAX CODE
&----
LOOP AT it_bsad.
v_per = ( ( it_bsad-dmbtr / it_bsad-mwsts ) * 100 ).
v_cper = v_per.
CONDENSE v_cper.
CONCATENATE v_cper c_per INTO it_bsad-tax_r.
MODIFY it_bsad.
ENDLOOP.
*ENDIF.
PERFORM field.
PERFORM sort.
PERFORM layout.
&----
FUNCTION MODULE CALLED FOR WRITING AT THE END OF LIST
&----
PERFORM end_of_list.
&----
FUNCTION MODULE CALLED FOR THE ALV GRID DISPLAY OUTPUT
&----
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER = ' '
I_BUFFER_ACTIVE = ' '
i_callback_program = v_repid
i_callback_pf_status_set = 'PF'
i_callback_user_command = 'COMM'
i_callback_top_of_page = 'TOP'
I_CALLBACK_HTML_TOP_OF_PAGE = ' '
i_callback_html_end_of_list = ' '
I_STRUCTURE_NAME =
I_BACKGROUND_ID = ' '
i_grid_title = it_title
I_GRID_SETTINGS =
is_layout = it_layout
it_fieldcat = it_field
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
it_sort = itab_sort
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
it_events = itab_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 = it_bsad
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.
&----
*& Form LAYOUT
&----
SUB-ROUTINE SET_LAYOUT IS USED TO SET THE DISPLAY OF THE
ALV GRID LINES IN ALTERNATIVE COLOURS
----
FORM layout.
it_layout-zebra = 'X'.
it_title = 'GL WISE TAX REPORT'.
ENDFORM. "LAYOUT
&----
*& Form end
&----
DISPLAYING TEXT AT THE END OF THE ALV LIST OUTPUT
----
FORM end.
REFRESH it_end.
wa_end-typ = 'S'.
wa_end-key = text-005.
wa_end-info = sy-datum.
APPEND wa_end TO it_end.
CLEAR wa_end.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = it_end
I_LOGO =
I_END_OF_LIST_GRID =
I_ALV_FORM =
.
ENDFORM. "END
&----
*& Form TOP
&----
DISPLAYING TEXT AT THE TOP OF THE ALV LIST
----
FORM top.
REFRESH it_header.
wa_header-typ = 'S'.
wa_header-key = text-002.
wa_header-info = s_glacc.
APPEND wa_header TO it_header.
CLEAR wa_header.
wa_header-typ = 'S'.
wa_header-key = text-003.
wa_header-info = v_desc.
APPEND wa_header TO it_header.
CLEAR wa_header.
wa_header-typ = 'S'.
wa_header-key = text-004.
wa_header-info = v_code.
APPEND wa_header TO it_header.
CLEAR wa_header.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = it_header
I_LOGO =
I_END_OF_LIST_GRID =
I_ALV_FORM =
.
ENDFORM. "TOP
&----
*& Form FIELD
&----
SUB-ROUTINE FIELD_CATALOG USED TO SET THE COLUMNS FOR
THE ALV GRID (OUTPUT FORMAT)
SETS THE COLUMN NAME AND THE OUTPUT LENGTH FOR THE FIELDS
----
FORM field.
wa_field-fieldname = 'BELNR'.
wa_field-tabname = 'IT_BSAD'.
wa_field-outputlen = 20.
wa_field-hotspot = 'X'.
wa_field-col_pos = '1'.
wa_field-seltext_l ='DOC_NUM'.
APPEND wa_field TO it_field.
CLEAR wa_field.
wa_field-fieldname = 'BLART'.
wa_field-tabname = 'IT_BSAD'.
wa_field-outputlen = 20.
wa_field-hotspot = 'X'.
wa_field-col_pos = '2'.
wa_field-seltext_l ='DOC_TYPE'.
APPEND wa_field TO it_field.
CLEAR wa_field.
wa_field-fieldname = 'BLDAT'.
wa_field-tabname = 'IT_BSAD'.
wa_field-outputlen = 20.
wa_field-hotspot = 'X'.
wa_field-col_pos = '3'.
wa_field-seltext_l ='DOC_DATE'.
APPEND wa_field TO it_field.
CLEAR wa_field.
wa_field-fieldname = 'BUDAT'.
wa_field-tabname = 'IT_BSAD'.
wa_field-outputlen = 20.
wa_field-hotspot = 'X'.
wa_field-col_pos = '4'.
wa_field-seltext_l ='POST_DATE'.
APPEND wa_field TO it_field.
CLEAR wa_field.
wa_field-fieldname = 'XBLNR'.
wa_field-tabname = 'IT_BSAD'.
wa_field-outputlen = 20.
wa_field-col_pos = '5'.
wa_field-hotspot = 'X'.
wa_field-seltext_l ='INV_REFER'.
APPEND wa_field TO it_field.
CLEAR wa_field.
wa_field-fieldname = 'DMBTR'.
wa_field-tabname = 'IT_BSAD'.
wa_field-outputlen = 20.
wa_field-col_pos = '6'.
wa_field-hotspot = 'X'.
wa_field-seltext_l ='AMOUNT'.
APPEND wa_field TO it_field.
CLEAR wa_field.
wa_field-fieldname = 'MWSKZ'.
wa_field-tabname = 'IT_BSAD'.
wa_field-outputlen = 20.
wa_field-col_pos = '7'.
wa_field-hotspot = 'X'.
wa_field-seltext_l ='TAX_CODE'.
APPEND wa_field TO it_field.
CLEAR wa_field.
wa_field-fieldname = 'TAX_R'.
wa_field-tabname = 'IT_BSAD'.
wa_field-outputlen = 20.
wa_field-col_pos = '8'.
wa_field-hotspot = 'X'.
wa_field-seltext_l ='TAX_RATE'.
APPEND wa_field TO it_field.
CLEAR wa_field.
wa_field-fieldname = 'KUNNR'.
wa_field-tabname = 'IT_BSAD'.
wa_field-outputlen = 20.
wa_field-col_pos = '9'.
wa_field-hotspot = 'X'.
wa_field-seltext_l ='CUSTOMER_NO'.
APPEND wa_field TO it_field.
CLEAR wa_field.
wa_field-fieldname = 'SGTXT'.
wa_field-tabname = 'IT_BSAD'.
wa_field-outputlen = 20.
wa_field-col_pos = '10'.
wa_field-hotspot = 'X'.
wa_field-seltext_l ='TEXT'.
APPEND wa_field TO it_field.
CLEAR wa_field.
ENDFORM. "FIELD
&----
*& Form sort
&----
SUB-ROUTINE SORT_FIELD IS USED TO SORT THE RECORDS IN THE
INTERNAL TABLE BASED ON THE GIVEN FIELD AND NATURE OF
SORTING TO BE DONE (ASCENDING OR DESCENDING)
----
FORM sort.
wa_sort-spos = 1.
wa_sort-fieldname = 'DMBTR'.
wa_sort-tabname = 'IT_BSAD'.
wa_sort-up = 'X'.
APPEND wa_sort TO itab_sort.
CLEAR wa_sort.
ENDFORM. "sort
&----
*& Form pf_status
&----
SUB-ROUTINE PF IS USED TO SET THE PF-STATUS OF THE SCREEN
ON WHICH THE ALV GRID IS DISPLAYED
----
FORM pf USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'FIRST'.
ENDFORM. "PF_STATUS
&----
*& Form COMM
&----
SUB-ROUTINE USER_COMMAND IS USED TO HANDLE THE USER ACTION
AND EXECUTE THE APPROPIATE CODE
----
FORM comm USING ucomm LIKE sy-ucomm selfield TYPE slis_selfield.
v_okcode = sy-ucomm.
CASE v_okcode.
WHEN '&F03'.
LEAVE SCREEN.
WHEN '&F12'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDFORM. "comm
&----
*& Form END_OF_LIST
&----
text
----
--> p1 text
<-- p2 text
----
FORM end_of_list .
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
et_events = itab_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.
&----
With this read table statement itab_events is read for the desired event
&----
READ TABLE itab_events INTO wa_events WITH KEY name = 'END_OF_LIST'.
IF sy-subrc = 0.
wa_events-form = 'END'.
MODIFY itab_events FROM wa_events INDEX sy-tabix.
CLEAR wa_events.
ENDIF.
ENDFORM. " END_OF_LIST
Hope it helps you
Regards
Mansi
01-20-2009 9:01 AM