Skip to content

Configuration

Almost every “the stock went somewhere I did not expect” case comes from one of five things: an item that is not a stock item (a service, or an alias that points at no inventory item), a line with no location, a stale branch default, a missing GL code, or the wrong document in the receiving pair. This page sets those up in dependency order and names the symptom each gap produces.

The order below is a dependency order, not a rule the product enforces. Out of sequence simply means you meet the failures later.

1. Items — and the link that decides whether anything happens at all

WhatWhereWhy
The inventory item — the stock-keeping recordInventory Item MaintenanceThe stock balance is keyed by inventory item, not by the item you put on a document
The item’s tracking type — plain, serial, batch, binDoc Item Maintenance — the Sub Item Type field on the create screenDecides which sub-balances the ledger keeps and which sub-tabs appear on every document line. It locks at the item’s first save
The document item, and its link to an inventory itemDoc Item MaintenanceThis is the switch. Only lines whose item resolves to a basic or alias inventory item (or a serialised coupon) reach the ledger
Units of measure, and the multi-UOM conversionsInventory Item MaintenanceThe ledger stores a base quantity; a document line in cartons is converted to it
Symptom to recognise: a finalised invoice, GRN Stock In or return that never appears in the balance. The first thing to check is the item link — not the document, not the processor. A service item, a non-linked item or a non-basic item is silently ignored by the stock processor.

Serial and batch tracking is chosen when the item is created — the Sub Item Type field on the Doc Item Maintenance create screen — and locks at the item’s first save, long before any receipt. It cannot be switched on later: an item created with the wrong tracking is replaced with a new item code, and the stock is moved across to it.

2. Companies, locations, and the branch default that catches everyone

WhatWhereIf it is wrong
Companies, branches and locationsOrganizationLocations must be ACTIVE to be selectable on a transfer
The branch’s default locationOrganizationIt is the last fallback when a line names no location. A stale default silently collects stock
A stock-in-transit location per companyOrganizationStock transfers park quantity here between Transfer Out and Transfer In

The location on a ledger line is the first of: the line’s delivery location, the line’s store, the header’s store, the branch’s default location. Most mis-located stock is a line that fell through to a default that nobody had looked at since go-live — often a location that has since been deactivated.

3. Decide the receiving pair, once, for the whole tenant

This is a configuration decision even though it does not look like one, and getting it wrong double-counts every receipt.

If your flow isThe stock arrives onAnd the other document
Purchase Order → Purchase GRN → Purchase Invoicethe purchase invoicethe GRN records the receipt and moves nothing
Purchase Order → Purchase GRN Stock In → Purchase Invoicethe GRN Stock Inthe invoice books only the money

Pick one. Never use a GRN Stock In and a stock-booking purchase invoice for the same goods. The same distinction exists on the sales side between a plain Sales GIN and a Sales GIN Stock Out.

4. GL codes — only for the adjustment journal

Only one document this module owns posts a journal, and these are the codes it resolves against.

Default GL codeSet inIf it is missing
STOCK_ADJUSTMENTChart of Account → Companies → Default GL CodesThe adjustment saves and finalises but the journal is not posted. The quantity moves and the value does not
STOCK_BALANCEsamesame
COGSsamesame

A GL code on an adjustment line (or on the header) takes precedence over the company default, which is how a damage write-off and a shrinkage write-off can be coded differently.

Transfers, conversions, counts, requisitions and reservations post nothing, so they need no GL mapping. If somebody asks which account a stock transfer posts to, the answer is none — the value never leaves the balance sheet.

5. Minimum and maximum levels, if you want alerts or replenishment

WhatWhere
Per-location minimum and maximum levelsInventory Item Maintenance → the item’s Location tab, or its Stock Min Max Import screen for bulk
The same levels, seeded from a runStock Replenishment

Two consumers use them:

  • The min/max e-mail, a scheduler job set up in Inventory Item Maintenance under Settings › Email Notification, lists the item × location rows below the minimum or above the maximum.
  • Stock Replenishment computes how far each item × location is below its level and raises Purchase Orders or Outbound Stock Transfers.

Stock Level Monitoring does not read these levels. It compares stock with an optimal and a maximum value set per category on its own template.

A min/max e-mail that never arrives is usually not a bug. The job needs a non-empty location list and a non-empty recipient list in its own properties, and it only counts rows whose minimum or maximum level is greater than zero. With nothing to report it sends nothing at all.

6. The warehouse floor, if you run one

The Warehouse Management System applet is optional and has its own structure to build before it can be used:

  1. Warehouses, each with its layout nodes — the map of spaces.
  2. Containers — the pallets, totes and cages stock physically sits in.
  3. Pickers — the entities registered to pick in that warehouse.
  4. WMS item maintenance, categories and category groups — the applet keeps its own item view.

Then inbound runs Receiving Doc → Processing Queue → Putaway, and outbound runs Picking Queue → Picking List → Packing List, with the packing list converted into a document at the end. Nothing in the applet writes a ledger line itself; the document it converts into does.

7. Transfer and adjustment settings worth knowing

SettingAppletWhat it does
Disallow negative stock for basic item (validate stock balance)Stock TransferShows the item’s balance on the line, and has FINAL pressed inside an outbound document refuse more than the sending location holds. Off by default. FINAL on rows selected in a listing, and FINAL on any inbound, check the balance whatever it says
Reset MA date locked to todayStock AdjustmentStops a backdated cost reset, which would re-project the whole chain
Spreadsheet view versus standard viewStock TransferGrid entry for bulk lines, one-line-at-a-time for serial and bin detail
Aging Period SettingsStock ReportThe columns of the Stock Aging Report. Month columns by default. Selecting an aging-period definition stores it together with its type, so a day-type definition switches the report to that definition’s day ranges. Clearing the selection switches back to months. There is no day mode without a definition

8. Permissions — your only control

There is no approval on any inventory document. The Stock Requisition applet shows Approval Settings screens, but it has no approval tab on the document, no request screen and no history screen, so a setting created there cannot be used from it today.

That makes the permission set the whole of your control. Decide deliberately who holds:

  • Finalise on Stock Adjustment — the right to write stock off. Supervisors only.
  • The Reset Moving Average menus — they change the balance sheet and cost of sales. Finance only.
  • Finalise on Stock Transfer, separately at the sending and receiving ends.
  • Close a stock take session.
  • The cost columns on Stock Balance and Stock Availability. Note that the client-side permissions for these are not seeded in the Stock Balance applet, so its cost columns are visible to anyone who can open the grid; the only way to hide them there is to withhold the read permission on the data.

What success looks like

Fifteen minutes, one item, five checks:

  1. Receive one unit at branch GS-KV-01 through whichever receiving pair you chose, and finalise it. The Stock Balance grid shows +1 at the location you expected — not at a branch default.
  2. Open Stock Availability for that item. Balance and available agree, because there are no open documents yet.
  3. Raise a Transfer Out to GS-KV-02, finalise it. The sending location is −1, the receiving location is unchanged, and the line is in the Queue.
  4. Raise a Transfer In against the queue, finalise it. GS-KV-02 is +1 and the queue is empty.
  5. Raise an Adjust-Out of 1 at GS-KV-02, finalise it. The balance is 0 and a journal exists debiting STOCK_ADJUSTMENT and crediting STOCK_BALANCE.

If step 5 moves the quantity but posts no journal, the GL defaults in §4 are missing.

Common mistakes

MistakeSymptom
A stock item set up as a service, or an alias that points at no inventory item (an unlinked basic item is linked for you when it posts)Finalised documents never reach the balance, with no error
A GRN Stock In and a stock-booking purchase invoice for the same goodsEvery receipt counted twice
Line with no location, branch default stale or deactivatedStock accumulates in a location nobody uses
STOCK_ADJUSTMENT / STOCK_BALANCE not mappedQuantity moves, value does not; the balance sheet drifts from the stock report
Item created with the wrong Sub Item TypeThe field is locked from the first save, so serial tracking cannot be added later; the fix is a new item code with the right tracking and a move of the stock across
Expecting a stock take to correct the balanceThe count report is produced and nothing changes until somebody raises an adjustment
Expecting an approval on a transfer or write-offThere is none. Whoever holds the finalise permission can do it, immediately