You are on page 1of 3

*&---------------------------------------------------------------------*

REPORT yjcm_demo.

*****************Screen Parameters***********************************
PARAMETERS: v_hkont TYPE hkont OBLIGATORY DEFAULT '0401010000',
v_bukrs TYPE bukrs OBLIGATORY DEFAULT 'JRL',
v_gjahr TYPE gjahr DEFAULT '2015',
v_monat TYPE monat DEFAULT '01'.

***********************Data Declaration******************************
TYPES : BEGIN OF st_bsis,
bukrs TYPE bukrs,
belnr TYPE belnr_d,
gjahr TYPE gjahr,
buzei TYPE buzei,

dmbtr TYPE dmbtr,


shkzg TYPE shkzg,
END OF st_bsis.

TYPES: BEGIN OF gty_bkpf,


bukrs TYPE bukrs,
belnr TYPE belnr_d,
gjahr TYPE gjahr,
END OF gty_bkpf.

DATA: it_bsis TYPE TABLE OF st_bsis,


it_bkpf TYPE TABLE OF gty_bkpf,
wa_bsis LIKE LINE OF it_bsis.

DATA: wa_main_bsis TYPE st_bsis. "Work Area, Actual Total amount will be stored

FIELD-SYMBOLS : <l_bkp> TYPE gty_bkpf.


************************Data Initialisation***************************
START-OF-SELECTION.

REFRESH : it_bsis.
CLEAR : wa_main_bsis,wa_bsis.

********************Actual Code for Calculating Total Amount**********

* SELECT * FROM bseg INTO CORRESPONDING FIELDS OF TABLE it_bsis


SELECT bukrs
belnr
gjahr
buzei
dmbtr
shkzg
FROM bseg INTO CORRESPONDING FIELDS OF TABLE it_bsis
WHERE bukrs EQ v_bukrs
AND hkont EQ v_hkont
AND gjahr EQ v_gjahr
* AND
.
IF sy-subrc EQ 0 AND it_bsis IS NOT INITIAL.

SELECT bukrs belnr gjahr


INTO TABLE it_bkpf
FROM bkpf
FOR ALL ENTRIES IN it_bsis
WHERE bukrs EQ it_bsis-bukrs
AND belnr EQ it_bsis-belnr
AND gjahr EQ it_bsis-gjahr
AND monat EQ v_monat
AND ( blart EQ 'RV'
* OR BLART eq 'BV'
* OR BLART eq 'DQ'
* OR BLART eq 'DC'
).

LOOP AT it_bkpf ASSIGNING <l_bkp>.

LOOP AT it_bsis INTO wa_bsis WHERE bukrs EQ <l_bkp>-bukrs


AND belnr EQ <l_bkp>-belnr
AND gjahr EQ <l_bkp>-gjahr.

IF wa_main_bsis-dmbtr IS INITIAL AND wa_main_bsis-shkzg IS INITIAL.


wa_main_bsis-dmbtr = wa_bsis-dmbtr.
wa_main_bsis-shkzg = wa_bsis-shkzg.
ELSE.
IF wa_bsis-shkzg EQ 'S'. " S indicates Positive
IF wa_main_bsis-shkzg EQ 'S'.
wa_main_bsis-dmbtr = wa_main_bsis-dmbtr + wa_bsis-dmbtr.
wa_main_bsis-shkzg = 'S'.
ELSEIF wa_main_bsis-shkzg EQ 'H'.
IF wa_main_bsis-dmbtr GT wa_bsis-dmbtr.
wa_main_bsis-shkzg = 'H'.
wa_main_bsis-dmbtr = wa_main_bsis-dmbtr - wa_bsis-dmbtr.
ELSEIF wa_main_bsis-dmbtr LE wa_bsis-dmbtr.
wa_main_bsis-shkzg = 'S'.
wa_main_bsis-dmbtr = wa_bsis-dmbtr - wa_main_bsis-dmbtr.
ENDIF.
ENDIF.
ELSEIF wa_bsis-shkzg EQ 'H'. " H indicates Negative
IF wa_main_bsis-shkzg EQ 'H'.
wa_main_bsis-dmbtr = wa_main_bsis-dmbtr + wa_bsis-dmbtr.
wa_main_bsis-shkzg = 'H'.
ELSEIF wa_main_bsis-shkzg EQ 'S'.
IF wa_main_bsis-dmbtr GE wa_bsis-dmbtr.
wa_main_bsis-shkzg = 'S'.
wa_main_bsis-dmbtr = wa_main_bsis-dmbtr - wa_bsis-dmbtr.
ELSEIF wa_main_bsis-dmbtr LT wa_bsis-dmbtr.
wa_main_bsis-shkzg = 'H'.
wa_main_bsis-dmbtr = wa_bsis-dmbtr - wa_main_bsis-dmbtr.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDIF.

**********************Display Output*************************

IF wa_main_bsis-shkzg = 'H'.
WRITE:/ 'The Total Amount for the given GL Account ',
space,v_hkont,'is -',wa_main_bsis-dmbtr.
ELSEIF wa_main_bsis-shkzg = 'S'.
WRITE:/ 'The Total Amount for the given GL Account ',
space,v_hkont,'is + ',wa_main_bsis-dmbtr.
ENDIF.

You might also like