Supplier Subledger Balance by Account Report
The Payables subledger balance owed to each supplier, reconciled to the GL liability account it posts to — supplier open balance rolled to the account, the basis for tying the AP subledger to the ledger.
Related Subledger-level companion to the Supplier Balance by Account Report.
Sample build of the Supplier Subledger Balance by Account Report — reconciled, and rendered tool-neutral so it runs in Power BI, ThoughtSpot, or Tableau.
| Supplier | Liability Account | Open Balance | Period | Currency |
|---|---|---|---|---|
| Acme Industrial | 1000-2100-000 | $1,240,500.00 | APR-26 | USD |
| Northwind Trading | 1000-5400-000 | $842,150.75 | MAR-26 | USD |
| Globex Holdings | 1000-1410-000 | $96,400.00 | FEB-26 | USD |
| Initech LLC | 2000-2100-000 | $1,005,233.10 | JAN-26 | USD |
| Umbrella Corp | 1000-6300-000 | $58,720.40 | DEC-25 | USD |
| Acme Industrial | 1000-2100-000 | $1,240,500.00 | APR-26 | USD |
The report rolls open AP by supplier to the liability account and reconciles the total to GL.
The subledger ties to GL except on one account where a manual GL journal posted directly to the liability account, bypassing AP.
Keep manual journals off the AP liability account — let Payables post it — so the subledger-to-GL tie stays exact.
This is the report's BI Publisher data model — the SQL data set BI Publisher runs against Oracle tables to produce the output. The same SQL becomes a dbt model in your warehouse, so one definition drives both the formatted report and the analytics layer.
Data sources
- AP_INVOICES_ALL
- AP_PAYMENT_SCHEDULES_ALL
- AP_INVOICE_DISTRIBUTIONS_ALL
- POZ_SUPPLIERS_V
- GL_CODE_COMBINATIONS
- GL_LEDGERS
Show / hide SQL
WITH SECURITY_TBL AS
(
SELECT
DISTINCT HOU.organization_id
FROM
hr_operating_units HOU,
fun_user_role_data_asgnmnts FURDA,
per_roles_dn PRD,
per_user_roles PUR,
per_users PU
WHERE
1 =1
AND FURDA.org_id =HOU.organization_id
AND UPPER(FURDA.role_name) IN ('XXC_ACCOUNTS_PAYABLE_ANALYST_JOB', 'XXC_ACCOUNTS_PAYABLES_MANAGER_JOB')
AND UPPER(FURDA.active_flag) ='Y'
AND UPPER(FURDA.role_name) =UPPER(PRD.role_common_name)
AND PRD.role_id =PUR.role_id
AND PUR.user_id =PU.user_id
AND upper(pu.username) =upper(:xdo_user_name)
AND pu.user_guid =FURDA.user_guid
)
SELECT
ledger_id
, party_id
, party_number SUPPLIER_NUM
, party_name VENDOR_NAME
, segment4 NAT_ACCOUNT
, description ACC_DESC
, SUM(BAL_DR) BEG_BAL_DR
, SUM(BAL_CR) BEG_BAL_CR
, SUM(accounted_DR) CS_1
, SUM(accounted_CR) CS_2
FROM
(
SELECT
GLL.ledger_id
, AIA.party_id
, NVL(POZ.segment1,(SELECT PAP.person_number FROM per_all_people_f PAP
WHERE TO_CHAR(PAP.person_id)=HP.ORIG_SYSTEM_REFERENCE
AND TRUNC(SYSDATE) BETWEEN PAP.EFFECTIVE_START_DATE AND PAP.EFFECTIVE_END_DATE)) party_number
, HP.party_name
, GCC.segment4
, FT.description
, CASE WHEN GLP.start_date < (select distinct start_date from gl_periods where period_set_name = GLP.period_set_name and period_name = :P_FROM_PERIOD) THEN NVL(XAL.accounted_dr,0) ELSE 0 END BAL_DR
, CASE WHEN GLP.start_date < (select distinct start_date from gl_periods where period_set_name = GLP.period_set_name and period_name = :P_FROM_PERIOD) THEN NVL(XAL.accounted_cr,0) ELSE 0 END BAL_CR
, CASE WHEN GLP.start_date >= (select distinct start_date from gl_periods where period_set_name = GLP.period_set_name and period_name = :P_FROM_PERIOD) AND GLP.end_date <= (select distinct end_date from gl_periods where period_set_name = GLP.period_set_name and period_name = :P_TO_PERIOD) THEN NVL(XAL.accounted_dr,0) ELSE 0 END accounted_DR
, CASE WHEN GLP.start_date >= (select distinct start_date from gl_periods where period_set_name = GLP.period_set_name and period_name = :P_FROM_PERIOD) AND GLP.end_date <= (select distinct end_date from gl_periods where period_set_name = GLP.period_set_name and period_name = :P_TO_PERIOD) THEN NVL(XAL.accounted_cr,0) ELSE 0 END accounted_CR
FROM
gl_ledgers GLL JOIN xla_ae_headers XAH ON GLL.ledger_id=XAH.ledger_id
AND XAH.accounting_entry_status_code='F'
AND XAH.GL_TRANSFER_STATUS_CODE ='Y'
JOIN gl_periods GLP ON GLP.period_name=XAH.period_name
AND GLP.period_type=GLL.accounted_period_type
JOIN xla_subledgers XS ON XAH.application_id=XS.application_id
AND XS.je_source_name='Payables'
JOIN xla_ae_lines XAL ON XAL.ae_header_id=XAH.ae_header_id
JOIN gl_import_references GIR ON GIR.gl_sl_link_id=XAL.gl_sl_link_id
AND GIR.gl_sl_link_table=XAL.gl_sl_link_table
JOIN gl_code_combinations GCC ON XAL.code_combination_id=GCC.code_combination_id
JOIN fnd_flex_values FFV ON GCC.segment4 =FFV.flex_value
AND FFV.value_category='GREECE ACCOUNT VALUE SET'
JOIN fnd_flex_values_tl FT ON FFV.flex_value_id =FT.flex_value_id
AND UPPER(FT.language)='EL'
JOIN xla_transaction_entities XTE ON XAH.application_id=XTE.application_id
AND XAH.entity_id=XTE.entity_id
AND XTE.entity_code='AP_INVOICES'
JOIN ap_invoices_all AIA ON XTE.source_id_int_1=AIA.invoice_id
AND GLL.ledger_id=AIA.set_of_books_id
JOIN hz_parties HP ON AIA.party_id=HP.party_id
LEFT OUTER JOIN poz_suppliers_v POZ ON HP.party_id =POZ.party_id
LEFT OUTER JOIN poz_supplier_sites_all_m PSS ON AIA.vendor_site_id=PSS.vendor_site_id
JOIN hr_operating_units HOU ON AIA.org_id=HOU.organization_id
AND HOU.NAME='GR BU EUR'
JOIN xle_entity_profiles XEP ON AIA.legal_entity_id=XEP.legal_entity_id
JOIN security_tbl ST ON ST.organization_id=HOU.organization_id
WHERE
1=1
AND CAST(GCC.segment9 AS NUMERIC) BETWEEN :P_FROM_FUTURE2 AND :P_TO_FUTURE2
AND CAST(GCC.segment8 AS NUMERIC) BETWEEN :P_FROM_FUTURE1 AND :P_TO_FUTURE1
AND CAST(GCC.segment7 AS NUMERIC) BETWEEN :P_FROM_IC AND :P_TO_IC
AND CAST(GCC.segment6 AS NUMERIC) BETWEEN :P_FROM_BRAND AND :P_TO_BRAND
AND CAST(GCC.segment5 AS NUMERIC) BETWEEN :P_FROM_LOC AND :P_TO_LOC
AND CAST(GCC.segment4 AS NUMERIC) BETWEEN CAST(:P_FROM_ACC AS NUMERIC) AND CAST(:P_TO_ACC AS NUMERIC)
AND CAST(GCC.segment3 AS NUMERIC) BETWEEN :P_FROM_CC AND :P_TO_CC
AND CAST(GCC.segment2 AS NUMERIC) BETWEEN :P_FROM_SM AND :P_TO_SM
AND CAST(GCC.segment1 AS NUMERIC) BETWEEN :P_FROM_ENTITY AND :P_TO_ENTITY
AND (PSS.vendor_site_code IN (:P_S_SITE) OR 'All' IN (:P_S_SITE||'All'))
AND (HP.party_name IN (:P_S_NAME) OR 'All' IN (:P_S_NAME||'All'))
AND (POZ.vendor_type_lookup_code IN (:P_VTYPE) OR 'All' IN (:P_VTYPE||'All'))
AND (XEP.name IN (:P_LE_NAME) OR 'All' IN (:P_LE_NAME||'All'))
UNION ALL
SELECT
GLL.ledger_id
, AC.party_id
, NVL(POZ.segment1,(SELECT PAP.person_number FROM per_all_people_f PAP
WHERE TO_CHAR(PAP.person_id)=HP.ORIG_SYSTEM_REFERENCE
AND TRUNC(SYSDATE) BETWEEN PAP.EFFECTIVE_START_DATE AND PAP.EFFECTIVE_END_DATE)) party_number
, HP.party_name
, GCC.segment4
, FT.description
, CASE WHEN GLP.start_date < (select distinct start_date from gl_periods where period_set_name = GLP.period_set_name and period_name = :P_FROM_PERIOD) THEN NVL(XAL.accounted_dr,0) ELSE 0 END BEG_BAL_DR
, CASE WHEN GLP.start_date < (select distinct start_date from gl_periods where period_set_name = GLP.period_set_name and period_name = :P_FROM_PERIOD) THEN NVL(XAL.accounted_cr,0) ELSE 0 END BEG_BAL_CR
, CASE WHEN GLP.start_date >= (select distinct start_date from gl_periods where period_set_name = GLP.period_set_name and period_name = :P_FROM_PERIOD) AND GLP.end_date <= (select distinct end_date from gl_periods where period_set_name = GLP.period_set_name and period_name = :P_TO_PERIOD) THEN NVL(XAL.accounted_dr,0) ELSE 0 END accounted_DR
, CASE WHEN GLP.start_date >= (select distinct start_date from gl_periods where period_set_name = GLP.period_set_name and period_name = :P_FROM_PERIOD) AND GLP.end_date <= (select distinct end_date from gl_periods where period_set_name = GLP.period_set_name and period_name = :P_TO_PERIOD) THEN NVL(XAL.accounted_cr,0) ELSE 0 END accounted_CR
FROM
gl_ledgers GLL JOIN xla_ae_headers XAH ON GLL.ledger_id=XAH.ledger_id
AND XAH.accounting_entry_status_code='F'
AND XAH.GL_TRANSFER_STATUS_CODE ='Y'
JOIN gl_periods GLP ON GLP.period_name=XAH.period_name
AND GLP.period_type=GLL.accounted_period_type
JOIN xla_subledgers XS ON XAH.application_id=XS.application_id
AND XS.je_source_name='Payables'
JOIN xla_ae_lines XAL ON XAL.ae_header_id=XAH.ae_header_id
JOIN gl_import_references GIR ON GIR.gl_sl_link_id=XAL.gl_sl_link_id
AND GIR.gl_sl_link_table=XAL.gl_sl_link_table
JOIN gl_code_combinations GCC ON XAL.code_combination_id=GCC.code_combination_id
JOIN fnd_flex_values FFV ON GCC.segment4 =FFV.flex_value
AND FFV.value_category='GREECE ACCOUNT VALUE SET'
JOIN fnd_flex_values_tl FT ON FFV.flex_value_id =FT.flex_value_id
AND UPPER(FT.language)='EL'
JOIN xla_transaction_entities XTE ON XAH.application_id=XTE.application_id
AND XAH.entity_id=XTE.entity_id
AND XTE.entity_code='AP_PAYMENTS'
JOIN ap_checks_all AC ON XTE.source_id_int_1=AC.check_id
JOIN hz_parties HP ON AC.party_id=HP.party_id
LEFT OUTER JOIN poz_suppliers_v POZ ON HP.party_id =POZ.party_id
LEFT OUTER JOIN poz_supplier_sites_all_m PSS ON AC.vendor_site_id=PSS.vendor_site_id
JOIN hr_operating_units HOU ON AC.org_id=HOU.organization_id
AND HOU.NAME='GR BU EUR'
LEFT OUTER JOIN hr_organization_information_f HOUF ON HOU.organization_id=HOUF.organization_id
AND TO_CHAR(GLL.ledger_id)=HOUF.org_information3
JOIN xle_entity_profiles XEP ON AC.legal_entity_id=XEP.legal_entity_id
JOIN security_tbl ST ON ST.organization_id=HOU.organization_id
WHERE
1=1
AND CAST(GCC.segment9 AS NUMERIC) BETWEEN :P_FROM_FUTURE2 AND :P_TO_FUTURE2
AND CAST(GCC.segment8 AS NUMERIC) BETWEEN :P_FROM_FUTURE1 AND :P_TO_FUTURE1
AND CAST(GCC.segment7 AS NUMERIC) BETWEEN :P_FROM_IC AND :P_TO_IC
AND CAST(GCC.segment6 AS NUMERIC) BETWEEN :P_FROM_BRAND AND :P_TO_BRAND
AND CAST(GCC.segment5 AS NUMERIC) BETWEEN :P_FROM_LOC AND :P_TO_LOC
AND CAST(GCC.segment4 AS NUMERIC) BETWEEN CAST(:P_FROM_ACC AS NUMERIC) AND CAST(:P_TO_ACC AS NUMERIC)
AND CAST(GCC.segment3 AS NUMERIC) BETWEEN :P_FROM_CC AND :P_TO_CC
AND CAST(GCC.segment2 AS NUMERIC) BETWEEN :P_FROM_SM AND :P_TO_SM
AND CAST(GCC.segment1 AS NUMERIC) BETWEEN :P_FROM_ENTITY AND :P_TO_ENTITY
AND (PSS.vendor_site_code IN (:P_S_SITE) OR 'All' IN (:P_S_SITE||'All'))
AND (HP.party_name IN (:P_S_NAME) OR 'All' IN (:P_S_NAME||'All'))
AND (POZ.vendor_type_lookup_code IN (:P_VTYPE) OR 'All' IN (:P_VTYPE||'All'))
AND (XEP.name IN (:P_LE_NAME) OR 'All' IN (:P_LE_NAME||'All'))
)
WHERE
1=1
AND (PARTY_NUMBER IN (:P_S_NUM) OR 'All' IN (:P_S_NUM||'All'))
GROUP BY
ledger_id
, party_id
, party_number
, party_name
, segment4
, descriptionThe data-warehouse model — one fact surrounded by conformed dimensions (what you slice by) and measures (what you aggregate), expressed as dbt so it migrates with you. Grain: one row per source transaction.
| Element | Type | Definition |
|---|---|---|
| AP_PAYMENT_SCHEDULES_ALL | dimension | dimension |
| AP_INVOICE_DISTRIBUTIONS_ALL | dimension | dimension |
| POZ_SUPPLIERS_V | dimension | dimension |
| GL_CODE_COMBINATIONS | dimension | dimension |
| Open Balance | measure | measure |
Every source object behind this report. Each linked table has its own page with full column descriptions, drawn from the Oracle BICC lineage and articulated for practitioners.
| Table | Reporting columns | Subject areas |
|---|---|---|
| AP_INVOICES_ALL | 63 | 15 |
| AP_PAYMENT_SCHEDULES_ALL | 21 | 2 |
| AP_INVOICE_DISTRIBUTIONS_ALL | 59 | 11 |
| POZ_SUPPLIERS_V | 2 | 24 |
| GL_CODE_COMBINATIONS | 7 | 61 |
| GL_LEDGERS | 10 | 104 |