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

Function module for customer open item aging report

Former Member
0 Likes
2,698

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

11 REPLIES 11
Read only

Former Member
0 Likes
1,858

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.

Read only

0 Likes
1,858

Thanks for ur reply,

Please let me know how i make the report, i have to use FIFO method.

Regards

Puneet

Read only

0 Likes
1,858

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.

Read only

0 Likes
1,858

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.

Read only

0 Likes
1,858

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

Read only

0 Likes
1,858

<b><u>Part4</u></b><br />

<br />

<pre class="jive-pre"><code class="jive-code jive-java"><font color="red">&quot;&#38;----


</font>

<font color="red">&quot;*&#38; Form process_data</font>

<font color="red">&quot;&#38;----


</font>

FORM PROCESS_DATA .

DATA : L_TOTAL_TMP(15). <font color="red">&quot; LIKE BSID-DMBTR. </font>

CLEAR : L_TOTAL,LPD_TOTALS.

<font color="red">&quot;* As per Customer accumulate the amount.</font>

<font color="red">&quot;* 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">&quot;* As per Customer accumulate the amount.</font>

<font color="red">&quot;* 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">&quot;* Get ageing data based slabs, and duedate.</font>

PERFORM AGEING_DATA.

LOOP AT L_BSID.

<font color="red">&quot;* 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">&quot; process_data</font>

</code></pre>

Read only

0 Likes
1,858

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

Read only

0 Likes
1,858

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

Read only

0 Likes
1,858

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!!

Read only

0 Likes
1,858

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

Read only

0 Likes
1,858

Not solved