03-11-2009 7:47 AM
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
03-11-2009 7:59 AM
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
03-11-2009 7:59 AM
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
03-11-2009 8:19 AM
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
03-11-2009 8:33 AM
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
03-11-2009 8:46 AM
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
03-11-2009 9:14 AM
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.
03-11-2009 9:52 AM
03-12-2009 2:40 AM
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
03-12-2009 2:47 AM
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
03-12-2009 3:14 AM
No need to paste code like this. what u want & what u r expecting .....that it.
03-12-2009 3:29 AM
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
03-12-2009 3:40 AM
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
03-12-2009 3:54 AM