---
title: View current stock
order: 2
updated: 2026-07-22
---

# View current stock

The *Stock* screen is the live snapshot of what your firm currently holds. It answers "do we have this item, how many, and where is it kept?" — and it is the launch pad for every other stock operation: transfers, physical adjustments, conversions, the stock ledger, assembly costs, sample deliveries and per-product history.

Every figure on this screen is recomputed from the underlying movements each time you open or refilter it. Nothing here is a stored "current quantity" field — the number you see is derived on the server from approved arrivals, deliveries, transfers, adjustments, conversions, sample deliveries and delivery notes. See [How the Current Stock number is calculated](#how-the-current-stock-number-is-calculated).

## Open the Stock screen

1. Open *Inventory* in the sidebar.
2. Click *Stock*. The page opens with the *Stock* heading and a `(N heads)` count at the top left.

The whole screen requires the *Open Inventory Pages* permission (`inventory.viewInventory`). Without it the server refuses the request outright, so nothing loads. Firm administrators always have access.

## Read a row

The table lists one row per **product head**, sorted alphabetically by name. Each row aggregates all of the product codes underneath that head.

### Product Head

The head's name. Always shown; this column cannot be hidden.

### Current Stock

The net on-hand quantity across every code under the head (and, when a location filter is active, only at the filtered location). A negative number — which means more has gone out than the records show came in — is printed in red.

Hover the number to open the **Stock Breakdown** tooltip. It lazy-loads a per-`(make, unit)` split of that quantity so you can see, for example, `120` broken into `80 Siemens (Nos)` and `40 L&T (Nos)`. Rows with no recorded make are grouped under *Unspecified*. If the whole quantity sits in a single make-and-unit bucket the tooltip stays closed, because it would only repeat the number already on screen. The tooltip honours the same location filter as the table.

### Value (excl tax) and Value (incl tax)

Two money columns that appear **only if you hold the *View Stock Value Columns* permission** (`inventory.viewInventoryStockValue`; administrators always). They show the stock's worth excluding and including tax, formatted in Indian rupees with no paise (e.g. `₹1,20,000`).

The value is a **weighted-average cost** figure: the server averages the unit cost of every priced, positive-quantity movement (arrivals at their net rate, plus any physical adjustments entered with a price) and multiplies that average by the current quantity. Deliveries, transfers and conversions carry no cost of their own, so they change the quantity but not the average unit cost. A head whose codes never had a priced arrival shows `₹0` even if it has stock.

### Pending Arrival and Pending Dispatch

Two forward-looking columns that appear **only if you hold the *View Future Stock Columns* permission** (`inventory.showFutureStock`; administrators always):

- *Pending Arrival* — quantity still expected to come in. It is the outstanding quantity on purchase orders whose status is `sent` or `partiallyArrived`, minus whatever has already been received against them. Shown in green when non-zero.
- *Pending Dispatch* — quantity still expected to go out. It is the ordered quantity on customer orders that are not yet fully delivered, minus whatever has already been delivered (returns add the quantity back). Shown in amber when non-zero.

Neither figure changes your Current Stock; they are planning hints for what is in the pipeline. They refresh each time you reload or refilter the screen. Draft (un-sent) purchase orders are **not** counted here.

### Codes

The number of product codes registered under the head. Read-only.

### Manage

A *Manage* button that drills into the head's individual codes — see [Manage a product head](#manage-a-product-head). This column cannot be hidden.

### How the Current Stock number is calculated

For each product code the server nets together, in this order:

- **plus** approved stock arrivals (reverse-to-supplier entries are stored as negatives, so they subtract automatically);
- **minus** net approved deliveries (a customer return adds the quantity back);
- **minus** net transfers out of the filtered location (only relevant when a location filter is active — firm-wide, a transfer nets to zero);
- **plus/minus** physical stock entries (each entry is signed ±N);
- **plus/minus** stock conversions (the destination side adds, the source side subtracts);
- **minus** samples currently out (delivered quantity minus quantity already returned);
- **minus** the full quantity on delivery notes whose out-leg exists (`approved`, `linkPending` or `linked`).

The head's Current Stock is the sum of its codes' figures. Only **approved** arrivals and deliveries count — a pending arrival or a delivery awaiting approval is invisible here until it is approved.

## Filter the list

Two controls sit directly under the heading.

### Search product heads

The *Search product heads…* box on the left filters by head name. Typing is debounced (there is a short pause before it fires), the match is case-insensitive, and it runs on the server against the head name only — not code names. Clear the box to see everything again.

### Filter by location

On the right, three linked pickers narrow the snapshot to specific warehouse locations:

- *All Godowns* — a multi-select picker with its own *Search godowns…* box. The godown list is fetched from the server as you type (up to `30` results at a time), so long lists stay fast.
- *All Rooms* — enabled only after at least one godown is chosen. It lists the rooms inside the chosen godown(s) and filters as you type. Picking a different godown set drops any now-invalid room selections.
- *All Racks* — enabled only after at least one room is chosen, listing the racks inside the chosen room(s).

You can pick several godowns, rooms or racks at once; each choice appears as a removable tag. A *Clear* link resets all three at once. The most specific level wins: if you pick racks, the snapshot is computed at rack level; rooms if no rack; godowns if neither.

**Behaviour when a location filter is active:** the snapshot is computed at that location, and the `(N heads)` count reflects the filtered list rather than the whole firm. Whether empty heads are shown is governed by the *Stock Filter* (see [The View menu](#the-view-menu)) — with the default *All*, every scoped head is listed even if it holds nothing there; switch to *Non-zero* to hide the empty ones.

### Who sees the location filters

The location pickers only appear if your role can manage stock in at least one godown, room or rack (the *Manage Stock in…* permissions with a non-empty scope), or if you are an administrator. Everyone else sees *Showing all locations* instead, and their snapshot is always firm-wide.

Even when the pickers are shown, a non-administrator can only filter by locations inside their granted scope. The server silently ignores any location id outside your scope, so you can never read stock for a warehouse you were not given.

## The View menu

Open the menu button (three dots) at the top right and open *View*. It groups two ways to tailor the list, and both choices are remembered per device.

### Toggle Columns

Lists every hideable column — *Current Stock*, *Value (excl tax)*, *Value (incl tax)*, *Pending Arrival*, *Pending Dispatch* and *Codes* — with a tick beside the visible ones. Tick or untick to show or hide. *Product Head* and the *Manage* button are fixed and never appear in the list. A *Reset* link restores the defaults. Columns you have no permission for (the value or pending columns) never appear in the list, because they are not part of the table for you.

### Stock Filter

Chooses which heads the list shows, so you can hide the clutter of empty items:

- *All* — every head (the default).
- *Non-zero* — only heads that are actually holding stock.
- *Zero only* — only the empty heads (useful for a stock-take or a clean-up).

**A head counts as empty only when *every* code under it is exactly zero.** This is decided per code, never on the head's net total — so a head whose codes are, say, `+10` and `−10` nets to zero but is still treated as *Non-zero*, because it is not genuinely empty. The decision is made on the server, and it respects any active location filter (a head empty *at the filtered location* counts as zero there). The `(N heads)` count and the pager reflect the filtered list.

## Pages

The table shows `20` heads per page with a pager at the bottom — *Previous*, numbered page links and *Next* — exactly like the rest of the app (see [Tables & actions](/docs/getting-started/tables-and-actions#pagination)). The pager only appears once there is more than one page. The current page is remembered in the address bar as `?page=`, so you can bookmark or share a link to a specific page and reload without losing your place. Changing the search box or the location filter always jumps back to page 1.

## Manage a product head

Click *Manage* on any row to open the *Product Head: <name> — Stock* modal. It breaks the head down into its individual product codes, inheriting the page's current location filter (which you cannot change from inside the modal).

### The header summary

Below the title, a strip totals the codes currently listed: *Total qty*, and — with the matching permissions — *Value (excl)*, *Value (incl)*, *Pending Arrival* and *Pending Dispatch*.

### Search and columns

A *Search product codes…* box filters the code list by name (debounced, server-side). The *sliders* button at the top right opens a menu with:

- *View Locations* — the head-level location breakdown (see below).
- *Toggle Columns* — show, hide **and reorder** the table columns. Drag the grip handle beside a column name to reorder; tick or untick to show/hide; *Reset* restores defaults. Choices persist per device.
- *Stock filter* — three direct options, *All codes*, *Non-zero* and *Zero only*, with a tick beside the active one. They hide or show the codes in the list by their current stock (here it is a plain per-code test — a code is simply zero or not). The header summary strip keeps totalling **all** codes, so those figures do not change when you narrow the list. Your choice is remembered per device.

Each code row shows the same columns as the main table (*Code*, *Current Stock* with its own hover breakdown, the value columns, and the pending columns), gated by the same permissions.

### View In and View Out

Each code row carries three buttons. *View In* opens the arrivals-and-returns history for that code; *View Out* opens the deliveries-out history. Both are covered in [Stock history](/docs/inventory/stock-history).

### View Location and View Locations

*View Location* on a code row opens *Location Breakdown* for that single code — a `godown › room › rack` tree with the quantity held at each spot and the code's total on hand. *View Locations* in the sliders menu shows the same tree but for **every code under the head** combined. Either way, a negative total is shown in red, and locations with no stock are omitted.

## The actions menu

The menu button (three dots) at the top right of *Stock* groups the screen's operations. Which entries appear depends on your permissions.

### Transfer

Shown with the *Transfer Stock* permission. A submenu with *Transfer Stock* (move stock between locations) and *Transfer History* (past transfers). Both are documented in [Transfer stock](/docs/inventory/transfer-stock).

### Adjustment

Shown with the *Physical Stock Entry* permission. A submenu with *Physical Stock Entry* (record a plain ±N movement at a rack) and *Stock Entry History*. See [Physical stock entry](/docs/inventory/physical-stock-entry).

### Convert

Shown with the *Convert Stock* permission. A submenu with *Convert Stock* (turn one product code into another, e.g. raw material into a finished good) and *Convert History*. See [Convert stock](/docs/inventory/convert-stock).

### Stock Ledger

Always available (needs only *Open Inventory Pages*). Opens the combined in/out movement log for one product code over a date range — see [Stock Ledger](#stock-ledger) below.

### Pending Transfer

Always available. Opens a separate screen listing products with stock in the pipeline — *Pending Arrival*, *Pending Dispatch*, and the current on-hand quantity side by side, so you can spot what still needs to move. You can group the rows by product **code** (one row per code, with its unit) or by product **head**; the choice is remembered. Quantity sitting in draft (un-sent) purchase orders is shown as a muted hint rather than counted as a firm arrival.

### Assembly Cost

Shown with the *View Assembly Costs* permission. Opens the assembly-cost page where product recipes and their computed production costs live. See [Assembly cost](/docs/inventory/assembly-cost).

### Sample Delivery

Shown with the *See Sample Deliveries* delivery permission. Opens the sample-delivery screen — samples handed to customers count as out of stock until they are returned. See [Sample delivery](/docs/inventory/sample-delivery).

## Stock Ledger

*Stock Ledger* (from the actions menu) is the full chronological movement log for a single product code, with a running balance. Use it when the snapshot does not match what you expected and you want to walk back through exactly what happened.

### Pick a head and code

Choose a *Product Head*, then a *Product Code* (the code picker unlocks once a head is chosen). The ledger only loads once a code is selected — until then it shows a prompt.

### Make and Unit filters

If the chosen code has stock recorded under more than one make, a *Make* selector appears (with an *All makes* option and an *Unspecified* bucket for movements with no make). Likewise a *Unit* selector appears only if more than one unit is in play. When the code has a single make/unit, these selectors are hidden because there is nothing to narrow.

### Date range

*From Date* and *To Date* default to the current calendar month. Neither can be set past today. The end date must be on or after the start date — the modal refuses out-of-order ranges, and the server rejects them too.

### The summary strip

Four tiles summarise the selected range: *Initial* (the balance carried into the range), *In* (total added within it), *Out* (total removed), and *Final* (the balance at the end).

### Movement types and columns

Entries scroll infinitely, `10` at a time. Each row shows the *Date* (`dd/mm/yy hh:mm`), a colour-coded *Type* chip, the *Location*, a *Reference*, the person it is attributed to (*By*), the signed quantity *Change*, and the running *Balance* after that movement. *Date* and *Type* are fixed; the remaining columns can be shown, hidden and reordered from the menu, and the layout persists per device.

The *Type* chips you may see are: *Arrival*, *Reverse Entry* (an arrival sent back to the supplier), *Delivery*, *Return*, *Transfer Out*, *Transfer In*, *Adjustment*, *Convert Out*, *Convert In*, *Sample Out*, *Sample Return* and *Delivery Note Out*.

### Opening the source document

Where a row has an underlying record, a *View* button opens it — the adjustment detail, the arrival detail, the sample delivery, or the delivery (the delivery view needs a delivery-history or delivery-approval permission; without it the button is hidden). Conversions and transfers show their linked location or the other product code inline rather than a separate view.

## Permissions summary

| Feature on this screen | Permission (administrators always have it) |
|---|---|
| See the *Stock* screen at all | *Open Inventory Pages* (`inventory.viewInventory`) |
| Value (excl/incl tax) columns | *View Stock Value Columns* (`inventory.viewInventoryStockValue`) |
| Pending Arrival / Pending Dispatch columns | *View Future Stock Columns* (`inventory.showFutureStock`) |
| Location filter pickers | *Manage Stock in Godowns / Rooms / Racks* with a scope |
| *Transfer* submenu | *Transfer Stock* (`inventory.transferStock`) |
| *Adjustment* submenu | *Physical Stock Entry* (`inventory.physicalAdjustment`) |
| *Convert* submenu | *Convert Stock* (`inventory.convertStock`) |
| *Assembly Cost* item | *View Assembly Costs* (`inventory.viewAssemblyCost`) |
| *Sample Delivery* item | *See Sample Deliveries* (`delivery.seeSampleDeliveries`) |
| *Stock Ledger*, *Pending Transfer* | none beyond *Open Inventory Pages* |

## Common questions

### Why does the screen show zero for an item I just received?

The arrival is almost certainly still pending — only **approved** arrivals count here. Open [In stock](/docs/inventory/in-stock) to check its status. The other common cause is a location filter: you may be looking at a different godown, room or rack than where the stock landed. Clear the filter and look again.

### How do I hide all the empty items?

Open *View* → *Stock Filter* and pick *Non-zero*. The list then shows only heads that are actually holding stock, and the choice sticks on this device until you change it. Pick *Zero only* to do the opposite (handy for a clean-up), or *All* to see everything again. A head that looks empty but whose codes cancel out (one positive, one negative) is deliberately kept under *Non-zero*, because it is not truly empty. The same filter is available inside the *Manage* modal for the codes within a head.

### Why is a Current Stock number red / negative?

A negative figure means the records show more leaving than arriving for that item — usually a delivery, transfer, conversion or physical entry recorded against stock that was never logged as an arrival. Open the *Stock Ledger* for the code and walk through the movements to find the mismatch.

### An item has stock but its value shows ₹0 — why?

Value is a weighted average of **priced** movements. If none of the code's arrivals carried a price (or the only priced movements were removals), there is no cost basis to average, so the value reads `₹0` even though the quantity is real. Record the cost on a future arrival or physical entry to establish a basis.

### The location filters are missing for me.

They only appear if your role can manage stock in at least one godown, room or rack. Without that scope the screen says *Showing all locations* and always shows firm-wide totals. Ask an administrator for a *Manage Stock in…* scope if you need to filter.

### What is the difference between Current Stock and Pending Arrival/Dispatch?

*Current Stock* is what you physically hold right now. *Pending Arrival* and *Pending Dispatch* are pipeline figures — what open purchase orders are still due to bring in, and what undelivered customer orders are still due to send out. Neither pending figure moves your Current Stock; they update as those orders are received or delivered.

### How do I see where an item is kept?

Click *Manage* on the head, then *View Location* on a code (or *View Locations* from the sliders menu for the whole head). You get a `godown › room › rack` tree with the quantity at each spot.

### How do I export the snapshot?

The screen is designed to be read on screen. Narrow it with the search, location filters and column toggles, then screenshot or print. For a movement-by-movement export view of one code, use the *Stock Ledger*.
