‎2009 Jun 11 9:01 AM
Hi all,
Please let me know the FM for customer open item aging or which FM is used in tcode S_ALR_87012178 to get the age wise open item of customer.
Thanks in advance
Regards
Puneet
‎2009 Jun 11 10:35 AM
Hi,
There i no FM to give you the ageing report for Customer.
You will have to colllect the open item for Customer from table BSID, and then depending upon the duration(30/60/90 days), display the report.
Hope this helps.
‎2009 Jun 11 10:47 AM
Thanks for ur reply,
Please let me know how i make the report, i have to use FIFO method.
Regards
Puneet
‎2009 Jun 11 11:24 AM
Hi Puneet,
This is what we developed.
You will have to modify as per your need.
REPORT ZFI_AR_R004 NO STANDARD PAGE HEADING
LINE-SIZE 170
LINE-COUNT 65(0)
MESSAGE-ID ZFI .
TABLES : BSID,
KNB1 , " Accounting: Secondary Index for Customers
T001.
TYPE-POOLS: SLIS.
SELECTION-SCREEN :BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETER : P_BUKRS LIKE BSID-BUKRS OBLIGATORY.
SELECT-OPTIONS:S_GJAHR FOR BSID-GJAHR ,
S_KUNNR FOR BSID-KUNNR.
PARAMETERS: S_BUDAT LIKE BSID-BUDAT OBLIGATORY.
PARAMETERS: SLAB1 LIKE RFPDO1-ALLGROGR DEFAULT '030'.
PARAMETERS: SLAB2 LIKE RFPDO1-ALLGROGR DEFAULT '060'.
PARAMETERS: SLAB3 LIKE RFPDO1-ALLGROGR DEFAULT '090'.
PARAMETERS: SLAB4 LIKE RFPDO1-ALLGROGR DEFAULT '120'.
PARAMETERS: SLAB5 LIKE RFPDO1-ALLGROGR DEFAULT '360'.
SELECT-OPTIONS: S_CLERK FOR KNB1-BUSAB.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS:P_PBLK FOR BSID-ZLSPR NO INTERVALS.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN :BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
PARAMETERS: CHK_N TYPE CHECKBOX.
PARAMETERS: CHK_SP TYPE CHECKBOX.
SELECTION-SCREEN END OF BLOCK B2.
Im having problems copying the code here. so i will post it as replies.
‎2009 Jun 11 11:26 AM
Part 2
"* Validate the selection data for slabs.
AT SELECTION-SCREEN.
IF CHK_N IS INITIAL AND
CHK_SP IS INITIAL .
MESSAGE 'Select atleast one Item Type ' TYPE 'E'.
ENDIF.
IF SLAB1 GT '998'
OR SLAB2 GT '998'
OR SLAB3 GT '998'
OR SLAB4 GT '998'
OR SLAB5 GT '998'.
MESSAGE E001.
ENDIF.
IF NOT SLAB5 IS INITIAL.
IF SLAB5 GT SLAB4
AND SLAB4 GT SLAB3
AND SLAB3 GT SLAB2
AND SLAB2 GT SLAB1.
ELSE.
MESSAGE E002.
ENDIF.
ELSE.
IF NOT SLAB4 IS INITIAL.
IF SLAB4 GT SLAB3
AND SLAB3 GT SLAB2
AND SLAB2 GT SLAB1.
ELSE.
MESSAGE E002.
ENDIF.
ELSE.
IF NOT SLAB3 IS INITIAL.
IF SLAB3 GT SLAB2
AND SLAB2 GT SLAB1.
ELSE.
MESSAGE E002.
ENDIF.
ELSE.
IF NOT SLAB2 IS INITIAL.
IF SLAB2 GT SLAB1.
ELSE.
MESSAGE E002.
ENDIF.
ELSE.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
D_SLAB1 = 0 + 1.
D_SLAB2 = SLAB1 + 1.
D_SLAB3 = SLAB2 + 1.
D_SLAB4 = SLAB3 + 1.
D_SLAB5 = SLAB4 + 1.
D_SLAB6 = SLAB5 + 1.
CONCATENATE D_SLAB1 '-' SLAB1 INTO L_ONE.
CONCATENATE D_SLAB2 '-' SLAB2 INTO L_TWO.
CONCATENATE D_SLAB3 '-' SLAB3 INTO L_THREE.
CONCATENATE D_SLAB4 '-' SLAB4 INTO L_FOUR.
CONCATENATE D_SLAB5 '-' SLAB5 INTO L_FIVE.
CONCATENATE '>' SLAB5 INTO L_SIX.
START-OF-SELECTION.
"* Select data .
PERFORM REFRESH_DATA.
END-OF-SELECTION.
"**&---------------------------------------------------------------------
"*& Form refresh_data
"*&---------------------------------------------------------------------*
FORM REFRESH_DATA .
"* select data from bsid and bsad depending on selection screen input.
PERFORM SELECT_BSID.
PERFORM L_OPENDUE_PD.
PERFORM PROCESS_DATA.
"* PERFORM display_data.
ENDFORM.
‎2009 Jun 11 11:34 AM
Part 3
FORM SELECT_BSID .
CLEAR: X_FLAG,Y_FLAG.
L_BUDATADD = S_BUDAT + 1.
IF CHK_SP = 'X' AND "Special G/L
CHK_N IS INITIAL.
SELECT * FROM BSID
INTO CORRESPONDING FIELDS OF TABLE L_BSID
WHERE BUKRS EQ P_BUKRS AND
KUNNR IN S_KUNNR AND
GJAHR IN S_GJAHR AND
UMSKS NE ' ' AND UMSKZ NE ' ' AND
BUDAT LE S_BUDAT AND
ZLSPR IN P_PBLK.
SELECT * APPENDING
CORRESPONDING FIELDS OF TABLE L_BSID
FROM BSAD
WHERE BUKRS EQ P_BUKRS AND
KUNNR IN S_KUNNR AND
GJAHR IN S_GJAHR AND
UMSKS NE ' ' AND UMSKZ NE ' ' AND
BUDAT LE S_BUDAT AND
AUGDT GE L_BUDATADD AND
( BLART NE DOC_TYP1 OR BLART NE DOC_TYP2 ) .
ELSEIF CHK_N = 'X' AND "Normal Items
CHK_SP IS INITIAL.
SELECT * FROM BSID
INTO CORRESPONDING FIELDS OF TABLE L_BSID
WHERE BUKRS EQ P_BUKRS AND
KUNNR IN S_KUNNR AND
GJAHR IN S_GJAHR AND
UMSKS EQ ' ' AND UMSKZ EQ ' ' AND
BUDAT LE S_BUDAT AND
ZLSPR IN P_PBLK.
SELECT * APPENDING
CORRESPONDING FIELDS OF TABLE L_BSID
FROM BSAD
WHERE BUKRS EQ P_BUKRS AND
KUNNR IN S_KUNNR AND
GJAHR IN S_GJAHR AND
UMSKS EQ ' ' AND UMSKZ EQ ' ' AND
BUDAT LE S_BUDAT AND
AUGDT GE L_BUDATADD AND
( BLART NE DOC_TYP1 OR BLART NE DOC_TYP2 ).
ENDIF.
"* select company code and address .
SELECT SINGLE BUKRS BUTXT ORT01 INTO (L_CCODE, L_CNAME ,L_CCITY)
FROM T001 WHERE BUKRS = P_BUKRS.
SORT L_BSID BY KUNNR.
SELECT SINGLE * FROM T001 WHERE BUKRS EQ P_BUKRS.
L_WAERS = T001-WAERS.
ENDFORM. " select_bsid
‎2009 Jun 11 11:35 AM
<b><u>Part4</u></b><br />
<br />
<pre class="jive-pre"><code class="jive-code jive-java"><font color="red">"&----
<font color="red">"*& Form process_data</font>
<font color="red">"&----
FORM PROCESS_DATA .
DATA : L_TOTAL_TMP(15). <font color="red">" LIKE BSID-DMBTR. </font>
CLEAR : L_TOTAL,LPD_TOTALS.
<font color="red">"* As per Customer accumulate the amount.</font>
<font color="red">"* For overdue items.</font>
CLEAR : L_TOTAL_TMP.
LOOP AT L_OPENDUE_LT.
CONDENSE L_OPENDUE_LT-DMBTR NO-GAPS.
L_TOTAL_TMP = L_TOTAL_TMP + L_OPENDUE_LT-DMBTR.
AT END OF KUNNR.
LPD_TOTALS-KUNNR = L_OPENDUE_LT-KUNNR.
LPD_TOTALS-LPD_TOTAL = L_TOTAL_TMP.
APPEND LPD_TOTALS.
CLEAR : L_TOTAL_TMP.
ENDAT.
ENDLOOP.
CLEAR : L_TOTAL,LOA_TOTALS.
<font color="red">"* As per Customer accumulate the amount.</font>
<font color="red">"* For Open Items.</font>
CLEAR : L_TOTAL_TMP.
LOOP AT L_OPENDUE_LE.
CONDENSE L_OPENDUE_LE-DMBTR NO-GAPS.
L_TOTAL_TMP = L_TOTAL_TMP + L_OPENDUE_LE-DMBTR.
AT END OF KUNNR.
LOA_TOTALS-KUNNR = L_OPENDUE_LE-KUNNR.
LOA_TOTALS-LOA_TOTAL = L_TOTAL_TMP.
APPEND LOA_TOTALS.
CLEAR : L_TOTAL_TMP.
ENDAT.
ENDLOOP.
<font color="red">"* Get ageing data based slabs, and duedate.</font>
PERFORM AGEING_DATA.
LOOP AT L_BSID.
<font color="red">"* Move the data to final internal table.</font>
MOVE L_BSID-KUNNR TO FINAL_DATA-KUNNR.
MOVE L_LANDX TO FINAL_DATA-LANDX.
MOVE L_PSTLZ TO FINAL_DATA-PSTLZ.
MOVE L_NAME TO FINAL_DATA-NAME1.
MOVE L_PHONE TO FINAL_DATA-PHONE.
MOVE L_SORTL TO FINAL_DATA-SORTL.
MOVE L_BSID-ZTERM TO FINAL_DATA-ZTERM.
MOVE L_BUSAB TO FINAL_DATA-BUSAB.
READ TABLE LPD_TOTALS WITH KEY KUNNR = L_BSID-KUNNR.
IF SY-SUBRC EQ 0.
MOVE LPD_TOTALS-LPD_TOTAL TO FINAL_DATA-LPD_TOTAL.
ENDIF.
READ TABLE LOA_TOTALS WITH KEY KUNNR = L_BSID-KUNNR.
IF SY-SUBRC EQ 0.
MOVE LOA_TOTALS-LOA_TOTAL TO FINAL_DATA-LOA_TOTAL.
ENDIF.
READ TABLE AGE_DATA WITH KEY KUNNR = L_BSID-KUNNR.
IF SY-SUBRC EQ 0.
MOVE AGE_DATA-CURAMT TO FINAL_DATA-CURAMT.
MOVE AGE_DATA-AMT1 TO FINAL_DATA-AMT1.
MOVE AGE_DATA-AMT2 TO FINAL_DATA-AMT2.
MOVE AGE_DATA-AMT3 TO FINAL_DATA-AMT3.
MOVE AGE_DATA-AMT4 TO FINAL_DATA-AMT4.
MOVE AGE_DATA-AMT5 TO FINAL_DATA-AMT5.
MOVE AGE_DATA-AMT6 TO FINAL_DATA-AMT6.
ENDIF.
ENDIF.
APPEND FINAL_DATA.
CLEAR: FINAL_DATA.
ENDLOOP.
ENDFORM. <font color="red">" process_data</font>
</code></pre>
‎2009 Jun 11 11:37 AM
Part5
*&---------------------------------------------------------------------*
*& Form l_opendue
*&---------------------------------------------------------------------*
FORM L_OPENDUE_PD .
SORT L_BSID BY KUNNR.
LOOP AT L_BSID .
* get duedate.
PERFORM GET_DUE_DATE USING L_BSID CHANGING L_DUEDATE.
* check overdue or open items, based on duedate
IF L_DUEDATE LT S_BUDAT.
MOVE-CORRESPONDING L_BSID TO L_BSID_TMP.
APPEND L_BSID_TMP.
IF L_BSID_TMP-SHKZG = 'S'.
L_OPENDUE_LT-KUNNR = L_BSID_TMP-KUNNR .
WRITE L_BSID_TMP-DMBTR TO L_OPENDUE_LT-DMBTR CURRENCY L_WAERS.
APPEND L_OPENDUE_LT.
ELSEIF L_BSID_TMP-SHKZG = 'H'.
L_OPENDUE_LT-KUNNR = L_BSID_TMP-KUNNR .
L_BSID_TMP-DMBTR = L_BSID_TMP-DMBTR * -1.
WRITE L_BSID_TMP-DMBTR TO L_OPENDUE_LT-DMBTR CURRENCY L_WAERS.
APPEND L_OPENDUE_LT.
ENDIF.
ENDIF.
IF L_BSID-SHKZG = 'S'.
L_OPENDUE_LE-KUNNR = L_BSID-KUNNR .
WRITE L_BSID-DMBTR TO L_OPENDUE_LE-DMBTR CURRENCY L_WAERS.
APPEND L_OPENDUE_LE.
ELSEIF L_BSID-SHKZG = 'H'.
L_OPENDUE_LE-KUNNR = L_BSID-KUNNR .
L_BSID-DMBTR = L_BSID-DMBTR * -1.
WRITE L_BSID-DMBTR TO L_OPENDUE_LE-DMBTR CURRENCY L_WAERS.
APPEND L_OPENDUE_LE.
ENDIF.
ENDLOOP.
ENDFORM. " l_opendue
‎2009 Jun 11 11:43 AM
Part 6
*&---------------------------------------------------------------------*
*& Form ageing_data
*&---------------------------------------------------------------------*
FORM AGEING_DATA .
CLEAR : AGE_AMT1,AGE_AMT2,
AGE_AMT3,AGE_AMT4,
AGE_AMT5,AGE_AMT6,
AGE_DATA,CUR_AMT.
PERFORM AGE_AMT TABLES L_BSID .
ENDFORM. " ageing_data
*&---------------------------------------------------------------------*
*& Form age_amt
*&---------------------------------------------------------------------*
FORM AGE_AMT TABLES P_L_BSID STRUCTURE BSID .
SORT P_L_BSID BY KUNNR .
LOOP AT P_L_BSID.
PERFORM GET_DUE_DATE USING P_L_BSID CHANGING L_DUEDATE.
MOVE-CORRESPONDING P_L_BSID TO LD_BSID.
LD_BSID-DUEDATE = L_DUEDATE.
APPEND LD_BSID.
ENDLOOP.
SORT LD_BSID BY KUNNR.
LOOP AT LD_BSID.
CLEAR : LPD_TOTALS-LPD_TOTAL.
L_DUEDATE = LD_BSID-DUEDATE .
DIFF_DAYS = S_BUDAT+0(8) - L_DUEDATE+0(8).
IF LD_BSID-SHKZG EQ 'H'.
LD_BSID-DMBTR = LD_BSID-DMBTR * ( -1 ).
MODIFY LD_BSID.
ENDIF.
IF DIFF_DAYS GT 0 AND DIFF_DAYS LE SLAB1.
AGE_AMT1 = AGE_AMT1 + LD_BSID-DMBTR.
ENDIF.
IF DIFF_DAYS GT SLAB1 AND DIFF_DAYS LE SLAB2.
AGE_AMT2 = AGE_AMT2 + LD_BSID-DMBTR.
ENDIF.
IF DIFF_DAYS GT SLAB2 AND DIFF_DAYS LE SLAB3.
AGE_AMT3 = AGE_AMT3 + LD_BSID-DMBTR.
ENDIF.
IF DIFF_DAYS GT SLAB3 AND DIFF_DAYS LE SLAB4.
AGE_AMT4 = AGE_AMT4 + LD_BSID-DMBTR.
ENDIF.
IF DIFF_DAYS GT SLAB4 AND DIFF_DAYS LE SLAB5 .
AGE_AMT5 = AGE_AMT5 + LD_BSID-DMBTR.
ENDIF.
IF DIFF_DAYS GT SLAB5 .
AGE_AMT6 = AGE_AMT6 + LD_BSID-DMBTR.
ENDIF.
ENDIF.
AT END OF KUNNR.
AGE_DATA-KUNNR = LD_BSID-KUNNR.
READ TABLE LOA_TOTALS WITH KEY KUNNR = LD_BSID-KUNNR.
READ TABLE LPD_TOTALS WITH KEY KUNNR = LD_BSID-KUNNR.
CUR_AMT = LOA_TOTALS-LOA_TOTAL - LPD_TOTALS-LPD_TOTAL.
AGE_DATA-CURAMT = CUR_AMT.
AGE_DATA-AMT1 = AGE_AMT1. AGE_DATA-AMT2 = AGE_AMT2.
AGE_DATA-AMT3 = AGE_AMT3. AGE_DATA-AMT4 = AGE_AMT4.
AGE_DATA-AMT5 = AGE_AMT5. AGE_DATA-AMT6 = AGE_AMT6.
APPEND AGE_DATA.
CLEAR : AGE_AMT1,AGE_AMT2, AGE_AMT3,AGE_AMT4, AGE_AMT5,AGE_AMT6,CUR_AMT.
ENDAT.
ENDLOOP.
ENDFORM. " age_amt
‎2009 Jun 11 11:47 AM
Part7
*&---------------------------------------------------------------------*
*& Form GET_DOC_DATE
*&---------------------------------------------------------------------*
FORM GET_DOC_DATE USING P_L_BSID STRUCTURE L_BSID
CHANGING P_L_DOCDATE.
CLEAR : L_DATE.
REFRESH : L_DATE.
DATA : L_TMP_DATE LIKE FAEDE.
L_DATE-SHKZG = P_L_BSID-SHKZG.
L_DATE-KOART = 'D'.
L_DATE-ZFBDT = P_L_BSID-ZFBDT.
L_DATE-ZBD1T = P_L_BSID-ZBD1T.
L_DATE-BLDAT = P_L_BSID-BLDAT.
L_DATE-REBZG = P_L_BSID-REBZG.
APPEND L_DATE.
CALL FUNCTION 'DETERMINE_DUE_DATE'
EXPORTING
I_FAEDE = L_DATE
IMPORTING
E_FAEDE = L_TMP_DATE
EXCEPTIONS
ACCOUNT_TYPE_NOT_SUPPORTED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
ENDIF.
L_DOCDATE = L_TMP_DATE-BLDAT .
ENDFORM. " GET_DOC_DATE
Now that you all that you need, go ahead and create your pgm.
All the best!!
‎2009 Jun 11 12:12 PM
Hi,
Thanks for your immense and valuable help. But i just need to know this:
TABLES BSID.
DATA: DMBTR_H TYPE DMBTR.
DATA: ITAB LIKE BSID OCCURS 10 WITH HEADER LINE.
select-options KUNNR FOR BSID-KUNNR.
SELECT * FROM BSID INTO TABLE ITAB WHERE KUNNR IN KUNNR
AND UMSKZ NOT IN ('H').
SORT ITAB BY BLDAT.
LOOP AT ITAB.
IF ITAB-SHKZG = 'H' .
DMBTR_H = DMBTR_H + ITAB-DMBTR.
ENDIF.
*I WANT TO WRITE A CODE HERE THAT DMBTR_H WOULD DEDUCT A AMOUNT OF 'S' TILL IT GET THE -VE VALUE.
*BECAUSE WE ARE APPLYING FIFO METHOD AND WHAT PAYMENT WE GET IT DEDUCT DATE WISE NOT BILL WISE. AND IN BSID
*IF PARTIAL PAYMENT HAS BEEN DONE, IT WILL SHOW BOTH THERE. SO I NEED TO DEDUCT THE TOTAL AMOUNT OF 'H' FROM 'S'
*DATE WISE.
ENDLOOP.
Please help me in this,
Regards
Puneet
‎2009 Jun 17 8:25 AM