Skip to content
Accounting

Record warehouse stock movements in SamBooks

Reading time

9 min read

Download PDF

How to record inward and outward stock movements, adjustments and transfers in SamBooks, and understand how each one affects the weighted average cost.

What it's for

The Warehouse page keeps track of every stock-managed item: how much is available, how much is committed to sales orders, how much is on order from suppliers, and its value at weighted average cost. This is also where you record movements that don't come automatically from a document (delivery note, invoice, return) but adjust the warehouse ledger by hand: an opening balance, a one-off adjustment, or a transfer between two locations.

Before you start

  • Only items with the "stock-managed" flag enabled in their Catalog record generate movements, commitments and open orders: a service item never does.
  • Reading stock levels only needs any access (even the Viewer role); recording a movement, an opening balance, an adjustment or a transfer requires a Manager, Staff or Logistics role.
  • Companies on the Italian flat-rate scheme (forfettario) don't see the Warehouse/Logistics block in the sidebar at all — that's a deliberate product choice for that scheme, not a bug.

Step by step

1. Open Warehouse and get oriented across the three tabs

From the left-hand menu, open Warehouse. At the top you'll find the "Warehouse value" total (the overall weighted-average-cost value) and the number of items with a balance. Below, three tabs:

  • Stock levels: one row per item/location, with Available, Committed, On order, Average cost, Value and a Status column that shows a "Below threshold" badge once availability drops under the item's minimum stock.
  • Below threshold: only the items that crossed the threshold, with the quantity missing to reach the reorder point.
  • Locations: the company's physical warehouses (see step 8).

2. Record a manual movement (inbound or outbound, with a reason code)

Press "Record movement" at the top right. In the form, choose:

  • Reason code: only inbound (carico) or outbound (scarico) reason codes appear in the list — "neutral" reason codes, such as the transfer one, aren't selectable from this form;
  • Item and Warehouse (defaults to the main one);
  • Quantity, always greater than zero;
  • Unit value, which appears only when you pick an inbound reason code — a hint under the field reminds you that "the unit value recalculates the average cost of the inbound movement; outbound movements use the current average cost";
  • Notes, optional.

Press "Record movement": you'll see "Movement recorded." and the row shows up immediately in Stock levels and in the movement journal.

3. Record an opening balance

Use this to bring an item's starting quantity into SamBooks — typically when migrating from another system. Press "Opening balance": item, warehouse, quantity, and — unlike the adjustment — a required unit value: leaving it empty triggers "Enter the opening balance's unit value: without it, the stock level would start at zero and the average cost would be distorted.". A value of €0 is technically accepted, but it still dilutes the item's existing average cost, so only use it if the item genuinely has no value (a free sample, for instance). Press "Record opening balance".

4. Record a one-off stock adjustment

Use this for a targeted correction — breakage, shrinkage, a manually found discrepancy — without going through the full year-end physical inventory. Press "Adjustment": item, warehouse, quantity, and the "Increase (+)" / "Decrease (-)" switch. The unit value is optional: leave it blank and the system uses the current average cost (the average doesn't move); fill it in and the adjustment recalculates the average cost just like a normal inbound movement. Press "Record adjustment" — in the movement journal the Price column shows "—" whenever no value was entered, never a made-up zero.

5. Transfer an item between two warehouses

Press "Transfer": item, source warehouse and destination warehouse — they must differ, otherwise you'll see "Source and destination cannot be the same." — and quantity. There's no price field: the item moves at its current average cost, and the destination location averages its own cost with the incoming one. The company's total value doesn't change, only where the stock physically sits.

6. Check the movement journal and export it

Press "Movement journal" to see the full history of every movement, manual and document-generated (sales delivery notes, purchase delivery notes, returns). You can filter by Warehouse and by Type (Inbound, Outbound, Transfer out/in, Stock adjustment, Opening balance). Each row carries a reference to the document that generated it (for example the delivery note number behind an outbound movement), but it isn't clickable — if you need to open that document, look it up in its own section. Press "Export CSV" to download the journal — it respects the active Warehouse filter, not the Type filter — in Italian numeric format (semicolon-separated, comma as decimal mark).

7. Download the valuation as a PDF

From the Warehouse page, press "Valuation PDF" to get a document with every item's current weighted-average-cost value, ready to share or archive.

8. Manage warehouses (physical locations)

In the Locations tab, press "New warehouse" to create one: Code, Name, an address (the "Search address" field fills it in automatically), and two switches — "Main warehouse" (only one per company: picking a new one automatically unsets the flag on the previous one) and "Active". The row icons let you edit or delete it; deletion is blocked if the location still has any non-zero stock, with the message "We can't delete this warehouse (it may still have stock).". Reusing an already-assigned code triggers "A warehouse with this code already exists.". The "Import from offices" button automatically creates one warehouse for every company office that has an address and isn't linked to a location yet — you can run it again whenever you add a new office, it won't duplicate ones already imported.

The reason codes you'll see in the dropdown

Every movement — manual or document-generated — goes through a reason code, which decides whether the quantity increases or decreases and whether the average cost gets recalculated. The standard reason codes already set up include: Generic inbound and Generic outbound (the basic manual movements), Opening balance, Positive/negative stock adjustment, Internal transfer (neutral, not selectable by hand), Sale and Purchase (used automatically by sales and purchase delivery notes), Sales order commitment and Supplier order (neutral, they only move the Committed/On order columns, never a physical movement). They're configured under Company settings → Warehouse reason codes (Manager, Staff or Logistics access) — for the day-to-day work covered here, you simply use the ones already in place.

The weighted average cost, in brief

Every valued inbound movement — a manual inbound, an opening balance, a purchase delivery note, a customer return, the arrival side of a transfer — recalculates the item's average cost on that location as a weighted average between the previous stock and the incoming quantity. Outbound movements never touch the average cost: they always leave at the current value. Nothing blocks an item from going into negative stock; if it happens, the calculation treats negative stock as zero — a known edge case, best avoided by keeping quantities aligned with reality.

Ask Sam

The same operations can be requested in chat: it's the same service behind the form, not a different shortcut. For example: "record an inbound of 50 units of item X in the main warehouse at €12 each", "make a decrease adjustment of 3 units on item Y", "move 20 units of item Z from the main warehouse to the North location", "which items are below their stock threshold?", "export the warehouse journal to CSV" or "give me the warehouse valuation as a PDF". Both routes — the form and the chat — are equivalent and act on the same data.

If something goes wrong

  • "Select an item." / "Select a warehouse." / "Select a reason code.": one of the form's required fields is empty.
  • "Enter a quantity greater than zero.": quantity must always be positive; for an outbound movement, pick an outbound reason code instead of a negative number.
  • "Source and destination cannot be the same.": you picked the same warehouse twice in a transfer.
  • "Enter the opening balance's unit value: without it, the stock level would start at zero and the average cost would be distorted.": an opening balance always needs a value, even 0 if that's genuinely correct.
  • "Operation failed. Please try again.": a generic save error; if it persists after a second attempt, contact support.
  • "We can't delete this warehouse (it may still have stock).": clear or move the remaining stock with a movement first, then delete the location.
  • "A warehouse with this code already exists.": warehouse codes are unique per company — pick a different one.

Frequently asked questions

Why did an item's value change after an inbound movement I didn't touch myself? Whenever stock arrives at a price different from the current one, SamBooks recalculates the item's weighted average cost on that location: it's normal for it to shift slightly with every inbound movement.

Can I see how much I'll really have available, factoring in commitments and incoming orders? The Stock levels table currently shows Available, Committed and On order as three separate columns: combining the three gives you the full picture, but a single "net available" figure isn't shown in the table yet.

If I record an inbound movement at €0 by mistake, what happens? The system accepts it as a legal value and still uses it to recalculate the average cost, which drops as a result. If it wasn't intentional, fix it with an adjustment valued at the correct price.

Can I link a manual movement to a specific customer or supplier? No: manual movements (inbound, adjustment, transfer, opening balance) carry no reference to a customer or supplier. That link is only created automatically when the movement comes from a document — a sales delivery note, a purchase delivery note or a return.

Why can't I find the reason code I need in the manual movement dropdown? The "Record movement" form only lists inbound or outbound reason codes: "neutral" ones (transfer, commitment, on-order) are applied automatically by their own dedicated flow, not from here.

How do I track every movement over a given period? Go to the movement journal, filter by Warehouse and/or Type, and export to CSV: the file also reports the reference document for each row.

Can a Logistics-role user do everything described in this guide? Yes: recording movements, opening balances, adjustments, transfers and managing warehouses are all actions available to the Logistics role, alongside Manager and Staff.

  • Warehouse item setup — how to mark an item as "stock-managed" and set its minimum stock.
  • Managing sales orders — a confirmed order is what creates the commitment you see in the Committed column.
  • Managing suppliers — the supplier record behind the On order figure once you confirm a purchase order.
  • Shipments and delivery orders — where the delivery note that actually reduces warehouse stock is created.
  • For the year-end physical inventory, which overwrites balances instead of adding a movement, see the dedicated physical inventory guide.

Ready to try SamBooks?

7-day free trial, no credit card required.

Start for free