Most ERPNext Purchase Order questions are really one question: why won't the status move? A PO that stays on "To Receive and Bill" after the goods arrived, a receipt ERPNext refuses because the supplier shipped extra, a rate that drifts even though "Maintain same rate" is ticked: these trace to how ERPNext computes the received and billed percentages, and to a few settings. This guide predicts the status from your numbers and gives the fix for each stall.
A Purchase Order reaches "Completed" only when both received and billed reach 100%, so every "stuck PO" ticket is one of those two numbers falling short. I am Manoj, and I lead ERPNext and Frappe programmes at MithTech, a team of Frappe specialists in Bengaluru. The buying cycle is core to every distribution and manufacturing programme we run.
Why won't the status move?
An ERPNext Purchase Order carries two computed percentages: how much has been received and how much has been billed. The status follows from them: both at 100% is Completed; otherwise you see To Receive, To Bill or To Receive and Bill. So a PO that looks done but reads "To Receive and Bill" has one of those numbers short of 100%: a line billed at zero, a rounding remainder, or a Purchase Receipt that didn't link every row.
Enter ordered, received and billed quantities to see exactly which status ERPNext will show and why.
Which stall are you hitting?
Select the Purchase Order behaviour you're seeing to get its cause, the GitHub issue that documents it, and the fix.
The "stuck after full receipt" case
This is the most reported one: every box arrived, the Purchase Receipt says Completed, but the PO still reads "To Receive and Bill". Check the billed percentage first. A line received at a zero rate may never bill to 100% (#35371), so the PO can't complete; bill it (even at zero) or Close the PO. Other reported causes: a Purchase Receipt cancelled and amended (#27514), and goods received through a Purchase Invoice with Update Stock above the ordered quantity (#44016).
How do you handle each case?
Copy-paste step recipes for partial receipts, allowing over-receipt, maintaining the same rate, and closing a stuck PO.
Receive partially against one PO
Create → Purchase Receipt, edit the received quantity to what actually arrived, submit. The PO stays open on the balance; each later shipment pulls the remaining quantity.
Allow the supplier's over-shipment
Set an Over Delivery/Receipt Allowance (%) in Stock Settings (or per item on the Item master). Receipts up to that percentage above the ordered quantity are then accepted.
Hold the rate steady
Turn on Buying Settings → Maintain same rate throughout the purchase cycle so the receipt and invoice rates equal the PO rate. If it still drifts, you may be on a build with the regression in #40159; check your patch level.
Close a PO the supplier can't finish
Use the PO's Status → Close to take it off the open-commitments list. Prefer this to cancelling when part was already received; re-open later if the balance shows up.
Should you chase the balance, or close it?
| Chase to completion | Close it now |
|---|---|
| The remaining goods are still coming | The supplier has confirmed they can't fulfil the balance |
| A zero-rate / unbilled line is the only blocker | The open qty is distorting your commitment reports |
| Receipts and invoices just need matching up | The PO has sat part-received for months |
| Completion is days away | You'll re-order the balance on a fresh PO anyway |
At a glance
| Received | Billed | |
|---|---|---|
| Below 100% | Below 100% | To Receive and Bill |
| 100% | Below 100% | To Bill |
| Below 100% | 100% | To Receive |
| 100% | 100% | Completed |
| Closed by you | Closed (re-open if the balance arrives) |
FAQ
+Why is my ERPNext Purchase Order stuck on To Receive and Bill?
Because either the received or the billed percentage hasn't reached 100%. A PO only completes when both do. The usual cause is a line received at a zero rate that never gets billed, or a Purchase Receipt that didn't link every PO row. Check each line's received and billed percentage, clear the straggler, or manually close the PO.
+How do I receive more than the ordered quantity in ERPNext?
Set an Over Delivery/Receipt Allowance (%) in Stock Settings, or per item on the Item master. Without an allowance, ERPNext blocks any Purchase Receipt quantity above the ordered amount. With, say, 5% allowed, a receipt up to 105% of the PO quantity is accepted.
+How do I close a Purchase Order in ERPNext?
Use the Status action on the submitted PO and choose Close. It stops the PO counting toward open purchase commitments without cancelling it. Re-open it later if the remaining goods arrive. Prefer Close over Cancel when part of the PO has already been received, because a PO with linked receipts can't be cancelled cleanly.
+Why does the rate change even though Maintain same rate is on?
The setting should keep the Purchase Receipt and Invoice rates equal to the PO rate, but some early v15 builds had a regression where it didn't (#40159, since closed). Confirm the setting is on in Buying Settings, check your patch level, and set the rate by hand to match the PO until you're on a fixed release.
+Can one Purchase Order have multiple Purchase Receipts?
Yes. Receive in instalments: each Purchase Receipt pulls the remaining quantity from the PO, and the PO's received percentage climbs with each one until it reaches 100%. This is the normal way to handle staggered deliveries against a single order.
+Does this apply to ERPNext v14, v15 and v16?
Yes. The received/billed percentage model, over-receipt allowance, and Close action work the same across v14, v15 and v16. Specific bugs like the Maintain-same-rate regression (#40159) are build-specific, so check your patch level when a behaviour looks wrong.
What is the bottom line?
A Purchase Order in ERPNext is driven by two numbers. Read the received and billed percentages, clear whichever one is short (often a zero-rate line), and use Close instead of Cancel when a supplier can't finish. Do that and "why won't this PO complete" stops coming back.
Comments & ratings
No comments yet. Start a new discussion.
Manoj · Published on 28 July 2026
Worked with us? Leave a Google review