Purchase & vendor bills

Odoo purchase workflow: from RFQ to receipt and vendor bill

Keep the supplier agreement, warehouse receipt, and finance documents connected. Work through a partial delivery so the difference between ordering, receiving, and billing is clear.

By OdooMatrix Published Updated 5 min read

At a glance

Confirming a purchase order records an agreement. Validating a receipt records goods received. Creating or posting a vendor bill is a separate finance action.

1. Prepare the product, supplier, and bill policy

Use a test database with Purchase and Inventory, plus the invoicing or accounting applications needed for vendor bills. Work with the purchasing, warehouse, and finance users who will own each step. Check their permissions instead of performing every operation as an administrator.

Open Purchase → Products → Products. Choose a purchasable product, enable purchasing, and configure inventory tracking if you need stock quantities. Add the vendor, price, minimum quantity where applicable, and delivery lead time on the Purchase tab. Review the Buy route when it applies.

For this walkthrough, use a fictitious stocked product called “Training connector,” ordered in units. Set its bill control to On received quantities so the first bill can follow the partial delivery. Verify the currency, taxes, company, and receiving warehouse.

2. Create and send the request for quotation

  1. Go to Purchase → Orders → Requests for Quotation and select New.
  2. Choose the vendor, add 10 units of the training product, and review unit price, taxes, order deadline, and expected arrival.
  3. Record the vendor reference when available and check the receiving location.
  4. Use Send by Email to review the message and recipient before sending, or print the RFQ for your agreed purchasing process.

An RFQ asks for terms; it does not mean goods have arrived. Review the supplier’s response and revise quantities or pricing before approval. Keep the correspondence on the order so another buyer can understand the agreement.

3. Confirm the agreed purchase order

After the authorized buyer accepts the terms, click Confirm Order. With Inventory installed, Odoo creates the related receipt document. Open its receipt smart button and confirm the product, company, destination, quantities, and expected arrival.

The purchase order can now show 10 ordered units while stock remains unchanged. Do not use an inventory adjustment to make the purchase appear received. That would separate the physical movement from its purchasing document and make reconciliation harder.

4. Receive only what physically arrived

  1. Open the linked receipt when the delivery arrives and compare the supplier paperwork with the order.
  2. Record an actual received quantity of 6 for the training example. Assign lot or serial information if the product requires it.
  3. Validate the receipt after checking the destination and quantities.
  4. If the remaining 4 units will arrive later, create or retain the proposed backorder. Cancel the remainder only when the business has agreed that it will not arrive.

Expected: the completed receipt records 6 units and the remaining delivery is still traceable. Check the product’s on-hand stock and the linked receipt or backorder rather than judging completion only from the purchase order’s status.

5. Create the bill from the order and reconcile it

Return to the purchase order and use Create Bill when the order has billable quantities. Under the received-quantity policy, the first bill should use the 6 received units in this example. Review the draft against the actual supplier invoice before posting it.

  • Check the supplier, bill reference, bill date, payment terms, currency, taxes, and unit prices.
  • Confirm whether freight, discounts, or other charges need separate authorized treatment.
  • Investigate quantity or price differences instead of changing the draft only to remove a warning.
  • Let the finance user post the approved bill and follow the configured payment and reconciliation process.

Posting a bill does not prove the supplier has been paid. A later receipt and bill can account for the remaining 4 units. Retain the document links and check that the same supplier invoice was not recorded twice.

6. Use three-way matching as a review aid

Where available, enable 3-way matching in Purchase settings and review the bill’s Should Be Paid indicator. It helps compare the purchasing, receiving, and billing information. An exception needs a decision from the responsible buyer or finance user.

An indicator is not an approval lock

Odoo documents that bill lines can still be edited and the payment indicator can show an exception. Do not assume three-way matching alone enforces your company’s payment authorization policy.

Before repeating the process in production, test a complete delivery, a partial receipt, a returned product, and a mismatched bill. Confirm that each team can see the documents it needs without gaining unrelated access.

7. Frequently asked questions

Why does the purchase order not increase stock immediately?

The order records what you agreed to buy. Stock changes through the receipt and other actual stock movements, not merely by confirming the purchase order.

Why is there nothing to bill after order confirmation?

With a received-quantity bill control policy, stock must first be received. Check the product policy, completed receipt quantities, and whether those quantities were already billed.

Does three-way matching block every incorrect payment?

No. It provides a payment review indicator and can show an exception. Draft bills and the indicator can still be changed, so use the appropriate finance review and access controls.

8. Related articles and next steps

Reviewed against Odoo 20 documentation. Menu labels, availability, and actions depend on your edition, hosting, installed apps, and permissions. Practise the workflow in a test database before changing production.

Need help with your Odoo workflow?

Tell us your version, apps, and the outcome you need. Discuss your setup with OdooMatrix.

← Back to all articles