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: 

Using subtotal_text in ALV List

Former Member
0 Kudos

I need to display 2 subtotals, one by SPART another one by VKORG. But it seems that both subtotals are overlapped. Another problem is, the display_text_for_subtotal is not shown. Following is part of my code:


FORM build_sortcat .
  gwa_sortcat-spos      = 1.
  gwa_sortcat-fieldname = 'SPART'.
  gwa_sortcat-tabname = 'gt_final'.
  gwa_sortcat-subtot = 'X'.
*  gwa_sortcat-up = 'X'.
  APPEND gwa_sortcat TO gt_sortcat.
  CLEAR gwa_sortcat.

  gwa_sortcat-spos      = 2.
  gwa_sortcat-fieldname = 'FKDAT'.
  gwa_sortcat-tabname = 'gt_final'.
  APPEND gwa_sortcat TO gt_sortcat.
  CLEAR gwa_sortcat.

  gwa_sortcat-spos      = 3.
  gwa_sortcat-fieldname = 'VBELN'.
  gwa_sortcat-tabname = 'gt_final'.
  APPEND gwa_sortcat TO gt_sortcat.
  CLEAR gwa_sortcat.

  gwa_sortcat-spos      = 4.
  gwa_sortcat-fieldname = 'VKORG'.
  gwa_sortcat-tabname = 'gt_final'.
  gwa_sortcat-subtot = 'X'.
  APPEND gwa_sortcat TO gt_sortcat.
  CLEAR gwa_sortcat.

ENDFORM.  

FORM alv_display .
  freport = sy-repid.
  PERFORM f_build_fieldcat.

  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
   EXPORTING
     i_callback_program             = freport
     IS_LAYOUT                      = gwa_layout
*    IS_VARIANT                     = WA_ALV_VARIANT
     it_fieldcat                    = gt_fieldcat[]
*     i_default                      = 'X'
     i_save                         = 'A'
     IT_EVENTS                      = GT_EVENTS[]
     it_sort                        = gt_sortcat[]
    TABLES
      t_outtab                       = gt_final[]
   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 f_build_fieldcat.
  PERFORM f_fieldcat USING:
   'GT_FINAL'  'VBELN'  text-005  ' '  ' '  ' '  ' '  ' '  '010'  ' ',
   'GT_FINAL'  'AUBEL'  text-006  ' '  ' '  ' '  ' '  ' '  '010'  ' ',
   'GT_FINAL'  'FKDAT'  text-007  ' '  ' '  ' '  ' '  ' '  '012'  ' ',
   'GT_FINAL'  'KUNRG'  text-008  ' '  ' '  ' '  ' '  ' '  '016'  ' ',
   'GT_FINAL'  'NAME1'  text-009  ' '  ' '  ' '  ' '  ' '  '035'  ' ',
   'GT_FINAL'  'PERNR'  text-010  ' '  ' '  ' '  ' '  ' '  '008'  ' ',
   'GT_FINAL'  'LGORT'  text-011  ' '  ' '  ' '  ' '  ' '  '010'  ' ',
   'GT_FINAL'  'NETWR'  text-012  ' '  ' '  ' '  ' '  ' '  '013'  ' ',
   'GT_FINAL'  'KZWI4'  text-013  ' '  ' '  ' '  ' '  ' '  '016'  ' ',
   'GT_FINAL'  'MWSBK'  text-014  ' '  ' '  ' '  ' '  ' '  '013'  ' ',
   'GT_FINAL'  'TOTAL'  text-015  ' '  ' '  ' '  ' '  ' '  '013'  ' '.
ENDFORM. 

FORM f_fieldcat  USING  pv_a TYPE any
                        pv_b TYPE any
                        pv_c TYPE any
                        pv_d TYPE any
                        pv_e TYPE any
                        pv_f TYPE any
                        pv_g TYPE any
                        pv_h TYPE any
                        pv_i TYPE any
                        pv_j TYPE any.
  gwa_fieldcat-tabname      = pv_a.
  gwa_fieldcat-fieldname    = pv_b.
  gwa_fieldcat-reptext_ddic = pv_c.
  gwa_fieldcat-key          = pv_d.
  gwa_fieldcat-no_zero      = pv_e.
  gwa_fieldcat-decimals_out = pv_f.
  gwa_fieldcat-do_sum       = pv_g.
  gwa_fieldcat-no_out       = pv_h.
  gwa_fieldcat-outputlen    = pv_i.
  gwa_fieldcat-hotspot      = pv_j.

    IF pv_b = 'NETWR'.
      gwa_fieldcat-do_sum  = 'X'.
    ENDIF.
    IF pv_b = 'KZWI4'.
      gwa_fieldcat-do_sum = 'X'.
    ENDIF.
    IF pv_b = 'MWSBK'.
      gwa_fieldcat-do_sum  = 'X'.
    ENDIF.
    IF pv_b = 'TOTAL'.
      gwa_fieldcat-do_sum  = 'X'.
    ENDIF.

  APPEND gwa_fieldcat TO gt_fieldcat.
  CLEAR gwa_fieldcat.
ENDFORM.

FORM build_events .

CONSTANTS : c_formname_subtotal_text TYPE slis_formname VALUE 'SUBTOTAL_TEXT'.

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type = 0
    IMPORTING
      et_events   = gt_events[].

* for printing header using TOP_OF_LIST
  READ TABLE gt_events WITH KEY name = slis_ev_top_of_list
               INTO gwa_events.
  IF sy-subrc = 0.
    MOVE 'TOP_OF_LIST' TO gwa_events-form.
    MOVE 'TOP_OF_LIST' TO gwa_events-name.
    APPEND gwa_events TO gt_events.
    CLEAR gwa_events.

  ENDIF.

  READ TABLE GT_EVENTS WITH KEY name = slis_ev_subtotal_text
               INTO gwa_events.
  IF sy-subrc = 0.
    MOVE c_formname_subtotal_text TO gwa_events-form.
    MODIFY gt_events FROM gwa_events INDEX sy-tabix.
  ENDIF.

ENDFORM.      

FORM subtotal_text CHANGING
               p_total TYPE any
               p_subtot_text TYPE slis_subtot_text.

* Department level sub total
  IF p_subtot_text-criteria = 'SPART'.
    p_subtot_text-display_text_for_subtotal = 'Print department here'.
  ENDIF.

* Sale Org level sub total
  IF p_subtot_text-criteria = 'VKORG'.
    p_subtot_text-display_text_for_subtotal = 'Print sale org here'.
  ENDIF.

ENDFORM.


Edited by: big mug on Mar 11, 2009 8:49 AM

1 ACCEPTED SOLUTION

Mohamed_Mukhtar
Active Contributor
0 Kudos

Hi,

How did u declare ur internal table.?

A dummyfiled should be declared in internal table to trigger SUBTOTAL_TEXT event.

Can you paste ur code here?

Thanks & REgards

12 REPLIES 12

Mohamed_Mukhtar
Active Contributor
0 Kudos

Hi,

How did u declare ur internal table.?

A dummyfiled should be declared in internal table to trigger SUBTOTAL_TEXT event.

Can you paste ur code here?

Thanks & REgards

0 Kudos

I have changed as you suggested but no difference to my output. Below is my internal table declaration.


TYPES: BEGIN OF zty_final,
       spart TYPE vbrk-spart,
       vkorg TYPE vbrk-vkorg,
       vbeln TYPE vbrk-vbeln,
       aubel TYPE vbrp-aubel,
       fkdat TYPE vbrk-fkdat,
       kunrg TYPE vbrk-kunrg,
       name1 TYPE kna1-name1,
       pernr TYPE vbpa-pernr,
       lgort TYPE vbrp-lgort,
       netwr TYPE vbrp-netwr,
       kzwi4 TYPE vbrp-kzwi4,
       mwsbk TYPE vbrk-mwsbk,
       total TYPE p LENGTH 13 DECIMALS 2,
       spart1 TYPE vbrk-spart,  "for subtotal
       vkorg1 TYPE vbrk-vkorg, "for subtotal
       END OF zty_final.

DATA: gt_final TYPE STANDARD TABLE OF zty_final,
      gwa_final LIKE LINE OF gt_final.

Following with comments are changes I made.


FORM f_build_fieldcat.
  PERFORM f_fieldcat USING:
   'GT_FINAL'  'VBELN'  text-005  ' '  ' '  ' '  ' '  ' '  '010'  ' ',
   'GT_FINAL'  'AUBEL'  text-006  ' '  ' '  ' '  ' '  ' '  '010'  ' ',
   'GT_FINAL'  'FKDAT'  text-007  ' '  ' '  ' '  ' '  ' '  '012'  ' ',
   'GT_FINAL'  'KUNRG'  text-008  ' '  ' '  ' '  ' '  ' '  '016'  ' ',
   'GT_FINAL'  'NAME1'  text-009  ' '  ' '  ' '  ' '  ' '  '035'  ' ',
   'GT_FINAL'  'PERNR'  text-010  ' '  ' '  ' '  ' '  ' '  '008'  ' ',
   'GT_FINAL'  'LGORT'  text-011  ' '  ' '  ' '  ' '  ' '  '010'  ' ',
   'GT_FINAL'  'NETWR'  text-012  ' '  ' '  ' '  ' '  ' '  '013'  ' ',
   'GT_FINAL'  'KZWI4'  text-013  ' '  ' '  ' '  ' '  ' '  '016'  ' ',
   'GT_FINAL'  'MWSBK'  text-014  ' '  ' '  ' '  ' '  ' '  '013'  ' ',
   'GT_FINAL'  'TOTAL'  text-015  ' '  ' '  ' '  ' '  ' '  '013'  ' ',
   'GT_FINAL'  'SPART1'  ' '  ' '  ' '  ' '  ' '  'X'  '013'  'X',    "added this for subtotal
   'GT_FINAL'  'VKORG1'  ' '  ' '  ' '  ' '  ' '  'X'  '013'  'X'.  "added this for subtotal

ENDFORM. 

FORM f_fieldcat  USING  pv_a TYPE any
                        pv_b TYPE any
                        pv_c TYPE any
                        pv_d TYPE any
                        pv_e TYPE any
                        pv_f TYPE any
                        pv_g TYPE any
                        pv_h TYPE any
                        pv_i TYPE any
                        pv_j TYPE any.
  gwa_fieldcat-tabname      = pv_a.
  gwa_fieldcat-fieldname    = pv_b.
  gwa_fieldcat-reptext_ddic = pv_c.
  gwa_fieldcat-key          = pv_d.
  gwa_fieldcat-no_zero      = pv_e.
  gwa_fieldcat-decimals_out = pv_f.
  gwa_fieldcat-do_sum       = pv_g.
  gwa_fieldcat-no_out       = pv_h.
  gwa_fieldcat-outputlen    = pv_i.
  gwa_fieldcat-tech         = pv_j.

    IF pv_b = 'NETWR'.
      gwa_fieldcat-do_sum  = 'X'.
    ENDIF.
    IF pv_b = 'KZWI4'.
      gwa_fieldcat-do_sum = 'X'.
    ENDIF.
    IF pv_b = 'MWSBK'.
      gwa_fieldcat-do_sum  = 'X'.
    ENDIF.
    IF pv_b = 'TOTAL'.
      gwa_fieldcat-do_sum  = 'X'.
    ENDIF.

  APPEND gwa_fieldcat TO gt_fieldcat.
  CLEAR gwa_fieldcat.
ENDFORM.         

FORM subtotal_text CHANGING
               p_total TYPE any
               p_subtot_text TYPE slis_subtot_text.

* Department level sub total
  IF p_subtot_text-criteria = 'SPART1'.   "for subtotal
    p_subtot_text-display_text_for_subtotal = 'Print department here'.
  ENDIF.

* Sale Org level sub total
  IF p_subtot_text-criteria = 'VKORG1'.   "for subtotal
    p_subtot_text-display_text_for_subtotal = 'Print sale org here'.
  ENDIF.

ENDFORM.

Edited by: big mug on Mar 11, 2009 9:21 AM

0 Kudos

hi,

TYPES: BEGIN OF zty_final,
       spart TYPE vbrk-spart,
       vkorg TYPE vbrk-vkorg,
       vbeln TYPE vbrk-vbeln,
       aubel TYPE vbrp-aubel,
       fkdat TYPE vbrk-fkdat,
       kunrg TYPE vbrk-kunrg,
       name1 TYPE kna1-name1,
       pernr TYPE vbpa-pernr,
       lgort TYPE vbrp-lgort,
       netwr TYPE vbrp-netwr,
       kzwi4 TYPE vbrp-kzwi4,
       mwsbk TYPE vbrk-mwsbk,
       total TYPE p LENGTH 13 DECIMALS 2,
       spart1," ---->should be of type C TYPE vbrk-spart,  "for subtotal
       vkorg1, "---->should be of type CTYPE vbrk-vkorg, "for subtotal
       END OF zty_final.

Define fieldcat for these two fields as well

wa_fcat-col_pos = 15.
  wa_fcat-fieldname = 'SPART1'.
  wa_fcat-tabname = 'IT_FINAL'.
  wa_fcat-ref_fieldname = 'SPART'.
  wa_fcat-ref_tabname = 'VBRK'.
  wa_fcat-no_out = 'X'.
 APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.

wa_fcat-col_pos = 16.
  wa_fcat-fieldname = 'VKORG1'.
  wa_fcat-tabname = 'IT_FINAL'.
  wa_fcat-ref_fieldname = 'VKORG'.
  wa_fcat-ref_tabname = 'VBRK'.
  wa_fcat-no_out = 'X'.
 APPEND wa_fcat TO it_fcat.

fill the sort internal table

wa_sort-spos = 1.
  wa_sort-fieldname = 'SPART''.
  wa_sort-tabname = 'IT_FINAL'.
  wa_sort-up = 'X'.
  wa_sort-group = 'UL'.
  APPEND wa_sort TO it_sort.
  CLEAR wa_sort.


wa_sort-spos = 2.
  wa_sort-fieldname = 'SPART1'.
  wa_sort-tabname = 'IT_FINAL'.
  wa_sort-up = 'X'.
  wa_sort-group = 'UL'.
wa_sort-subtot = 'X'.
  APPEND wa_sort TO it_sort.
  CLEAR wa_sort.

wa_sort-spos = 3.
  wa_sort-fieldname = 'VKORG''.
  wa_sort-tabname = 'IT_FINAL'.
  wa_sort-up = 'X'.
  wa_sort-group = 'UL'.
  APPEND wa_sort TO it_sort.
  CLEAR wa_sort.

wa_sort-spos = 4.
  wa_sort-fieldname = 'VKORG1''.
  wa_sort-tabname = 'IT_FINAL'.
  wa_sort-up = 'X'.
  wa_sort-group = 'UL'.
wa_sort-subtot = 'X'.
  APPEND wa_sort TO it_sort.
  CLEAR wa_sort.

In your routine

FORM subtotal_text CHANGING
               p_total TYPE any
               p_subtot_text TYPE slis_subtot_text.
 READ TABLE it_sort INTO wa_sort WITH KEY fieldname = 'SPART1'.
IF sy-subrc = 0.
IF p_subtot_text-criteria = 'SPART1'.
    p_subtot_text-display_text_for_subtotal = 'Print department here'.
  ENDIF.
  ENDIF.


 READ TABLE it_sort INTO wa_sort WITH KEY fieldname = 'VKORG1'.
IF sy-subrc = 0.
IF p_subtot_text-criteria = 'VKORG1'.
    p_subtot_text-display_text_for_subtotal = 'Print sale org here'.
  ENDIF.
  ENDIF.


ENDFORM.

Hope it helps you.

Thanks & Regards

Former Member
0 Kudos

Hi,

Two subtotals are overlapped means?

When u have two criteria, If SPART or VKORG is changing then the subtotals will be displayed.

Check whether ur call to the subroutines are before the display of the ALV.

Thanks,

Nithya

0 Kudos

I've changed as recommended, but I still can see one subtotal only. Yes, the event is called before the alv display. I see that they were overlapping because there were 3 asteriks at the subtotal line.

0 Kudos

why dont u copy-paste your code here?

0 Kudos

Hi, I have changed my code to the following and it works. But I still can't figure out what caused the previous one not working properly. Note that with the below changes, there is one extra row after the 2 subtotal rows. And, I realised that I can't put other fields to be sorted at FORM build_sortcat, else the subtotal rows will disappear.


FORM f_build_fieldcat.
  PERFORM f_fieldcat USING:
     '01' '01' 'VBELN' 'GT_FINAL' 'L' text-005 ' ' ' ' ' ' ' ',
     '01' '02' 'AUBEL' 'GT_FINAL' 'L' text-006 ' ' ' ' ' ' ' ',
     '01' '03' 'FKDAT' 'GT_FINAL' 'L' text-007 ' ' ' ' ' ' ' ',
     '01' '04' 'KUNRG' 'GT_FINAL' 'L' text-008 ' ' ' ' ' ' ' ',
     '01' '05' 'NAME1' 'GT_FINAL' 'L' text-009 ' ' ' ' ' ' ' ',
     '01' '06' 'PERNR' 'GT_FINAL' 'L' text-010 ' ' ' ' ' ' ' ',
     '01' '07' 'LGORT' 'GT_FINAL' 'L' text-011 ' ' ' ' ' ' ' ',
     '01' '08' 'NETWR' 'GT_FINAL' 'L' text-012 ' ' ' ' ' ' ' ',
     '01' '09' 'KZWI4' 'GT_FINAL' 'L' text-013 ' ' ' ' ' ' ' ',
     '01' '10' 'MWSBK' 'GT_FINAL' 'L' text-014 ' ' ' ' ' ' ' ',
     '01' '11' 'TOTAL' 'GT_FINAL' 'L' text-015 ' ' ' ' ' ' ' ',
     '01' '12' 'SPART' 'GT_FINAL' 'L' ' ' 'X' 'X' ' ' ' ',
     '01' '13' 'VKORG' 'GT_FINAL' 'L' ' ' 'X' 'X' ' ' ' '.

ENDFORM.                    " F_BUILD_FIELDCAT

FORM f_fieldcat  USING  pv_a TYPE any
                        pv_b TYPE any
                        pv_c TYPE any
                        pv_d TYPE any
                        pv_e TYPE any
                        pv_f TYPE any
                        pv_g TYPE any
                        pv_h TYPE any
                        pv_i TYPE any
                        pv_j TYPE any.
  gwa_fieldcat-row_pos        =  pv_a.     "Row
  gwa_fieldcat-col_pos        =  pv_b.     "Column
  gwa_fieldcat-fieldname      =  pv_c.     "Field Name
  gwa_fieldcat-tabname        =  pv_d.     "Internal Table Name
  gwa_fieldcat-just           =  pv_e.     "Screen Justified
  gwa_fieldcat-seltext_l      =  pv_f.    "Field Text
  gwa_fieldcat-no_out         =  pv_g.        "No output
  gwa_fieldcat-tech           =  pv_h.       "Technical field
  gwa_fieldcat-qfieldname     =  pv_i.     "Quantity unit
  gwa_fieldcat-qtabname       =  pv_j.      "Quantity table

    IF pv_c = 'NETWR'.
      gwa_fieldcat-do_sum  = 'X'.
    ENDIF.
    IF pv_c = 'KZWI4'.
      gwa_fieldcat-do_sum = 'X'.
    ENDIF.
    IF pv_c = 'MWSBK'.
      gwa_fieldcat-do_sum  = 'X'.
    ENDIF.
    IF pv_c = 'TOTAL'.
      gwa_fieldcat-do_sum  = 'X'.
    ENDIF.

  APPEND gwa_fieldcat TO gt_fieldcat.
  CLEAR gwa_fieldcat.
ENDFORM.       

Edited by: big mug on Mar 12, 2009 3:48 AM

Edited by: big mug on Mar 12, 2009 4:07 AM

0 Kudos

Following is the complete set of code as requested


*&---------------------------------------------------------------------*
*& Report  ZTROUBLESHOOT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZTROUBLESHOOT NO STANDARD PAGE HEADING
               LINE-SIZE 132
               LINE-COUNT 75.

TABLES: vbrk.
TYPE-POOLS slis.
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv,
      gwa_fieldcat LIKE LINE OF gt_fieldcat,
      gt_sortcat TYPE STANDARD TABLE OF slis_sortinfo_alv,
      gwa_sortcat LIKE LINE OF gt_sortcat,
      GT_EVENTS TYPE SLIS_T_EVENT,
      GWA_EVENTS like line of gt_events,
      FREPORT TYPE SY-REPID,
      gwa_layout TYPE slis_layout_alv.


DATA: BEGIN OF header2,
      head1(5) TYPE C VALUE 'As Of',
      head2(1) TYPE C VALUE ' ',
      head3(8) TYPE C,
      END OF header2.

TYPES: BEGIN OF zty_vbrk,
       spart TYPE vbrk-spart,
       spart1(2) TYPE C,  "for subtotal
       vkorg TYPE vbrk-vkorg,
       vkorg1(4) TYPE C, "for subtotal
       vbeln TYPE vbrk-vbeln,
       fkdat TYPE vbrk-fkdat,
       kunrg TYPE vbrk-kunrg,
       mwsbk TYPE vbrk-mwsbk,
       END OF zty_vbrk.

TYPES: BEGIN OF zty_vbrp,
       aubel TYPE vbrp-aubel,
       lgort TYPE vbrp-lgort,
       posnr TYPE vbrp-posnr,
       netwr TYPE vbrp-netwr,
       kzwi4 TYPE vbrp-kzwi4,
       vbeln TYPE vbrp-vbeln,
       END OF zty_vbrp.

TYPES: BEGIN OF zty_vbpa,
       vbeln TYPE vbpa-vbeln,
       pernr TYPE vbpa-pernr,
       END OF zty_vbpa.

TYPES: BEGIN OF zty_kna1,
       kunnr TYPE kna1-kunnr,
       name1 TYPE kna1-name1,
       END OF zty_kna1.

TYPES: BEGIN OF zty_final,
       spart TYPE vbrk-spart,
       spart1(2) TYPE C,  "for subtotal
       vkorg TYPE vbrk-vkorg,
       vkorg1(4) TYPE C, "for subtotal
       vbeln TYPE vbrk-vbeln,
       aubel TYPE vbrp-aubel,
       fkdat TYPE vbrk-fkdat,
       kunrg TYPE vbrk-kunrg,
       name1 TYPE kna1-name1,
       pernr TYPE vbpa-pernr,
       lgort TYPE vbrp-lgort,
       netwr TYPE vbrp-netwr,
       kzwi4 TYPE vbrp-kzwi4,
       mwsbk TYPE vbrk-mwsbk,
       total TYPE p LENGTH 13 DECIMALS 2,
       END OF zty_final.

TYPES: zty_amt TYPE p LENGTH 13 DECIMALS 2.

DATA: gt_vbrk TYPE STANDARD TABLE OF zty_vbrk,
      gwa_vbrk LIKE LINE OF gt_vbrk,
      gt_vbrp TYPE STANDARD TABLE OF zty_vbrp,
      gwa_vbrp LIKE LINE OF gt_vbrp,
      gt_vbpa TYPE STANDARD TABLE OF zty_vbpa,
      gwa_vbpa LIKE LINE OF gt_vbpa,
      gt_kna1 TYPE STANDARD TABLE OF zty_kna1,
      gwa_kna1 LIKE LINE OF gt_kna1,
      gt_final TYPE STANDARD TABLE OF zty_final,
      gwa_final LIKE LINE OF gt_final,
      bill_ty TYPE vbrk-fkart.

SELECTION-SCREEN BEGIN OF BLOCK box WITH FRAME." TITLE text-001.
PARAMETERS: sale_org TYPE vbrk-vkorg OBLIGATORY.
SELECT-OPTIONS: division FOR vbrk-spart OBLIGATORY.
PARAMETERS: asofdate TYPE vbrk-fkdat OBLIGATORY.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (20) text-002." FOR FIELD goodsret.
PARAMETERS: goodsret RADIOBUTTON GROUP grp1.
SELECTION-SCREEN COMMENT (12) text-003.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (20) text-005.
PARAMETERS: discn RADIOBUTTON GROUP grp1.
SELECTION-SCREEN COMMENT (12) text-004.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK box.

AT SELECTION-SCREEN OUTPUT.

START-OF-SELECTION.
PERFORM get_data.
PERFORM build_sortcat.
PERFORM build_events.
* Perform to populate the layout structure
PERFORM sub_populate_layout.
PERFORM ALV_DISPLAY.

END-OF-SELECTION.


FORM get_data .
  IF ( sale_org <> '' ) AND ( division <> '' ) AND ( asofdate <> '' ).

    IF goodsret = 'X'.
      bill_ty = 'S1'.
    ELSE.
      bill_ty = 'F2'.
    ENDIF.

    SELECT spart spart vkorg vkorg vbeln fkdat kunrg mwsbk
           INTO TABLE gt_vbrk
           FROM vbrk
           WHERE vkorg = sale_org
           AND spart IN division
           AND fkdat = asofdate
           AND fkart = bill_ty.
  ENDIF.

  IF gt_vbrk[] IS NOT INITIAL.
    LOOP AT gt_vbrk INTO gwa_vbrk.
      SELECT aubel lgort posnr netwr kzwi4
             INTO TABLE gt_vbrp
             FROM vbrp
             WHERE autyp = 'H'
             AND vbeln = gwa_vbrk-vbeln.

      SELECT vbeln pernr
             INTO TABLE gt_vbpa
             FROM vbpa
             WHERE parvw = 'PE'
             AND vbeln = gwa_vbrk-vbeln.

      SELECT kunnr name1
             INTO TABLE gt_kna1
             FROM kna1
             WHERE kunnr = gwa_vbrk-kunrg.
    ENDLOOP.

    IF gt_vbrk[] IS NOT INITIAL.
* move data into final table
      LOOP AT gt_vbrk INTO gwa_vbrk.
        MOVE-CORRESPONDING gwa_vbrk TO gwa_final.
        APPEND gwa_final TO gt_final.
      ENDLOOP.

      LOOP AT gt_final INTO gwa_final.
        READ TABLE gt_vbpa INTO gwa_vbpa WITH KEY vbeln = gwa_final-vbeln BINARY SEARCH.
        IF sy-subrc = 0.
          gwa_final-pernr = gwa_vbpa-pernr.
        ENDIF.

        READ TABLE gt_vbrp INTO gwa_vbrp WITH KEY vbeln = gwa_final-vbeln BINARY SEARCH.
        IF sy-subrc = 0.
          gwa_final-aubel = gwa_vbrp-aubel.
          gwa_final-lgort = gwa_vbrp-lgort.
          gwa_final-netwr = gwa_vbrp-netwr.
          gwa_final-kzwi4 = gwa_vbrp-kzwi4.
        ENDIF.

        READ TABLE gt_kna1 INTO gwa_kna1 WITH KEY kunnr = gwa_final-kunrg BINARY SEARCH.
        IF sy-subrc = 0.
          gwa_final-name1 = gwa_kna1-name1.
        ENDIF.

        MODIFY gt_final FROM gwa_final.
      ENDLOOP.

* calculate total amount
      LOOP AT gt_final INTO gwa_final.
        gwa_final-total = gwa_final-kzwi4 + gwa_final-mwsbk.
        MODIFY gt_final FROM gwa_final.
      ENDLOOP.

    ENDIF.
  ENDIF.


ENDFORM.                    " get_data


FORM build_sortcat .

  gwa_sortcat-spos = '01' .
  gwa_sortcat-fieldname = 'SPART'.
  gwa_sortcat-tabname = 'GT_FINAL'.
  gwa_sortcat-up = 'X'.
  gwa_sortcat-subtot = 'X'.
  APPEND gwa_sortcat TO gt_sortcat .
  CLEAR gwa_sortcat.

  gwa_sortcat-spos = '02' .
  gwa_sortcat-fieldname = 'VKORG'.
  gwa_sortcat-tabname = 'GT_FINAL'.
  gwa_sortcat-up = 'X'.
  gwa_sortcat-subtot = 'X'.
  APPEND gwa_sortcat TO gt_sortcat .
  CLEAR gwa_sortcat.

ENDFORM.                    " build_sortcat

*&---------------------------------------------------------------------*
*&      Form  ALV_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM alv_display .
  freport = sy-repid.
  PERFORM f_build_fieldcat.

  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
   EXPORTING
     i_callback_program             = freport
     IS_LAYOUT                      = gwa_layout
*    IS_VARIANT                     = WA_ALV_VARIANT
     it_fieldcat                    = gt_fieldcat[]
     i_default                      = 'X'
     i_save                         = 'A'
     IT_EVENTS                      = GT_EVENTS[]
     it_sort                        = gt_sortcat[]
    TABLES
      t_outtab                       = gt_final[]
   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.                    " ALV_DISPLAY

*&---------------------------------------------------------------------*
*&      Form  F_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f_build_fieldcat.
  PERFORM f_fieldcat USING:
     '01' '01' 'VBELN' 'GT_FINAL' 'L' text-005 ' ' ' ' ' ' ' ',
     '01' '02' 'AUBEL' 'GT_FINAL' 'L' text-006 ' ' ' ' ' ' ' ',
     '01' '03' 'FKDAT' 'GT_FINAL' 'L' text-007 ' ' ' ' ' ' ' ',
     '01' '04' 'KUNRG' 'GT_FINAL' 'L' text-008 ' ' ' ' ' ' ' ',
     '01' '05' 'NAME1' 'GT_FINAL' 'L' text-009 ' ' ' ' ' ' ' ',
     '01' '06' 'PERNR' 'GT_FINAL' 'L' text-010 ' ' ' ' ' ' ' ',
     '01' '07' 'LGORT' 'GT_FINAL' 'L' text-011 ' ' ' ' ' ' ' ',
     '01' '08' 'NETWR' 'GT_FINAL' 'L' text-012 ' ' ' ' ' ' ' ',
     '01' '09' 'KZWI4' 'GT_FINAL' 'L' text-013 ' ' ' ' ' ' ' ',
     '01' '10' 'MWSBK' 'GT_FINAL' 'L' text-014 ' ' ' ' ' ' ' ',
     '01' '11' 'TOTAL' 'GT_FINAL' 'L' text-015 ' ' ' ' ' ' ' ',
     '01' '12' 'SPART' 'GT_FINAL' 'L' ' ' 'X' 'X' ' ' ' ',
     '01' '13' 'VKORG' 'GT_FINAL' 'L' ' ' 'X' 'X' ' ' ' '.



ENDFORM.                    " F_BUILD_FIELDCAT

FORM f_fieldcat  USING  pv_a TYPE any
                        pv_b TYPE any
                        pv_c TYPE any
                        pv_d TYPE any
                        pv_e TYPE any
                        pv_f TYPE any
                        pv_g TYPE any
                        pv_h TYPE any
                        pv_i TYPE any
                        pv_j TYPE any.

  gwa_fieldcat-row_pos        =  pv_a.     "Row
  gwa_fieldcat-col_pos        =  pv_b.     "Column
  gwa_fieldcat-fieldname      =  pv_c.     "Field Name
  gwa_fieldcat-tabname        =  pv_d.     "Internal Table Name
  gwa_fieldcat-just           =  pv_e.     "Screen Justified
  gwa_fieldcat-seltext_l      =  pv_f.    "Field Text
  gwa_fieldcat-no_out         =  pv_g.        "No output
  gwa_fieldcat-tech           =  pv_h.       "Technical field
  gwa_fieldcat-qfieldname     =  pv_i.     "Quantity unit
  gwa_fieldcat-qtabname       =  pv_j.      "Quantity table



    IF pv_c = 'NETWR'.
      gwa_fieldcat-do_sum  = 'X'.
    ENDIF.
    IF pv_c = 'KZWI4'.
      gwa_fieldcat-do_sum = 'X'.
    ENDIF.
    IF pv_c = 'MWSBK'.
      gwa_fieldcat-do_sum  = 'X'.
    ENDIF.
    IF pv_c = 'TOTAL'.
      gwa_fieldcat-do_sum  = 'X'.
    ENDIF.

  APPEND gwa_fieldcat TO gt_fieldcat.
  CLEAR gwa_fieldcat.
ENDFORM.                    " F_FIELDCAT

FORM build_events .

CONSTANTS : c_formname_subtotal_text TYPE slis_formname VALUE 'SUBTOTAL_TEXT'.

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type = 4
    IMPORTING
      et_events   = gt_events[].


  READ TABLE GT_EVENTS WITH KEY name = slis_ev_subtotal_text
               INTO gwa_events.
  IF sy-subrc = 0.
    MOVE c_formname_subtotal_text TO gwa_events-form.
    MODIFY gt_events FROM gwa_events INDEX sy-tabix.
  ENDIF.

ENDFORM.                    " build_events


FORM subtotal_text CHANGING
               p_total TYPE any
               p_subtot_text TYPE slis_subtot_text.

* Department level sub total
  IF p_subtot_text-criteria = 'SPART'.
    p_subtot_text-display_text_for_subtotal = 'Print department here'.
  ENDIF.


* Sale Org level sub total
  IF p_subtot_text-criteria = 'VKORG'.
    p_subtot_text-display_text_for_subtotal = 'Print sale org here'.
  ENDIF.


ENDFORM.                    "subtotal_text


form sub_populate_layout .
 CLEAR gwa_layout.
  gwa_layout-colwidth_optimize = 'X'." Optimization of Col width

endform.                    " sub_populate_layout

Edited by: big mug on Mar 12, 2009 4:08 AM

0 Kudos

No need to paste code like this. what u want & what u r expecting .....that it.

0 Kudos

I want to have subtotal by SPART and VKORG. My current code gives me the subtotals but with the following problems:

1) subtotal VKORG comes first before SPART ( not sure what caused that, but in my code, the sequence of fields in my internal table, the sorting, the fieldcat and the event all with SPART comes prior to VKORG. )

2) sorting can only be done for both fields, if I add more fields to be sorted, the subtotals will not be displayed

3) a third subtotal is displayed

Former Member
0 Kudos

Hi,

For calculating sub total of particular fields ,

in maintianing sorting internal tables for those fields

you have to give :sub_total property as 'X' of the fields requiring

subtotal and then in their individual field catalogs you have to give thier

do_sum property as 'X'.

Hope it helps

Regrds

Mansi

0 Kudos

Yup those were done.