[IMP] Inventory: Rewrite aging report as stock valuation report
closes odoo/documentation#11838
X-original-commit: 90048d2484
Signed-off-by: Liz Bender (beli) <beli@odoo.com>
@ -284,10 +284,10 @@ Transfer goods
|
|||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
*Transfers* are warehouse operations that involve the movement of goods. Examples of transfers
|
*Transfers* are warehouse operations that involve the movement of goods. Examples of transfers
|
||||||
include
|
include :doc:`deliveries and receipts
|
||||||
:doc:`deliveries and receipts <../../shipping_receiving/daily_operations/receipts_delivery_one_step>`,
|
<../../shipping_receiving/daily_operations/receipts_delivery_one_step>`, as well as
|
||||||
as well as :doc:`internal transfers <../../warehouses_storage/replenishment/resupply_warehouses>`
|
:doc:`internal transfers <../../warehouses_storage/replenishment/resupply_warehouses>` between
|
||||||
between warehouses.
|
warehouses.
|
||||||
|
|
||||||
When creating a transfer for tracked products in the **Inventory** app, transfers modify the on-hand
|
When creating a transfer for tracked products in the **Inventory** app, transfers modify the on-hand
|
||||||
quantity at each location. For example, transferring five units from the internal location
|
quantity at each location. For example, transferring five units from the internal location
|
||||||
|
@ -1,98 +1,227 @@
|
|||||||
======================
|
=========================
|
||||||
Inventory aging report
|
Stock valuation dashboard
|
||||||
======================
|
=========================
|
||||||
|
|
||||||
.. |SVLs| replace:: :abbr:`SVLs (stock valuation layers)`
|
.. |SVLs| replace:: :abbr:`SVLs (stock valuation layers)`
|
||||||
|
|
||||||
The inventory aging report evaluates all items in stock, providing insights into potentially sunken
|
When a company has physical assets, such as inventory, they often want to know approximately how
|
||||||
purchase costs and delays in profitability.
|
much has been spent on these goods, or how much they are worth at the moment. This process of
|
||||||
|
assigning a monetary value to account for inventory is known as *stock valuation*.
|
||||||
|
|
||||||
Create customized pivot tables to analyze product, operation types, month, or company breakdowns.
|
This value is often reported for accounting purposes. For instance, an insurance company may want to
|
||||||
This helps identify products in stock that are at risk of passing their expiration or viability
|
know the value of goods stored in a warehouse, in the event of a flood or fire.
|
||||||
dates, or instances of rot/decay for fast-expiring items.
|
|
||||||
|
:doc:`Stock valuation <../../product_management/inventory_valuation/using_inventory_valuation>`
|
||||||
|
typically utilizes one of two accounting systems:
|
||||||
|
|
||||||
|
- **Perpetual**: The inventory is constantly (perpetually) being updated, and the value is
|
||||||
|
constantly changing.
|
||||||
|
- **Periodic**: The inventory value is checked on an occasional (periodic) basis, and the value is
|
||||||
|
set at this occasional time.
|
||||||
|
|
||||||
|
Using :ref:`tracked inventory <inventory/product_management/tracking-inventory>` in Odoo
|
||||||
|
necessitates a *perpetual* inventory accounting system because of the need to know when and where
|
||||||
|
inventory exists, and how much of it is available or forecasted. There are a few common :ref:`stock
|
||||||
|
valuation methods <inventory/warehouses_storage/costing_methods>` used in Odoo: *standard price*,
|
||||||
|
*average cost* (AVCO), and *first in, first out* (FIFO) accounting. It is important to know that the
|
||||||
|
valuation method chosen for a product impacts the calculation of several fields in the stock
|
||||||
|
valuation reports.
|
||||||
|
|
||||||
|
Open the dashboard
|
||||||
|
==================
|
||||||
|
|
||||||
|
Odoo's *Stock Valuation* dashboard displays the financial value of all tracked inventory, according
|
||||||
|
to each product's stock valuation method. This report can provide insights into potential issues in
|
||||||
|
the supply chain, such as sunken purchase costs or delays in profitability. To access the dashboard,
|
||||||
|
go to :menuselection:`Inventory app --> Reporting --> Valuation`.
|
||||||
|
|
||||||
|
.. important::
|
||||||
|
The :menuselection:`Reporting`` menu in **Inventory** is only accessible to users with
|
||||||
|
:doc:`admin access <../../../../general/users/access_rights>`.
|
||||||
|
|
||||||
|
This dashboard has three different views, or inventory reports — :ref:`list view
|
||||||
|
<inventory/warehouses_storage/valuation-report>` (i.e. the default stock valuation report),
|
||||||
|
:ref:`pivot view <inventory/warehouses_storage/aging-report>` (i.e. the stock aging report), and
|
||||||
|
:ref:`graph view <inventory/warehouses_storage/graph-view>`. Each view can be customized with
|
||||||
|
different fields to break down inventory valuation by product, operation type, date, or company.
|
||||||
|
|
||||||
|
All three views can be filtered by various fields. To apply filters, click into the search bar at
|
||||||
|
the top of the report, or click the drop-down arrow next to it. For example, selecting the filter
|
||||||
|
:guilabel:`Has Remaining Qty` will show only products that are currently in stock.
|
||||||
|
|
||||||
|
.. _inventory/warehouses_storage/valuation-report:
|
||||||
|
|
||||||
|
List view: stock valuation
|
||||||
|
==========================
|
||||||
|
|
||||||
|
By default, the :guilabel:`Stock Valuation` dashboard displays in *list view*, represented by the
|
||||||
|
:icon:`oi-view-list` :guilabel:`(list)` icon. This report shows a detailed record of stock movements
|
||||||
|
and their valuations.
|
||||||
|
|
||||||
|
Configure
|
||||||
|
---------
|
||||||
|
|
||||||
|
The following columns are displayed by default:
|
||||||
|
|
||||||
|
- :guilabel:`Date`: the date and time when the :ref:`stock move <inventory/warehouses_storage/svl>`
|
||||||
|
was created. The valuation report is sorted by this field by default, emphasizing the importance
|
||||||
|
of time when valuing inventory. To sort the report by a different column, simply click on the
|
||||||
|
column title.
|
||||||
|
- :guilabel:`Reference`: the reference document associated with this stock move (e.g., a warehouse
|
||||||
|
receipt, a delivery order, or a manual inventory adjustment).
|
||||||
|
- :guilabel:`Product`: the product that is being moved and valued.
|
||||||
|
- :guilabel:`Quantity`: the number of units by which this product's stock has increased or
|
||||||
|
decreased in this particular stock move.
|
||||||
|
- :guilabel:`Total Value`: the value of the product's stock in this particular stock move,
|
||||||
|
calculated by multiplying the :guilabel:`Quantity` and :guilabel:`Unit Value`.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
The *Reporting* menu in *Inventory* is only accessible to users with :doc:`admin access
|
If a :guilabel:`Reference` document includes several goods, there will be a separate line item
|
||||||
<../../../../general/users/access_rights>`.
|
generated on the report for each good.
|
||||||
|
|
||||||
To access the inventory aging report, go to :menuselection:`Inventory app --> Reporting -->
|
There are additional fields that can be added to this view to provide more insight into the stock's
|
||||||
Inventory Aging`.
|
valuation. To add fields, click the :icon:`oi-settings-adjust` :guilabel:`(adjust)` icon, and select
|
||||||
|
the desired fields:
|
||||||
|
|
||||||
|
- :guilabel:`Lot/Serial Number`: the uniquely identifying lot or serial number for this product.
|
||||||
|
- :guilabel:`Company`: for businesses that operate with multiple companies, this field displays the
|
||||||
|
company by which this stock move took place.
|
||||||
|
- :guilabel:`Remaining Quantity`: the number of units remaining for this valuation of the product,
|
||||||
|
after demand has been accounted for (even from other stock moves). This field can be especially
|
||||||
|
helpful for :abbr:`FIFO (First In, First Out)` and :abbr:`AVCO (Average Cost)` accounting, as it
|
||||||
|
conveys which units of stock came into a warehouse first and the value of said stock.
|
||||||
|
- :guilabel:`Unit Value`: the cost of one unit of the product for the company (**not** the price to
|
||||||
|
consumers).
|
||||||
|
- :guilabel:`Description`: a description of the reason for this stock valuation (typically, a stock
|
||||||
|
move has occurred). By default, this field is set as the concatenation of the
|
||||||
|
:guilabel:`Reference` and :guilabel:`Product` fields. However, the field may also display other
|
||||||
|
important messages for this line item, such as a note stating that the line item is an adjustment
|
||||||
|
due to a change in the product's inventory valuation method.
|
||||||
|
- :guilabel:`Remaining Value`: the value of this product's current stock levels for this particular
|
||||||
|
stock move, after demand has been accounted for. Along with :guilabel:`Remaining Quantity`, this
|
||||||
|
field can be especially helpful for :abbr:`FIFO (First In, First Out)` and
|
||||||
|
:abbr:`AVCO (Average Cost)` accounting, as they convey which stock came into a warehouse first and
|
||||||
|
the value of said stock.
|
||||||
|
|
||||||
|
.. tip::
|
||||||
|
Some of these settings may not appear unless first enabled in Odoo's **:doc:`Settings
|
||||||
|
<../../../general>`** application.
|
||||||
|
|
||||||
|
.. image:: aging/stock-valuation-report.png
|
||||||
|
:alt: Stock valuation report.
|
||||||
|
|
||||||
|
.. _inventory/warehouses_storage/svl:
|
||||||
|
|
||||||
|
Stock valuation layers (SVLs)
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
Each line item in the :guilabel:`Stock Valuation` report represents a record in Odoo's system known
|
||||||
|
as a *stock valuation layer (SVL)*. :abbr:`SVLs (stock move layers)` are generated when products
|
||||||
|
move in a way that impacts their stock valuation. Specifically, the stock moves that generate
|
||||||
|
:abbr:`SVLs (stock move layers)` are warehouse receipts, deliveries, dropshipping orders, and
|
||||||
|
dropshipping returns. These stock moves must first be validated (by clicking the
|
||||||
|
:guilabel:`Validate` button) for the :abbr:`SVL (stock move layer)` to be created.
|
||||||
|
|
||||||
|
If a product's inventory valuation method changes on the product form, new line items are generated
|
||||||
|
on the :guilabel:`Stock Valuation` report to reflect the resulting :abbr:`SVLs (stock move layers)`.
|
||||||
|
For example, if the valuation method changes from *standard price* to either :abbr:`AVCO (Average
|
||||||
|
Cost)` or :abbr:`FIFO (First In, First Out)` accounting, *revaluation entries* will be
|
||||||
|
automatically posted to reflect the change in pricing for goods that remain in stock. One entry will
|
||||||
|
be negative to "remove" the old pricing, and the second entry will be positive to record the new
|
||||||
|
pricing. These entries are connected to journal entries in Odoo's **Accounting** app.
|
||||||
|
|
||||||
|
Below is an example of what the :guilabel:`Stock Valuation` table shows when a few stock moves have
|
||||||
|
occurred for a product using standard price accounting.
|
||||||
|
|
||||||
|
.. image:: aging/before-val-method-change.png
|
||||||
|
:alt: Stock valuation table in standard price accounting.
|
||||||
|
|
||||||
|
Conversely, the following image depicts what the *Stock Valuation* Report table might look like
|
||||||
|
after a product has switched from standard price to :abbr:`FIFO (First In, First Out)` accounting.
|
||||||
|
|
||||||
|
.. image:: aging/after-val-method-change.png
|
||||||
|
:alt: Stock valuation table after switching from standard price to FIFO accounting.
|
||||||
|
|
||||||
|
.. example::
|
||||||
|
The :guilabel:`Remaining Value` and :guilabel:`Remaining Quantity` fields are derived from what
|
||||||
|
occurs at the :abbr:`SVL (stock move layer)` level in Odoo and, as such, are better understood
|
||||||
|
with an example.
|
||||||
|
|
||||||
|
Frankie's Consignment Shop buys sweaters at the cost, or :guilabel:`Unit Value`, of `5.00`
|
||||||
|
dollars. For the first time, Frankie's purchases and receives a :guilabel:`Quantity` of `100.00`
|
||||||
|
sweaters in one stock move, then re-sells and delivers `-10.00` sweaters in a second stock move.
|
||||||
|
|
||||||
|
In the first stock move line item, the :guilabel:`Remaining Quantity` will change from `100.00`
|
||||||
|
to `90.00`, once the second stock move is recorded. This change reflects that, although 100
|
||||||
|
sweaters were originally purchased, only 90 of those sweaters remain in stock and should be
|
||||||
|
counted in the valuation. Similarly, the :guilabel:`Remaining Value` will drop from `$500.00` to
|
||||||
|
`$450.00`. The :guilabel:`Total Value` will remain at `$500.00`, regardless of subsequent
|
||||||
|
transactions.
|
||||||
|
|
||||||
|
On the other hand, the :guilabel:`Remaining Quantity` of the second stock move line item will be
|
||||||
|
recorded and remain at `0.00` because the quantity of `-10.00` was sold. In the system, because
|
||||||
|
the :abbr:`SVL (stock move layer)` was a sale, there is no stock left that needs to be valued
|
||||||
|
from that transaction.
|
||||||
|
|
||||||
|
.. image:: aging/remaining-val-quant.png
|
||||||
|
:alt: Remaining value and quantity are calculated based on :abbr:`SVLs (stock move layers)`.
|
||||||
|
|
||||||
|
Change the valuation date
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
To see the valuation of stock moves at a specific date and time, click the :guilabel:`Valuation At
|
||||||
|
Date` button, located in the top-left corner of the :guilabel:`Stock Valuation` page. The report
|
||||||
|
will show the :guilabel:`Quantity` and :guilabel:`Total Value` of each stock move.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
The :guilabel:`Remaining Quantity` and :guilabel:`Remaining Value` of the stock moves will *not*
|
||||||
|
be point-in-time for any dates chosen in the past. The stock moves shown when selecting a past
|
||||||
|
date will still display the *current on-hand quantity and value* of the products.
|
||||||
|
|
||||||
|
.. example::
|
||||||
|
A business has 100 sofas in stock on January 1st and sells 20 of those sofas on February 1st. The
|
||||||
|
:guilabel:`Remaining Quantity` of the :abbr:`SVL (stock move layer)` will drop from `100.00` to
|
||||||
|
`70.00` on February 1st. If no other stock moves take place, and on February 1st, the
|
||||||
|
:guilabel:`Valuation at Date` is selected as January 1st, the :guilabel:`Remaining Quantity`
|
||||||
|
will still show as `70.00`.
|
||||||
|
|
||||||
.. _inventory/warehouses_storage/aging-report:
|
.. _inventory/warehouses_storage/aging-report:
|
||||||
|
|
||||||
Navigate the inventory aging report
|
Pivot view: stock aging
|
||||||
===================================
|
=======================
|
||||||
|
|
||||||
By default, the :guilabel:`Inventory Aging` report displays a pivot table, with the month in
|
From the :guilabel:`Stock Valuation` dashboard, access pivot view by clicking the
|
||||||
columns, and product category in rows. The default filters, :guilabel:`Incoming` and :guilabel:`Has
|
:icon:`oi-view-pivot` :guilabel:`(pivot)` icon. This view is essentially a *stock aging report*, and
|
||||||
Remaining Qty`, show only products from receipts, and are currently in stock.
|
it shows the on-hand quantity and value of inventory by purchase date, which can help monitor
|
||||||
|
products with expiration dates.
|
||||||
|
|
||||||
:guilabel:`Remaining Qty` displays the number of on-hand items, and :guilabel:`Remaining Value`
|
Configure
|
||||||
displays the total cost of purchasing these items.
|
---------
|
||||||
|
|
||||||
Clicking the :icon:`fa-plus-square` :guilabel:`(plus)` icon in each column or row reveals options to
|
By default, the pivot view shows the value of all *product categories* by *day and month*. Clicking
|
||||||
expand the pivot table and show a detailed breakdown of the :guilabel:`Remaining Qty` and
|
the :icon:`fa-plus-square` :guilabel:`(plus)` icon in each column or row will reveal a drop-down
|
||||||
:guilabel:`Remaining Value` by :guilabel:`Product`, :guilabel:`Product Category`, :guilabel:`Date`,
|
list of options to create a more granular breakdown of the inventory valuation. The drop-down
|
||||||
or :guilabel:`Company`. Clicking the :icon:`fa-minus-square-o` :guilabel:`(minus)` icon collapses it
|
options include: :guilabel:`Product`, :guilabel:`Lot/Serial Number`, :guilabel:`Product Category`,
|
||||||
back to its previous state.
|
:guilabel:`Date`, :guilabel:`Company`, or :guilabel:`Add Custom Group` Clicking the
|
||||||
|
:icon:`fa-minus-square-o` :guilabel:`(minus)` icon collapses the field back to an empty state.
|
||||||
|
|
||||||
.. figure:: aging/inventory-aging.png
|
In the table, the :guilabel:`Remaining Qty` column displays the number of on-hand items, and
|
||||||
:align: center
|
:guilabel:`Remaining Value` displays the total cost of purchasing these items.
|
||||||
:alt: Inventory aging report.
|
|
||||||
|
|
||||||
Inventory aging report, showing each **Product** in rows and each reception **Date** in columns,
|
.. image:: aging/stock-aging-report.png
|
||||||
to better monitor products with fast expiration dates. Each row shows the the total on-hand
|
:alt: Stock aging report, showing product row items and day columns.
|
||||||
quantity and inventory valuation of items purchased on each day.
|
|
||||||
|
|
||||||
.. note::
|
.. _inventory/warehouses_storage/graph-view:
|
||||||
Records in the :guilabel:`Inventory Aging` report are *stock valuation layers* (SVLs),
|
|
||||||
representing product moves that impact stock valuation.
|
|
||||||
|
|
||||||
Inventory adjustments do **not** create |SVLs|; only items purchased from vendors do.
|
Graph view
|
||||||
|
==========
|
||||||
|
|
||||||
Generate reports
|
The stock value can be depicted graphically by clicking the :icon:`fa-area-chart`
|
||||||
================
|
:guilabel:`(graph)` icon. By default, the graph is displayed in :icon:`fa-line-chart` line chart
|
||||||
|
view and filtered to show the cumulative total of all inventory value over time in Odoo.
|
||||||
|
|
||||||
After learning how to :ref:`navigate the inventory aging report
|
At the top of the report, a :icon:`fa-bar-chart` bar chart or :icon:`fa-pie-chart` pie chart view
|
||||||
<inventory/warehouses_storage/aging-report>`, it can be used to create and share different reports.
|
can be selected instead.
|
||||||
|
|
||||||
A few common reports that can be created using the :guilabel:`Inventory Aging` report are detailed
|
|
||||||
below.
|
|
||||||
|
|
||||||
Rotating stock report
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
To create a report to identify items that have been in stock for a while, follow these steps:
|
|
||||||
|
|
||||||
#. Navigate to :menuselection:`Inventory app --> Reporting --> Inventory Aging`.
|
|
||||||
#. On the :guilabel:`Inventory Aging` report, click the :icon:`fa-caret-down` :guilabel:`(caret
|
|
||||||
down)` icon in the :guilabel:`Search...` bar to see a drop-down list of :guilabel:`Filters`,
|
|
||||||
:guilabel:`Group By`, and :guilabel:`Favorite` options.
|
|
||||||
#. Choose :guilabel:`Product` under the :guilabel:`Group By` section. Doing so expands the pivot
|
|
||||||
table to show a product in each row.
|
|
||||||
#. Click the :icon:`fa-plus-square` :guilabel:`(plus)` icon to the left of the date column. Hover
|
|
||||||
over :guilabel:`Date` from the drop-down menu and choose :guilabel:`Year`, :guilabel:`Quarter`,
|
|
||||||
:guilabel:`Month`, :guilabel:`Week`, or :guilabel:`Day`. Doing so expands the columns to show the
|
|
||||||
:guilabel:`Remaining Qty` and :guilabel:`Remaining Value` by the selected time period.
|
|
||||||
|
|
||||||
.. tip::
|
|
||||||
For products that have a longer shelf life, choose longer time periods such as
|
|
||||||
:guilabel:`Month` or :guilabel:`Quarter` when expanding columns by :guilabel:`Date`.
|
|
||||||
|
|
||||||
.. image:: aging/column-expand-icon.png
|
|
||||||
:align: center
|
|
||||||
:alt: Pivot table, highlighting the plus icon to expand columns.
|
|
||||||
|
|
||||||
#. The report now displays the on-hand stock of items, and their total purchasing cost, for each
|
|
||||||
time period.
|
|
||||||
|
|
||||||
.. example::
|
|
||||||
Inventory aging report, with the :guilabel:`Group By`: :guilabel:`Product` option selected,
|
|
||||||
and with the :guilabel:`Date` column set to :guilabel:`Day`. It gives insight into how much
|
|
||||||
raw fish sashimi products were purchased on each day, and how much it cost. This informs the
|
|
||||||
business owners how much stock is at risk of rotting in stock, per day.
|
|
||||||
|
|
||||||
.. image:: aging/inventory-aging.png
|
|
||||||
:align: center
|
|
||||||
:alt: Inventory aging report, showing product row items and day columns.
|
|
||||||
|
|
||||||
|
.. seealso::
|
||||||
|
:doc:`Odoo reporting essentials <../../../../essentials/reporting>`
|
||||||
|
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 24 KiB |