‎2013 Sep 26 3:35 PM
Hi all,
my requirement is to dispaly an alv report by retreiving the data from the tables reguh reguv and regup. In the alv output screen some fields are ther the problem is with the document amount and payment total field.Based on the vendor i need to display the payment total value. i.e Payment total should have total payment per vendor in that proposal. Ex. If proposal picks 10 documents for one vendor for GBP 100 each, payment total should have GBP 1000.
i am able to display the totals and subtotals but i am enable to display the payment total field in the out put. In the out putscreen the subtotal value should come in the payment total field but it is not coming i tried the control break statements also but i didn't get the correct output.
can any one plaese provide me some solution. i attached the sample code and output screen shot.
thanks in advance,
koushik
************************************************************************
* D A T A D E F I N I T I O N
************************************************************************
TABLES : REGUH,
REGUP,
REGUV.
TYPES : BEGIN OF ty_final,
laufd TYPE laufd,
laufi TYPE laufi,
xvorl TYPE xvorl,
zbukr TYPE dzbukr,
lifnr TYPE lifnr,
kunnr TYPE kunnr,
empfg TYPE empfg,
vblnr TYPE vblnr,
waers TYPE waers,
name1 TYPE name1_gp,
ubknt TYPE ubknt,
rwbtr TYPE rwbtr,
belnr TYPE belnr_d,
blart TYPE blart,
koart TYPE koart,
dmbtr TYPE dmbtr,
wrbtr TYPE wrbtr,
mwsts TYPE mwsts,
END OF ty_final.
TYPES : BEGIN OF ty_reguh,
laufd TYPE laufd,
laufi TYPE laufi,
xvorl TYPE xvorl,
zbukr TYPE dzbukr,
lifnr TYPE lifnr,
kunnr TYPE kunnr,
empfg TYPE empfg,
vblnr TYPE vblnr,
name1 TYPE name1_gp,
ubknt TYPE ubknt,
* rwbtr TYPE rwbtr,
END OF ty_reguh.
TYPES : BEGIN OF ty_regup,
laufd TYPE laufd,
laufi TYPE laufi,
xvorl TYPE xvorl,
zbukr TYPE dzbukr,
lifnr TYPE lifnr,
kunnr TYPE kunnr,
empfg TYPE empfg,
vblnr TYPE vblnr,
belnr TYPE belnr_d,
waers TYPE waers,
blart TYPE blart,
koart TYPE koart,
dmbtr TYPE dmbtr,
wrbtr TYPE wrbtr,
END OF ty_regup.
************************************************************************
* S E L E C T I O N S C R E E N
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK SELECT WITH FRAME TITLE text-001.
SELECT-OPTIONS : s_laufd FOR reguh-laufd OBLIGATORY.
SELECT-OPTIONS : s_laufi FOR reguh-laufi ."OBLIGATORY.
PARAMETERS : p_xvorl TYPE reguh-xvorl DEFAULT 'X'.
SELECT-OPTIONS : s_zbukr FOR reguh-zbukr.
SELECT-OPTIONS : s_lifnr FOR reguh-lifnr.
SELECTION-SCREEN END OF BLOCK SELECT.
************************************************************************
* I N T E R N A L S T R U C T U R E S & T A B L E S
************************************************************************
DATA :
gt_itab1 TYPE TABLE OF ty_reguh,
gt_itab2 TYPE TABLE OF ty_regup,
gt_final TYPE TABLE OF ty_final,
gt_fieldcat TYPE slis_t_fieldcat_alv,
gt_final1 TYPE TABLE OF ty_final.
DATA :
gs_itab1 TYPE ty_reguh,
gs_itab2 TYPE ty_regup,
gs_final TYPE ty_final,
gs_fieldcat TYPE slis_fieldcat_alv,
gs_final1 TYPE ty_final.
DATA : lv_amt TYPE rwbtr.
************************************************************************
* C O N S T A N T S
************************************************************************
CONSTANTS : gc_x TYPE C VALUE 'X'.
START-OF-SELECTION.
PERFORM get_data.
PERFORM process_data.
PERFORM build_catalog.
perform display_data.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DATA .
SELECT reguh~laufd
reguh~laufi
reguh~xvorl
reguh~zbukr
reguh~lifnr
reguh~kunnr
reguh~empfg
reguh~vblnr
reguh~name1
reguh~ubknt
* reguh~rwbtr
FROM reguh INNER JOIN reguv
on reguh~laufd eq reguv~laufd
AND reguh~laufi eq reguv~laufi
INTO CORRESPONDING FIELDS OF TABLE gt_itab1
WHERE reguh~laufd in s_laufd
AND reguh~laufi in s_laufi
AND reguh~xvorl eq p_xvorl
AND reguh~zbukr in s_zbukr
AND reguh~lifnr in s_lifnr
AND reguh~kunnr eq ' '
AND reguv~xvore = gc_x
AND reguv~xecht = ' '.
SORT gt_itab1 by laufd laufi xvorl zbukr lifnr kunnr empfg vblnr.
IF gt_itab1 IS NOT INITIAL.
SELECT laufd
laufi
xvorl
zbukr
lifnr
kunnr
empfg
vblnr
belnr
waers
blart
koart
dmbtr
wrbtr
FROM regup
INTO CORRESPONDING FIELDS OF TABLE gt_itab2
FOR ALL ENTRIES IN gt_itab1
WHERE laufd eq gt_itab1-laufd
AND laufi eq gt_itab1-laufi
AND xvorl eq gt_itab1-xvorl
AND zbukr eq gt_itab1-zbukr
AND lifnr eq gt_itab1-lifnr
AND kunnr eq gt_itab1-kunnr
AND empfg eq gt_itab1-empfg
AND vblnr eq gt_itab1-vblnr
AND koart = 'K'.
ELSE.
MESSAGE I190.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PROCESS_DATA .
IF gt_itab1 IS NOT INITIAL.
LOOP AT gt_itab1 INTO gs_itab1.
gs_final-laufd = gs_itab1-laufd.
gs_final-laufi = gs_itab1-laufi.
gs_final-xvorl = gs_itab1-xvorl.
gs_final-zbukr = gs_itab1-zbukr.
gs_final-lifnr = gs_itab1-lifnr.
gs_final-kunnr = gs_itab1-kunnr.
gs_final-empfg = gs_itab1-empfg.
gs_final-vblnr = gs_itab1-vblnr.
gs_final-name1 = gs_itab1-name1.
gs_final-ubknt = gs_itab1-ubknt.
* gs_final-rwbtr = gs_itab1-rwbtr.
APPEND gs_final TO gt_final.
CLEAR gs_final.
ENDLOOP.
ENDIF.
IF gt_itab2 IS NOT INITIAL.
SORT gt_final by laufd laufi xvorl zbukr lifnr kunnr empfg vblnr.
SORT gt_itab2 by laufd laufi xvorl zbukr lifnr kunnr empfg vblnr.
LOOP AT gt_final INTO gs_final.
READ TABLE gt_itab2 INTO gs_itab2 WITH KEY
laufd = gs_final-laufd
laufi = gs_final-laufi
xvorl = gs_final-xvorl
zbukr = gs_final-zbukr
lifnr = gs_final-lifnr
kunnr = gs_final-kunnr
empfg = gs_final-empfg
vblnr = gs_final-vblnr
BINARY SEARCH.
IF sy-subrc = 0.
gs_final-laufd = gs_itab2-laufd.
gs_final-laufi = gs_itab2-laufi.
gs_final-xvorl = gs_itab2-xvorl.
gs_final-zbukr = gs_itab2-zbukr.
gs_final-lifnr = gs_itab2-lifnr.
gs_final-kunnr = gs_itab2-kunnr.
gs_final-empfg = gs_itab2-empfg.
gs_final-vblnr = gs_itab2-vblnr.
gs_final-belnr = gs_itab2-belnr.
gs_final-waers = gs_itab2-waers.
gs_final-blart = gs_itab2-blart.
gs_final-koart = gs_itab2-koart.
gs_final-dmbtr = gs_itab2-dmbtr.
gs_final-wrbtr = gs_itab2-wrbtr.
MODIFY gt_final FROM gs_final TRANSPORTING belnr waers blart koart dmbtr wrbtr.
endif.
ENDLOOP.
ENDIF.
* SORT gt_final by laufd laufi xvorl zbukr lifnr kunnr empfg vblnr belnr.
DATA : lc_curty TYPE bapi1093_1-rate_type VALUE 'M',
l_curr_key_from TYPE waers,
lc_curr_key_to TYPE waers VALUE 'USD',
l_exch_rate TYPE bapi1093_0.
LOOP AT gt_final INTO gs_final.
IF gs_final-waers ne 'USD'.
CALL FUNCTION 'BAPI_EXCHANGERATE_GETDETAIL'
EXPORTING
RATE_TYPE = lc_curty
FROM_CURR = gs_final-waers
TO_CURRNCY = lc_curr_key_to
DATE = sy-datum
IMPORTING
EXCH_RATE = l_exch_rate.
IF l_exch_rate-exch_rate_v ne '0' AND gs_final-wrbtr ne '0'.
gs_final-mwsts = ( gs_final-wrbtr / l_exch_rate-exch_rate_v ).
ENDIF.
ELSE.
gs_final-mwsts = gs_final-wrbtr.
ENDIF.
MODIFY gt_final FROM gs_final TRANSPORTING mwsts.
ENDLOOP.
SORT gt_final by lifnr.
*
LOOP AT gt_final INTO gs_final.
gs_final1 = gs_final.
gs_final1-rwbtr = gs_final1-rwbtr + gs_final-dmbtr.
AT END OF lifnr.
SUM.
* CLEAR gs_final-rwbtr.
* gs_final1-rwbtr = gs_final1-rwbtr + gs_final-dmbtr.
*gs_final1-rwbtr = gs-final-rwbtr.
* gs_final-rwbtr = gs_final1-rwbtr.
* gs_final-name1 = gs_final1-name1.
* gs_final-ubknt = gs_final1-ubknt.
* gs_final-rwbtr = gs_final1-rwbtr.
* gs_final-belnr = gs_final1-belnr.
* gs_final-blart = gs_final1-blart.
* gs_final-koart = gs_final1-koart.
* gs_final-dmbtr = gs_final1-dmbtr.
* gs_final-wrbtr = gs_final1-wrbtr.
* gs_final-mwsts = gs_final1-mwsts.
APPEND gs_final1 to gt_final1.
ENDAT.
* gs_final1-rwbtr = gs_final-rwbtr + gs_final-dmbtr.
ENDLOOP.
ENDfORM.
*
* LOOP AT gt_final INTO gs_final.
* lv_amt = lv_amt + gs_final-wrbtr.
* AT END OF lifnr.
* gs_final1-lifnr = gs_final-lifnr.
* gs_final1-rwbtr = lv_amt.
* gs_final1-laufd = gs_final-laufd.
* gs_final1-laufi = gs_final-laufi.
* gs_final1-xvorl = gs_final-xvorl.
* gs_final1-zbukr = gs_final-zbukr.
* gs_final1-kunnr = gs_final-kunnr.
* gs_final1-empfg = gs_final-empfg.
* gs_final1-vblnr = gs_final-vblnr.
* gs_final1-name1 = gs_final-name1.
* gs_final1-ubknt = gs_final-ubknt.
* gs_final1-belnr = gs_final-belnr.
* gs_final1-waers = gs_final-waers.
* gs_final1-blart = gs_final-blart.
* gs_final1-koart = gs_final-koart.
* gs_final1-dmbtr = gs_final-dmbtr.
* gs_final1-wrbtr = gs_final-wrbtr.
* APPEND gs_final1 to gt_final1.
* CLEAR lv_amt.
* ENDAT.
* CLEAR gs_final1.
* ENDLOOP.
*
*&---------------------------------------------------------------------*
*& Form BUILD_CATALOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BUILD_CATALOG .
DATA : loc_count TYPE i VALUE '1'.
loc_count = loc_count + 1.
gs_fieldcat-fieldname = 'LAUFD'.
gs_fieldcat-tabname = 'GT_FINAL1'.
gs_fieldcat-seltext_m = 'RUN DATE'.
gs_fieldcat-col_pos = loc_count.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
loc_count = loc_count + 1.
gs_fieldcat-fieldname = 'LAUFI'.
gs_fieldcat-tabname = 'GT_FINAL1'.
gs_fieldcat-seltext_l = 'ADDITIONAL IDENTIFICATION'.
gs_fieldcat-col_pos = loc_count.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
loc_count = loc_count + 1.
gs_fieldcat-fieldname = 'ZBUKR'.
gs_fieldcat-tabname = 'GT_FINAL1'.
gs_fieldcat-seltext_m = 'COMPANY CODE'.
gs_fieldcat-col_pos = loc_count.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
loc_count = loc_count + 1.
gs_fieldcat-fieldname = 'LIFNR'.
gs_fieldcat-tabname = 'GT_FINAL1'.
gs_fieldcat-seltext_m = 'VENDOR NUMBER'.
gs_fieldcat-col_pos = loc_count.
* gs_fieldcat-do_sum = ''.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
loc_count = loc_count + 1.
gs_fieldcat-fieldname = 'NAME1'.
gs_fieldcat-tabname = 'GT_FINAL1'.
gs_fieldcat-seltext_m = 'VENDOR NAME'.
gs_fieldcat-col_pos = loc_count.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
loc_count = loc_count + 1.
gs_fieldcat-fieldname = 'BLART'.
gs_fieldcat-tabname = 'GT_FINAL1'.
gs_fieldcat-seltext_m = 'DOCUMENT TYPE'.
gs_fieldcat-col_pos = loc_count.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
loc_count = loc_count + 1.
gs_fieldcat-fieldname = 'BELNR'.
gs_fieldcat-tabname = 'GT_FINAL1'.
gs_fieldcat-seltext_m = 'DOCUMENT NUMBER'.
gs_fieldcat-col_pos = loc_count.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
loc_count = loc_count + 1.
gs_fieldcat-fieldname = 'WAERS'.
gs_fieldcat-tabname = 'GT_FINAL1'.
gs_fieldcat-seltext_m = 'DOCUMENT CURRENCY'.
gs_fieldcat-col_pos = loc_count.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
loc_count = loc_count + 1.
gs_fieldcat-fieldname = 'WRBTR'.
gs_fieldcat-tabname = 'GT_FINAL1'.
gs_fieldcat-seltext_m = 'DOCUMENT AMOUNT'.
gs_fieldcat-col_pos = loc_count.
gs_fieldcat-do_sum = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
loc_count = loc_count + 1.
gs_fieldcat-fieldname = 'DMBTR'.
gs_fieldcat-tabname = 'GT_FINAL1'.
gs_fieldcat-seltext_m = 'LOCAL AMOUNT'.
gs_fieldcat-col_pos = loc_count.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
loc_count = loc_count + 1.
gs_fieldcat-fieldname = 'RWBTR'.
gs_fieldcat-tabname = 'GT_FINAL1'.
gs_fieldcat-seltext_m = 'PAYMENT TOTAL'.
gs_fieldcat-col_pos = loc_count.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
loc_count = loc_count + 1.
gs_fieldcat-fieldname = 'MWSTS'.
gs_fieldcat-tabname = 'GT_FINAL1'.
gs_fieldcat-seltext_m = 'USD EQUIVALENT'.
gs_fieldcat-col_pos = loc_count.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
loc_count = loc_count + 1.
gs_fieldcat-fieldname = 'UBKNT'.
gs_fieldcat-tabname = 'GT_FINAL1'.
gs_fieldcat-seltext_l = 'HOUSEBANK ACCOUNTNUMBER'.
gs_fieldcat-col_pos = loc_count.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
ENDFORM. " BUILD_CATALOG
*&---------------------------------------------------------------------*
*& Form DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISPLAY_DATA .
DATA : v_repid LIKE sy-repid.
DATA :
ls_layout TYPE slis_layout_alv.
ls_layout-colwidth_optimize = 'X'.
ls_layout-no_input = 'X'.
ls_layout-no_vline = ' '.
ls_layout-no_colhead = ' '.
* ls_layout-zebra = 'X'.
v_repid = sy-repid.
* ls_layout_total-only = 'X'.
DATA : gt_sort TYPE slis_t_sortinfo_alv.
DATA : gs_sort TYPE slis_sortinfo_alv..
REFRESH gt_sort.
CLEAR gs_sort.
gs_sort-fieldname = 'WAERS'.
gs_sort-up = 'X'.
gs_sort-subtot = 'X'.
gs_sort-tabname = 'GT_FINAL'.
APPEND gs_sort TO gt_sort.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = 'ZBK_SAMPLE_REPORT'
is_layout = ls_layout
it_fieldcat = gt_fieldcat
it_sort = gt_sort[]
TABLES
t_outtab = gt_final1[]
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
‎2013 Sep 26 4:37 PM
Hello,
If you have an ALV problem using FM REUSE_ALV_GRID_DISPLAY, you may want to check out the object oriented approach to ALV grids instead.
REUSE_ALV_GRID_DISPLAY is a function that some people were caling obsolete back in 2007
Hope that helps!
Stuart.
‎2013 Sep 29 11:25 AM
Hi Bharath,
From what i was able to understand your problem
U want to display 10 records as 10 rows vendor specific and then display there totals.... in that case
gs_sort-fieldname will be equal to vendor.
Please elaborate more of your requirement...
Regards
Arpit Gupta
‎2013 Sep 29 11:53 AM
Hi Bharat,
Its not clear what your requirement is.
if you want 10 lines for 10 diff vendors than use below logic.
loop at it_table into wa.
* ADD YOUR ADDITION CODE HERE
on change of vendor .
append to it table.
* do not clear wa.
endon.
endloop.
append wa to it final.
* clear wa here
‎2013 Sep 29 11:58 AM
Hi, you may get some small modification for your program.
where call funcation, you should write as:
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
it_fieldcat = gt_fieldcat
i_save = 'A'
is_layout = ls_layout
i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_user_command = 'USER_COMMAND' " it_excluding = i_excluding
it_sort = gt_sort[]
TABLES
t_outtab = gt_final1[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
And then write a sub program as:
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA: sum TYPE p.
IF r_ucomm = p_sum.
LOOP AT gt_final1.
sum = sum + gt_final1- xxx. "I don't know what you want to sum up with .
AT END OF gt_final1-kunnr.
gt_final1-kunnr = 'GRAND TOTAL :'
gt_final1- xxxx = sum.
APPEND gt_final1.
ENDAT.
ENDLOOP.
ENDIF.
rs_selfield-refresh = 'X'.
ENDFORM.
Another is :
FORM SET_PF_STATUS.
ENDFORM.
‎2013 Sep 29 1:03 PM
Hi Bharat,
If you are just looking for the Subtotals and totals based on vendor, then in the sorting criteria, pass the VENDOR instead of WAERS.
This would give you totals and subtotals based on vendor.
Also if you need a page-break according to the vendor, or need to show header for every vendor, then it is not possible in Grid Display. for that you need to switch to list dispaly
of ALV.
regards,
sumit