SAP Flow grpo delivery goods_receipt goods_issue stock_transfer inventory_counting return purchase_return

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 --> STOCK

Stock 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.

DocumentStockAccounting (perpetual inventory)
Goods Receipt POโ†‘ IncreasesDR Inventory / CR GRNI
Deliveryโ†“ DecreasesDR COGS / CR Inventory
Goods Receipt (manual)โ†‘ IncreasesDR Inventory / CR Inventory Offset
Goods Issue (manual)โ†“ DecreasesDR Expense / CR Inventory
Inventory TransferMoves warehousesNo net accounting effect
Receipt from Productionโ†‘ IncreasesDR Finished Goods / CR WIP
Issue for Productionโ†“ DecreasesDR 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.

MethodHow the cost is calculatedBest for
Moving AverageAverage cost recalculated on every receiptMost common; absorbs price swings smoothly
Standard CostA fixed cost set manually; differences post as variancesManufacturing with stable input costs
FIFOFirst unit in is the first unit costed outPerishables, 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 variance

The 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.

ProblemCauseEffect
Negative stockDelivery posted before the GRPOSome configs allow it; valuation then goes wrong
Stock in the wrong warehouseUser keeps the default instead of the real locationPicking failures; inaccurate location stock
Phantom stockItems scrapped without a Goods IssueOverstated inventory on the balance sheet
Valuation varianceGRPO price differs from the A/P invoice priceVariance posts to a price-difference account
Batch/serial confusionReceiving without a batch numberUntraceable 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.