Skip to content

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

AppletWhat it is for
Stock BalanceThe enquiry grid: item × company × location, with ledger quantity, the location’s moving-average cost and the company’s last purchase cost. Reads only
Stock AvailabilityThe 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 ReportThirteen 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 MonitoringWatches 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
A pharmacy chain or an F&B group runs the same module with one difference: perishable lines go on batch-number tracking. Each batch carries its own issue and expiry date, captured on the line of the document that receives it, and the Stock Report’s Batch and Expiry Date Report answers “what expires this month” per location. The tracking type is chosen when the item is created — see choosing an item type.

Moving stock

AppletWhat it is for
Stock TransferTwo-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 AdjustmentCorrects 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 ConversionRe-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 TransferMoves 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

AppletWhat 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 ReservationA 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 ReplenishmentTurns 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
PdgHead 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

AppletWhat it is for
Warehouse Management SystemThe 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 TakeCounting. 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 GeneratorDesigns and prints label sheets. A standalone printing tool — it reads nothing from inventory and writes nothing back

Getting it to the customer

AppletWhat it is for
Delivery InstallationThe 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 DriverThe 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 OrderA 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 InTrade-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.

DocumentJournalGL codes
Stock AdjustmentYesSTOCK_ADJUSTMENT against STOCK_BALANCE, or the GL code on the line
Consignment GRNYes, through the consignment handlerCONSIGNMENT_LIABILITY against CONSIGNMENT_STOCK
Consignment GINYes, through the ordinary purchase mapping — it has no consignment mapping of its ownCREDITOR against PURCHASE (tax to INPUT_TAX), the ordinary supplier and purchase accounts — see Consignment GIN
Stock Transfer (out and in)NoQuantity 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 TransferNoQuantity only
Stock ConversionNoNo 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 appletsNoThey 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 seeThe usual causeCheck firstRead 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 backThe Sales Order tab of Stock Availability’s Details screen names the orders; reservations are in the Stock Reservation appletStock 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 themStock Balance at the L-SIT-<company code> locationWhat sits in transit
The branch cannot find the outbound transfer to receive itA draft inbound has already taken the quantity, or the company has no document-flow configuration from outbound to inbound transferLook for a draft inbound against that outbound firstThe queue
“My count and the stock report still disagree after a stock take.”A stock take measures the gap and never closes itIs 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 doesLedger and Journal, Error Checking > Missing Journal, Server Doc Type INTERNAL_STOCK_ADJUSTMENT, for the monthStock 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 paidThe location’s moving-average cost on Stock BalanceCosting internals
A branch’s stock value is zero, or far off, after a transferThe 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 oneThe company-level cost for the same itemWhere 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 closedThe cost on the later sales lines, before and afterThe 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 locationThe 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 quantityStock Report > Stock Movement for the item and location lists the document that overshot. Key the missing receipt with its real dateStock 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 flagThe serial’s movements, in orderSerial 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.

  1. 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 at L-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 the L-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.
  2. 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.
  3. 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, then RESET_MA, then INTERNAL_PURCHASE_GRN_STOCK_IN if 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_ADJUSTMENT and STOCK_BALANCE, before the first adjustment is what prevents it.
  4. 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_ACCOUNTING or WRONG_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

ModuleWhat it supplies
CoreInventory 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
PurchasingEverything that brings stock in: Purchase Order, Purchase GRN and GRN Stock In, Purchase Invoice, Purchase Return and Refund Note
Sales and Point of SaleEverything 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 AccountingThe 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-CommerceThe 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 toUseNot
Move stock between two locations of one companyStock Transfer: two documents, with the goods in transit in betweenConsignee 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 groupA sale and a purchase between the companiesStock Transfer, which posts no journal and carries no tax
Record what you countedStock TakeStock Adjustment, which is the decision you take after the count
See what you holdStock BalanceStock Availability, which answers what you can still promise

What one wrong setting reaches

  • A missing STOCK_BALANCE default 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