Inventory & Warehouse
Stock movement types, valuation methods, warehouses and bins, the counting process, and each movement's accounting effect โ plus how Norma reads and moves stock.
Inventory is the bridge between sales, purchasing, production, and finance. Every stock movement has a business reason, and โ when perpetual inventory is active โ an accounting consequence that posts automatically. Getting inventory right means knowing which document causes stock to move, in which direction, at which location, and what it does to the ledger. Describing a movement is always an explanation of what the document does; it is never an instruction to create one.
Stock movement types
Stock only changes through a defined set of documents, and each belongs to one of four families: it comes in, it goes out, it moves between locations, or it is adjusted to match a physical count. Everything a warehouse does is one of these.
flowchart TD
subgraph IN["Stock In - increase"]
GRPO["Goods Receipt PO - from vendor"]
GR["Goods Receipt - manual increase"]
RFP["Receipt from Production - finished goods"]
RI["Return from Customer - Delivery Return"]
end
subgraph OUT["Stock Out - decrease"]
DEL["Delivery - to customer"]
GI["Goods Issue - manual decrease"]
IFP["Issue for Production - raw materials consumed"]
RV["Return to Vendor - Purchase Return"]
end
subgraph MOVE["Stock Moves - relocate"]
IT["Inventory Transfer - between warehouses"]
end
subgraph ADJ["Adjustments"]
IC["Inventory Counting - count physical stock"]
IP2["Inventory Posting - adjust to counted qty"]
end
STOCK[(Stock by item + warehouse)]
IN --> STOCK
STOCK --> OUT
MOVE --> STOCK
ADJ --> STOCKStock is always held by item and by warehouse โ the same item in two warehouses is two separate quantities. Every movement names the warehouse it affects, which is why choosing the wrong one silently corrupts location-level stock even when the company-wide total stays right.
Each movement and its accounting effect
Under perpetual inventory, each of these documents posts a journal entry the moment it is saved. The pattern is symmetrical: receipts debit an asset or inventory account, issues credit it and debit an expense.
| Document | Stock | Accounting (perpetual inventory) |
|---|---|---|
| Goods Receipt PO | โ Increases | DR Inventory / CR GRNI |
| Delivery | โ Decreases | DR COGS / CR Inventory |
| Goods Receipt (manual) | โ Increases | DR Inventory / CR Inventory Offset |
| Goods Issue (manual) | โ Decreases | DR Expense / CR Inventory |
| Inventory Transfer | Moves warehouses | No net accounting effect |
| Receipt from Production | โ Increases | DR Finished Goods / CR WIP |
| Issue for Production | โ Decreases | DR WIP / CR Raw Materials |
| Inventory Counting + Posting | โ or โ | DR/CR Inventory Adjustment account |
An inventory transfer is the exception: because it only relocates stock, its debit and credit are both inventory accounts and the net effect on the balance sheet is zero.
Inventory valuation methods
The valuation method decides what a unit of stock is worth on the balance sheet and what value flows into cost of goods sold when it ships. SAP Business One sets it per item.
| Method | How the cost is calculated | Best for |
|---|---|---|
| Moving Average | Average cost recalculated on every receipt | Most common; absorbs price swings smoothly |
| Standard Cost | A fixed cost set manually; differences post as variances | Manufacturing with stable input costs |
| FIFO | First unit in is the first unit costed out | Perishables, and where regulation requires it |
The choice changes what the journal entries look like and what value appears on the balance sheet, so it is a finance decision as much as a warehouse one. Changing the method mid-life is complex and disruptive, because historical layers have to be revalued.
Perpetual vs. non-perpetual inventory
Whether stock movements post to the ledger automatically is a company-wide setting, and it changes what “inventory” means to the finance team.
Perpetual inventory (recommended). Every stock movement writes its own journal entry, so the inventory balance-sheet account is always current and cost of goods sold is posted at the exact moment of delivery. The accounting tables in this document all describe perpetual behaviour.
Non-perpetual. Stock movements post nothing; finance values inventory periodically, typically at month-end. It is simpler to run but less accurate in real time, and it means the balance sheet lags the warehouse.
Warehouses and bin locations
A warehouse is a physical or logical stock location. A single building can hold
several logical warehouses โ a common pattern is a MAIN for good stock, a
QUARANTINE for goods awaiting inspection, and a DAMAGED for write-offs. Bin
locations subdivide a warehouse into shelves, racks, and positions.
flowchart TD
WH1["Warehouse: MAIN"]
WH2["Warehouse: REMOTE"]
WH3["Warehouse: QUARANTINE"]
WH1 --> BIN1["Bin A-01-01"]
WH1 --> BIN2["Bin A-01-02"]
WH1 --> BIN3["Bin B-03-01"]
WH2 --> BIN4["Bin R-01-01"]
WH3 --> BIN5["No bins - simple"]Every item has a default warehouse, and every transaction specifies which warehouse the movement happens in. Bins are optional sub-locations within a warehouse. The recurring failure mode is a user accepting the default warehouse when the goods are actually somewhere else โ the total stock is right, but the location is a lie, and picking fails.
The inventory counting process
Physical reality and system records drift apart over time โ through shrinkage, mis-picks, and unrecorded scrap. Counting is the controlled process that brings them back together, and because it adjusts both quantities and the balance sheet, finance and the warehouse must agree before it posts.
sequenceDiagram
participant W as Warehouse Team
participant S as SAP B1
W->>S: Create Inventory Counting document
S-->>W: Freeze system quantities (snapshot)
W->>W: Count physical stock
W->>S: Enter counted quantities
S->>S: Calculate variance (counted vs. system)
W->>S: Review and approve variances
S->>S: Post Inventory Posting (adjust to counted qty)
S->>S: Create journal entry for the varianceThe snapshot matters: freezing the system quantity at the start of the count means the variance is measured against a fixed baseline, not a number that keeps moving as other transactions post. The counting document records the count; the separate inventory posting is what actually adjusts stock and writes the variance entry.
Common inventory problems
Most inventory pain traces back to a movement done out of order, into the wrong place, or not done at all. Each has a distinct cause and a distinct symptom.
| Problem | Cause | Effect |
|---|---|---|
| Negative stock | Delivery posted before the GRPO | Some configs allow it; valuation then goes wrong |
| Stock in the wrong warehouse | User keeps the default instead of the real location | Picking failures; inaccurate location stock |
| Phantom stock | Items scrapped without a Goods Issue | Overstated inventory on the balance sheet |
| Valuation variance | GRPO price differs from the A/P invoice price | Variance posts to a price-difference account |
| Batch/serial confusion | Receiving without a batch number | Untraceable for quality or recall |
How Norma reads and moves stock
Norma interacts with inventory along the same two tracks as every other flow โ reading is unrestricted, changing stock is gated.
Reading stock. Norma answers stock questions through read-only connector tools.
list_items retrieves the item master and current quantities; get_stock_coverage
projects how long current stock lasts against demand; get_unhedged_demand
surfaces demand not yet covered by inbound supply; and the goods-movement documents
themselves are read through the sales and purchasing tools (get_delivery,
get_grpo) that drive those movements. None of these change SAP, so none is gated.
Moving stock. Stock only ever moves as a side effect of a document, and every
document that moves stock is a gated write. When Norma advances the sales flow with
create_delivery, or the purchasing flow with a goods receipt, or issues a
corrective create_return / purchase_return, it drafts the document and posts it
to the connector against the Service Layer create path /b1s/v1/<Docs> โ and no
stock moves in SAP until a human reviews and approves the draft. Norma sets the
warehouse on each line from the source document, so it never introduces the
wrong-warehouse error that a hurried manual entry so often does.