How to Stop Goods Receipt Before Confirmation in SAP

Ever had a situation where someone does a Goods Receipt (GR) before the actual production confirmation? It’s like marking something “done” before it’s actually...well, done. Not ideal, especially in tightly controlled manufacturing environments. Thankfully, SAP has a built-in way to stop that from happening, and yes, it’s totally configurable. 

If you’re looking to prevent GR before confirmation, this guide will show you how, using SAP’s status profile settings. We’ll walk through it like two teammates solving this over coffee, minus the corporate jargon.

Why Block GR Before Confirmation?

Before we dive into the how, let’s talk about the why. Here’s the thing: letting users post GRs before confirming production can:
  • Mess up your inventory records
  • Trigger premature accounting entries
  • Disrupt downstream planning (hello, MRP chaos)
  • Lead to compliance issues in regulated industries
Bottom line? It’s cleaner, safer, and smarter to block GR until production is officially confirmed.

How to Configure SAP So GR Isn’t Allowed Before Confirmation

Step 1: Go to T-code BS02 - User Status Profile

Fire up your SAP GUI and jump into transaction BS02. This is where you’ll create a User Status Profile that acts like a smart gatekeeper for your production order.

Step 2: Create Your Own Status Profile

Click the Create button to set up a new profile. Give it a name you’ll remember, say, PP000001. Once created, select it and click Details.

Step 3: Define the Two Key Statuses

We’re going to define two simple statuses:
  • GR Not Allowed
  • GR Allowed
Here’s how:

a. First Status - GR Not Allowed

  • Status Number: 1
  • Status Code: STA1
  • Short Text: GR not allowed
  • Lowest Number: 1
  • Highest Number: 2
  • Check the Initial Status box (this makes it the default when an order is created)

b. Second Status - GR Allowed

  • Status Number: 2
  • Status Code: STA2
  • Short Text: GR allowed
  • Set both Lowest and Highest Number to 2

Step 4: Link to Object Types

You need to tell SAP where to apply this profile. In the object types section, check:
  • CO Production Order
  • PP/PM Order Headers
This limits your logic to production orders, exactly what you want.

Step 5: Restrict and Enable System Statuses

Now we’re getting to the heart of it. This is where you tell SAP what should and shouldn't be allowed under each status.

For STA1 – Block GR

  • Select STA1, then click Details
  • Hit Create, choose GR for Production Order
  • Set it as: 
    • Forbidden
    • Not Active
This means: “Don’t even try posting GR at this stage.”

For STA2 - Allow Confirmation and GR

  • Select STA2, click Details
  • Hit Create, then: 
    • Choose Confirm Order -> Set to Allow and Set
    • Then, select GR for Production Order -> Also Allow and Set
Now SAP knows: “Once the order is confirmed, GR is cool.”

Step 6: Save Your Status Profile

Click Save to lock in the setup.

Step 7: Assign It to a Production Order Type (OPJH)

Almost done!
  • Head to T-code OPJH
  • Find your production order type (e.g., PP01)
  • Assign your status profile (PP000001) to the Header Status Profile field
This binds your custom logic to real production orders.

Step 8: Test It Like a Pro

Create a production order and try posting a GR before confirmation, it should throw an error. Now, confirm the order and try again, voilà, it works.

Bonus Tip: Expand to Other Actions

This technique isn’t just for GR. You can use the same logic to:
  • Restrict Goods Movement until certain approvals
  • Block Mark for Deletion until review steps are done
  • Create gated workflows for quality or finance signoffs
It’s flexible and scalable for broader compliance.

Quick Recap

  • You’re using BS02 to create a User Status Profile
  • Status STA1 blocks GR, status STA2 allows it after confirmation
  • The system enforces proper production order flow
  • You assign it via OPJH to make it live

Common Questions

Q: Can I do this for subcontracting POs or process orders too?

A: Yes, but you’ll need to tailor the object types and status usage accordingly.

Q: What if users try to bypass it?

A: The system status logic enforces the restriction at a technical level, no user workaround unless they change the config.

Final Thoughts

This setup is one of those hidden SAP gems. It’s simple, powerful, and puts control back in your hands. Whether you’re dealing with strict audits or just want cleaner processes, this GR restriction setup is a smart move. So go ahead, tighten your production flow and stop GR before confirmation in its tracks.

or 

You can work with ABAPer on this requirement.  I think only way to you can control this by implement a USER EXIT or BADI.

1) User-Exit 
Use below user exit for Production Order when saving exit will work - PPCO0007 (Go to SMOD)

Function exit

EXIT_SAPLCOZV_001 enhancement when saving order
&---------------------------------------------------------------------
*& Include ZXCO1U06
&---------------------------------------------------------------------
 *Write your code here
 2) BADI
Implement the BADI - WORKORDER_CONFIRM in this there is method 
AT_SAVE under that 

write this code

method IF_EX_WORKORDER_CONFIRM~AT_SAVE.

data: lt_resb type standard table of resb,
        wa_resb type resb.

select * from resb into table lt_resb where rsnum eq i_order_header-rsnum and xloek eq space and bdmng gt 0.
check sy-subrc eq 0.

loop at lt_resb into wa_resb.
     if wa_resb-enmng < wa_resb-bdmng.
          message E499(sy) with 'Order is not fully consumed. Processing is STOPed'.
     endif.
endloop.

endmethod. 

Read Also:
Control Regular Entry for Material Consumption

SAP PP Reference Books:
SAP Production Planning , Configuration, Interview Questions and Certification, Books

Goto:
SAP MRP - Materials Requirements Planning Configuration Hints and Tips 

Back to:
SAP PP (Production Planning) Configuration Hints and Tips

Return to :-
SAP ABAP/4 Programming, Basis Administration, Configuration Hints and Tips

(c) www.gotothings.com All material on this site is Copyright.
Every effort is made to ensure the content integrity.  Information used on this site is at your own risk.
All product names are trademarks of their respective companies.  The site www.gotothings.com is in no way affiliated with SAP AG.
Any unauthorised copying or mirroring is prohibited.