Skip to content

Where the price on the line comes from

A sales order line should never have a price nobody can explain. Here is the order the system tries, from private customer price to catalog, how quantity breaks move the price, what a pack price's minimum quantity means, how formula prices work, why the line names its source while you price it, and why a typed price is kept.

A wholesaler’s oldest argument is about a number on a line. The seller quoted one price, the order shows another, and nobody can say where the number came from. The price list was in a spreadsheet. The spreadsheet was updated in March. The order is from May. The rep remembers a phone call. This is not a pricing problem. It is a lineage problem: a price without a stated source is a rumor with two decimals.

The fix is not a better price list. It is a line that names where its price came from while you are pricing it.

The order the system tries

When a sales order line needs a price and nobody typed one, the server walks a fixed sequence. First, the private customer price: a price set for this customer on this product, in this unit. Then the customer’s price list, if the customer form has one assigned. Then the pack price: a price stored for the pack on the line, because a dozen often prices differently than a case even before any discount. Last, the catalog price.

The match uses the product, the unit on the line, and the order date, because prices change over time and the price in effect on the order date is the one that applies. A price typed by hand skips all of this. It is kept as typed, never recalculated, and typing it clears the source label.

Put a concrete shape on it: SKU WDG-1040 sells by the dozen, twelve pieces to a dozen. A buyer orders forty dozen. The server first checks whether this customer has a private price on WDG-1040 by the dozen. It does not. It checks the customer’s price list, and the list has a line for WDG-1040 by the dozen. That is the price on the line, and the label shows its source while the line is being priced. Had there been no list entry, the server would have tried the pack price for the dozen, and then the catalog. Each step is a question with an answer. The receipt is for the moment of pricing: the order keeps the price, not the label.

Breaks belong to steps, not to vibes

A quantity break is a price that changes with quantity, and the largest break the ordered quantity meets applies: forty dozen at breaks of twenty and fifty takes the twenty; fifty takes the fifty.

The break is evaluated inside the step that supplied the price: a private price uses its own, a price list line uses those. The system never mixes a price from one step with a break from another, because that would be a price nobody agreed to. When a break above 1 applies, the label reads volume. It does not name the break. While pricing, the seller also sees the next break, so a nudge of ten more dozen reads as arithmetic, not haggling.

A pack price names a unit and a minimum

A pack price row carries three things: a unit, a minimum quantity, and an amount per that unit, plus the dates it is valid for. The minimum is the volume: the quantity from which that row applies. Inside the pack price step, the row whose minimum the quantity meets applies, and the largest minimum met wins.

Put numbers on it. A fictional product carries two pack prices: master case (360 pieces) 18.99 from 1 master case, and case (24 pieces) 0.75 from 50 cases. A line of 2 master cases resolves against the master case row: 18.99 per master case. A line of 60 cases meets the case minimum and resolves at 0.75 per case. A line of 40 cases does not meet the case minimum, so it resolves further down the sequence, to the catalog.

The per-unit price is the amount on the row for that unit. The volume is the minimum. The line keeps the price in the unit it was priced in, and changing the line unit converts by the factor ratio, not by applying the new factor to an already converted price.

You set pack prices on the SKU, under Wholesale prices by unit, beside the catalog price. Ending a price takes effect that calendar day: an ended row no longer prices new lines. To change a price, end the old row and add a new one. Replacing an open row ends the old one and creates the new one together. Prices are never deleted. Ended rows sit behind Show ended prices.

A price can be a formula

Instead of a fixed amount, a row can calculate its price. There are three rules: Fixed, the amount you type; Percent off catalog, the catalog price in the row’s unit minus a percent; Cost plus percent, the product’s cost in the row’s unit plus a percent. Rows read in words: Catalog - 10%, Catalog - 10%, ends .99, Cost + 10%.

A formula can round its result up to the next price ending in .99 or .49. It never goes below the calculated price, and a price that already has that ending stays. Put numbers on it. Product-01 carries a catalog price of 27.00 per CASE. A row of 10% off catalog with an ending of .99 gives 27.00 times 0.90, which is 24.30, which becomes 24.99 per CASE.

Cost plus uses the current cost basis when the company uses one, otherwise the standard cost. With no cost above zero, the formula is skipped and resolution keeps looking down the list. Cost plus is for Owner and Admin only. A role that cannot see cost sees Formula (restricted) and gets no cost-plus editor. When a cost-plus price wins, the order caption names the source, and a sales role sees the price without the cost-plus label.

At the same level, a fixed row always beats a formula row, even if the fixed price is lower. A formula is used only when that level has no fixed row for the line. Only one formula row is allowed for the same customer or list, product, unit, minimum quantity, warehouse, and dates. Saved lines keep their price: changing a formula prices new lines only.

Why the line shows its work

The label shows the source while the line is being priced, and it is not stored. A reopened order shows the price, not the label. That is the honest limit of the feature: the system tells you where the price came from at the moment you need to trust it, and keeps the number afterward. When the invoice is generated from the shipped order, the header stays on the line nets; nothing is rebuilt from the list price at posting. That only holds if the price was priced from a named source, not guessed.

This also shortens the oldest argument. At the moment of pricing, the question “where did this number come from” has an answer on the screen: the private price, the price list, the pack price, or the catalog, and volume when a break applied. There is no spreadsheet to open, no March file to find, no phone call to reconstruct. If the price was wrong, the source says exactly where to fix it.

Why a typed price is kept

There is one exception to the sequence, and it is deliberate: a price typed by hand is kept. The system does not silently replace a human decision with a resolved one, because the moment it does, the seller stops trusting every line the system priced on its own. A typed price is an override, and an override is information: typing one clears the source label, and the price is never recalculated.

A typed price is kept the way a typed count is witnessed: the human act is recorded, not overwritten.

The shape of it

So while the line is being priced, it carries three things: the price, its named source, and a typed price that is kept and never recalculated. The catalog price follows the pack, a price set per piece becomes the case or dozen price on the line, and a price typed by hand is kept. Each pack is defined once on the product. The order reads the way the buyer ordered, and the price reads the way the agreement was made.

Most wholesale software treats pricing as a lookup. It is a small chain of decisions, and every decision in the chain should be visible to the people whose money it moves. A line that shows its work does not end pricing arguments. It just makes them short, specific, and winnable in one screen.

The full chapter, with cost, margin, and who can see them, is in Help.

Questions

What happens when no price matches the line?
The catalog is the last step of the resolution. If nothing prices the line, the line shows no source label, and the seller enters a price by hand. That typed price is kept and not recalculated. The system never invents a price to fill the gap.
Can a quantity break apply to a private customer price?
The resolution is a sequence, and the break is part of each step that carries one. If the customer has a private price with breaks, the largest break the quantity meets wins inside that step. The price list works the same way, and so does the pack price. The break is never borrowed from a different step than the price it discounts.
What is the minimum quantity on a pack price?
The volume from which that row applies. A case row with a minimum of 50 applies to lines of 50 cases or more. The largest minimum the quantity meets wins inside the pack price step, and the break is never borrowed from a different step than the price it discounts.
Can a price be a formula?
Yes. A row can be a fixed amount, percent off catalog, or cost plus percent. Rows read in words, such as Catalog - 10% or Cost + 10%. A fixed row at the same level always beats a formula row. Cost plus is for Owner and Admin only; a role that cannot see cost sees Formula (restricted).
Why not just show the final number?
Because the final number is a claim, and claims need a source. While the seller prices the line, the label names it: the customer's private price, the price list, the pack price, or the catalog, and volume when a break above 1 applies. The invoice, the margin report, and the customer all start from the same number, and the seller who priced it can say where it came from.

Keep reading

See how DockingWare handles this →