Since you want to prevent the job from being released, I’d run the BPM on a method that gets run only when the job is released. Probably something in the JobEntry biz object, you can figure out what it’s called by using Tracing Options.
You may be able to do a query condition to see if prod qty > on hand qty. Action would be to raise an exception. This will prevent the method from finishing, so job won’t be released, and display a message box that you define. If the query isn’t possible then you’d need to do custom code, which would give you same result if written properly.
You could do a similar BPM on a method that runs when jobs are firmed. Alternatively:
-if all your jobs are made via MRP, and therefore they all need to be firmed before being released, you’d only need the BPM on the firming method.
-i think you could do a data directive on JobHead that runs if the released or firm fields are changed from false to true. this would actually be easier as you could kill 2 birds with 1 stone, only would need the 1 data directive instead of 2 method directives.
This is an overview, I can provide more info on any of this if needed.