09-16-2007 12:55 PM
Hi SDN Experts,
i ve a problem with my report, that is,
hi all this is the complete report. which i ve devoloped to display Opening balance and Line Items and Closing Balance.
input for this report is: GL account no , comp code and posting date. o/p is: it will print , Opening balance then Line Items and Closing balance.
if u give 1 GL account it is working good but if u give range it is giving wrong O.Balance but Line Items are correct in both cases, the problem is with O.Bal only.(it is adding to first O.Bal for every time, i am able to finding the in which loop i ve gone wrong )
in my code i am using Loop at gt_data for printing O.Bal. and It_ITEMES tab for Line items.
the requirement is i want 2 print O.Bal & L.Items & C.Bal for each GL account.
if posible, just execute once and help me plz. its very urgent for me..
this is my complete code:
&----
*& Report ZBSR_GLITEMDISPLAY *
*& *
&----
*& *
*& *
&----
REPORT ZBSR_GLITEMDISPLAY NO STANDARD PAGE HEADING. " LINE-SIZE 155 LINE-COUNT 30(3) .
TABLES: GLT0, " G/L account master record transaction figures
BSEG, " Accounting Document Segment for Line Items
BKPF. " Accounting Document Header
DATA: count type i,
l_len(4) type n,
month(2) type n,
debit like glt0-tslvt,
credit like glt0-tslvt,
result like glt0-tslvt.
DATA: v_day(2) type c,
v_mon(2) type c,
v_year(4) type c,
v_date like sy-datum,
f_date type sy-datum,
l_date type sydatum,
V_TOTAL LIKE BSEG-DMBTR,
SUM0 LIKE glt0-tslvt,
SUM1 LIKE glt0-tslvt,
SUM2 LIKE glt0-tslvt,
SUM3 LIKE glt0-tslvt,
add like glt0-tslvt.
TYPES: BEGIN OF T_BSEG,
MANDT LIKE BSEG-MANDT,
BUKRS LIKE BSEG-BUKRS, "comp code
BELNR LIKE BSEG-BELNR, "Accounting Document Number
GJAHR LIKE BSEG-GJAHR, "Fiscal year
SHKZG LIKE BSEG-SHKZG, "Debit / Credit indicator
DMBTR LIKE BSEG-DMBTR, "Amount in local currency
PSWSL LIKE BSEG-PSWSL,
HKONT LIKE BSEG-HKONT, "GL ac no
END OF t_BSEG.
DATA : it_bseg type standard table of t_bseg with header line.
WA_BSEG type T_BSEG.
TYPES : BEGIN OF T_BKPF,
MANDT type BKPF-MANDT,
BUKRS type BKPF-BUKRS, "comp code
BELNR type BKPF-BELNR, "Accounting Document Number
GJAHR TYPE BKPF-GJAHR, "Fiscal year
BUDAT type BKPF-BUDAT, "Document type
END OF T_BKPF.
DATA : it_bkpf type STANDARD TABLE OF T_BKPF with header line.
WA_BKPF LIKE it_BKPF.
TYPES: BEGIN OF T_SKAT,
MANDT TYPE MANDT,
SAKNR TYPE SAKNR,
TXT50 TYPE TXT50,
END OF T_SKAT.
DATA: IT_SKAT TYPE STANDARD TABLE OF T_SKAT WITH HEADER LINE.
WA_SKAT LIKE IT_SKAT.
TYPES : BEGIN OF T_ITEMS,
MANDT TYPE MANDT,
HKONT TYPE HKONT,
INCRDR(2),
BUKRS TYPE BUKRS,
BELNR LIKE BSEG-BELNR,
SHKZG TYPE SHKZG,
DMBTR TYPE DMBTR,
PSWSL TYPE PSWSL,
BUDAT TYPE BUDAT,
TXT50 TYPE TXT50,
END OF T_ITEMS.
DATA : it_items type STANDARD TABLE OF T_ITEMS with header line,
wa_items type T_ITEMS.
int table for calculating opening balance from 16 periods ************
DATA: BEGIN OF gt_data OCCURS 0 ,
RCLNT LIKE GLT0-RCLNT,
BUKRS LIKE GLT0-BUKRS,
DRCRK LIKE GLT0-DRCRK,
RYEAR LIKE GLT0-RYEAR,
RACCT LIKE GLT0-RACCT,
TSLVT LIKE GLT0-TSLVT,
TSL01 LIKE GLT0-TSL01,
TSL02 LIKE GLT0-TSL02,
TSL03 LIKE GLT0-TSL03,
TSL04 LIKE GLT0-TSL04,
TSL05 LIKE GLT0-TSL05,
TSL06 LIKE GLT0-TSL06,
TSL07 LIKE GLT0-TSL07,
TSL08 LIKE GLT0-TSL08,
TSL09 LIKE GLT0-TSL09,
TSL10 LIKE GLT0-TSL10,
TSL11 LIKE GLT0-TSL11,
TSL12 LIKE GLT0-TSL12,
TSL13 LIKE GLT0-TSL13,
TSL14 LIKE GLT0-TSL14,
TSL15 LIKE GLT0-TSL15,
TSL16 LIKE GLT0-TSL16,
HSLVT LIKE GLT0-HSLVT,
HSL01 LIKE GLT0-HSL01,
HSL02 LIKE GLT0-HSL02,
HSL03 LIKE GLT0-HSL03,
HSL04 LIKE GLT0-HSL04,
HSL05 LIKE GLT0-HSL05,
HSL06 LIKE GLT0-HSL06,
HSL07 LIKE GLT0-HSL07,
HSL08 LIKE GLT0-HSL08,
HSL09 LIKE GLT0-HSL09,
HSL10 LIKE GLT0-HSL10,
HSL11 LIKE GLT0-HSL11,
HSL12 LIKE GLT0-HSL12,
HSL13 LIKE GLT0-HSL13,
HSL14 LIKE GLT0-HSL14,
HSL15 LIKE GLT0-HSL15,
HSL16 LIKE GLT0-HSL16,
TSL_total like GLT0-TSLVT,
Start_balance like GLT0-TSLVT,
end_balance like GLT0-TSLVT,
END OF gt_data.
DATA: WA_GT_DATA LIKE GT_DATA OCCURS 0 with header line.
...selections.........................................................
SELECT-OPTIONS: SO_RACCT FOR GLT0-RACCT, " NO INTERVALS NO-EXTENSION,
SO_BUKRS FOR GLT0-BUKRS NO INTERVALS NO-EXTENSION.
PARAMETERS: P_DATE LIKE SY-DATUM.
*PARAMETERS : LOC_CUR AS CHECKBOX DEFAULT 'X'.
AT SELECTION-SCREEN ON SO_RACCT.
IF SO_RACCT IS INITIAL.
MESSAGE E000(ZGLM).
ELSEIF SO_RACCT-LOW IS INITIAL AND SO_RACCT-HIGH IS NOT INITIAL.
SO_RACCT-LOW = '0000000000'.
ELSEIF GLT0-RACCT = SO_RACCT AND BSEG-ALTKT = SO_RACCT.
IF SY-SUBRC <> 0.
MESSAGE E001(ZGLM).
ENDIF.
ENDIF.
AT SELECTION-SCREEN ON SO_BUKRS.
if SO_BUKRS-LOW IS INITIAL.
MESSAGE E002(ZGLM).
ELSEIF BKPF-BUKRS = SO_BUKRS AND GLT0-BUKRS = SO_BUKRS.
IF SY-SUBRC <> 0.
MESSAGE E003(ZGLM).
ENDIF.
ENDIF.
AT SELECTION-SCREEN ON P_DATE.
v_day = '01'.
v_mon = p_date+4(2).
v_year = p_date+0(4).
concatenate v_year v_mon v_day into v_date.
IF p_date IS INITIAL.
MESSAGE E004(ZGLM).
ELSEIF P_DATE > V_DATE.
MESSAGE E005(ZGLM).
ENDIF.
START-OF-SELECTION.
v_day = '01'.
v_mon = p_date+4(2).
v_year = p_date+0(4).
concatenate v_year v_mon v_day into v_date.
month = v_mon.
IF NOT P_DATE IS INITIAL.
CALL FUNCTION 'HR_JP_MONTH_BEGIN_END_DATE'
EXPORTING
iv_date = p_date
IMPORTING
EV_MONTH_BEGIN_DATE = f_date
EV_MONTH_END_DATE = l_date.
ENDIF.
l_len = p_date+0(4).
CLEAR wa_gt_data.
SELECT MANDT
BUKRS
BELNR
GJAHR
BUDAT
FROM BKPF INTO TABLE IT_BKPF
WHERE BUKRS in SO_BUKRS
and ( BUDAT BETWEEN f_date AND p_date ).
IF NOT IT_BKPF[] IS INITIAL.
SELECT MANDT
BUKRS
BELNR
GJAHR
SHKZG
DMBTR
PSWSL
HKONT
FROM BSEG INTO TABLE IT_BSEG
FOR ALL ENTRIES IN IT_BKPF
WHERE BUKRS EQ IT_BKPF-BUKRS
AND BELNR EQ IT_BKPF-BELNR
AND GJAHR EQ IT_BKPF-GJAHR
AND HKONT in SO_RACCT.
IF SY-SUBRC NE 0.
MESSAGE I005(ZGLM).
ENDIF.
ELSE.
MESSAGE I005(ZGLM). " IT_BKPF tab is empty'
ENDIF.
SELECT MANDT
SAKNR
TXT50
FROM SKAT INTO TABLE IT_SKAT
FOR ALL ENTRIES IN IT_BSEG
WHERE SAKNR EQ IT_BSEG-HKONT.
SORT IT_BKPF BY MANDT BUKRS BELNR GJAHR.
SORT IT_BSEG BY MANDT BUKRS BELNR GJAHR.
LOOP AT IT_BSEG.
IT_ITEMS-BUKRS = IT_BSEG-BUKRS.
IT_ITEMS-BELNR = IT_BSEG-BELNR.
IT_ITEMS-HKONT = IT_BSEG-HKONT.
IT_ITEMS-SHKZG = IT_BSEG-SHKZG.
IT_ITEMS-MANDT = IT_BSEG-MANDT.
IT_ITEMS-PSWSL = IT_BSEG-PSWSL.
IF IT_BSEG-SHKZG = 'H'.
IT_BSEG-DMBTR = ( -1 ) * IT_BSEG-DMBTR.
IT_ITEMS-INCRDR = 'Cr'.
ELSEIF IT_BSEG-SHKZG = 'S'.
IT_ITEMS-INCRDR = 'Dr'.
ENDIF.
MODIFY IT_BSEG.
IT_ITEMS-DMBTR = IT_BSEG-DMBTR.
READ TABLE IT_BKPF WITH KEY MANDT = IT_BSEG-MANDT
BUKRS = IT_BSEG-BUKRS
BELNR = IT_BSEG-BELNR
GJAHR = IT_BSEG-GJAHR
BINARY SEARCH.
IF SY-SUBRC NE 0.
MESSAGE E006(ZGLM).
ELSE.
IT_ITEMS-BUDAT = IT_BKPF-BUDAT.
ENDIF.
LOOP AT IT_SKAT WHERE SAKNR = IT_BSEG-HKONT.
IT_ITEMS-TXT50 = IT_SKAT-TXT50.
ENDLOOP.
APPEND IT_ITEMS.
CLEAR: IT_BSEG,
IT_BKPF,
IT_ITEMS,
IT_SKAT.
ENDLOOP.
SORT IT_ITEMS BY HKONT BUDAT.
LOOP AT IT_ITEMS.
WA_ITEMS = IT_ITEMS.
**
**AT NEW HKONT.
IF SY-TABIX NE 1.
NEW-PAGE.
ENDIF.
*******************************
IF LOC_CUR = 'X'.
SELECT RCLNT
BUKRS
DRCRK
RYEAR
RACCT
HSLVT
HSL01
HSL02
HSL03
HSL04
HSL05
HSL06
HSL07
HSL08
HSL09
HSL10
HSL11
HSL12
HSL13
HSL14
HSL15
HSL16
FROM GLT0 INTO CORRESPONDING FIELDS OF TABLE gt_data
where RACCT IN SO_RACCT and
BUKRS IN SO_BUKRS and RYEAR = l_len.
LOOP AT IT_ITEMS.
WA_ITEMS = IT_ITEMS.
AT NEW HKONT.
IF SY-TABIX NE 1.
NEW-PAGE.
ENDIF.
LOOP AT gt_data into wa_gt_data where RACCT in SO_RACCT.
CLEAR wa_gt_data-Start_balance.
CASE MONTH.
WHEN '00'.
wa_gt_data-Start_balance = wa_gt_data-hslvt.
perform display_data.
when '01'.
wa_gt_data-Start_balance = wa_gt_data-hslvt.
perform display_data.
when '02'.
wa_gt_data-Start_balance = wa_gt_data-hslvt + wa_gt_data-hsl01.
perform display_data.
when '03'.
wa_gt_data-Start_balance = wa_gt_data-hslvt + wa_gt_data-hsl01 +
wa_gt_data-hsl02.
perform display_data.
when '04'.
wa_gt_data-Start_balance = wa_gt_data-hslvt + wa_gt_data-hsl01 +
wa_gt_data-hsl02 + wa_gt_data-hsl03.
perform display_data.
when '05'.
wa_gt_data-Start_balance = wa_gt_data-hslvt + wa_gt_data-hsl01 +
wa_gt_data-hsl02 + wa_gt_data-hsl03 +
wa_gt_data-hsl04.
perform display_data.
when '06'.
wa_gt_data-Start_balance = wa_gt_data-hslvt + wa_gt_data-hsl01 +
wa_gt_data-hsl02 + wa_gt_data-hsl03 +
wa_gt_data-hsl04 + wa_gt_data-hsl05.
perform display_data.
when '07'.
wa_gt_data-Start_balance = wa_gt_data-hslvt + wa_gt_data-hsl01 +
wa_gt_data-hsl02 + wa_gt_data-hsl03 +
wa_gt_data-hsl04 + wa_gt_data-hsl05 +
wa_gt_data-hsl06.
perform display_data.
when '08'.
wa_gt_data-Start_balance = wa_gt_data-hslvt + wa_gt_data-hsl01 +
wa_gt_data-hsl02 + wa_gt_data-hsl03 +
wa_gt_data-hsl04 + wa_gt_data-hsl05 +
wa_gt_data-hsl06 + wa_gt_data-hsl07.
perform display_data.
when '09'.
wa_gt_data-Start_balance = wa_gt_data-hslvt + wa_gt_data-hsl01 +
wa_gt_data-hsl02 + wa_gt_data-hsl03 +
wa_gt_data-hsl04 + wa_gt_data-hsl05 +
wa_gt_data-hsl06 + wa_gt_data-hsl07 +
wa_gt_data-hsl08.
perform display_data.
when '10'.
wa_gt_data-Start_balance = wa_gt_data-hslvt + wa_gt_data-hsl01 +
wa_gt_data-hsl02 + wa_gt_data-hsl03 +
wa_gt_data-hsl04 + wa_gt_data-hsl05 +
wa_gt_data-hsl06 + wa_gt_data-hsl07 +
wa_gt_data-hsl08 + wa_gt_data-hsl09.
perform display_data.
when '11'.
wa_gt_data-Start_balance = wa_gt_data-hslvt + wa_gt_data-hsl01 +
wa_gt_data-hsl02 + wa_gt_data-hsl03 +
wa_gt_data-hsl04 + wa_gt_data-hsl05 +
wa_gt_data-hsl06 + wa_gt_data-hsl07 +
wa_gt_data-hsl08 + wa_gt_data-hsl09 +
wa_gt_data-hsl10.
perform display_data.
when '12'.
wa_gt_data-Start_balance = wa_gt_data-hslvt + wa_gt_data-hsl01 +
wa_gt_data-hsl02 + wa_gt_data-hsl03 +
wa_gt_data-hsl04 + wa_gt_data-hsl05 +
wa_gt_data-hsl06 + wa_gt_data-hsl07 +
wa_gt_data-hsl08 + wa_gt_data-hsl09 +
wa_gt_data-hsl10 + wa_gt_data-hsl11.
wa_gt_data-end_balance = wa_gt_data-hsl13 + wa_gt_data-hsl14 +
wa_gt_data-hsl15 + wa_gt_data-hsl16.
MOVE wa_gt_data-end_balance TO SUM3.
perform display_data.
ENDCASE.
ENDLOOP.
ENDIF.
*****************************
LOOP AT IT_ITEMS.
WA_ITEMS = IT_ITEMS.
AT NEW HKONT.
IF SY-TABIX NE 1.
NEW-PAGE..
ENDIF.
WRITE: /50 'GL ACCOUNT :',WA_ITEMS-HKONT COLOR 7.
WRITE: /50 'COMPANY CODE:',WA_ITEMS-BUKRS COLOR 7.
WRITE: /50 'POSTING DATE:',P_DATE COLOR 7.
WRITE: /123 'OPENING BALANCE ' , result color 3.
move result to SUM0.
CLEAR RESULT.
WRITE: /19(145) SY-ULINE.
WRITE: /19 SY-VLINE.
FORMAT COLOR COL_HEADING.
WRITE: 20 'GL A/C NO',
30 SY-VLINE,
32 'COMP CODE',
43 SY-VLINE,
45 ' GL ACCOUNT DISCRIPTION',
88 SY-VLINE,
90 'POSTING DATE',
102 SY-VLINE,
105 'A/C DOC NO',
115 SY-VLINE,
120 'CR or DR',
130 SY-VLINE,
132 'CURRENCY',
140 SY-VLINE,
141 'Amt IN HOME CURRENCY ',
163 SY-VLINE.
FORMAT COLOR OFF.
WRITE: /19(145) SY-ULINE.
WRITE: /19 SY-VLINE.
WRITE : 20 WA_ITEMS-HKONT,
30 SY-VLINE,
32 WA_ITEMS-BUKRS,
43 SY-VLINE,
45 WA_ITEMS-TXT50,
88 SY-VLINE,
90 WA_ITEMS-BUDAT,
102 SY-VLINE,
105 WA_ITEMS-BELNR,
115 SY-VLINE,
120 WA_ITEMS-INCRDR,
130 SY-VLINE,
132 WA_ITEMS-PSWSL,
140 SY-VLINE,
145 WA_ITEMS-DMBTR,
163 SY-VLINE.
COUNT = 1.
sum.
V_TOTAL = IT_ITEMS-DMBTR.
ENDAT.
IF COUNT NE 1.
WRITE:/19 SY-VLINE.
write: 30 SY-VLINE,
32 WA_ITEMS-BUKRS,
43 SY-VLINE,
45 WA_ITEMS-TXT50,
88 SY-VLINE,
90 WA_ITEMS-BUDAT,
102 SY-VLINE,
105 WA_ITEMS-BELNR,
115 SY-VLINE,
120 WA_ITEMS-INCRDR,
130 SY-VLINE,
132 WA_ITEMS-PSWSL,
140 SY-VLINE,
145 WA_ITEMS-DMBTR,
163 SY-VLINE.
ENDIF.
AT END OF HKONT.
WRITE:/19(145) SY-ULINE.
WRITE:19 SY-VLINE.
WRITE:/125 ' TOTOAL '.
WRITE:145 V_TOTAL COLOR 3 .
MOVE V_TOTAL TO SUM1.
WRITE:163 SY-VLINE.
WRITE:19 SY-VLINE.
WRITE:/19(145) SY-ULINE.
ENDAT.
CLEAR: WA_ITEMS,
COUNT,
IT_ITEMS.
AT end of hkont.
PERFORM CLOSEBAL.
ENDAT.
ENDLOOP.
&----
*& Form display_data
&----
text
----
FORM display_data.
LOOP AT gt_data into wa_gt_data.
if wa_gt_data-drcrk = 'H'.
debit = debit + wa_gt_data-Start_balance.
else.
credit = credit + wa_gt_data-Start_balance.
endif.
result = debit + credit.
*ENDLOOP.
ENDFORM. "display_data
FORM CLOSEBAL.
IF MONTH EQ '12'.
SUM2 = SUM0 + SUM1 + SUM3.
WRITE: /123 'CLOSING BALANCE FROM 12th MONTH', SUM3 color 3.
CLEAR: SUM0,
SUM2,
SUM3.
ELSE.
skip .
SUM2 = SUM0 + SUM1.
WRITE: /123 'CLOSING BALANCE ', SUM2 color 3.
CLEAR: SUM0,
SUM2.
ENDIF.
ENDFORM.
Thanks in Advance, will get Full Rewards,
Sudharsan.
id is: sudharsan.batta@gmail.com.
09-16-2007 1:05 PM
Hi sudarshan,
I think u haven't cleared the variable in which u r taking the value of Opening balance that is why u r getting the wrong opening balance.
Please do refresh/clear the internal table in START-OF-SELECTION event.
if useful reward the points.
Regards,
Rajesh Akarte
09-17-2007 3:10 AM
hi rajesh thanks for ur replay,
but as u told, i have clear my intarnal table. even though its giving wrong. here it is adding O.bal to previous one.
plz help on this,
Regards,
sudharsan.