As standard, Odoo is configured to use Standard Cost and Manual Inventory Valuation. This means that you enter the standard cost for each product and no accounting entries are posted for any inventory transactions.
To take full advantage of having an integrated ERP system you may want to use:
- Average Cost or FIFO (based on purchase prices)
- Automated Inventory Valuation (with accounting entries)
Fortunately it’s easy to change the configuration. This is defined on the Product Category, so it’s best to decide what you want before you create multiple Product Categories.
Note: this article is primarily about so-called “Anglo-Saxon accounting“. If you use Continental (Rhine) accounting some of the postings are different.


The fields are described below.
Configuration
Costing Method
- Standard Cost (uses the cost entered on the product)
- Average Cost (based on purchase prices)
- FIFO (First In First Out, uses purchase price for each receipt)
Inventory Valuation
- Manual (or Periodic)
- No accounting entries are created for inventory movements or adjustments.
- Automated Inventory Valuation
- Accounting entries are automatically created, using the accounts specified (see below). These can be entered in the following places:
- On the Product Category
- On the product (Income and Expense accounts, Price Difference account)
- For the location (Input and Output accounts)
- Accounting entries are automatically created, using the accounts specified (see below). These can be entered in the following places:
Note also that if you make any changes to the above two fields, Odoo will display a warning message.
Account properties
Price Difference Account – used if the price on Vendor Bill (Supplier Invoice) is different from the PO price at the time the goods were received.
- As standard it is blank, but it is recommended to select an expense account. See below for more information.
Income Account
Used when a product is sold to a customer (generates income so will show on the Profit & Loss).
Expense Account
Used when buying a product. This is an expense that will show on the Profit & Loss.
Note: these three accounts can be overridden for a product on the Accounting tab:

Account stock properties
Accounts
- Stock Input account – for all incoming receipts of stockable items (e.g. goods received from vendors)
- This is an interim account to record the future liability to pay the vendor. When a Vendor Bill is created this is converted to Accounts Payable.
- Stock Output account – for all outgoing stock moves (e.g. goods delivered to customers)
- This is an interim account to record that the customer should pay you for the goods you have shipped. When a Sales Invoice is created this is converted to Accounts Receivable.
- Stock Valuation Account – updated for all stock moves
Note that for “Anglo-Saxon accounting” these three stock accounts are all asset accounts (on the Balance Sheet).
If you invoice the customer immediately after delivery, you can simplify postings by using this free add-on
Stock Journal
Select the Stock Journal to be used. This should be automatically created
Inventory adjustment postings
Inventory adjustments are used to correct inventory balances. Normally this would be done as part of periodic stocktaking or cycle counting.
If you are using Automated Inventory Valuation (and the Invoicing or Accounting apps are installed), inventory adjustments will post journals.
As standard, these will post to the same accounts that are defined for receipts and deliveries for the product category.
- This seems reasonable (because increasing the inventory balance is similar to a receipt, whereas reducing the balance is similar to a delivery to a customer).
- However, in Anglo-Saxon Accounting these are “interim” accounts that are designed to be used temporarily and then automatically cleared, which won’t happen with an Inventory Adjustment, so it’s better to use other accounts.
This is setup in Inventory Configuration for the Inventory Adjustment “virtual” location.
Start by navigating to Inventory / Configuration / Locations

Remove the filter (“Internal”) and all locations will be displayed:


As shown above, the Accounting Information is left blank as standard, which means that the stock input and output accounts in the Product Category are used.
Instead, you can:
- Create another “current asset” account, specifically for stock adjustments.
- You then need to manually clear this account by posting a journal that will transfer the gain or loss to Profit & Loss (P&L).
- OR select an Expense account so P&L is updated immediately.
In both cases only one account is required and Odoo will post Credits or Debits depending upon whether the inventory balance is increased or reduced.
Let’s create an account (6000200) for Inventory Write-Off. This is an Expense account in the P&L (option #2 above).

Now we will enter an inventory adjustment to reduce the inventory balance

This is the posting

Stock Valuation is reduced, Expenses are increased.
Price Differences
If the price on Vendor Bill (Supplier Invoice) is different from the PO price (at the time the goods were received) and you have specified a Price Difference Account (on the Product or Product Category, as described above) a posting will be made to that account.
This only applies to Anglo-Saxon accounting (and, of course, you must have the Invoicing or Accounting app installed).
Here’s an example of the postings if you use the Price Difference account:

If you don’t specify a Price Difference Account, the posting to the Stock Interim account will not match what was posted on the Goods Receipt, and you will have a balance that you will have to manually adjust later.
It is therefore recommended to select an Expense P&L account as the Price Difference Account for each Product Category.
I have configured all the accounts and locations as per the above suggested guidelines. However, when a vendor bill is posted, the following journal entry is getting created :
Accounts Receivable A/c. Credit
Taxes A/c. Debit
Expense A/c. Dr. (as set from product category)
With this, Expense Account in P&L is getting debited and Taxes and Receivables accounts are getting posted in BS. However, Stock Interim Account credited at the time of goods receipt is not getting nullified. As a result, this temporary entry is getting reflected in BS.
It may be mentioned that Inventory Write-Off Account (Expense) for Inventory adjustment, created as per guidelines) is not getting affected by vendor bill posting, which would have nullified Stock Interim Acccount.
May I know which setting could have gone wrong?
LikeLike
Are you using “Continental” accounting or “Anglo-Saxon”?
LikeLike
Continental Accounting
LikeLike
I don’t understand Continental Accounting in Odoo – some of what happens seems strange to me, so I can’t help you.
LikeLike
But what about the case for multi company? There will be different charts of account for respective companies. In that case, how can I customize inventory adjustment action to select another virtual location and expense account?
LikeLike
There will be different virtual locations for each company, so you just need to setup all of them. If using the admin account take care to select an account from the same company!
LikeLike
How to clear the stock interim (received) account in the below scenario:
* Company has an opening balance for Inventory Valuation from last year that require to be recorded manually in the opening balances Journal entry.
If we activate the automatic inventory valuation method, A journal entry will created per each product as below:
Inventory Valuation Debit
stock interim (received) Credit
Of Course, Anglo-Saxon method.
LikeLike
We reversed the automatic entries, because as you said, you already have the opening balance brought forward.
LikeLike
Stock Interim Account (Received) and Stock Interim Account (Delivered)
showing some balances , how I can find the missing documents or transactions easily
is there any reports will help me to find the reason for the balances .
LikeLike
Enable Developer Mode, go to Journal Items and enter the account number then you can see the postings. But I don’t think it’s easy to see what has happened!
LikeLike