You are on page 1of 6

FORM f_get_arageing. REFRESH it_lfb1.

* Select from Vencor Master (Company Code wise) SELECT bukrs lifnr busab FROM lfb1 INTO CORRESPONDING FIELDS OF TABLE it_lfb1 WHERE busab IN s_busab AND lifnr IN s_lifnr AND bukrs IN s_bukrs AND EXISTS ( SELECT lfa1~lifnr FROM lfa1 WHERE lfa1~lifnr = lfb1~lifnr AND lfa1~ktokk NE 'EMPV' ). IF sy-subrc <> 0 . MESSAGE e999 WITH 'No Values found' . ENDIF. * Select for Vendors (Open Invoice) SELECT bukrs lifnr umskz gjahr belnr budat bldat shkzg blart dmbtr wrbtr waers zterm rebzg zfbdt zbd1t zbd2t zbd3t FROM bsik INTO CORRESPONDING FIELDS OF TABLE it_inv FOR ALL ENTRIES IN it_lfb1 WHERE lifnr EQ it_lfb1-lifnr AND bsik~budat LE p_budat AND bsik~bukrs IN s_bukrs AND umskz NE 'F' AND EXISTS ( SELECT bkpf~stblg FROM bkpf WHERE bkpf~bukrs = bsik~bukrs AND bkpf~belnr = bsik~belnr AND bkpf~gjahr = bsik~gjahr AND bkpf~stblg EQ ' '). LOOP AT it_inv ASSIGNING <fs_inv> WHERE blart = 'RE'. SELECT SINGLE

awkey FROM bkpf INTO <fs_inv>-awkey WHERE bukrs = 'DECL' AND belnr = <fs_inv>-belnr AND gjahr = <fs_inv>-gjahr. MOVE <fs_inv>-awkey(10) TO <fs_inv>-refkey. MOVE <fs_inv>-awkey+10(4) TO <fs_inv>-refyear. SELECT SINGLE stblg FROM rbkp INTO <fs_inv>-stblg WHERE belnr = <fs_inv>-refkey AND gjahr = <fs_inv>-refyear AND stblg = ' '. IF sy-subrc <> 0. <fs_inv>-flag = 'X'. ENDIF. ENDLOOP. DELETE it_inv WHERE flag EQ 'X'. SORT it_inv BY bukrs lifnr gjahr belnr budat. SORT it_inv ASCENDING BY bukrs lifnr gjahr belnr budat. CLEAR wa_final. LOOP AT it_inv ASSIGNING <fs_inv>. CALL FUNCTION 'FI_FIND_PAYMENT_CONDITIONS' EXPORTING i_zterm = <fs_inv>-zterm i_bldat = <fs_inv>-bldat i_budat = <fs_inv>-budat IMPORTING e_t052 = myt052 EXCEPTIONS terms_incorrect = 1 terms_not_found = 2 no_date_entered = 3 no_day_limit_found = 4 OTHERS = 5. IF sy-subrc <> 0. CLEAR myt052. ENDIF. <fs_inv>-zbd1t = myt052-ztag1. <fs_inv>-zbd2t = myt052-ztag2. <fs_inv>-zbd3t = myt052-ztag3. CALL FUNCTION 'NET_DUE_DATE_GET' EXPORTING i_zfbdt = <fs_inv>-zfbdt i_zbd1t = <fs_inv>-zbd1t

i_zbd2t i_zbd3t i_shkzg i_rebzg i_koart IMPORTING e_faedt SELECT INTO FROM WHERE AND SELECT INTO FROM WHERE AND SELECT INTO FROM WHERE AND

= = = = =

<fs_inv>-zbd2t <fs_inv>-zbd3t <fs_inv>-shkzg <fs_inv>-rebzg 'D'

= <fs_inv>-duedt.

SINGLE busab <fs_inv>-busab lfb1 bukrs = <fs_inv>-bukrs lifnr = <fs_inv>-lifnr. SINGLE sname <fs_inv>-sname t001s bukrs = <fs_inv>-bukrs busab = <fs_inv>-busab. SINGLE ltext <fs_inv>-ltext t003t spras = sy-langu blart = <fs_inv>-blart.

MOVE-CORRESPONDING <fs_inv> TO wa_final. APPEND wa_final TO it_final. ENDLOOP. DELETE it_inv WHERE busab NOT IN s_busab . DELETE it_inv WHERE lifnr NOT IN s_lifnr . DELETE it_inv WHERE bukrs NOT IN s_bukrs . SORT it_final. DELETE it_final WHERE busab NOT IN s_busab . DELETE it_final WHERE lifnr NOT IN s_lifnr . DELETE it_final WHERE bukrs NOT IN s_bukrs . DELETE ADJACENT DUPLICATES FROM it_final . LOOP AT it_final ASSIGNING <fs_final>. SELECT SINGLE FROM INTO WHERE SELECT SINGLE FROM INTO WHERE name1 lfa1 <fs_final>-name1 lifnr = <fs_final>-lifnr. waers t001 <fs_final>-waers bukrs = <fs_final>-bukrs.

INSERT <fs_final> INTO TABLE ht_final. ENDLOOP. REFRESH it_final.

* Collect Total Vendor Advance REFRESH it_totadv. LOOP AT it_inv ASSIGNING <fs_inv>. LOOP AT it_adv ASSIGNING <fs_adv> WHERE bukrs = <fs_inv>-bukrs AND lifnr = <fs_inv>-lifnr. CLEAR: wa_totadv. IF <fs_adv>-dmbtr IS NOT INITIAL. IF <fs_adv>-shkzg EQ 'S'. MOVE <fs_adv>-dmbtr TO wa_totadv-dmbtr. ELSE. COMPUTE wa_totadv-dmbtr = 0 - <fs_adv>-dmbtr. ENDIF. wa_totadv-bukrs = <fs_adv>-bukrs. wa_totadv-lifnr = <fs_adv>-lifnr. COLLECT wa_totadv INTO it_totadv. <fs_adv>-dmbtr = 0. ENDIF. ENDLOOP. ENDLOOP. * Found Vendor Payment Details LOOP AT it_inv ASSIGNING <fs_inv>. MOVE <fs_inv>-dmbtr TO <fs_inv>-wrbtr. READ TABLE it_pmt WITH KEY bukrs = <fs_inv>-bukrs lifnr = <fs_inv>-lifnr rebzg = <fs_inv>-belnr ASSIGNING <fs_pmt>. IF sy-subrc = 0. SUBTRACT <fs_pmt>-dmbtr FROM <fs_inv>-dmbtr. ENDIF. ENDLOOP. * Found Vendor Advance ( matching FIFO method ) LOOP AT it_totadv ASSIGNING <fs_totadv>. IF <fs_totadv>-dmbtr < 0. <fs_totadv>-dmbtr = ABS( <fs_totadv>-dmbtr ). ENDIF. LOOP AT it_inv ASSIGNING <fs_inv> WHERE bukrs = <fs_totadv>-bukrs AND lifnr = <fs_totadv>-lifnr. IF <fs_inv>-dmbtr > 0.

IF <fs_inv>-dmbtr < <fs_totadv>-dmbtr. SUBTRACT <fs_inv>-dmbtr FROM <fs_totadv>-dmbtr. <fs_inv>-dmbtr = 0. ELSE. SUBTRACT <fs_totadv>-dmbtr FROM <fs_inv>-dmbtr. <fs_totadv>-dmbtr = 0. ENDIF. ENDIF. ENDLOOP. ENDLOOP. DELETE it_inv WHERE dmbtr IS INITIAL. LOOP AT it_inv ASSIGNING <fs_inv>. READ TABLE ht_final WITH TABLE KEY bukrs = <fs_inv>-bukrs lifnr = <fs_inv>-lifnr ASSIGNING <fs_final>. IF sy-subrc <> 0. MESSAGE e999 WITH 'Fatal Program Error' <fs_inv>-lifnr. ENDIF. IF <fs_inv>-shkzg = 'H'. <fs_inv>-dmbtr = <fs_inv>-dmbtr * ( -1 ). ENDIF. ADD <fs_inv>-dmbtr TO <fs_final>-totbal. COMPUTE <fs_inv>-age = p_budat - <fs_inv>-duedt. IF <fs_inv>-age < 0. MOVE 0 TO <fs_inv>-cell. ADD <fs_inv>-dmbtr TO <fs_final>-notdue. CONTINUE. ENDIF. IF <fs_inv>-age LE p_per1. MOVE 30 TO <fs_inv>-cell. ADD <fs_inv>-dmbtr TO <fs_final>-30days. ELSEIF <fs_inv>-age LE p_per2. MOVE 60 TO <fs_inv>-cell. ADD <fs_inv>-dmbtr TO <fs_final>-60days. CONTINUE. ELSEIF <fs_inv>-age LE p_per3. MOVE 90 TO <fs_inv>-cell. ADD <fs_inv>-dmbtr TO <fs_final>-90days. ELSEIF <fs_inv>-age LE p_per4. MOVE 120 TO <fs_inv>-cell. ADD <fs_inv>-dmbtr TO <fs_final>-120days. ELSEIF <fs_inv>-age LE p_per5. MOVE 150 TO <fs_inv>-cell. ADD <fs_inv>-dmbtr TO <fs_final>-150days. ELSE. MOVE 180 TO <fs_inv>-cell. ADD <fs_inv>-dmbtr TO <fs_final>-abv150. ENDIF.

ENDLOOP. REFRESH it_final. APPEND LINES OF ht_final TO it_final. REFRESH ht_final. DELETE it_final WHERE totbal IS INITIAL. SORT it_final. ENDFORM. " F_GET_ARAGEING

You might also like