Contract Prices, Line Discounts, and Foreign Currency on Sales Orders
Alpine Ski House has a contract with customer 20000: 10% off every item, except ten 'contract' items that carry fixed net prices. Separately, any line of 20,000 or more earns an extra 3%, and orders over 100,000 earn a 2% invoice discount. The sales manager reports three problems: the 3% never appears on lines that already get the 10%; the 10% is being deducted from the fixed net prices, selling those items below the agreed price; and orders in USD show the same numbers as LCY orders. The 10% is currently a line discount on the customer card, and the fixed prices are maintained as the unit price on the item cards.
1. Why do the 10% and the 3% never both appear on a line, and how do you model a 3% that depends on the line amount?
Read the worked answer
Why they do not stack. Business Central applies exactly one line discount per line. It evaluates the applicable Sales Line Discount rows - customer-specific first, then customer price group, then all customers - and applies the best qualifying percentage. Percentages are never summed, so 10% and 3% resolve to 10%.
A second limit. Sales Line Discount keys on Minimum Quantity, not amount. A rule of '20,000 or more' cannot be expressed as a line discount at all.
Working design.
- Convert the contract 10% into price: dated
Sales Pricerows for customer 20000 at 90% of list (or a price list applied through the customer's price group). Prices stack with line discounts and with invoice discounts. - Express the 20,000 threshold as an invoice discount code with
Minimum Amount= 20,000 and 3%. - Be explicit that invoice discount lines are tiers, not add-ons: the highest qualifying minimum amount wins. Putting 2% at 100,000 in the same code replaces the 3% above 100,000 rather than adding to it. If both must apply, say which lever carries the second one and accept the trade-off rather than claiming both can stack.
2. The ten contract items are being sold below their agreed net price. What configuration protects them, and why did the item-card price not?
Read the worked answer
Why it failed. A line discount applies to whatever unit price the line carries, including the item card's unit price. The item card has no customer context and no 'no discount' switch, so maintaining 42.50 as the item unit price guarantees the 10% is taken off it.
The control. It lives on the Sales Price record, in Allow Line Disc.:
- Create a
Sales Pricerow per contract item for customer 20000 (or a dedicated price group), withUnit of Measure Codefilled,Starting Date/Ending Dateif the contract is dated, the fixed net price, andAllow Line Disc.cleared. - Leave
Allow Line Disc.selected on the customer card, otherwise discounting stops for every item. - Check
Sales & Receivables Setupto confirm no setting is suppressing or forcing discount calculation.
Reasoning to state. The protection must sit at the price-record level because that is the only place Business Central knows both the customer and the item at the same time. Also confirm the price record's unit of measure matches the order's - a price row for PCS does not protect a line entered in BOX, which silently falls back to the item card.
3. USD orders show the same numeric prices as LCY orders. Explain the cause and the fix.
Read the worked answer
Cause. A Sales Price row with a blank Currency Code is not converted - the amount is used as-is in the document currency. A 450.00 LCY price therefore becomes 450.00 USD. Business Central does not derive foreign prices from the LCY list; foreign prices must exist as data.
Fix.
- Create USD price rows (
Currency Code= USD) for every item sold in USD, ideally through a dedicated price list so they can be reviewed and revalued together. - Apply the same check to
Sales Line DiscountandInvoice Discountrows: a blank-currency record applies to USD orders with the same numeric value, and invoice discount is maintained per currency on the customer or currency code. - Check
Currency Codeon the customer card. A blank or wrong currency turns the order into an LCY order, and price symptoms then look like a pricing bug rather than a master-data error.
Judgement to state. Where maintaining parallel lists is impractical, say so and propose a review cycle tied to exchange-rate movement - do not imply Business Central will convert a blank-currency price row, because it will not.