Ledgr/Documentation/Inventory

Inventory

Watch the 2 lessons: Add a product with opening stock (2:01), Count stock with a stock take (2:03).

Stock that stays honest across locations, with a movement history you can trace back to the document that caused it.

Plan.

Inventory is included from Business upwards.

On Starter it can be bought on its own as the Inventory add-on at R149/mo — one charge, however many companies you run. See pricing.

Products and variants

  1. Inventory → Add Product

    Name, SKU, category, unit, cost price, sell price and VAT rate.

  2. Add variants if the product has them

    Capacity, colour, size — each variant carries its own SKU and price and holds its own stock. A laptop in 16GB/512GB and 32GB/1TB is one product with two variants, not two products.

    A variant's stock is counted, never typed. Give a new variant the units already on the shelf as its opening stock, then choose the variant when you Receive Stock; an invoice line for the variant takes its units out. Each of those moves the Inventory account with it.

  3. Choose a costing method

    FIFO, LIFO or weighted average, set per product. This decides what cost of sales is posted when a unit is sold, so change it only at a period boundary.

    A caution about LIFO. SARS does not accept LIFO for tax, and IFRS and IFRS for SMEs do not permit it. Use FIFO or weighted average for anything that feeds your tax return or your financial statements.

Whole units, or fractions of one

Stock is counted in whole units unless you say otherwise. Each product carries its own quantity precision — 0 to 4 decimal places — because whether half of something is a real thing is a fact about the goods rather than a setting for the whole business.

  • Leave it at 0 for anything you sell by the item. Nothing you already sell changes.
  • Set 2 or 3 for metres of cable, litres of resin, kilograms of powder — anything a supplier delivers 2.5 of.
  • A serialised product is fixed at 0: half a serial number is not a thing.

It matters most on the way in. With whole units only, receiving 2.5 of something would book 3 units that never arrived, and receiving 0.4 would book none while still raising the bill.

Locations and transfers

Stock is held per location, not as a single global number. Create a location for each place you actually hold stock, then move units between them with a transfer — which records an out at the source and an in at the destination so the total never drifts.

Reorder points, per branch

A product's reorder point compares the total on hand against one number. That is the right check for one shop, and the wrong one for two: 40 units in Johannesburg and none in Cape Town reads as perfectly healthy right up until the Cape Town counter cannot fill an order. The stock is real, it is just in the wrong province.

Open Stock Levels and any branch shortfall appears at the top. Use Thresholds on a row to say what each location should hold, and optionally how much to bring in when it drops — Ledgr keeps the trigger and the order size separate, because plenty of businesses know the first without having decided the second.

Two rules worth knowing. A location with no threshold of its own falls back to the product's reorder point, so nothing changes for a single-location business. And a branch is only reported short of something it is meant to carry — either it holds stock of it, or you set a threshold there. Otherwise every branch would be told it is short of every product it has deliberately never stocked, and a warning list nobody can read is a warning list nobody reads.

On hand, reserved and available

A sales order holds its stocked items for the customer who ordered them. The product shows three figures: on hand is what is on the shelf, reserved is what open sales orders are holding, and available is what is left to sell. Reorder points and the low-stock list judge the available figure, so ten on the shelf with eight promised reads as two.

Nothing leaves the shelf when an order is raised. Converting the order to an invoice releases the reservation, and the goods come out when you issue that invoice; cancelling the order releases it too. An order can reserve more than you have — it says by how much, so you know what to buy — but the invoice will not issue until the stock is there.

Batch tracking

Where it matters who supplied a unit and when it expires, receive stock in batches. A batch holds its id, received date, supplier and expiry date. Movements record the batch, so a recall or a short-dated line can be traced to the customers who received it.

Recipes and assemblies

If you buy parts and sell something made of those parts, a recipe records what one run consumes and a build turns the parts into the finished product. Ledgr costs the finished units at what the components actually cost, not at their list prices — which is why the gross margin on something you made can be trusted.

  1. Inventory → Assemblies → New recipe

    Choose the finished product, list the components, and say how many units one run produces. If one mix makes twelve, put 12 there — the component quantities are then per mix, not per unit, so nothing has to be rounded.

  2. Add scrap where there is waste

    A workshop cutting 2.4m from a 2.5m length consumes the whole length. Enter that as scrap and Ledgr consumes what you really use, so purchasing stops under-ordering.

  3. Add labour and overhead per run, if you cost them

    These are capitalised into the finished stock — debited to Inventory, with labour credited to Direct Labour (5060) and overhead to Manufacturing Overhead Applied (5065) — because the value moved onto the shelf rather than leaving the business. Leaving it unposted would overstate the month's costs and understate closing stock.

  4. Build

    The build sheet shows what the run needs, what is on hand, what it will cost per unit, and the most you could make right now. Components come off the shelf through the same costing method a sale uses, and the finished units are received at the total the build genuinely cost.

A recipe cannot contain the product it makes, directly or through a sub-assembly — Ledgr refuses it and shows the chain, because the cost would never resolve. A component that has its own recipe is flagged on the build sheet, so a shortfall you could build does not look like one you have to buy.

Short of stock, the build is refused. A component cannot go below zero — a negative batch would leave the inventory account carrying value no stock supports — so Ledgr names every component that is short and the quantity you can build now. Build that, or receive the missing parts first. Reversing a build returns the components at the cost the build charged for them and takes the finished units back off, so reversing and rebuilding leaves stock value where it started.

Serial numbers and warranties

A batch answers what a unit cost and when it expires. A serial answers where one particular unit is, who has it, and whether it is still under warranty — the question a customer asks while standing at your counter holding the thing.

  1. Switch it on per product

    Tick Track serial numbers when you add or edit a product, and set a warranty in months if the product carries one. Serialise the laptops, not the HDMI cables: turning it on for everything makes the till unusable.

  2. Capture a serial for each unit you receive

    On the receipt screen, enter one number per unit — the count has to match the quantity, because nine numbers for ten units leaves one unit permanently untraceable. Stock that arrives numbered in a run can be generated from a prefix and a starting number instead of typed. Scanning the same unit twice is reported by number rather than silently skipped.

  3. Sell as normal

    When a serialised product goes out on an invoice, Ledgr attaches the oldest unit in stock and marks the pick as automatic. If the customer took a different one, confirm the right serial against the invoice and the automatic flag comes off. Nothing is ever blocked for want of a serial — an invoice you cannot raise is worse than a unit you have to identify afterwards.

  4. Answer the warranty question

    Inventory → Serials → Look up a unit: type or scan the number and you get the product, the receipt it arrived on, the invoice and customer it went to, and the days of cover left. The warranty runs from the date of sale, not the date you received the stock.

Returns and write-offs are separate on purpose. A return puts the unit back on the shelf and ends the warranty, because the guarantee never ran its course — but it keeps the customer and invoice on the record. A write-off retires the unit for good. A sold unit cannot be deleted, because that record is somebody's warranty.

The Serials tab also reports two mismatches rather than hiding them: units on hand with no serial captured, which happens when you switch tracking on for existing stock, and serials on file for units the stock ledger does not have. Neither stops you trading; both tell you what to fix.

Movement history

Every product has a movement log: date, type, quantity in or out, the document behind it and the running balance afterwards. When a stock take shows a variance, this is where you find out what happened.

Stock valuation and stock aging

Inventory → Reports has two reports, each with an Export CSV.

  • Stock valuation — what your stock was worth on a date you choose, product by product, beside the Inventory account in your ledger on the same date and the difference between the two. Today's figure is read from your batches and should differ by R0.00. An earlier date is rebuilt from the stock movements since, and is marked as an estimate: a cost added to a batch later, such as a landed cost, is not taken back out.
  • Stock aging — how long your stock has been on the shelf, from each batch's received date: 0–30, 31–90, 91–180 and over 180 days. It adds up to your stock value.

Stock takes

  1. Inventory → Stock Takes → New Stock Take

    Choose the location and, if you want, restrict it to one category. Only the stock-tracked products in that category go on the count sheet.

  2. Count

    Type counted quantities against the expected ones, or tap Scan to count: each scan adds one to the line whose barcode — or SKU — matches, and a code that is not on the sheet is named rather than ignored. Save counts as you go.

  3. Review the variance

    Ledgr shows the difference per line in units while you count. Once the take is committed it also shows each line's variance in value — the amount actually posted to the ledger, not an estimate.

  4. Commit

    Commit (it needs the approve permission for inventory) writes the counts back to the on-hand quantities and posts the variance: a shortfall to Inventory Write-off / Shrinkage (5070), a find back from it, against Inventory (1310). The stock take stays on file as the reason.

Barcodes

The scanner opens from the product list and from a stock take's count sheet. Scan to find a product, or to count it during a take. Camera scanning works on a phone or tablet; on a computer, type the code or use a USB barcode scanner in the box below the viewfinder.

Inventory on invoices

Products added to an invoice as product lines carry their price and VAT rate across. When the invoice is sent, the stock movement is recorded and cost of sales is posted using the product's costing method — which is why the income statement's gross margin can be trusted without a manual journal at month end.

Common problems

Most of these are Ledgr refusing something on purpose. Each refusal names the figures involved, and the reason is nearly always that the alternative would leave stock and the balance sheet disagreeing with nothing to reconcile them.

What you seeWhat to do
"On-hand cannot go below zero" An adjustment, transfer, build or job-card issue would take a bin negative. Ledgr names the shelf and both numbers. Count what is actually there and adjust to that figure, or transfer from the branch that holds it. A negative bin is not a warning you can work past — it puts a value in the inventory account that no batch supports.
"Not enough components to build N" The build is refused rather than part-completed, and Ledgr names every component that is short and the quantity you can build now. Build that quantity, or receive the missing parts first.
A product will not delete It still has stock on hand, and Ledgr says how much. Write the stock off with a stock adjustment first — deleting it while it holds value would leave that value on the balance sheet with nothing to reconcile against. The same applies to a location that still holds stock.
"SKU is already used by …" A SKU is unique per business, ignoring case. Ledgr names the product using it.
The Inventory Value tile does not match the balance sheet They should agree to the cent: the tile is the sum of what your open batches cost, which is the same figure the inventory account carries. An invoice takes its stock out when it is sent — the same moment it reaches the ledger — so a draft holds no stock and cannot come between them. If they differ, look for a draft invoice saved before 15 September 2026: drafts from before then took their stock the moment they were saved. Send it or delete it and the two agree again.
A quantity will not accept a decimal Fractional quantities are a per-product setting — 0 to 4 decimal places, defaulting to whole units, and pinned to whole units for a serialised product because half a serial number is not a thing. Set the precision on the product.
A recipe will not build Only an active recipe can be built, and Ledgr names the status it is in. A draft or pending recipe needs approving first — see bills of materials.
Stock take counts will not save Counts can only be saved while the stock take is in progress. Ledgr names the status it is in. Variance is written as you save counts rather than only at commit, so a count with a shortfall shows up before anybody commits it.
A serialised unit was scrapped and the count did not move Writing a unit off drains its own batch at that batch's cost and posts the write-off. Only a unit that is in stock can be scrapped; a sold one is refused, because deleting it would erase the customer's warranty record.