2.2 Vendor bills & the purchase-to-pay accounting flow

Key Takeaways

  • A vendor bill follows Draft to Posted, receiving a purchase-journal number and booking its accounting entry when confirmed.
  • The product's bill control policy (On ordered quantities vs. On received quantities) sets how much a purchase order's Create Bill button can invoice.
  • 3-way matching compares the purchase order, the receipt, and the vendor bill, flagging a 'Should Be Paid' exception when goods have not been received.
  • Posting a vendor bill debits the expense or asset account and the deductible tax, and credits Accounts Payable for the gross amount owed.
  • The Aged Payable report buckets open vendor bills by due-date age (Current, 1–30, 31–60 days, and so on) to prioritize supplier payments and manage cash flow.
Last updated: July 2026

The Purchase-to-Pay Accounting Flow

The vendor side mirrors the customer side but in reverse: instead of collecting cash, the company records what it owes and then pays it. This purchase-to-pay cycle runs from vendor bill to payment, and the exam expects you to know both the workflow and the journal entries it produces. Because Accounting is the highest-weight module, expect several questions drawn directly from these vendor mechanics.

Vendor bill states

A vendor bill (supplier invoice) has the same document lifecycle as a customer invoice: Draft to Posted, and optionally Cancelled. A draft bill is fully editable; confirming it posts the bill, assigns a number in the purchase journal (for example BILL/2026/00018), and books the journal entry. Vendor bills also carry a Payment StatusNot Paid, In Payment, Paid, or Partially Paid — just as customer invoices do.

How vendor bills arrive

A vendor bill does not have to be typed by hand. In the full purchase-to-pay chain — RFQ → purchase order → receipt → bill → payment — the bill is usually drafted straight from the confirmed PO. But Odoo can also digitize bills: you upload a supplier's PDF, forward it to a purchase journal's email alias, or scan it, and Odoo's document recognition reads the vendor, amounts, taxes, and due date into a draft bill for you to review. Each bill records a Bill Reference (the vendor's own document number), which Odoo uses to warn you about duplicate vendor bills so the same invoice is never paid twice. Only after you confirm does the bill post and become payable.

Creating a bill from a purchase order

From the Purchase app, a confirmed purchase order shows a Create Bill button that drafts the vendor bill and copies its lines. How much can be billed depends on the product's bill control policy:

  • On ordered quantities — the full ordered quantity can be billed immediately.
  • On received quantities — only quantities actually received into stock can be billed.

3-way matching

To avoid paying for goods that never arrived, Odoo offers 3-way matching, enabled in the Purchase settings. It compares three documents:

DocumentWhat it representsSource app
Purchase Orderwhat was orderedPurchase
Receiptwhat was receivedInventory
Vendor Billwhat was invoicedAccounting

When the feature is on, each vendor bill shows a Should Be Paid indicator. If the received quantity matches the billed quantity, Odoo marks the bill Yes; if the goods have not been fully received, it flags an Exception, warning the accountant to withhold payment until the mismatch is investigated and resolved.

The journal entry a vendor bill creates

Posting a vendor bill produces the mirror image of a customer invoice. For a 500 bill with 20% deductible tax:

AccountDebitCredit
Expense (or Asset / Stock)500
Tax Paid (deductible)100
Accounts Payable600

The expense or asset account is debited for the net cost, the tax account is debited for the recoverable VAT, and Accounts Payable is credited for the gross amount owed to the supplier. Remember the contrast: a customer invoice credits income, while a vendor bill debits expense — the direction is reversed.

Vendor credit notes

When a supplier issues a refund or you return goods, record a vendor credit note (refund). It reverses the bill's entry — crediting expense and tax, debiting Accounts Payable — which reduces what you owe. As with customer credit notes, Odoo can reverse a bill fully, partially, or reverse it and open a fresh draft to reissue.

Registering vendor payments

Clicking Register Payment on a posted bill records the outflow. Odoo credits an Outstanding Payments account and debits Accounts Payable, moving the bill to In Payment. Bank reconciliation then matches the payment to the real bank line, moving the amount from Outstanding Payments to Bank and flipping the bill to Paid — the same two-step design used on the customer side, simply reversed in direction.

Batch payments

Paying dozens of suppliers one at a time is inefficient, so Odoo supports batch payments: multiple vendor payments grouped into a single batch, typically exported as a SEPA credit transfer file or a run of printed checks. The accountant selects several posted payments, groups them into one batch, and generates a single file for the bank — streamlining a large payment run and giving one reconciliation line instead of many.

The aged payable report

Finally, the Aged Payable report is the vendor-side counterpart to the aged receivable. It lists every open vendor bill bucketed by age — for example Current, 1–30 days, 31–60 days, 61–90 days, and older — based on each bill's due date. Accountants use it to see total outstanding liabilities, decide which suppliers to pay first, and manage cash flow. Together, vendor bills, 3-way matching, payments, batch payments, and the aged payable report complete the purchase-to-pay picture the exam tests.

Test Your Knowledge

Odoo's 3-way matching feature compares which three documents to decide whether a vendor bill should be paid?

A
B
C
D
Test Your Knowledge

A 500 vendor bill with 20% deductible tax is posted. Which journal entry is correct?

A
B
C
D
Test Your Knowledge

Which report lists all open vendor bills grouped into age buckets based on their due date?

A
B
C
D