A vendor invoice is a bill you have received — from a carrier, an agent, a haulier, a warehouse. Recording it does two things: it puts the payable into the ledger, and it attaches the cost to the specific jobs it relates to, so you can tell whether those jobs made money.
The second is the part that is easy to skip and expensive to skip.
Creating one
Expenses → Vendor invoices → New.
| Field | Notes |
|---|---|
| Vendor | Who billed you. |
| Invoice number | Their reference, as printed on their document. |
| Invoice date | The date on their document, not the date you keyed it. |
| Currency | The currency they billed in. |
| Invoice type | The type governing behaviour for this class of vendor invoice. |
| Sales tax group | The tax treatment. |
| Total amount | The document total. |
Enter the vendor's own invoice number and invoice date exactly as printed. These are what you quote in a query, what reconciles against their statement, and what prevents the same invoice being entered twice.
Lines — allocating the cost
The value of a vendor invoice is in its lines. Each line ties part of the invoice to a job:
| Field | Notes |
|---|---|
| Shipment | Which job this part of the cost belongs to. |
| Containers | Which containers, where the cost is container-specific. |
| Charge code | What kind of cost it is. |
| Amount | How much of the invoice this line represents. |
A single carrier invoice covering twenty shipments should be entered as twenty lines, not one. Doing it properly is what makes per-job profitability real rather than notional — a lump cost sitting against no shipment is a cost nobody can attribute, and it will quietly distort every margin figure you produce.
Matching against what you expected
Lines are not free text. Each one must claim an available quotation charge line for its shipment and charge code, and the system enforces that:
| Rule | Refusal |
|---|---|
| The shipment must have a quotation | shipment … has no associated quotation |
| A matching, unclaimed charge line must exist | no available quotation chargeLine for shipment …, chargeCode … — either no chargeLine matches or all matching chargeLines are already vendor-invoiced |
| One line per shipment-and-charge-code pair | duplicate (shipment, chargeCode) — only one line per (…) pair is allowed |
| The charge line must not already be claimed | expense line(s) already claim chargeLine(s): … |
| All charge lines must share a currency | All charge lines must have the same currency: … |
That second message is the one you will meet most, and it has two quite different causes. Either nothing was quoted for that charge code on that shipment — the cost was never anticipated — or it was, and a previous vendor invoice already took it. Check for an earlier invoice before adding a quoted line.
The one-line-per-pair rule matters when a vendor bills the same charge twice on one document — two haulage legs on one shipment, say. They cannot be entered as two lines with the same charge code. Either combine them into one line, or use distinct charge codes that reflect what actually happened.
Where a charge is priced on W/M × days, the amount is checked against the expected figure and a mismatch is refused with both numbers shown. That is a genuine control, not an obstacle: it means the vendor has billed a different volume or a different number of days from the one on the shipment, and one of you is wrong.
Once claimed, the charge line records the expense line backing it — which is what makes quoted-versus-actual visible rather than a manual exercise. See Pricing a quotation.
Expense lines are locked once linked
An expense line tied to a quotation charge line cannot be updated or deleted — "Cannot update expense line linked to quotation charge line". Break the link at the invoice level rather than trying to edit the line.
Status
| Status | Meaning |
|---|---|
| Pending | Entered, still editable. |
| Submitted | Sent onward to the accounting system. |
| Confirmed | Accepted by the accounting system; the exchange rate is stamped at this point. |
| Paid | Settled. |
| Rejected | Disputed or wrong. |
Pending is the only editable state
A vendor invoice can only be updated while it is PENDING — "Vendor invoice can only be updated while in PENDING status (current: …)". The same applies to deletion: "Only PENDING vendor invoices can be deleted; unsubmit first."
So the sequence to correct a submitted invoice is unsubmit, edit, resubmit — not edit-in-place, and not delete-and-rekey. If you find yourself unable to change an invoice, check its status before concluding it is a permissions problem.
Reject rather than delete a disputed invoice. A rejected invoice with its reason recorded is evidence in the dispute; a deleted one is an argument you cannot win.
The invoice date must be in an open period
"The invoice date falls within or before a closed accounting period. Update the invoice date to an open month."
Note within or before: it is not enough for the month to be open — every month up to it must be. A late invoice for a closed month cannot simply be dated back. Either post it in the current open period, or reopen the period deliberately. See Quotation charge lines and closed periods.
Practical advice
- Enter the invoice when it arrives, not when it is paid. An unentered payable is an unknown liability and a job that looks more profitable than it is.
- Allocate every line to a shipment where a shipment exists. Costs with nowhere to go accumulate and hide.
- Watch the currency. A vendor billing in USD against a job quoted in EGP creates exposure that only becomes visible when the cost is recorded properly.
- Do not let approval become a formality. The single most common cause of unrecoverable cost in forwarding is a supplier invoice approved without being checked against what was quoted.
Related
- Costs that arose but have not yet been billed by anyone: Quotation charge lines.
- Cash advanced to a representative and later reconciled: Custody payment requests.
Last updated 15 September 2026