A shipment is the moment stock physically leaves the warehouse for a customer. Posting a shipment writes stock OUT to the inventory ledger, releases the sales order's reservations and updates the order's shipped quantities. The page says: "Posting a shipment records stock OUT in the inventory ledger and creates the shipment.posted integration event. It does not create an invoice or journal entry."
Who uses it: warehouse staff who dispatch orders, and sales coordinators checking what has left.
Where to find it
| Screen | How to open it | URL |
|---|---|---|
| Shipment list | Sidebar Sales / Fulfillment → Shipments | /inventory/shipments |
| Shipment detail | Click a shipment number, or Create shipment on a sales order | /inventory/shipments/{id} |
You see the menu item when your plan includes sales fulfillment and your role has View sales orders & fulfillment. There is no New button: shipments are created from a sales order.
Screen tour
The shipment list
| Column | Meaning |
|---|---|
| Shipment # | SHIP-<order number>, for example SHIP-SO-000031. Click to open. |
| Sales order | Internal number of the order (#15). |
| Date | Ship date. |
| Carrier | Carrier name, or —. |
| Status | Draft or Posted. |
Newest first; 50 most recent; no search, filters or export. Empty state: No shipments — "Create a shipment from a reserved sales order."
The shipment detail page
| Area | What it shows |
|---|---|
| Header | Shipment number, status badge. |
| Summary panel | Sales order (link), Ship date, Warehouse (#n), Carrier · service, Tracking #, Label (label number with a Generated badge). |
| Tabs | Lines, Carrier, Tracking, Ledger result. |
| Override controls (draft only) | Allow shipping expired lots, Allow shipping quarantined/recalled lots; "(no permission)" if you cannot use them. |
| Action bar | Draft: Save lot/serial, Post shipment. Posted: Create source reversal, or the badge "Reversed by return #n". |
Lines tab
| Column | Meaning |
|---|---|
| Item | Item number with a badge when lot/serial/expiry tracking is required. |
| Ship qty | Quantity to ship. Read-only: it is everything still unshipped on the order line. |
| Lot / Serial | On a draft: a lot selector (with an earliest-expiry suggestion you can apply for expiry-tracked items) and/or a serial selector. Posted: "Lot #n" / "Serial #n". |
| Selected | How many lots/serials are selected. |
Carrier tab (editable on drafts)
| Field | Rules / defaults |
|---|---|
| Carrier | Defaults to SolaShip. Up to 100 characters. |
| Service | Standard ground (default), Express, Freight. |
| Tracking # | Up to 100 characters. |
| Warranty months | 0–120, default 12. Sets the warranty end date on shipped serial numbers. |
| Weight, Length, Width, Height | 0 or more. Weight starts as the total ship quantity. |
| Ship to | Starts as the customer name. |
| Address | Empty; type the delivery address. |
Below the fields: Save shipping details, then Rates cards and the label card.
Rates are SolaStock's built-in estimates, not live carrier quotes. They are shown in USD and use the package weight (minimum 0.1):
| Service | Base | Per kg | Days |
|---|---|---|---|
| Standard ground | 4.50 | 0.80 | 3-5 |
| Express | 9.00 | 1.45 | 1-2 |
| Freight | 35.00 | 0.55 | 5-8 |
Tracking tab shows Carrier, Tracking #, Status and an event table (Time, Status, Event). Statuses: Label created, In transit, Delivered, Exception. SolaStock itself records "Label … created" and "Shipment handed to carrier"; it does not receive delivery updates from carriers.
Ledger result tab lists the stock movements after posting: Date, Item, Warehouse, Direction (Out), Quantity, Unit cost, Total, Running quantity. Before posting: "No ledger entries yet. They appear here after posting."
Create a shipment
- Open a sales order that is Reserved, Partially reserved, Partially picked, Picked, Packing, Packed or Partially shipped.
- Click Create shipment. You see "Draft shipment created — review it, then post it to ship." and the draft opens.
The draft contains every order line still not shipped (ordered minus shipped). Serial-tracked lines get one row per reserved serial. If nothing remains: "Nothing remains to ship for this order."
Select lots and serials
- On the Lines tab, for each tracked line choose the lot, or select exactly as many serials as the ship quantity. For expiry-tracked items, apply the earliest-expiry suggestion if you want FEFO.
- Click Save lot/serial. You see "Lot/serial selection saved." (This also saves the Carrier tab values.)
Until every tracked line is complete, Post shipment is disabled with the tooltip "Complete lot/serial capture first" and the hint "Select lot/serial for every tracked line before posting." Failure: "The lot/serial selection could not be saved."
Enter shipping details and a label
- Open the Carrier tab, fill in the fields, click Save shipping details → "Shipping details saved." Save your lot/serial selection first; this button reloads the lines.
- Optional: on a rate card click Use rate & label → "Shipping label generated." The label card shows carrier, service, shipment number, tracking number and a QR code. Carrier, service and tracking number are filled in (a tracking number starting
STKis generated if you did not type one), and the label numberLBL-…appears in the summary.
Failures: "The shipping details could not be saved.", "The shipping label could not be generated." You can also generate a label after posting.
Post a shipment
- Click Post shipment.
- The dialog Post shipment? says: "Posting writes stock movements to the inventory ledger and locks this document. It cannot be edited afterwards." Click Post.
- You see "Shipment posted — stock shipped OUT."
What happens:
- All active reservations of the sales order are released, then stock goes OUT of the shipment's warehouse at the ship date, valued by your costing method.
- The order's Shipped quantities rise; it becomes Shipped or Partially shipped.
- Shipped serial numbers get the customer as Owner and Warranty until = ship date + warranty months.
- If a tracking number is set, the tracking shows In transit — "Shipment handed to carrier".
- A Shipment posted event is sent to SolaCount when connected; SolaCount posts cost of goods sold (Dr Cost of goods sold, Cr Inventory).
Posting can be refused ("The shipment could not be posted." plus the reason), for example:
| Reason | Fix |
|---|---|
| Insufficient stock (negative stock disabled) | Receive or transfer stock first. |
| Expired, quarantined or recalled lot | Pick another lot, or tick the override if you hold the permission. |
| "Serial n is not actively reserved by this sales order." | Select a serial reserved on the order. |
| "Shipment has no quantity to ship." | Nothing left to ship. |
| "The shipment quantity exceeds the quantity remaining on this sales order. Refresh the order and enter the actual remaining quantity." | Another shipment took part of the order first. Concurrent shipments are serialized per order, so the two together can never ship more than was ordered. Reduce the quantity. |
| "A shipment line does not belong to this sales order and product. Reopen the shipment from its sales order." | A line points to another order or product. Create the shipment again from the order. |
| "This item is not available for sale. Enable Available for sale in item settings to use it on a new sale." | The item's Available for sale box was unticked after the order was made. Tick it in Items, or ship something else. |
| "Confirm the sales order before dispatching its remaining quantities." / "Invoice INV-… will fulfil this sales order. Approve its SolaCount request before shipping, so the goods are not billed twice." | The order belongs to a Fulfillment Request that is not approved for this warehouse, or an invoice has claimed it. |
| "Choose the required lot, serial number, or variant for this product before dispatching." | The tracked item needs its lot, serial or variant on the shipment line. |
| "A credit is updating undelivered demand. Retry dispatch after the credit finishes, or ask the accountant to resume it." | A SolaCount credit is closing part of the order's undelivered demand. Retry in a moment. |
| Mapping review required | Finish SolaCount matching (SolaCount integration). |
Shipments of invoices and cash sales
A shipment created from a sales order that came from a SolaCount invoice updates the Fulfillment Request: Dispatched rises and the request becomes Partially dispatched or Fully dispatched. A Create shipment form on such an order is pre-filled with the quantity still to ship after any quantity cancelled by a credit. Shipments confirmed on Cash Sale Dispatch are normal posted shipments too and appear in this list.
Receipt and shipment dates are stored exactly as the calendar day you entered, without being shifted by time zones, and the order and receipt forms default to today's date in your own calendar.
Return or reverse a shipment
On a posted shipment, click Create source reversal (needs Create & post sales returns (stock IN)). A new sales return opens pre-filled from this shipment. See Sales Returns. Once a return reverses the whole shipment, the button is replaced by "Reversed by return #n".
Statuses and lifecycle
| Status | Meaning | Allows |
|---|---|---|
| Draft | Editable; stock not moved. | Save lot/serial, Save shipping details, labels, Post shipment |
| Posted | Stock shipped out; locked. | Labels, Create source reversal |
| Posted + "Reversed by return #n" | Fully reversed by a return. | View only |
Draft shipments cannot be deleted.
Permissions
| Role | View | Create / edit / post | Overrides | Create source reversal |
|---|---|---|---|---|
| Owner, SolaStock Administrator | All warehouses | Yes | Yes | Yes |
| Inventory Manager, Warehouse Manager, Warehouse Operator (scoped) | Assigned warehouses | Yes | No | No |
| Inventory Viewer (scoped) | Assigned warehouses | No | No | No |
| Custom role | View sales orders & fulfillment | Create & post shipments (stock OUT) | Ship expired lots (override), Ship quarantined / recalled lots (override) | Create & post sales returns (stock IN) |
The server only honours an override if you both tick it and hold the permission.
Confirmations and "Status not confirmed"
If the connection drops during posting you may see Status not confirmed — "We could not confirm whether the change completed. Check the current status before submitting again." Click Check current status. Posting the same shipment twice never ships twice; it is posted once.
Worked examples
Example 1: ship a reserved order
SO-000031: 50 cartons of Water 500ml x24 for Gulf Star Supermarkets LLC from Dubai Main, not lot-tracked.
- Omar Haddad clicks Create shipment →
SHIP-SO-000031, Ship qty 50, weight 50. - Carrier tab: Service Freight, Address "Warehouse 7, Al Quoz Industrial 3, Dubai", Save shipping details. Freight rate: 35.00 + 50 × 0.55 = 62.50 USD, 5-8 days.
- Post shipment → Post. Dubai Main drops from 180 to 130 cartons; Ledger result shows Out 50. The order is Shipped. In SolaCount, Sara Khan invoices AED 1,312.50 and links it with Review shipment link.
Example 2: serials, expiry lots and a label
SO-000032 ships 120 cartons of Fresh Juice 1L (expiry-tracked) and 2 Barcode Scanner BS-200.
- Create shipment. Lines: juice 120; scanners Serial #91 and #92 (reserved).
- For juice, the suggestion proposes lot
FJ-2610A(expires 20 Oct 2026); Omar applies it. Save lot/serial. - Carrier tab: Warranty months 24, Weight 130, Save shipping details; on Express (9.00 + 130 × 1.45 = 197.50 USD) click Use rate & label. Tracking shows Label created.
- Post shipment. Juice and scanners go out; the scanners show Owner "Gulf Star Supermarkets LLC", warranty until 2028; tracking turns In transit. SolaCount posts cost of goods sold for the shipped cost.
How it connects
- Source: Sales Orders; optional Picking and Packing before it.
- Stock: Current Stock and the Stock Ledger show the OUT movements.
- Traceability: serial owner/warranty, lot history, recall impact by customer.
- Sales Returns: returns are created from posted shipments.
- SolaCount: cost of goods sold journal; invoices link to the shipment (SolaCount ↔ SolaStock).
Tips and common problems
| Problem | Cause | Fix |
|---|---|---|
| Post shipment disabled | A tracked line lacks lot/serial. | Complete selection and Save lot/serial. |
| I can't change Ship qty | Ship qty is everything unshipped on the order. | Change the order (while draft) or ship it all. |
| Selections vanished after saving shipping details | Unsaved lot/serial choices were reloaded. | Click Save lot/serial first. |
| Second Create shipment for the same order fails | Number SHIP-<order> already used. |
Open the existing draft from Shipments. |
| Rates are in USD / not a real carrier | Built-in estimates. | Use them for reference; book the carrier separately. |
| No invoice | SolaStock never invoices. | Create it in SolaCount and link it. |