Best way for consulting company processes (and blanket orders?)


I think I understood how I “could” represent our (actually simple) process, but it would be very complicated imho … so I hope you have a better idea.

We’re offering consulting/dev services, which usually cannot be forecasted like a simple material, so we get (and sub-purchase) a “blanket order” or “blanket quotation”.

Lets say, we get 500 hours as budget for (each of) two different people in a period of 3 months.

  • Person A Role “Consultant”: 500 hours
  • Person B Role “Developer”: 500 hours

Person A is an own employee and Person (or Supplier) B is sub-contracted for this time-period (with a Blanket Purchase).

So in the 1st month Person A has more vacation and only works 100 hours, where Person B worked 200 hours.

So B will send us an invoice about 200 hours for month 1. For Person A we won’t get any invoice, as he’s getting his common salary.

So we’ll create an invoice for

  • Person A Role “Consultant”: 100 hours
  • Person B Role “Developer”: 200 hours

And the Balance of the original Order is now:

  • Person A Role “Consultant”: 400 hours
  • Person B Role “Developer”: 300 hours

So the problem I am seeing is, that there needs to be many (Sales/Purchase)Orders between those documents, which makes it really unhandy.
Furthermore when creating the Order from the Blanket Order, the Prices are calculated wrong. And I dont have the connection to the timesheets, so it’s pretty hard to generate the order.

So I made a scribble over our process, how it is in reality, and hope there is a lean way to design it in ERPNext. What I understood is, that on each red line there is the necessarity to create (Sales/Purchase) Order (without really knowing which quantities will be called up. And actually it just doesn’t make sense to have so many different orders. Actually the “main Order” should just be possible to retrieve multiple invoices, and provide an overview about the open hours (quantities) and the final budget.

Perhaps there are other DocTypes available, which are a better fit for this demand?

Hope anybody can help me out.


simply tested the process as following

  1. created 2 service(untick maintain stock) items, set UOM as Hour:
  2. create and submit quotation for the above 2 service items
  3. create and submit sales order from quotation
  4. create project from sales order
  5. create 2 tasks from project with title consulting and developing respectively
  6. create 2 activity types: consulting and developing
  7. create and submit timesheet for the above 2 tasks respectively
  8. create and submit purchase order from sales order for one item only
  9. create and submit purchase invoice from purchase order(tick update stock above the items child table)
  10. create and submit sales invoice from sales order(tick update stock above the items child table), get timesheet from project, manually change the item quantity
  11. open sales order analysis report to check the open billing hour.
  12. open gross profit report from accounting.

some manual intervention needed, e.g manually create tasks, create timesheet from task not auto fill the activity type, change sales invoice hour per posted timesheet hours etc, but it is enough for process tracking and transparency, also well linked together. of course so far gross profit report is not as expected.

above all, as low code platform, above process can be automated to some extent via some script code at different doctype event hooks.

1 Like

Thanks @szufisher for your effort and your message!

Could you additionally help me to understand some circumstances, I did not fully understand:

So it seems you want to “simulate” stock movements to keep the balance about the quantities… did I understand that right?
Is the stock for those Items kept globally or just scoped within the Sales Order? Until now, I did try to proceed without any stock, as there seems to be some side-effects (if the stock is maintained globally). Those are my thoughts about it:

  1. Perhaps negligible, but (imho) worth to to think about: In a logical sense, the allocated hours are not “on stock”, its just an agreement, that they are kind of allocated to the ressources available, at the time of generating the Sales Order (but that might change during the order runtime).
  2. What I illustrated originally is of course just a simple process. In reality we have the same Items for different Orders and different Customers (as well as for the same Customers but different Contracts/Departments).
    Can those stocks be handled separately (“locally” for each originating Sales Order)?
  3. Is there a way to invalidate allocate hours automatically? So when the Sales Order’s timerange (of the illustrated 3 months) is reached (so after the 3rd invoice), the rest of the ordered hours are lost (if person A only handled 450 hours instead of the 500 contracted ones, the end stock has to be 0 at all).
  4. It could get a bit more complicated if person A only works 450 hours, but Person B could compensate it (but has a different rate). Then it could make sense, that B works 530 hours, while A only did 450 hours… as long as the whole $ budget is not reached.

Ok the last point might make it a bit difficult I guess… but this is especially, why I thought (right now) to include stocks could make it evil.

Hopefully there are some “local stocks” on Sales Order base? :smiley:

Just to be clear: As you were only talking about 1 invoice for each item in your description: When changing those quantities, I’ll get the chance to generate more invoices for this Sales Order, won’t I?

Thanks for your help!

service item means there will be no inventory, no material movement at all,
till now to correctly set the sales order item status, both delivery note and sales invoice steps are needed, in service business, delivery note can be considered as service confirmation( service rendered and accepted by customer, ready to be billed). in order to skip delivery note step, we can tick(check) update stock in sales invoice.
service item as independent item code without stock implication, can be used in different sales order and link to different customer.

please try it out in system and check the document flow and relevant report. you will have more thorough understanding then.

Thanks for your additional explanation regarding the impact of the “update stock” and delivery note. That is really helpful!

→ I was trying at the same time… but that last mentioned part was simply not obvious to me.

So what is also cool, is that there is an additional indicator in the Sales Order List regarding the delivery state (based on cash).

Ok, when I was testing the described special case about moving the budgets between the items I recognized, that the products need to get some “overbill” allowances.
I expect this is not combinable with: Allow Overbills (no matter if 100% or 5000%) for the Item as long as the Sales Order is not overbilled, is it?

But most of our use cases is handled now…

There is just one special case left… hope you have an idea:

Some customers, are expanding its previously made “3 months” PO to another 3 months with additional budget. The unbilled budget of the first 3 months will be still available in this case. If I’d create another Sales Order this wouldn’t be the case. But is there a way to extend our existing Order (as “cancel for amend” is not possible, as there are submitted invoices attached)?

Or could we create a “follow-up” Sales Order which transfers the open quantities/dollars to the new one (and finishes the previous one)… perhaps you have an idea?

Thanks again alot!

Ok … I followed your instruction further regarding the Supplier references.

I understood, this is the only criteria to define the Item as a Service Item. Is this correct?

I am wondering as I am getting this error, when ticking “Update Stock” within the Purchase Invoice (on the Sales Invoice it went fine as you suggested):

Regarding this, I discovered, that I can “Update Items” after the docs were submitted.
So this is good to go I think, then I can update the Sales Order and create new Purchase Orders (I could also update those I noticed, but for me this is a clearer step, to have it’s own agreement with the suppliers for a next period).

But the part to tick the “Update Stock” in Purchase invoice, is unfortunately open :frowning:

you can set default warehouse in either stock module setting or item master: default value for company child table

please kindly confirm whether your problem has been resolved. then mark the answer as solution accordingly.

ok, ok, I also can set it directly, that wasnt my problem indeed.

I just implied, that, when I explicitely need to assign a warehouse (in contrast to the sales invoice), that perhaps there will be movements generated, also when its a service item. That’s why I wanted to understand, if the described tick in the Item master data is the only parameter to qualify a “Service Item”.

As I don’t have experience with Stocks/Warehouse, I am not sure if I would discover the movements, when I try… however I’ll try now.

Sure, as there are a few open questions, I just was hoping for some ideas, that others who come to this tread might find a good reference.

I’ve set it for test in the Purchase Invoice to go on.

In the Gross Profit Analysis the amount is not appearing.


Do you have an idea, how I can discover, what went wrong? (or what is the requirement to “connect” the Purchase Invoice to the Sales Invoice’s positions?

At least one Purchase Invoice Item is linked to the Purchase Order, which is also linked to one Item of the Sales Order.
But no “direct” connection between Sales Invoice to Purchase Invoice … is this the missing spot? But I cannot find a way of connecting them.