Application Development and Automation 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: 
Read only

Loop Calc.problem

Former Member
0 Likes
856

hi experts,

I am facing a problem with a program.The program is for calculation of intrest for individual customer.

For calculation of single customer is correct.But for multiple customer calc. is not correct.Plz check

my code .

My code is.

&----


*& Report ZTEST3

*&

&----


*&

*&

&----


REPORT ZTEST3.

tables : ZTESTINTREST1.

data : btab like ztestintrest1 occurs 0 with header line.

TYPES: BEGIN OF T_IT,

SRLNO(2) TYPE P,

FKDAT LIKE VBRK-ERDAT,

VTEXT LIKE TVZBT-VTEXT,

ZDATE LIKE BSEG-ZFBDT,

DMBTR LIKE BSEG-DMBTR,

END OF T_IT.

data : I_IT type T_IT OCCURS 100,

W_IT like line of i_it,

Z_DMBTR like BSEG-DMBTR.

DATA : Z_ADRNR LIKE T001-ADRNR,

Z_NAME1 LIKE ADRC-NAME1,

Z_NAME2 LIKE ADRC-NAME2,

Z_ZINDT LIKE KNB1-ZINDT,

Z_MATNR LIKE VBRP-MATNR,

Z_FLATN TYPE C LENGTH 4,

Z_TOWER TYPE C LENGTH 1,

Z_AUBEL TYPE VBRP-AUBEL,

Z_PRCTR LIKE VBRP-PRCTR,

Z_PRINT LIKE SY-DATUM ,

Z_INTAT LIKE BSEG-DMBTR,

SRLNO TYPE P LENGTH 2,

Z_MAHDT TYPE VBAK-MAHDT,

Z_GWLDT TYPE VBAK-GWLDT,

Z_LTEXT TYPE CEPCT-LTEXT,

Z_VBELN TYPE VBRK-VBELN ,

Z_INTLY LIKE ZOB_LEGACY_INT-ZDMBTR,

Z_INTPC TYPE P DECIMALS 2 VALUE '0.02',

Z_YDAYS type P LENGTH 3 value 30.

DATA : ITK TYPE TABLE OF ZINTREST,

W_ITK LIKE LINE OF ITK.

TABLES : VBRK,vbrp.

*----


Data : zint_op TYPE BSEG-DMBTR ,

zint_pd TYPE BSEG-DMBTR ,

zint_bl TYPE BSEG-DMBTR ,

zdlc_py type bseg-DMBTR , "Delay charges Paid

ZBLDLCH TYPE BSEG-DMBTR . "Balance Delay Charges

data Z_KUNRG type VBRK-KUNRG.

*********************************************************************

                            • Detailed View and Continuous Print *******************

*************************27/11/2007********************************

*********************************************************************

*select-options Z_cust for VBRK-KUNRG.

*parameters z_PRC type vbrp-prctr.

SELECTION-SCREEN BEGIN OF BLOCK ONE WITH FRAME TITLE TEXT-001.

PARAMETERS: P_TDATE TYPE SY-DATUM DEFAULT SY-DATUM OBLIGATORY.

SELECTION-SCREEN: SKIP 1.

SELECT-OPTIONS: Z_CUST FOR VBRK-KUNRG.

PARAMETERS: Z_PRC TYPE VBRP-PRCTR.

PARAMETERS: werks TYPE bseg-werks.

SELECTION-SCREEN: SKIP 1.

PARAMETERS: P_DETAIL AS CHECKBOX.

SELECTION-SCREEN: SKIP 1.

PARAMETERS: P_CPRINT AS CHECKBOX.

SELECTION-SCREEN END OF BLOCK ONE.

*********************************************************************

data : it_cus type table of vbrk,

w_cus like line of it_cus.

*data : IT_CUS LIKE vbrk OCCURS 0 WITH HEADER LINE.

  • DATA : w_cus like line of it_cus.

DATA : TEST TYPE I.

START-OF-SELECTION.

if z_cust is not initial.

select KUNRG

from VBRK

into corresponding fields of TABLE it_cus

where KUNRG in z_cust.

ENDIF.

IF z_PRC IS NOT INITIAL.

SELECT B~KUNRG

into corresponding fields of table it_cus

FROM VBRP AS A

INNER JOIN VBRK AS B ON BVBELN = AVBELN

WHERE A~werks = werks.

ENDIF.

  • loop at it_cus into w_cus.

delete adjacent duplicates from it_cus COMPARING KUNRG.

  • test = SY-DBCNT.

  • endloop.

*loop at it_cusT.

*IF Z_KUNRG >= z_cust-HIGH.

loop at it_cus into w_cus." where KUNRG =< z_cust-HIGH .

*IF Z_KUNRG =< z_cust-HIGH.

*EXIT.

Z_KUNRG = w_cus-KUNRG.

  • perform GET_ADRESS.

  • perform cal_intrest.

clear w_cus.

clear ITK.

clear W_ITK.

clear I_IT .

free I_IT .

clear w_it.

clear Z_DMBTR.

CLEAR : Z_ADRNR,

Z_NAME1 ,

Z_NAME2 ,

Z_ZINDT ,

Z_MATNR ,

Z_FLATN ,

Z_TOWER ,

Z_AUBEL ,

Z_PRCTR ,

Z_PRINT ,

Z_INTAT ,

SRLNO,

Z_MAHDT ,

Z_GWLDT ,

Z_LTEXT ,

Z_VBELN ,

Z_INTLY.

clear : zint_op,zint_pd,zint_bl,zdlc_py,ZBLDLCH.

  • --------- FORM FOR CALCULATION OF INTREST -----------------

*FORM cal_intrest.

                • Code 3***********

DATA: BEGIN OF ITAB OCCURS 100,

ZLINE TYPE P LENGTH 2,

BELNR LIKE BSEG-BELNR,

SHKZG LIKE BSEG-SHKZG,

DMBTR LIKE BSEG-DMBTR,

VBELN LIKE BSEG-VBELN,

HKONT LIKE BSEG-HKONT,

ZFBDT LIKE BSEG-ZFBDT,

ZBD1T LIKE bseg-ZBD1T,

ZDATE LIKE bseg-bzdat,

REBZG LIKE BSEG-REBZG,

BUKRS LIKE BSEG-BUKRS,

GJAHR LIKE BSEG-GJAHR,

FKDAT LIKE VBRK-FKDAT,

ZTERM LIKE VBRK-ZTERM,

VTEXT LIKE TVZBT-VTEXT,

SGTXT LIKE BSEG-SGTXT,

END OF ITAB.

data : begin of btab1 occurs 0,

zint_op TYPE BSEG-DMBTR ,

zint_pd TYPE BSEG-DMBTR ,

zint_bl TYPE BSEG-DMBTR ,

zdlc_py type bseg-DMBTR , "Delay charges Paid

ZBLDLCH TYPE BSEG-DMBTR ,

end of btab1.

*BREAK BASIS.

SELECT * FROM BSEG

INTO CORRESPONDING FIELDS OF TABLE ITAB

WHERE KUNNR = Z_KUNRG

AND AUGBL = ' '

AND ZFBDT =< SY-DATUM

AND KOART = 'D'.

DELETE ITAB WHERE SHKZG = 'H'.

SORT ITAB BY ZDATE BELNR.

DELETE ITAB WHERE DMBTR = 0.

CLEAR ITAB.

LOOP AT ITAB.

Z_DMBTR = Z_DMBTR + ITAB-DMBTR.

Z_ZINDT = ITAB-ZDATE.

MODIFY ITAB.

ENDLOOP.

IF Z_ZINDT < SY-DATUM.

Z_ZINDT = SY-DATUM.

ENDIF.

*

********************INTEREST CALCULATION******************

DATA: BEGIN OF IT OCCURS 100,

ZLINE TYPE P LENGTH 5,

BELNR LIKE BSEG-BELNR,

AUGBL LIKE BSEG-AUGBL,

BSCHL LIKE BSEG-BSCHL,

SHKZG LIKE BSEG-SHKZG,

DMBTR LIKE BSEG-DMBTR,

VBELN LIKE BSEG-VBELN,

HKONT LIKE BSEG-HKONT,

ZFBDT LIKE BSEG-ZFBDT,

ZBD1T LIKE BSEG-ZBD1T,

ZDATE LIKE bseg-bzdat,

ZDAYS TYPE P LENGTH 5 value '30.0',

ZCAMT LIKE BSEG-DMBTR,

  • ZIAMT LIKE BSEG-DMBTR,

ZIAMT TYPE I,

REBZG LIKE BSEG-REBZG,

BUKRS LIKE BSEG-BUKRS,

GJAHR LIKE BSEG-GJAHR,

ZTERM LIKE BSEG-ZTERM,

Z_NAME1 LIKE ADRC-NAME1, "customer Name

Z_NAME2 LIKE ADRC-NAME2,

Z_FLATN TYPE C LENGTH 4, "Flat No

Z_TOWER TYPE C LENGTH 1, " Towere No.

Z_LTEXT TYPE CEPCT-LTEXT,

sgtxt TYPE BSEG-SGTXT,

BLART TYPE BKPF-BLART,

BLDAT TYPE BKPF-BLDAT,

ZUONR TYPE BSEG-ZUONR,

DLCHR TYPE c length 4,

Z_PRCTR type VBRP-PRCTR,

WERKS TYPE BSEG-WERKS,

END OF IT.

DATA : WERKS2 LIKE BSEG-WERKS.

data : Z_CUST1 like VBRK-KUNRG.

Z_CUST1 = Z_KUNRG.

DATA: W_IT1 LIKE IT OCCURS 100 WITH HEADER LINE.

DATA: IT1 LIKE IT OCCURS 100 WITH HEADER LINE.

DATA: I_VBRK LIKE VBRK OCCURS 100 WITH HEADER LINE.

*BREAK BASIS.

SELECT * FROM BSEG

INTO CORRESPONDING FIELDS OF TABLE IT

WHERE KUNNR = Z_KUNRG

AND ZFBDT =< Z_ZINDT

AND KOART = 'D'.

****************************************************************

SELECT * FROM VBRK

INTO CORRESPONDING FIELDS OF TABLE I_VBRK

WHERE KUNRG = Z_KUNRG.

LOOP AT I_VBRK WHERE VBTYP = 'N'.

DELETE IT WHERE VBELN = I_VBRK-VBELN.

DELETE IT WHERE VBELN = I_VBRK-SFAKN.

ENDLOOP.

****************************************************************

LOOP AT IT.

IF IT-SHKZG = 'S'.

IT-ZDATE = IT-ZFBDT + IT-ZBD1T.

ELSE.

IT-ZDATE = IT-ZFBDT.

ENDIF.

SELECT SINGLE BLART BLDAT

FROM BKPF

INTO (IT-BLART, IT-BLDAT)

WHERE BUKRS = IT-BUKRS AND BELNR = IT-BELNR AND GJAHR = IT-GJAHR.

MODIFY IT.

ENDLOOP.

*********************************************************************

                          • Deleting Reverse and Reversed Entry *******************

*************************27/11/2007********************************

*********************************************************************

SORT IT BY AUGBL.

LOOP AT IT WHERE BLART = 'RD'.

DELETE IT WHERE AUGBL = IT-AUGBL.

CLEAR IT.

ENDLOOP.

*********************************************************************

SORT IT BY ZDATE BELNR.

IF P_TDATE <> SY-DATUM.

DELETE IT WHERE ZDATE > P_TDATE.

ENDIF.

LOOP AT IT.

IF IT-ZDATE > Z_ZINDT.

DELETE IT INDEX SY-TABIX.

ELSE.

IT-ZLINE = SY-TABIX.

MODIFY IT.

ENDIF.

ENDLOOP.

*BREAK BASIS.

LOOP AT IT.

IF W_IT1 IS INITIAL.

IF IT-SHKZG = 'S'.

IT-ZCAMT = IT-DMBTR.

ELSE.

IT-ZCAMT = - IT-DMBTR.

ENDIF.

W_IT1 = IT.

APPEND W_IT1.

ELSE.

LOOP AT W_IT1.

IF IT-SHKZG = 'S'.

IT-ZCAMT = W_IT1-ZCAMT + IT-DMBTR.

ELSE.

IT-ZCAMT = W_IT1-ZCAMT - IT-DMBTR.

ENDIF.

W_IT1 = IT.

W_IT1-ZCAMT = IT-ZCAMT.

MODIFY W_IT1.

ENDLOOP.

ENDIF.

MODIFY IT.

ENDLOOP.

REFRESH W_IT1.

CLEAR W_IT1.

W_IT1[] = IT[].

LOOP AT W_IT1.

W_IT1-ZLINE = W_IT1-ZLINE - 1.

MODIFY W_IT1.

ENDLOOP.

*BREAK BASIS.

LOOP AT IT.

READ TABLE W_IT1 WITH KEY ZLINE = IT-ZLINE.

IF SY-SUBRC = 0.

IT-ZDAYS = W_IT1-ZDATE - IT-ZDATE.

ELSE.

IT-ZDAYS = 0.

ENDIF.

IF IT-ZCAMT < 0.

IT-ZIAMT = 0.

ELSE.

IT-ZIAMT = ( IT-ZCAMT * IT-ZDAYS * Z_INTPC ) / ( Z_YDAYS ).

ENDIF.

IF IT-ZFBDT < '20070328'.

IT-ZIAMT = 0.

ENDIF.

MODIFY IT.

Z_INTAT = Z_INTAT + IT-ZIAMT.

ENDLOOP.

SORT IT BY ZDATE DESCENDING BELNR DESCENDING.

LOOP AT IT.

IF IT-ZDATE < P_TDATE.

IT-ZDAYS = P_TDATE - IT-ZDATE.

IT-ZIAMT = ( IT-ZCAMT * IT-ZDAYS * Z_INTPC ) / ( Z_YDAYS ).

if IT-ZIAMT < 0. "modify in demand & intimation letter

IT-ZIAMT = 0.

endif.

Z_INTAT = Z_INTAT + IT-ZIAMT.

MODIFY IT.

ENDIF.

EXIT.

ENDLOOP.

  • BREAK-POINT.

data : zDLCHR type bseg-dmbtr.

  • KRIAN

sort IT by ZLINE.

LOOP AT IT INTO W_IT1.

if W_IT1-blart NE 'DZ'.

W_IT1-zuonr = ''.

endif.

IF W_IT1-SHKZG = 'H'.

W_IT1-DMBTR = - W_IT1-DMBTR .

ENDIF.

*********************************************************************

                      • Charging Delay Charges only where applicable ************

*************************27/11/2007********************************

*********************************************************************

*if W_IT1-ZIAMT > 0.

  • W_IT1-DLCHR = '500'.

  • zDLCHR = zDLCHR + 500.

*endif.

IF W_IT1-ZIAMT >= 1.

  • IF W_IT1-BLART <> 'DR'. "original before 03.06.2008

IF W_IT1-BLART <> 'DR' . "kiran change on 03.06.2008

if W_IT1-BLART <> 'AB'. "kiran change on 03.06.2008

W_IT1-DLCHR = '500'.

ZDLCHR = ZDLCHR + 500.

endif. "kiran change on 03.06.2008

ENDIF.

ENDIF.

*********************************************************************

MOVE-CORRESPONDING W_IT1 TO W_ITK.

APPEND W_ITK TO ITK.

ENDLOOP.

  • ----------------

  • Variabale for Intrest paid,Op. Intrest & Intrest Pending

*Data : zint_op TYPE BSEG-DMBTR ,

  • zint_pd TYPE BSEG-DMBTR ,

  • zint_bl TYPE BSEG-DMBTR ,

  • zdlc_py type bseg-DMBTR , "Delay charges Paid

  • ZBLDLCH TYPE BSEG-DMBTR . "Balance Delay Charges

**----


********************************(PART-2)*******************************

  • loop for delay charges paid calculations

*loop at it_cus into w_cus.

LOOP AT IT WHERE SHKZG = 'S'.

SELECT * FROM BSEG

INTO CORRESPONDING FIELDS OF TABLE IT1

WHERE BELNR = IT-BELNR

AND BUKRS = IT-BUKRS

AND GJAHR = IT-GJAHR

AND SHKZG = 'H'

AND HKONT = '0037990200'.

IF SY-SUBRC = 0.

LOOP AT IT1.

zdlc_py = zdlc_py + IT1-DMBTR.

ENDLOOP.

ENDIF.

  • move-corresponding IT1 TO BTAB1.

ENDLOOP.

ZBLDLCH = zDLCHR - zdlc_py.

  • loop for intrest paid calcualtions

LOOP AT IT WHERE SHKZG = 'S' and ZFBDT > '20070328'.

SELECT * FROM BSEG

INTO CORRESPONDING FIELDS OF TABLE IT1

WHERE BELNR = IT-BELNR

AND BUKRS = IT-BUKRS

AND GJAHR = IT-GJAHR

AND SHKZG = 'H'

AND HKONT = '0037990100'.

IF SY-SUBRC = 0.

LOOP AT IT1.

Z_INTAT = Z_INTAT - IT1-DMBTR.

zint_pd = zint_pd + IT1-DMBTR.

ENDLOOP.

ENDIF.

  • WERKS2 = IT1-WERKS.

ENDLOOP.

*clear zint_pd.

WERKS2 = it-WERKS.

********************************(PART-3)*******************************

data : k_ZCDATE like ZOB_LEGACY_INT-ZCDATE.

SELECT SINGLE ZDMBTR ZCDATE

FROM ZOB_LEGACY_INT

INTO (Z_INTLY,k_ZCDATE)

WHERE ZKUNNR = Z_KUNRG.

zint_op = Z_INTLY.

IF SY-SUBRC = 0.

Z_INTAT = Z_INTAT + Z_INTLY.

ENDIF.

*clear zint_op.

********************************(PART-4)*******************************

IF Z_INTAT < 0.

Z_INTAT = 0.

ENDIF.

zint_bl = Z_INTAT.

  • btab-zint_bl1 = zint_bl.

  • append btab.

  • modify ZTESTINTREST1 from btab.

*clear zint_bl.

                                                          • DELETEING ROW'S BEFOR 28.03.2007 ****** AS PER GOPI.

  • IT-ZFBDT < '28.03.2007'

DELETE ITK WHERE ZFBDT < '20070328'.

IF ZBLDLCH < 0 . "IF DELAY CHARGES ARE LESS THAN ZERO MAKE IT ZERO

ZBLDLCH = 0.

ENDIF.

btab-P_TDATE = P_TDATE.

btab-z_cust2 = z_cust1.

btab-zint_op1 = zint_op.

btab-zint_pd1 = zint_pd.

btab-zint_BL1 = zint_BL.

btab-zdlc_py1 = zdlc_py.

btab-ZBLDLCH1 = ZBLDLCH.

APPEND BTAB ..

  • SELECT P_TDATE z_cust2 zint_op1 zint_pd1 zint_bl1

modify ZTESTINTREST1 from btab.

ZTESTINTREST1 is table . this table contain the values after calc. of intrest.

Thks in advance.

Regds

Vipul

4 REPLIES 4
Read only

Former Member
0 Likes
791

hi,

i found its hard to go through the entire code. Can u get back here with more clarification about the isssue.

ThANK you

Read only

Former Member
0 Likes
791

hi,

Actually problem is in the table VBRK 11 billing document for a particular customer is there.

when i debugg the program for a single customer it work properly.If you put for two customer it mixup.

Mixup means generally first it calc. for first customer the in loop then for second customer.

But what happening is for first customer loop directly goes to endloop without any calc.and for second customer it work properly.At last the output is coming only the last customer with calc.

Read only

0 Likes
791

code seems to be so long to understand...anyway i found one error at first...

if z_cust is not initial.

select KUNRG

from VBRK

into corresponding fields of TABLE it_cus

where KUNRG in z_cust.

ENDIF.

IF z_PRC IS NOT INITIAL.

SELECT B~KUNRG

into corresponding fields of table it_cus

FROM VBRP AS A

INNER JOIN VBRK AS B ON BVBELN = AVBELN

WHERE A~werks = werks.

ENDIF.

change this to one query....as

SELECT B~KUNRG

into corresponding fields of table it_cus

FROM VBRP AS A

INNER JOIN VBRK AS B ON BVBELN = AVBELN

WHERE A~werks = werks

AND B~KUNRG IN z_cust.

Read only

Former Member
0 Likes
791

Hi,

Just check whether u give any condition in the loop or not?

Then while debugging , check the values in that internal table before entering into that particular loop.

Hope this helps u.

Thanks.