Customer Outstanding Amount Query

In this post, I am sharing customer outstanding amount which is calculated on accounting date. The logic includes override functionality also. Sometimes user selected wrong account and further he changed account by using override functionality available in account receivables.

You can use this query for AR Aging report. fun_outstanding_amt field shows values in ledger currency. 

Detail Query of Customer Outstanding/ opening balance


 SELECT hp.party_name customer, 
             rcta.trx_number,
                 hca.customer_class_code, 
hca.party_id,
                 rcta.bill_to_customer_id, 
rcta.org_id, 
hca.account_name,
                 hca.account_number, 
rcta.customer_trx_id,
                 (SELECT name
                    FROM hr_all_organization_units hr
                   WHERE hr.organization_id = rcta.org_id) bu_name,


                 apsa.amount_due_original invoice_amount,
                 (SELECT    segment1
                         || '.'
                         || segment2
                         || '.'
                         || segment3
                         || '.'
                         || segment4
                         || '.'
                         || segment5
                         || '.'
                         || segment6
                    FROM ra_cust_trx_line_gl_dist_all ardist,
                         gl_code_combinations gcc
                   WHERE ardist.account_class = 'REC'
                     AND gcc.code_combination_id = ardist.code_combination_id
                     AND ardist.customer_trx_id = rcta.customer_trx_id
                     AND ROWNUM = 1) account,
           a.segment6 nat_acct,
                 (  amount_due_original
                  - ( NVL ((SELECT SUM (ara.amount_applied)
                               FROM ar_cash_receipts_all acr,
                                    ar_receivable_applications_all ara
                              WHERE rcta.customer_trx_id =
                                                   ara.applied_customer_trx_id
                                AND acr.cash_receipt_id = ara.cash_receipt_id
                               -- AND ara.applied_payment_schedule_id =
                                                      --apsa.payment_schedule_id
                                AND ara.status IN ('APP')
AND ara.application_type IN ('CASH')
                                AND ARA.DISPLAY = 'Y'
--AND ara.reversal_gl_date IS NULL
                                AND ara.gl_date <=
                                       TRUNC (TO_DATE (TO_CHAR (:p_as_of_date,
                                                                'DD-MM-YYYY'
                                                               ),
                                                       'DD-MM-YYYY'
                                                      )
                                             )),
                            0
                           )    
+ NVL ((SELECT SUM (ara.amount_applied)
                               FROM ar_cash_receipts_all acr,
                                    ar_receivable_applications_all ara
                              WHERE rcta.customer_trx_id =
                                                   ara.applied_customer_trx_id
                                AND acr.cash_receipt_id = ara.cash_receipt_id
                               -- AND ara.applied_payment_schedule_id =
                                                      --apsa.payment_schedule_id
                                AND ara.status IN ('APP')
AND ara.application_type IN ('CASH')
                              AND ARA.DISPLAY = 'N'
AND ara.reversal_gl_date IS NOT NULL
                                AND ara.gl_date <=
                                       TRUNC (TO_DATE (TO_CHAR (:p_as_of_date,
                                                                'DD-MM-YYYY'
                                                               ),
                                                       'DD-MM-YYYY'
                                                      )
                                             )),
                            0
                           )
--    
                     + NVL
                          ((SELECT SUM ((aav.amount * -1))
                              FROM ar_adjustments_all aav
                             WHERE rcta.customer_trx_id = aav.customer_trx_id
                               AND aav.payment_schedule_id =
                                                      apsa.payment_schedule_id
                               AND TRUNC (aav.gl_date) <=
                                      TRUNC (TO_DATE (TO_CHAR (:p_as_of_date,
                                                               'DD-MM-YYYY'
                                                              ),
                                                      'DD-MM-YYYY'
                                                     )
                                            )
                               AND aav.status = 'A'),
                           0
                          )
                     + (-1) * NVL ((SELECT SUM (ara.amount_applied)
                               FROM ar_receivable_applications_all ara
                              WHERE rcta.customer_trx_id = ara.customer_trx_id
                                AND ara.status IN ('ACTIVITY') --, 'APP')
                                AND ara.display = 'Y'
                                AND ara.gl_date <=
                                       TRUNC (TO_DATE (TO_CHAR (:p_as_of_date,
                                                                'DD-MM-YYYY'
                                                               ),
                                                       'DD-MM-YYYY'
                                                      )
                                             )),
                            0
                           )
+ (-1) * NVL ((SELECT SUM (  ara.amount_applied
                    -- * (-1)
                                        )
                               FROM ar_receivable_applications_all ara
                              WHERE rcta.customer_trx_id =
                                                   ara.customer_trx_id
                                AND ara.status IN ('APP')
AND ara.application_type IN ('CM')
                                AND ara.cash_receipt_id IS NULL
--AND ara.reversal_gl_date IS NULL
                                AND ara.display = 'Y'
                                AND ara.gl_date <=
                                       TRUNC (:p_as_of_date)),
                            0
                           )
+  NVL ((SELECT SUM (  ara.amount_applied)
                               FROM ar_receivable_applications_all ara
                              WHERE rcta.customer_trx_id =
                                                   ara.applied_customer_trx_id
                                AND ara.status IN ('APP')
AND ara.application_type IN ('CM')
                                AND ara.cash_receipt_id IS NULL
--AND ara.reversal_gl_date IS NULL
                                AND ara.display = 'Y'
                                AND ara.gl_date <=
                                       TRUNC (:p_as_of_date)),
                            0
                           )    
+ (-1) * NVL ((SELECT SUM (  ara.amount_applied
                     --* (-1)
                                        )
                               FROM ar_receivable_applications_all ara
                              WHERE rcta.customer_trx_id =
                                                   ara.customer_trx_id
                                AND ara.status IN ('APP')
AND ara.application_type IN ('CM')
                                AND ara.cash_receipt_id IS NULL
AND ara.reversal_gl_date IS NOT NULL
                                AND ara.display = 'N'
                                AND ara.gl_date <=
                                       TRUNC (:p_as_of_date)),
                            0
                           )
+  NVL ((SELECT SUM (  ara.amount_applied)
                               FROM ar_receivable_applications_all ara
                              WHERE rcta.customer_trx_id =
                                                   ara.applied_customer_trx_id
                                AND ara.status IN ('APP')
AND ara.application_type IN ('CM')
                                AND ara.cash_receipt_id IS NULL
AND ara.reversal_gl_date IS NOT NULL
                                AND ara.display = 'N'
                                AND ara.gl_date <=
                                       TRUNC (:p_as_of_date)),
                            0
                           )    
                    )
                 ) ent_outstanding_amt,
                 (  (amount_due_original * NVL(rcta.exchange_rate,1))
                  - ( NVL ((SELECT SUM (ara.amount_applied  * NVL(rcta.exchange_rate,1))
                               FROM ar_cash_receipts_all acr,
                                    ar_receivable_applications_all ara
                              WHERE rcta.customer_trx_id =
                                                   ara.applied_customer_trx_id
                                AND acr.cash_receipt_id = ara.cash_receipt_id
                               -- AND ara.applied_payment_schedule_id =
                                                      --apsa.payment_schedule_id
                                AND ara.status IN ('APP')
AND ara.application_type IN ('CASH')
                              AND ara.display = 'Y'
--AND ara.reversal_gl_date IS NULL
                                AND ara.gl_date <=
                                       TRUNC (TO_DATE (TO_CHAR (:p_as_of_date,
                                                                'DD-MM-YYYY'
                                                               ),
                                                       'DD-MM-YYYY'
                                                      )
                                             )),
                            0
                           )    
+ NVL ((SELECT SUM (ara.amount_applied  * NVL(rcta.exchange_rate,1))
                               FROM ar_cash_receipts_all acr,
                                    ar_receivable_applications_all ara
                              WHERE rcta.customer_trx_id =
                                                   ara.applied_customer_trx_id
                                AND acr.cash_receipt_id = ara.cash_receipt_id
                               -- AND ara.applied_payment_schedule_id =
                                                      --apsa.payment_schedule_id
                                AND ara.status IN ('APP')
AND ara.application_type IN ('CASH')
                              AND ara.display = 'N'
AND ara.reversal_gl_date IS NOT NULL
                                AND ara.gl_date <=
                                       TRUNC (TO_DATE (TO_CHAR (:p_as_of_date,
                                                                'DD-MM-YYYY'
                                                               ),
                                                       'DD-MM-YYYY'
                                                      )
                                             )),
                            0
                           )
--    
                     + NVL
                          ((SELECT SUM ((aav.amount * -1)  * NVL(rcta.exchange_rate,1))
                              FROM ar_adjustments_all aav
                             WHERE rcta.customer_trx_id = aav.customer_trx_id
                               AND aav.payment_schedule_id = apsa.payment_schedule_id
                               AND TRUNC (aav.gl_date) <=
                                      TRUNC (TO_DATE (TO_CHAR (:p_as_of_date,
                                                               'DD-MM-YYYY'
                                                              ),
                                                      'DD-MM-YYYY'
                                                     )
                                            )
                               AND aav.status = 'A'),
                           0
                          )
                     + (-1) * NVL ((SELECT SUM ((ara.amount_applied 
                 )  * NVL(rcta.exchange_rate,1))
                               FROM ar_receivable_applications_all ara
                              WHERE rcta.customer_trx_id = ara.customer_trx_id
                                AND ara.status IN ('ACTIVITY')
                                AND ara.display = 'Y'
                                AND ara.gl_date <=
                                       TRUNC (TO_DATE (TO_CHAR (:p_as_of_date,
                                                                'DD-MM-YYYY'
                                                               ),
                                                       'DD-MM-YYYY'
                                                      )
                                             )),
                            0
                           )
+ (-1) * NVL ((SELECT SUM (  ara.amount_applied
                    -- * (-1)
* NVL(rcta.exchange_rate,1)
                                        )
                               FROM ar_receivable_applications_all ara
                              WHERE rcta.customer_trx_id =
                                                   ara.customer_trx_id
                                AND ara.status IN ('APP')
AND ara.application_type IN ('CM')
                                AND ara.cash_receipt_id IS NULL
--AND ara.reversal_gl_date IS NULL
                                AND ara.display = 'Y'
                                AND ara.gl_date <=
                                       TRUNC (:p_as_of_date)),
                            0
                           )
+  NVL ((SELECT SUM (  ara.amount_applied
                    -- * (-1)
* NVL(rcta.exchange_rate,1)
                                        )
                               FROM ar_receivable_applications_all ara
                              WHERE rcta.customer_trx_id =
                                                   ara.applied_customer_trx_id
                                AND ara.status IN ('APP')
AND ara.application_type IN ('CM')
                                AND ara.cash_receipt_id IS NULL
--AND ara.reversal_gl_date IS NULL
                                AND ara.display = 'Y'
                                --AND ARA.APPLY_DATE <=
                                AND ara.gl_date <=
                                       TRUNC (:p_as_of_date)),
                            0
                           )
+ NVL ((SELECT SUM (  ara.amount_applied
                     --* (-1)
* NVL(rcta.exchange_rate,1)
                                        )
                               FROM ar_receivable_applications_all ara
                              WHERE rcta.customer_trx_id =
                                                   ara.applied_customer_trx_id
                                AND ara.status IN ('APP')
AND ara.application_type IN ('CM')
                                AND ara.cash_receipt_id IS NULL
AND ara.reversal_gl_date IS NOT NULL
                                AND ara.display = 'N'
                                --AND ARA.APPLY_DATE <=
                                AND ara.gl_date <=
                                        (:p_as_of_date)),
                            0
                           )    
+ (-1) * NVL ((SELECT SUM (  ara.amount_applied
                    -- * (-1)
* NVL(rcta.exchange_rate,1) 
                                        )
                               FROM ar_receivable_applications_all ara
                              WHERE rcta.customer_trx_id =
                                                   ara.customer_trx_id
                                AND ara.status IN ('APP')
AND ara.application_type IN ('CM')
                                AND ara.cash_receipt_id IS NULL
AND ara.reversal_gl_date IS NOT NULL
                                AND ara.display = 'N'
                                --AND ARA.APPLY_DATE <=
                                AND ara.gl_date <=
                                       TRUNC (:p_as_of_date)),
                            0
                           )    
                    )
                 ) fun_outstanding_amt,
                   ((  apsa.amount_due_original
                     + NVL (apsa.amount_credited, 0)
                     + NVL (apsa.amount_adjusted, 0)
                     - apsa.tax_remaining
                    )
                   )
                 * .1 retainage_amt,
 
        ((  apsa.amount_due_original
                     + NVL (apsa.amount_credited, 0)
                     + NVL (apsa.amount_adjusted, 0)
                     - apsa.tax_remaining
                    )
                   )
                 * .1 * NVL (rcta.exchange_rate, 1) retainage_amt1,
                 DECODE ((SELECT COUNT (1)
                            FROM ra_batch_sources_all
                           WHERE batch_source_seq_id =
                                                      rcta.batch_source_seq_id
                             AND NAME = 'MIGRATION'),
                         1, 'NO',
                         DECODE (UPPER (rcta.attribute1),
                                 'YES', 'YES',
                                 'NO', 'NO',
                                 NULL, DECODE (hca.customer_class_code,
                                               'RETENTION', 'YES',
                                               'NO'
                                              ),
                                 'NO'
                                )
                        ) eligible,
                 apsa.amount_due_original, apsa.amount_credited,
                 apsa.amount_adjusted, apsa.tax_remaining, apsa.due_date,
                 apsa.amount_due_remaining, apsa.gl_date, rctt.TYPE,
                 rctt.NAME trx_type, rcta.trx_date invoice_date,
                 hp.party_number,
                 DECODE (rcta.invoice_currency_code,
                         'SAR', 1,
                         rcta.exchange_rate
                        ) cur_cd,
                 rcta.doc_sequence_value, rcta.invoice_currency_code,
                 (SELECT rt.NAME
                    FROM ra_terms rt
                   WHERE rcta.term_id = rt.term_id) payment_term,
                 NVL ((  TO_DATE (TO_CHAR (due_date, 'MM-DD-YYYY'),
                                  'MM-DD-YYYY'
                                 )
                       - TO_DATE (TO_CHAR (:p_as_of_date, 'MM-DD-YYYY'),
                                  'MM-DD-YYYY'
                                 )
                      ),
                      0
                     ) past_due_days,
rcta.exchange_rate_type
            FROM hz_cust_accounts hca,
                 ra_customer_trx_all rcta,
                 ar_payment_schedules_all apsa,
                 hz_parties hp,
                 ra_cust_trx_types_all rctt,
(SELECT gcc.segment6,
         ardist.customer_trx_id
                    FROM gl_code_combinations gcc,
xla_distribution_links xdl,
ra_cust_trx_line_gl_dist_all ardist,
xla_ae_lines xal,
xla_ae_headers xah
                   WHERE ardist.account_class IN ('REC')
                     AND  ardist.cust_trx_line_gl_dist_id = xdl.source_distribution_id_num_1 
                     AND xdl.application_id = 222
AND xdl.ae_header_id = xal.ae_header_id
AND xdl.ae_line_num = xal.ae_line_num
AND xal.ae_header_id = xah.ae_header_id
AND xah.je_category_name IN ('Sales Invoices','Credit Memos','Debit Memos')
AND xal.accounting_class_code = 'RECEIVABLE'
AND xah.ae_header_id = (SELECT MAX(xal1.ae_header_id) 
                           FROM xla_ae_lines xal1,
        xla_ae_headers xah1 
  WHERE xah1.entity_id = xah.entity_id 
                            AND xal1.ae_header_id = xah1.ae_header_id  
AND xal1.accounting_class_code = 'RECEIVABLE' 
                            AND xah1.event_id = xdl.event_id
                            AND xah1.je_category_name IN ('Sales Invoices','Credit Memos','Debit Memos')
                            AND xal1.accounting_date <= :p_as_of_date
                       GROUP BY xah1.entity_id
     )  
                     -- Overridden logic
AND gcc.code_combination_id IN DECODE(xal.override_reason,NULL,
                                       ardist.code_combination_id,
                                      (SELECT xal1.code_combination_id 
     FROM  xla_ae_lines xal1 
WHERE xal1.accounting_class_code = 'RECEIVABLE'
                                              AND xal1.ae_header_id=xal.ae_header_id
                                          AND xal1.overridden_code_combination_id IS NOT NULL
                                          AND xal1.ae_header_id = (SELECT MAX(xal1.ae_header_id) 
                             FROM xla_ae_lines xal1,
      xla_ae_headers xah1 
WHERE xah1.entity_id=xah.entity_id 
                                                                      AND xal1.ae_header_id = xah1.ae_header_id  
  AND xal1.accounting_class_code = 'RECEIVABLE' 
                                                                      AND xah1.je_category_name IN ('Sales Invoices','Credit Memos','Debit Memos')
                                                                      AND xah1.event_id = xdl.event_id
                                                                      AND xal1.accounting_date <= :p_as_of_date
                                                                 GROUP BY xah1.entity_id
    )
                                       ))
) a
           WHERE hca.cust_account_id = rcta.bill_to_customer_id
             AND rcta.customer_trx_id = apsa.customer_trx_id
             AND hca.party_id = hp.party_id
             AND rcta.cust_trx_type_seq_id = rctt.cust_trx_type_seq_id
AND rcta.customer_trx_id = a.customer_trx_id
             AND TRUNC (apsa.gl_date) <= NVL (:p_as_of_date, SYSDATE) 
             AND rcta.bill_to_customer_id IN (
                    SELECT DISTINCT hzc.cust_account_id
                               FROM hz_cust_accounts hzc, 
        hz_parties hzp
                              WHERE hzc.party_id = hzp.party_id
                                AND (   hzp.party_name IN (:p_cust_name)
                                     OR LEAST (:p_cust_name) IS NULL
                                    )
                                AND (   hzc.account_name IN (:p_cust_acc)
                                     OR LEAST (:p_cust_acc) IS NULL
                                    ))
             AND rcta.org_id IN (SELECT organization_id
                                   FROM hr_all_organization_units
                                  WHERE name = :p_bu_name)