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: 

ALV Subtotals

nanda_kondagunta
Explorer
0 Kudos

Hi ABAP Gurus,

I have a problem with ALV subtotals and don't now how to solve it using ALV. I might have to go back to Classical reports if I cannot solve it. Here is the Problem :

The tables BSET stores the Taxes info for the accounting documents. Each line is for the tax jurisdiction levels and tax jurisdiction code. The base amount on all the lines is same say 100.00 and let us assume 6 lines. When the subtotals are done for the jurisdiction levels the subtotal for the base amount is 100.00 ( only one line per level ) and this is what is expected. But for tax jurisdiction code the total comes to 600.00 Which is what is expected from ALV totals . But since 100.00 is the base amount for tax report purposes this should be the subtotal. That is the subtotal should be 100 for the jurisdiction codes not 600.00.

I tried varous stuff but couldn't get desired results? Any solution is highly appreciated.

Thanks,

Nanda

7 REPLIES 7

Former Member
0 Kudos

Hi Nanda,

Did u use this

data: wa_fieldcat type slis_fieldcat_alv,
      it_fieldcat type slis_t_fieldcat_alv.

wa_fieldcat-do_sum = 'X'.

append wa_fieldcat to it_fieldcat.

Please check this program

REPORT z_sub_totals .
 
TYPE-POOLS: slis.
 
DATA: BEGIN OF it_output OCCURS 0,
          var1(8) TYPE n,
          var2(10),
          var3 TYPE I,
      END OF it_output.
 
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
       t_fieldcat TYPE slis_fieldcat_alv,
      it_sort TYPE slis_t_sortinfo_alv,
      t_sort TYPE slis_sortinfo_alv,
      v_repid LIKE sy-repid.
 
INITIALIZATION.
  v_repid = sy-repid.
 
START-OF-SELECTION.
 
  PERFORM get_data.
  PERFORM sort_fields.
  PERFORM fill_fieldcat.
  PERFORM list_display.
 
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data.
 
  it_output-var1 = 1000.
  it_output-var2 = 'hi'.
  it_output-var3 = '10000'.
  APPEND it_output.
  CLEAR it_output.
 
  it_output-var1 = 1000.
  it_output-var2 = 'hey'.
  it_output-var3 = '20000'.
  APPEND it_output.
  CLEAR it_output.
 
  it_output-var1 = 1000.
  it_output-var2 = 'hi'.
  it_output-var3 = '100000'.
  APPEND it_output.
  CLEAR it_output.
 
  it_output-var1 = 2000.
  it_output-var2 = 'bye'.
  it_output-var3 = '10000'.
  APPEND it_output.
  CLEAR it_output.
 
  it_output-var1 = 2000.
  it_output-var2 = 'candy'.
  it_output-var3 = '10000'.
  APPEND it_output.
  CLEAR it_output.
 
  it_output-var1 = 1000.
  it_output-var2 = 'tom'.
  it_output-var3 = '10000'.
  APPEND it_output.
  CLEAR it_output.
 
  it_output-var1 = 4000.
  it_output-var2 = 'tara'.
  it_output-var3 = '10000'.
  APPEND it_output.
  CLEAR it_output.
 
 
ENDFORM.                    " GET_DATA
 
*&---------------------------------------------------------------------*
*&      Form  fill_fieldcat
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fill_fieldcat.
  PERFORM fill_fields USING: 'IT_OUTPUT' 'VAR1' 'Variable 1' ' ',
                             'IT_OUTPUT' 'VAR2' 'Variable 2' ' ',
                             'IT_OUTPUT' 'VAR3' 'Variable 3' 'X'.
 
ENDFORM.                    " fill_fieldcat
 
*&---------------------------------------------------------------------*
*&      Form  fill_fields
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0146   text
*      -->P_0147   text
*      -->P_0148   text
*      -->P_0149   text
*----------------------------------------------------------------------*
FORM fill_fields USING    value(tabname) TYPE slis_tabname
                          value(fieldname) TYPE slis_fieldname
                          value(seltext_m) LIKE dd03p-scrtext_m
                          value(do_sum) TYPE c.
  t_fieldcat-tabname = tabname.
  t_fieldcat-fieldname = fieldname.
  t_fieldcat-seltext_m  = seltext_m.
  IF do_sum = 'X'.
    t_fieldcat-datatype = 'CURR'.
  ENDIF.
  t_fieldcat-do_sum = do_sum.
  APPEND t_fieldcat TO it_fieldcat.
  CLEAR t_fieldcat.
ENDFORM.                    " fill_fields
 
*&---------------------------------------------------------------------*
*&      Form  list_display
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM list_display.
  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
   EXPORTING
     i_callback_program             = v_repid
     it_fieldcat                    = it_fieldcat
     it_sort                        = it_sort[]
   TABLES
      t_outtab                       = it_output
   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.                    " list_display
 
*&---------------------------------------------------------------------*
*&      Form  sort_fields
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sort_fields.
  t_sort-fieldname = 'VAR1'.
  t_sort-tabname = 'IT_OUTPUT'.
  t_sort-spos = 1.
  t_sort-up = 'X'.
  t_sort-subtot = 'X'.
  APPEND t_sort TO it_sort.
  CLEAR t_sort.
 
  t_sort-fieldname = 'VAR3'.
  t_sort-tabname = 'IT_OUTPUT'.
  t_sort-spos = 2.
  t_sort-up = 'X'.
  APPEND t_sort TO it_sort.
  CLEAR t_sort.
 
ENDFORM.                    " sort_fields

Best regards,

raam

Edited by: Kodandarami Reddy.S on Jun 9, 2008 6:44 PM

Former Member
0 Kudos

Check for AT END OF (field).

SUM or COLLECT. " remove this from your code.

ENDAT.

Regards

Kannaiah

former_member182371
Active Contributor
0 Kudos

Hi,

have you tried filtering by tax jurisdiction level and then by tax jusrisdiction code?

Best regards.

Former Member
0 Kudos

have you tried using sort (slis_t_sortinfo_alv).

0 Kudos

why select all the 6 lines then instead of 1 if 1 line already has the desired result ??

kind regards

arthur de smidt

Former Member
0 Kudos

Hi,

data: p_it_sortcat TYPE slis_t_sortinfo_alv.
CLEAR wa_sortcat.
wa_sortcat-fieldname = 'tax jurisdiction code'.
wa_sortcat-up ='X'.
wa_sortcat-subtot = 'X'.
APPEND wa_sortcat TO p_it_sortcat.

populate the sort list and pass it to functionmodule to display the list.

'REUSE_ALV_GRID_DISPLAY'.

Please reward points if it helps

Thanks

Vikranth

Former Member
0 Kudos

REPORT ysalesorder_alv_subtotals.

-


  • Type Pools

-


TYPE-POOLS:slis.

-


  • Tables

-


TABLES: vbak, "Sales Document: Header Data

vbap. "Sales Document: Item Data

-


  • Global Structures

-


DATA:gt_fieldcat TYPE slis_t_fieldcat_alv,

wa_fieldcat TYPE slis_fieldcat_alv,

gt_sortcat TYPE slis_t_sortinfo_alv,

wa_sortcat LIKE LINE OF gt_sortcat.

-


  • Internal Table

-


DATA: BEGIN OF gt_salesorder OCCURS 0,

vbeln LIKE vbak-vbeln, " Sales Document Number

posnr LIKE vbap-posnr, " Sales Doc Item

netwr LIKE vbap-netwr, " Net Value

END OF gt_salesorder.

-


  • SELECT OPTIONS

-


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME

TITLE text-001.

SELECT-OPTIONS: s_vbeln FOR vbak-vbeln. " Sales Document

Number.

SELECTION-SCREEN END OF BLOCK b1.

-


  • Initialization

-


INITIALIZATION.

PERFORM initialization.

-


  • Start Of Selection

-


START-OF-SELECTION.

PERFORM field_catalog. "For Structure Creation

PERFORM fetch_data. "Get the Data From DB Table

PERFORM sorting USING gt_sortcat.

-


  • End Of Selection

-


END-OF-SELECTION.

PERFORM display_data.

&----


*& Form initialization

&----


  • text

-


  • --> p1 text

  • <-- p2 text

-


FORM initialization .

s_vbeln-sign = 'I'.

s_vbeln-option = 'BT'.

s_vbeln-low = '4969'.

s_vbeln-high = '5000'.

APPEND s_vbeln.

ENDFORM. " initialization

&----


*& Form field_catalog

&----


  • text

-


  • --> p1 text

  • <-- p2 text

-


FORM field_catalog .

REFRESH : gt_fieldcat.

CLEAR : wa_fieldcat.

wa_fieldcat-col_pos = '1'. "Column Position

wa_fieldcat-tabname = 'IT_SALESORDER'. "Internal Table

wa_fieldcat-fieldname = 'VBELN'. "Field Name

wa_fieldcat-key = 'X'. "Blue Color

wa_fieldcat-seltext_m = 'Sales Doc No'. "Display Text In Screen

APPEND wa_fieldcat TO gt_fieldcat.

CLEAR wa_fieldcat.

wa_fieldcat-col_pos = '2'. "Column Position

wa_fieldcat-tabname = 'IT_SALESORDER'. "Internal Table Name

wa_fieldcat-fieldname = 'POSNR'. "Field Name

wa_fieldcat-seltext_m = 'Sales Doc Item'."Display Text In Screen

APPEND wa_fieldcat TO gt_fieldcat.

CLEAR wa_fieldcat.

*SubTotal on the Field NETWR

wa_fieldcat-col_pos = '3'. "Column Position

wa_fieldcat-tabname = 'IT_SALESORDER'. "Internal Table

wa_fieldcat-fieldname = 'NETWR'. "Field Name

wa_fieldcat-do_sum = 'X'. "Sum

wa_fieldcat-seltext_m = 'Net Value'. "Display Text In Screen

APPEND wa_fieldcat TO gt_fieldcat.

CLEAR wa_fieldcat.

ENDFORM. " field_catalog

&----


*& Form sorting

&----


  • text

-


  • -->P_IT_SORTCAT text

-


FORM sorting USING p_it_sortcat TYPE slis_t_sortinfo_alv.

CLEAR wa_sortcat.

wa_sortcat-fieldname = 'VBELN'.

wa_sortcat-up ='X'.

wa_sortcat-subtot = 'X'.

APPEND wa_sortcat TO p_it_sortcat.

ENDFORM. " sorting

&----


*& Form display_data

&----


  • text

-


  • --> p1 text

  • <-- p2 text

-


FORM display_data .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

  • I_BYPASSING_BUFFER = ' '

  • I_BUFFER_ACTIVE = ' '

i_callback_program = sy-repid

  • I_CALLBACK_PF_STATUS_SET = ' '

  • I_CALLBACK_USER_COMMAND = ' '

  • I_CALLBACK_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 =

it_fieldcat = gt_fieldcat

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

it_sort = gt_sortcat

  • 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

  • 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 = gt_salesorder

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_data

&----


*& Form fetch_data

&----


  • text

-


  • --> p1 text

  • <-- p2 text

-


FORM fetch_data .

REFRESH : gt_salesorder.

CLEAR : gt_salesorder.

SELECT a~vbeln

posnr

b~netwr

FROM vbak AS a

INNER JOIN vbap AS b ON avbeln = bvbeln

INTO TABLE gt_salesorder

WHERE a~vbeln IN s_vbeln.

ENDFORM. " fetch_data

pls see this example and try u r program.i

regards

ravi