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 clearly arrived, a receipt ERPNext refuses because the supplier shipped extra, a rate that drifts even though "Maintain same rate" is ticked — these all trace to how ERPNext computes received and billed percentages. This guide predicts the status from your numbers and gives the exact fix for each stall.
Coming from a requisition?
If your Purchase Orders start life as internal requests, the Material Request guide covers raising them and converting to a PO — including partial fulfilment across several POs.
A Purchase Order only ever reaches "Completed" when both received and billed hit 100% — every "stuck PO" ticket is one of those two numbers not getting there. I am Manoj, ERPNext and Frappe implementation lead at Mith Tech in Bengaluru; the buying cycle is core to every distribution and manufacturing client we run.
Why the status won't move
An ERPNext Purchase Order carries two computed percentages per line — how much has been received and how much has been billed. The document status is derived 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" means one of those numbers didn't actually reach 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.
A PO only reaches Completed when BOTH received and billed hit 100%. Stuck on “To Receive and Bill” with everything physically done usually means a zero-rate line or an unlinked row — or manually Close it if the balance isn't coming.
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.
Pick the Purchase Order behaviour you're seeing.
The "stuck after full receipt" case
This is the most reported one (#27514, #44016, #35371): every box arrived, the Purchase Receipt says Completed, but the PO still reads "To Receive and Bill". Check the billed percentage — a line received at a zero rate never gets billed to 100%, so the PO can't complete. Bill it (even at zero) or Close the PO.
The recipes
Copy-paste step recipes for partial receipts, allowing over-receipt, maintaining the same rate, and closing a stuck PO.
Receive in instalments against one PO.
1. From the submitted PO: Create > Purchase Receipt.
2. Edit the received qty down to what actually arrived.
3. Submit. The PO shows "To Receive and Bill" with
per_received < 100%.
4. Repeat for later shipments; each Receipt pulls the
remaining qty. Bill via Purchase Invoice the same way.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 Receipt/Delivery Allowance percentage in Stock Settings (or per item on the Item master). Receipts up to that tolerance 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 regression #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.
Chase the balance, or close it?
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 Receipt/Delivery Allowance percentage in Stock Settings, or per item on the Item master. Without a tolerance, 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 cancelling breaks the receipt links.
+Why does the rate change even though Maintain same rate is on?
The setting should force the Purchase Receipt and Invoice rates to equal the PO rate, but some v15 builds have a regression where it doesn't (#40159). Confirm the setting is on in Buying Settings, check your ERPNext patch level, and set the rate manually 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.
Closing
A Purchase Order in ERPNext is a state machine driven by two numbers. Read the received and billed percentages, clear whichever one is short — usually a zero-rate line — and use Close rather than Cancel when a supplier leaves you hanging. Do that and the "why won't this PO complete" question stops recurring.
Open POs piling up and nobody trusts the commitment report?
We clean up stuck Purchase Orders, set sane over-receipt and rate policies, and put an approval + close discipline in place so your open-PO list means something.