When my Vendor charges more than the PO price, can I easily update my Inventory costs for product already received at the PO price?
We don't recommend updating the Purchase Order - as it contains useful information about the agreement "at the time" you had with the Vendor, even if it changes because they need to increase prices, back order items, substitute products, etc.
Periodically, you may want to assess how well your Vendors are able to keep to their agreements, so having a record of what you both discussed at the time is important.
The best approach is to leverage both the Price Difference (aka PPV) feature, as well as the Landed Cost feature. Together they can work well to update the value of Inventory you have received at the PO price to ensure your COGS is accurate.
1. Setup a Purchase Price Variance expense account:
2. Link this account to each Product Category, via the Price Difference Account field:
3. Define a new Product Category for your PPV service product so you can use the same account there under the Stock Input Account:
4. Create your PPV Service Product inside this Category, with the default Split Method you prefer.
Let's say your Purchase Order looks like this:
When you receive the Widget, your Inventory Valuation report will show $25 and you will see a debit to your Inventory Account for $25.
When you receive the Bill for the Widget, Odoo will default the price for the Widget to $25. Instead of adjusting this price, you add a second line for the difference. In this case, we will assume the price increased to $31.25. Your Bill would then look like this:
Note: This is where the majority of the work is needed in this workflow. Each line will show the PO price, so for each line where your Vendors shows a different unit price, you will need to add a difference line. You can use the calculator feature of numeric fields to make this easier - simply prefix your entry with the equal sign so Odoo knows you want it to minus $25 (the PO price) from $31.25 (the Bill price) to automatically calculate for you the $6.25 difference.
Once you confirm the Bill, the following Journal Entry will be created:
To clear the debit from the PPV account and reclass it to the Inventory Account, you would click "Create Landed Costs" on the Bill and identify the Transfer for this PO (or this shipment if there were multiple) - everything else will pre-populate:
The Landed Cost, once validated and posted, will credit the PPV account and debit your Inventory account, so that your Inventory Valuation report will now show $31.25 and when you sell this product, the Cost of Goods will be accurate at $31.25 instead of the Purchase Order price of $25.
It will also reconcile the relevant debit (from the Bill) and credit (from the Landed Cost), so a periodic review of any balance(s) remaining in the PPV account will identify any Vendor Bills where the Landed Cost was not created, and will identify which Bill you need to revisit.
Note: If the products are sold between the time you receive them and the time you process the Landed Cost, the amount will instead be debited to Cost of Goods (since you can't debit the value of inventory you have already sold). If you have sold some but still have some in Inventory, you will see a debit to increase COGS for the quantity you have sold and a debit to increase Inventory for the quantity remaining.
Thanks for the very detailed explanation Ray.
Can you please help me understand how this works if I have multiple products on my PO and all of them have a different cost when the bill arrives.
I tried adding the PPV service product multiple times to the vendor bill but then on the landed cost form Odoo multiplies my product lines by the number of PPV lines.
A little bit more details on this use case would be greatly appreciated.
If the PO was for $45,000 and the Bill was for $48,500, then create only a single PPV line for "=48500-45000" so that Odoo will auto calculate the difference. In addition, add Note lines to capture the information about the individual line item Unit Price differences. Then, while processing the Landed Cost, after selecting the Transfers, click COMPUTE so that you can see how Odoo plans to allocate the amount on the Valuation Adjustments tab. Adjust the allocations based on the Note lines from your Vendor Bill.
Ray - I do not fully agree with you on this: "
We don't recommend updating the Purchase Order - as it contains useful
information about the agreement "at the time" you had with the Vendor,
even if it changes because they need to increase prices, back order
items, substitute products, etc.
" That assumes that you care about keepin track about this.
Case: Your agreement with the vendor is adjusting the price! This is the case if you buy som commodities where price varies according to stock market. Like metal traded in the London Metal Exchange. The agreement with the vendor is LME at some date i the future + a fix addition. (Same condition is also used on the sale side.) With FIFO automatic valuation, the easiest way is to modify the purchase order before goods receipt - or as soon as the final price is known.
Your process with PPV is much more complicated with several steps. And very often it is best to keep it simple. If the extra information do not add value to the business.
I also see it that way. Much too complicated and above all: if I understand it correctly, the price differences are all collected together in one account. This may be correct from the point of view of the financial statements, but then I can no longer value the individual products at their current costs and look at price developments per product, can I?
The Price-Difference-Account is only working for Anglo-Saxon-Accounting. And, it is posting exactly the wrong thing!!! If there is a difference between PO and bill, this difference will appear on the Price Difference account! But we do not want to have it there, we want to have a stock.valuation.layer.adjustment and therefore an increase on our inventory account!
Odoo has to autoamtically compare the PO-lines with the bill-lines. And if there is a price difference, there needs to ba a value adjustment inside the stock.valuation.layer. Not that easy, as the quantities between "received" and "billed" may differ!
I agree with Florian Pichl. I think this difference should also be posted to the stock valuation layer.
Then for the accounting: The oppsite account for Stock Input Account would then be Stock Value account as current assets. I think.
Btw: I have an open issue that Odoo is working on for the stock input account. If you are interested: https://www.odoo.com/my/task/2880270
The stock valuation layer is exactly where the difference / additional costs are "landing". The debit you see in the screenshot below "Once you confirm the Bill, the following Journal Entry will be created" is credited so that your assets can then be debited to increase their value by the amount of PPV. The PPV account only holds a balance between Vendor Bill validation and Landed Cost validation. That is, seconds / minutes / hours or (maybe) a day or two in a well run business.
ou can update the Purchase Order price if that's a better fit for what you need. A separate expense account can be used for each Landed Cost. This means you can add a line for Design, Freight, Storage and PPV and each will be recorded into a different account. The workflow I explained supports a breakdown of Design, Freight, Storage and PPV that is available PER product PER month. The purpose of a Landed Cost is to move the Additional Charges (or PPV) and push it into the Inventory Unit Cost. Each of the accounts you use - Design / Freight / Storage / PPV - will have a debit posted at the time you validate the Vendor Bill, then a credit at the time you process the Landed Cost and move the amount into your inventory account. If you don't need to roll freight or other costs into the cost of your inventory or report on price development per product per month then you may not need Landed Costs.
Question to Ray:
Case FIFO valuation, and product cost for raw materials for manufacturing. If we have consuconsumed part or all in manufacturing of that latest incoming, how will landed cost affect product cost? I assume it will not have any impact on the cost for the processed manufacturing.
I assume we must register landed cost, before we consume anything if we would have this cost included in the product cost and manufacturing cost, and the for the finished product produced?
@ Ray: it looks like there are two possibilities in ODOO:
a) change the PO-price afterwards (extra effort AND usually you do not want to do so as you want to know which was the PO-price)
b) create dummy-landed costs (you need to create those dummy-LC-products for EVERY product where you have a price-diffference
--> in Standard, ODOO does not have any solution for this very common problem. It is not something special. For each PO in foreign currency there will be a price difference because of changing FX-rates (other rate on PO-date and Bill-date --> Bill-date is relevant for the capitalization of costs, but ODOO takes PO-date). I would say this issue is relevant for 80% of trading companies. Very sad, that it is not available in standard as other ERP know how to deal with this issue...
Solution could be: similar development as landed costs; ODOO gives a warning message if values in PO and Bill differ. If user agrees, difference is booked as an valuation adjustment in stock.valuation.layer (and therefore also in accounting) and in addition there would be an entry similar to stock.landed.costs... but, no additional LC-product is used...
Most of the smaller customers do not even know about the problem and they do not care. Bigger customers are "speechless" when I have to tell them how ODOO-standard is working (I am sure Mr.Koliwer can confirm this)...
Since my last post I found this module.
It looks like it fills the gap where multiple products have a different cost on the vendor bill then the original PO.
I haven't tested it yet but thought I'd share anyway.
For me it looks like this app is not fitting. It is only a community app for landed costs, in my opinion. It says, you need a service-product, that is exactly what you do not want...