Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Add formula into ALV subtotal

Former Member
0 Kudos

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

4 REPLIES 4

Former Member
0 Kudos

u can do as manually.

after append that value to field catolog.

0 Kudos

Can you explain for more details? Thanks

Former Member
0 Kudos

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

0 Kudos

Thanks Mansi, but this is not I want.