Oracle Payables - Version: 12.0.0 to 12.1.2 - Release: 12.0 to 12.0 Information in this document applies to any platform.
Purpose
This document will step through the actions user should take to resolve Cant Funds Check hold or Funds Check issues on a Payables Invoice.
Background ---------------- When a payables invoice is validated in an Encumbrance enabled environment, funds reservation is done during the validation and encumbrance accounting is generated.
If there is any failure during this funds reserve process, the invoice cannot be fully validated and goes on hold. Usually, the hold is Cant Funds Check.
Events Information -------------------- The validation process creates two events in XLA_EVENTS for the entity (the invoice) in a bugdetary control enabled environment.
One of the events is an Encumbrance event. This event had budgetary_control_flag = 'Y'. The event_id on this event is stamped in the AP_INVOICE_DISTRIBUTIONS_ALL.bc_event_id The second event is the actual event. This event has budgetary_control_flag = 'N'. The event_id on this event is stamped in the AP_INVOICE_DISTRIBUTIONS_ALL.accounting_event_id.
Process Information ----------------------- The encumbrance event that is generated during validation is also processed at the same time. Validation calls the funds reserve process that reserves funds against the accounts on the invoice from the budget. If this is successful, a header record in XLA_AE_HEADERS and encumbrance accounting (Debit to Expense and Credit to RFE) is created in XLA_AE_LINES.
The actual event generated during the validation is processed only during Create Accounting. The Create Accounting process generates two headers in XLA_AE_HEADERS. One header is an encumbrance header with actual_flag = 'E' and another is for actual accounting with actual_flag = 'A'.
The lines generated under the Actual header is the proprietary accounting (Debit to Expense and Credit to Liability). The lines generated under the Encumbrance header is the reversal of invoice encumbrance which is Cr to Item Expense and Dr to RFE.
Hence its expected that when an invoice is fully accounted, net encumbrance on the invoice should be 0.
The encumbrance generated during validation should be relieved during accounting.
Last Review Date
January 28, 2010
Instructions for the Reader
A Troubleshooting Guide is provided to assist in debugging a specific issue. When possible, diagnostic tools are included in the document to assist in troubleshooting.
Troubleshooting Details
If the invoice is on 'CANT FUNDS CHECK' hold or any budgetary event prevents the AP period close, use the following steps to troubleshoot the issue.
1. Apply Latest Rollup Patch
Apply PSA Rollup Patch 9100984:R12.PSA.A for 12.0 and Patch 9100984:R12.PSA.B for 12.1 This patch has the latest fixes related to budgetary control for Payables. These patches are required to prevent known code issues. It also delivers an enhanced version of the concurrent request "Budgetary Control Optimizer Program".
2. Cleanup the Data
Run Budgetary Control Optimizer Program. with Shortname = BCOPT This request keeps the BC Data optimized as well as to cleanup the orphan processed/unprocessed BC Events. Any orphan events that prevented period close should be fixed now.
If this program is not showing up under the required responsibility, a) Go to System Administrator responsibility. b) Navigate to Security->Responsibility->Request This will open Request Groups form. c) Choose the Request Group and Application (Example:Group = All Reports, Application=Payables) d) Add the request Type = Program Name = Budgetary Control Optimizer Program Application = 'Public Sector Financials' Save.
Now this concurrent request will be available for submission in the responsibility that has the above Request Group assigned. Submit the request Budgetary Control Optimizer Program.
3. Revalidate/Cancel the invoice
If still unsuccessful in validating or canceling the invoice, click on Tools>View Results from Invoice workbench to view detailed error message for the specific invoice.
4. Debug
If the error message does not help identify the cause and the fix, further troubleshooting can be done using FND Debug log and Diagnostics.
4.a) FND Debug log
4.a.1 - Enable FND Debug log
Set the following profiles at user level FND: Debug Log Enabled 'Yes' FND: Debug Log Level 'Statement' FND: Debug Log Module '%'
4.a.2 Generate FND Debug log
Query the invoice in the Invoice Workbench. Go to Help->About Oracle Applications. Identify the AUDSID for the session Run the sql: select max(log_sequence) from fnd_log_messages; -> note down the value: Val1 Revalidate or re-cancel the invoice Run the sql: select max(log_sequence) from fnd_log_messages; --> note down the value: Val2
4.a.3 Gather FND Debug log
select log_sequence, module, message_text from fnd_log_messages where log_sequence between &Val1 and &Val2 and audsid = &audsid order by log_sequence;
4.a.4 To Gather FND Debug log for Concurrent Request use SELECT log_sequence, log.module, log.message_text message FROM fnd_log_messages log, fnd_log_transaction_context con WHERE con.transaction_id = &conc_request_id AND con.transaction_type = 'REQUEST' AND con.transaction_context_id = log.transaction_context_id ORDER BY log.log_Sequence;
4.b) Diagnostics
4.b.1 - Only after collecting the FND Debug log, Run the "Budgetary Control Information for Payables Invoice" diagnostics. See Note:979855.1 for details on how to submit this diagnostic.
4.b.2 - Please also run the following sql statements to check for invalid ledger setup for Payables or Purchasing. These queries are planned to be added to the diagnostics script at a future date.
Verify SLAM and Ledger setup for Payables --------------------------------------------------------------
Select ledger_id, short_name, description, ledger_category_code, l.sla_accounting_method_code, sla_accounting_method_type, l.enable_budgetary_control_flag from gl_ledgers l where l.enable_budgetary_control_flag = 'Y' and not exists (select 1 from xla_acctg_methods_fvl m, xla_acctg_method_rules_fvl r, xla_product_rules_fvl a, xla_prod_acct_headers_fvl e, xla_aad_line_defn_assgns_f_v s, xla_line_definitions_f_v j where m.accounting_method_code = l.sla_accounting_method_code and m.accounting_method_type_code = l.sla_accounting_method_type and m.accounting_method_code = r.accounting_method_code and m.accounting_method_type_code = r.accounting_method_type_code and sysdate between r.start_date_active and NVL(r.end_date_active, sysdate) and r.application_id=200 and a.application_id = r.application_id and r.amb_context_code = a.amb_context_code and r.product_rule_code = a.product_rule_code and r.product_rule_type_code = a.product_rule_type_code and a.enabled_flag = 'Y' and e.amb_context_code = a.amb_context_code and e.product_rule_code = a.product_rule_code and e.product_rule_type_code = a.product_rule_type_code and s.amb_context_code = e.amb_context_code and s.product_rule_code = e.product_rule_code and s.product_rule_type_code = e.product_rule_type_code and s.event_class_code = e.event_class_code and s.event_type_code = e.event_type_code and j.amb_context_code = s.amb_context_code and j.event_class_code = s.event_class_code and j.event_type_code = s.event_type_code and j.line_definition_code = s.line_definition_code and j.line_definition_owner_code = s.line_definition_owner_code and j.enabled_flag = 'Y' and j.budgetary_control_flag = 'Y');
Please upload results in XLS format.
Verify SLAM and Ledger setup for Purchasing -------------------------------------------------------------
Select ledger_id, short_name, description, ledger_category_code, l.sla_accounting_method_code, sla_accounting_method_type, l.enable_budgetary_control_flag from gl_ledgers l where l.enable_budgetary_control_flag = 'Y' and not exists (select 1 from xla_acctg_methods_fvl m, xla_acctg_method_rules_fvl r, xla_product_rules_fvl a, xla_prod_acct_headers_fvl e, xla_aad_line_defn_assgns_f_v s, xla_line_definitions_f_v j where m.accounting_method_code = l.sla_accounting_method_code and m.accounting_method_type_code = l.sla_accounting_method_type and m.accounting_method_code = r.accounting_method_code and m.accounting_method_type_code = r.accounting_method_type_code and sysdate between r.start_date_active and NVL(r.end_date_active, sysdate) and r.application_id=200 and a.application_id = r.application_id and r.amb_context_code = a.amb_context_code and r.product_rule_code = a.product_rule_code and r.product_rule_type_code = a.product_rule_type_code and a.enabled_flag = 'Y' and e.amb_context_code = a.amb_context_code and e.product_rule_code = a.product_rule_code and e.product_rule_type_code = a.product_rule_type_code and s.amb_context_code = e.amb_context_code and s.product_rule_code = e.product_rule_code and s.product_rule_type_code = e.product_rule_type_code and s.event_class_code = e.event_class_code and s.event_type_code = e.event_type_code and j.amb_context_code = s.amb_context_code and j.event_class_code = s.event_class_code and j.event_type_code = s.event_type_code and j.line_definition_code = s.line_definition_code and j.line_definition_owner_code = s.line_definition_owner_code and j.enabled_flag = 'Y' and j.budgetary_control_flag = 'Y');
Please upload results in XLS format.
4.b.3 - Insufficient Funds Hold
If an invoice goes on "Insufficient funds" hold, please run the following query to help troubleshoot the cause. Enter the invoice_id when prompted.
Select g.packet_id g.application_id, g.ledger_id, g.status_code, g.funds_check_level_code, g.code_combination_id, g.accounted_dr, g.accounted_cr, NVL(g.budget_posted_balance, 0)+NVL(g.budget_approved_balance, 0)+ NVL(g.budget_pending_balance, 0) budget_balance, NVL(g.encumbrance_posted_balance,0)+NVL(g.encumbrance_approved_balance,0)+ NVL(g.encumbrance_pending_balance, 0) encumbrance_balance, NVL(g.actual_posted_balance, 0)+NVL(g.actual_approved_balance, 0)+ NVL(g.actual_pending_balance, 0) actual_balance, (NVL(g.budget_posted_balance, 0) + NVL(g.budget_approved_balance,0) + NVL(g.budget_pending_balance, 0)) - (NVL(g.encumbrance_posted_balance, 0) + NVL(g.encumbrance_approved_balance,0) + NVL(g.encumbrance_pending_balance,0)) - (NVL(g.actual_posted_balance, 0) + NVL(g.actual_approved_balance,0) + NVL(g.actual_pending_balance, 0)) funds_available from gl_bc_packets g where application_id = 200 and effect_on_funds_code = 'D' and status_code in ('R') and g.funds_check_level_code not in ('N') and (NVL(g.budget_posted_balance, 0)+NVL(g.budget_approved_balance, 0)+ NVL(g.budget_pending_balance, 0) - NVL(g.encumbrance_posted_balance, 0)+ NVL(g.encumbrance_approved_balance,0)+ NVL(g.encumbrance_pending_balance, 0) - NVL(g.actual_posted_balance, 0)+NVL(g.actual_approved_balance, 0)+ NVL(g.actual_pending_balance, 0)- g.accounted_dr) < 0 and exists (select 1 from ap_invoice_distributions_all d where d.invoice_id = &INVOICE_ID and d.bc_event_id = g.event_id);
Please upload results in XLS format.
5. Analyze
Follow the steps in Note:1053172.1 to try to resolve the issue. If this does not help, then log a SR with Oracle Support. In the SR, upload the FND Debug log generated above and the Diagnostics output for the invoice.