Inventory in Depth
This page holds the Inventory module’s mechanics in one place. The module page lists what the module does and does not do; this page explains why, and what to check.
Stock balance is not typed in anywhere. It is the running total of a signed stock ledger that the server appends to whenever a document with a non-zero quantity signum is finalised. Everything in this module either writes to that ledger, reads it, or prepares the paperwork around it.
This page is for the stock controller and the accounts person who makes the stock account agree with it: which documents move stock, what to do when a number looks wrong, and a check to run before a month is closed.
Applets in this module
Membership is an editorial judgement — the product has no module↔applet relationship in its data. Inventory owns 22 applets and all 22 are documented.
Looking at stock
| Applet | What it is for |
|---|---|
| Stock Balance | The enquiry grid: item × company × location, with ledger quantity, the location’s moving-average cost and the company’s last purchase cost. Reads only |
| Stock Availability | The same balance plus the open documents that will change it, down to bin, serial and batch. This is where “why can I only promise 12?” is answered |
| Stock Report | Thirteen reports over the ledger, the balance tables and the purchase documents — movement, aging, summary by location, balance as at a past date, sales versus purchase, purchases by supplier, value by category level, batch expiry |
| Stock Level Monitoring | Watches quantity on hand against optimal and maximum levels per item category and e-mails a list of people. It changes nothing; the buyer or stock controller acts on the e-mail |
Moving stock
| Applet | What it is for |
|---|---|
| Stock Transfer | Two-step movement between two locations of the same company. Transfer Out empties the sending location into a queue; Transfer In knocks the queue off and fills the receiving location. Between the two, the goods are counted at neither branch location: BigLedger moves them to the company’s stock-in-transit location (code L-SIT-<company code>, which is what Stock Balance’s Location column shows), where they stay until the inbound is finalised |
| Stock Adjustment | Corrects what the system thinks you have, up or down, and posts the journal that moves the value with it (STOCK_ADJUSTMENT against the stock account). Also holds the Reset Moving Average tools — a Reset MA posts STOCK_BALANCE against the RESET_MA default; neither touches cost of goods sold, which is only ever the period-end journal from Financial Report |
| Stock Conversion | Re-packing, re-labelling and simple kitting at one location: input lines and output lines on one header. Not a generic document — it has its own tables and its own processor |
| Consignee Stock Transfer | Moves stock you still own to a partner showroom, dealer shelf or customer site. Single-document, no in-transit queue |
| Consignment GRN (Internal) | Stock a consignor places with you and still owns, arriving |
| Consignment GIN (Internal) | The same stock leaving again |
Asking for stock, and planning it
| Applet | What it is for |
|---|---|
| Stock Requisition (Internal) | A branch’s request for stock from another location. Records the request only — the movement is a Stock Transfer raised against it |
| Stock Reservation | A promise: this quantity, at this location, held for this customer until this date. It moves no stock; it writes the reserved column that availability subtracts |
| Stock Replenishment | Turns per-location minimum and maximum levels into documents: a template fixes the scope and strategy, an event puts it on a calendar, a run creates Purchase Orders or Outbound Stock Transfers: create them as drafts and finalise them, because one created FINAL skips the posting run |
| Pdg | Head office’s recommended display quantity per product category per outlet type, and each outlet’s adjusted version of it. Planning master data — writes no document |
The warehouse floor
| Applet | What it is for |
|---|---|
| Warehouse Management System | The physical layer: receiving docs, processing queue, putaway, container-to-space allocation, picking queue, picking lists and packing lists. It plans and records the work; the document a packing list becomes posts it — see The warehouse floor |
| Stock Take | Counting. A session per location, devices attached, records captured by scan or by hand, and a report comparing counted against system with a tolerance band. The count reaches the balance through a Stock Adjustment for each variance you accept |
| Barcode Generator | Designs and prints label sheets. A standalone printing tool — it reads nothing from inventory and writes nothing back |
Getting it to the customer
| Applet | What it is for |
|---|---|
| Delivery Installation | The dispatch console: turns lines due for delivery into Jobs, groups them onto a Trip with a driver and a vehicle, and marks the source document delivered as its lines go on a trip, not on arrival |
| Delivery And Installation Driver | The driver’s half: their own trips only, start job, confirm delivery with the recipient’s name, ID and quantities, or cancel. The web app’s photos and signature are stored where the office cannot view them |
| Driver Delivery Order | A simpler, older driver view: edits vehicle number, delivery date and time slot on delivery orders assigned to that driver. Nothing else |
| Goods Delivery Note (Internal) | The document handed over with the goods. It knocks off the upstream order — and moves no stock |
| Non Stock and Trade In | Trade-in units and non-stock items, tracked one serial at a time in their own tables, outside the inventory ledger |
The documents that actually move stock
A document moves stock only if its server document type carries a non-zero quantity signum. That number is fixed in the backend, not an applet setting. Twenty-five document types have one.
flowchart LR
subgraph IN["Stock in (+1)"]
PI["Purchase Invoice"]
GRNSI["Purchase GRN <b>Stock In</b>"]
SR["Sales Return"]
SRN["Sales Refund Note"]
TIN["Transfer In"]
CGRN["Consignment GRN"]
end
subgraph OUT["Stock out (−1)"]
SI["Sales Invoice"]
CB["Cash Bill"]
GINSO["Sales GIN <b>Stock Out</b>"]
PR["Purchase Return"]
TOUT["Transfer Out"]
CGIN["Consignment GIN"]
end
ADJ["Stock Adjustment<br/>direction from the line"]
CONV["Stock Conversion<br/>direction from the tab"]
IN --> LEDGER[["Stock ledger"]]
OUT --> LEDGER
ADJ --> LEDGER
CONV -.->|"built, not yet switched on"| LEDGER
LEDGER --> BAL["Stock balance<br/>item × company × location"]
NONE["Sales Order · Purchase Order · Quotation<br/>Stock Requisition · Delivery Order<br/>Goods Delivery Note · Packing Order · Jobsheet<br/>Credit Note · Debit Note<br/>plain GRN · plain GIN<br/>Invoice No Stock In / No Stock Out"] -.->|"no stock quantity"| NOTHING(["nothing reaches the ledger"])
These do not move stock, whatever their name suggests. Sales and Purchase Credit Notes and Debit Notes; the plain Sales and Purchase GRN and GIN as opposed to GRN Stock In and GIN Stock Out; Sales and Purchase Invoice No Stock Out / No Stock In; Sales Order; Purchase Order; Purchase Requisition; Stock Requisition; Quotation; Packing Order; Delivery Order; Goods Delivery Note; Jobsheet; and Job Order. All carry quantity signum 0. Finalising them changes nothing on the balance — they knock off, reserve or bill.
This matters most for receiving. If your process is purchase order → GRN → purchase invoice, the stock arrives on the invoice. If it is purchase order → GRN Stock In → Purchase Invoice No Stock In, the stock arrives on the receipt and the invoice books only the money. Pick one pair. Using a document from each double-counts.
What reaches the general ledger
Two kinds of document this module owns post a journal: the Stock Adjustment, and the consignment GRN and GIN — and the GRN and the GIN do not post to the same accounts.
| Document | Journal | GL codes |
|---|---|---|
| Stock Adjustment | Yes | STOCK_ADJUSTMENT against STOCK_BALANCE, or the GL code on the line |
| Consignment GRN | Yes, through the consignment handler | CONSIGNMENT_LIABILITY against CONSIGNMENT_STOCK |
| Consignment GIN | Yes, through the ordinary purchase mapping — it has no consignment mapping of its own | CREDITOR against PURCHASE (tax to INPUT_TAX), the ordinary supplier and purchase accounts — see Consignment GIN |
| Stock Transfer (out and in) | No | Quantity only. Value stays on the balance sheet at the company’s cost, which a transfer cannot change. The per-location cost is a separate number that seeds from the receiving location’s own history — see Stock Transfer |
| Consignee Stock Transfer | No | Quantity only |
| Stock Conversion | No | No value moves between items, and no quantity moves either until its posting step is switched on — see below |
| Stock Take, Stock Reservation, Stock Requisition, Replenishment, Monitoring, WMS, Barcode, PDG, the delivery applets | No | They create no ledger line and no journal |
The standard posting table has exactly seven journal handlers. This module’s documents use three of them — the stock adjustment handler, the consignment handler (the GRN) and the ordinary purchase handler (the GIN) — and a Reset MA posts through a path of its own. No document posts cost of goods sold. A sale posts its revenue and tax; cost of sales is the journal Month End Processing writes, described under What a stock movement sets off elsewhere.
What the module does not do, and what to do instead
A stock take counts; a Stock Adjustment changes the balance. The count compares counted against system, shows you a tolerance band and costs the difference. It writes nothing to the balance, and there is no “post variance” button. The route from a count to the ledger is a Stock Adjustment for each variance you accept: keyed in the Stock Adjustment applet, or loaded through its CSV File Import, which can create the adjustments as drafts for review. The Stock Take report exports to Excel in a different layout, so whoever loads the file rebuilds it in the import’s columns. The adjustment is what posts the journal.
There is no approval on a transfer or an adjustment. BigLedger’s approval engine covers Purchase Orders and Purchase Requisitions, is off until a tenant configures it, and causes FINAL rather than gating it. The Stock Requisition applet offers Approval Settings screens, but the document has no approval step to act on them. Control stock documents with permissions instead. On a Stock Transfer a role can be allowed to draft but not finalise; the Stock Adjustment applet has no such split, so give that applet only to the people who may write stock on or off, and review the adjustments listing.
That leaves the stock controller’s own job where it always was. Deciding what to count and when, running a count whose result you would sign, telling a loss from timing, writing off with a second person’s signature, cut-off at the month end and writing down stock that will not sell are all a person’s decisions. BigLedger does not make any of them. Counting Stock and Deciding What a Difference Means and Closing the Month on Stock say who does each one, when, and how they know they got it right.
Stock Conversion does not move stock yet. FINAL queues the conversion’s posting run, but the step that would write its stock lines is not switched on for any tenant, so the document says FINAL and the balance does not change. Until it is, re-pack or kit with a Stock Adjustment: one out for the components, one in for the kit, at the cost you decide. That is also the only way a kit carries its components’ cost; even once switched on, a conversion moves quantities, and each item keeps its own average. Read the conversion’s tabs literally: Input means into stock, Output means out of stock.
Available is not “balance minus reservations”. It is the balance plus a signed adjustment for open documents, and the adjustment can be positive. Open sales orders push it down; goods received but not yet invoiced push it up. A location can show more available than it physically holds, and that is correct.
The warehouse floor — what the Warehouse Management System applet records at each step, what moves the stock, and what the floor team should know before go-live — is on the applet’s page. Why a transfer takes two documents, worked through one load that arrives on two lorries, is on Stock Transfer.
Costing
Every balance row carries moving average and weighted average cost, plus last purchase cost and landed cost; FIFO is written only where the FIFO/LIFO subscriber job is enabled and by the rebuild. The LIFO, manual and replacement columns exist and are not maintained — nothing writes them, so a ledger line’s LIFO, manual and replacement cost is empty however the item is set up. Each screen decides which one it shows. Which one values your closing stock is a choice: the company’s Inventory Closing Base On setting, moving average when nobody sets it; LIFO, manual or replacement value it at zero. Month End Processing reads it for the cost-of-sales journal. How to choose, and what each choice costs, is Step 2 of Closing the Month on Stock.
In practice moving average is the one most screens use, and it is the one that bites:
- The Stock Take report values a variance at the location’s latest moving-average price. A FIFO tenant never sees FIFO cost there.
- A Stock Conversion, once switched on, carries no cost from components to kit. The kit arrives at its own last price at that location, which is zero for a new item.
- A transfer never changes the company’s unit cost. It can change the receiving location’s, and not in the way most people expect: the per-location average seeds from that location’s own last line, so a branch receiving an item it has never stocked values the arrival at zero.
Reset Moving Average, in the Stock Adjustment applet, is how a wrong average is corrected. It changes inventory value on the balance sheet and cost of sales on the income statement, so restrict it to finance.
When stock looks wrong, start from what you see
Most stock questions arrive as “this number is wrong”. Find the row that matches what is in front of you.
| What you see | The usual cause | Check first | Read next |
|---|---|---|---|
| “Stock Availability shows 50 physical but 0 available. Where did it go?” | Open documents and holds. Sales orders not yet invoiced pull available down, and Stock Reservation holds some back | The Sales Order tab of Stock Availability’s Details screen names the orders; reservations are in the Stock Reservation applet | Stock Availability |
| “Head office says we have it and the branch can’t find it.” | An outbound transfer was finalised and nothing has received it yet. The goods are at the company’s stock-in-transit location, so neither branch counts them | Stock Balance at the L-SIT-<company code> location | What sits in transit |
| The branch cannot find the outbound transfer to receive it | A draft inbound has already taken the quantity, or the company has no document-flow configuration from outbound to inbound transfer | Look for a draft inbound against that outbound first | The queue |
| “My count and the stock report still disagree after a stock take.” | A stock take measures the gap and never closes it | Is there a FINAL Stock Adjustment for each variance you accepted? | Counting and variances |
| The quantity moved, but the stock account in the balance sheet did not (before the month has been processed) | The adjustment finalised, then the journal job failed. The usual reason is that the company has no STOCK_BALANCE or STOCK_ADJUSTMENT default GL code. FINAL does not check the codes; the job that runs after it does | Ledger and Journal, Error Checking > Missing Journal, Server Doc Type INTERNAL_STOCK_ADJUSTMENT, for the month | Stock Adjustment troubleshooting |
| “Why is the cost on my document different from what I paid for the item?” | Most screens show a moving average, recalculated from every receipt, not the last price you paid | The location’s moving-average cost on Stock Balance | Costing internals |
| A branch’s stock value is zero, or far off, after a transfer | The per-location average starts from that location’s own last line. A branch that never held the item values the arrival at zero. The company figure is the right one | The company-level cost for the same item | Where the cost comes from |
| “I keyed a purchase dated last month and my earlier margins changed.” | A back-dated receipt rewrites the cost on the document lines after it. A margin is not settled until the month is closed | The cost on the later sales lines, before and after | The margin report and the P&L don’t agree |
| A branch sold stock it had not received, and the item has vanished from Stock Balance at that location | The location’s quantity has gone below zero. Stock Balance never shows a zero or negative row, so the location simply has no figure. Sales go on at the last average, and the next receipt is blended into a negative quantity | Stock Report > Stock Movement for the item and location lists the document that overshot. Key the missing receipt with its real date | Stock Balance troubleshooting |
| “The same serial number went out on two documents, or shows quantity 2.” | A serial number is a stock record with its own balance per item and location, not a yes-or-no flag | The serial’s movements, in order | Serial numbers |
Checking the stock is right, before the month is closed
Each step below is a screen you open and a decision you make. The screens show you the gap. Closing it is somebody’s job, and each step says whose. Run the check in the first working days of the month, before Closing the Month on Stock and before anyone locks the period.
- Nothing is on the road that should have arrived. Who: the stock controller. Open Stock Balance at
each company’s
L-SIT-<company code>location. Every quantity there should belong to a transfer that is still travelling, and the Stock Transfer Queue lists the same lines. In the Stock Transfer applet, Error Checking > Missing Queue for the month should list nothing; if it lists a document, tick it and press CREATE. Two mismatches mean something else. A Queue line with nothing atL-SIT…for that item was received by hand, without KO For: do not receive it again. And because Stock Balance shows only quantities above zero, an in-transit balance pushed below zero, by an inbound with no outbound behind it, simply disappears from it; Stock Report > Stock Movement for the item at theL-SIT…location shows it. You are done when every in-transit quantity matches a queue line you can name, and nothing is older than your normal delivery time. For anything older, receive it or find out why it has not arrived. - Every count you accepted has been written on or off. Who: the stock controller, with the second signature your write-off policy asks for. For each stock take session in the month, every variance you decided was a real gain or loss has a FINAL Stock Adjustment. Every variance you decided was timing has a note saying so. You are done when the session report and the adjustments agree, line by line.
- Every adjustment carried its value to the ledger. Who: the accounts person. In Ledger and
Journal, open Error Checking > Missing Journal. Run it for the month with Server Doc Type
INTERNAL_STOCK_ADJUSTMENT, thenRESET_MA, thenINTERNAL_PURCHASE_GRN_STOCK_INif you receive on GRN Stock In. Each row is a FINAL document that changed stock or cost and has no journal. Fix the company’s default GL code first, then select the rows and press Create. Create first deletes any journal already linked to the document, including one you keyed by hand and linked to it, so do not use it on such a document. You are done when the list is empty, or every row you created shows SUCCEED in Remarks. A row that shows an error code, or nothing, saved no journal: open that document in Trace Document, fix the cause and press Create again. If Month End Processing has already been run for the month, run it again once the journals exist (see What a stock movement sets off elsewhere, below). This list cannot see a journal that posted short, with some lines missing. That happens only when a line resolves no GL code at all, so mapping both company defaults,STOCK_ADJUSTMENTandSTOCK_BALANCE, before the first adjustment is what prevents it. - Purchases and sales agree with the ledger. Who: the accounts person. In Financial Report, open
Error Checking > Stock Flow Report for each company and the month. It has one row each for
purchases, purchase returns, sales, sales returns, purchase consignment and Reset MA, and each
Difference should be zero. Click a Difference that is not zero, select the rows marked
MISSING_ACCOUNTINGorWRONG_AMOUNT, press CREATE, and read the Status column it writes back. The report has no row for stock adjustments or GRN Stock In, which is why step 3 exists, and a difference on the Reset MA row is repaired in step 3 too: its listing cannot show Reset MA journals. You are done when every Difference is zero, or you can name the document behind it.
Then close the month with Closing the Month on Stock.
What it touches elsewhere
What must exist first
| Module | What it supplies |
|---|---|
| Core | Inventory Item Maintenance — the stock-keeping record, its tracking type (serial, batch, bin) and its per-location minimum and maximum levels. Doc Item Maintenance — the sellable item and its link to an inventory item; only lines whose item resolves to an inventory item reach the ledger. Organization — companies, locations, and the branch’s default location, which is the last fallback when a line has no location of its own |
| Purchasing | Everything that brings stock in: Purchase Order, Purchase GRN and GRN Stock In, Purchase Invoice, Purchase Return and Refund Note |
| Sales and Point of Sale | Everything that takes stock out: Sales Invoice, cash bill, Sales GIN Stock Out, Sales Return, Sales Refund Note — and the sales orders that reduce availability without touching the balance |
| Financial Accounting | The Chart of Account company defaults: STOCK_ADJUSTMENT and STOCK_BALANCE, which the adjustment journal resolves against, and COGS, which Month End Processing’s cost-of-sales journal needs with STOCK_BALANCE; and the Ledger and Journal where the journals land |
| E-Commerce | The marketplace quantity, derived from this balance minus open marketplace orders and written to a separate marketplace table — never back into the stock balance |
What a stock movement sets off elsewhere
The general ledger, and when the stock account is right. Of the stock documents, a Stock Adjustment and a Reset MA post to the stock account when they are finalised; a GRN Stock In and the consignment documents post journals of their own. Cost of sales is made at month end. Month End Processing takes closing stock from the stock ledger, at the company’s Inventory Closing Base On (unless someone has typed a manual closing value), and writes the journal that brings the stock account to that figure. It takes the month’s adjustments and Reset MA from their journals. That decides what a missing adjustment journal does:
- before Month End Processing, the stock account is off by the adjustment’s value;
- after it, the stock account is right again, but the adjustment’s value has landed in cost of sales instead of the adjustment account. Profit is the same; the split is not;
- if you create the missing journal after Month End Processing has run, the value is counted twice and the stock account is off again, until you run Month End Processing for that month once more. A re-run deletes its own journal and writes it again.
So run step 3 of the check before Month End Processing, not after.
Selling. The figure to promise from is available, not the balance. An open sales order or a reservation lowers it while the stock is still on the shelf, and a draft document holding a serial number keeps that one unit from a second sale.
The marketplace. The E-Commerce module derives each marketplace’s quantity from this balance, minus open marketplace orders, and writes it to its own table rather than back into the balance.
Choosing between two neighbours
| You want to | Use | Not |
|---|---|---|
| Move stock between two locations of one company | Stock Transfer: two documents, with the goods in transit in between | Consignee Stock Transfer, which is for stock you still own on a partner’s shelf: one document, no queue, nothing in transit |
| Move stock between two companies of the group | A sale and a purchase between the companies | Stock Transfer, which posts no journal and carries no tax |
| Record what you counted | Stock Take | Stock Adjustment, which is the decision you take after the count |
| See what you hold | Stock Balance | Stock Availability, which answers what you can still promise |
What one wrong setting reaches
- A missing
STOCK_BALANCEdefault GL code on a company leaves every stock adjustment of that company that carries a value with no journal, while the stock moves as normal, and Month End Processing writes no cost-of-sales journal for that company either. - No outbound-to-inbound document-flow configuration on a company means no outbound transfer of that company can be received through KO For.
- A back-dated purchase rewrites the cost on the document lines after it, so a margin you reported last week can change.
- A Reset MA changes the stock value on the balance sheet and cost of sales on the income statement. Keep it with finance.
- Choosing the
L-SIT…location on a transfer is not refused. The in-transit balance then stops meaning “goods on the road”, and step 1 of the check stops working.
What it is used with
Stock Take, then a Stock Adjustment for each variance you accept. An outbound transfer, then an inbound raised through KO For. A Stock Requisition, then the transfer raised against it. The check above, then Month End Processing, then the period lock.
Read next
- Inventory Module — the capabilities and limits at a glance, and every page in the module.
- Counting Stock and Deciding What a Difference Means and Closing the Month on Stock — the stock controller’s and the accounts person’s jobs, step by step.
- Core concepts and Costing internals — the ledger, the signum and the cost bases in more depth.