web
You’re offline. This is a read only version of the page.
close
Skip to main content

Announcements

No record found.

News and Announcements icon
Community site session details

Community site session details

Session Id :
Small and medium business | Business Central, N...
Suggested Answer

Understanding Standard Business Central Pricing and Extending It for Agreement-Based Pricing

(3) ShareShare
ReportReport
Posted on by 294

Hello,

I need advice on the correct design approach for a custom pricing scenario in Microsoft Dynamics 365 Business Central.

First, I would like to understand how Business Central handles this scenario in the standard functionality.

Standard functionality question:

In Business Central, if the same customer has multiple active Sales Price Lists assigned to them, how does the system decide which Price List should be used when creating a Sales Order and entering Sales Lines?

What are the standard rules or priorities used by the Business Central Pricing Engine?


Custom requirement:

We have created a custom Agreement table that contains:

  • Agreement No.

  • Customer No.

  • Start Date

  • End Date

  • Agreement Status

  • Sales Price Lists Code

The business requirement is:

A customer can have multiple agreements, and each agreement can have a different Sales Price List.

We do not want to link one customer directly to only one Price List, because the same customer may have different orders under different agreements, and each order may require a different pricing structure.

Example:

Customer:

 
Customer No.: CUST-0002
Customer Name: ABC Hospital
 

This customer has two agreements:

Agreement 1001

 
Agreement No.: 1001
Customer: CUST-0002
Sales Price List Code: S00034
 

Price List S00034:

 
Item A → Price 50
Item B → Price 100
 

Agreement 1002

 
Agreement No.: 1002
Customer: CUST-0002
Sales Price List Code: S00011
 

Price List S00011:

 
Item A → Price 70
Item B → Price 120
 

In the Sales Order, the user selects:

 
Customer No.: CUST-0002

Agreement No.: 1001
 

When the user enters Item A in Sales Lines, the expected result is:

 
Item A Price = 50
 

because Agreement 1001 is linked to Price List S00034.

If the user changes the Agreement to:

 
Agreement No.: 1002
 

then the expected price should come from:

 
Price List S00011

Item A Price = 70
 

My questions:

  1. What is the recommended Business Central approach to implement this scenario?

  2. Does Business Central provide a standard way to select or influence a specific Sales Price List at Sales Order level based on a custom field such as Agreement No.?

  3. If customization is required, what is the recommended approach?

Should we:

Option 1:
Extend the standard Price Calculation Engine and make the Sales Line pricing use the Price List Code coming from the selected Agreement?

Option 2:
Create a custom Price Calculation Method?

Option 3:
Use another standard Business Central extension point or pricing feature?

The solution should:

  • Keep the standard Business Central pricing framework.

  • Allow one customer to have multiple agreements.

  • Allow each agreement to use a different Sales Price List.

  • Automatically calculate item prices when users enter Sales Lines.

  • Avoid duplicating pricing logic outside the standard pricing engine.

I would appreciate recommendations from anyone who has implemented a similar scenario.

Thank you.

  • Suggested answer
    AndrewThomas81 Profile Picture
    3,013 Super User 2026 Season 2 on at

    Standard price calculation in Business Central will find the best price on the date of the order

     

    For price agreements the standard functionality to control this would be sales blanket orders where you can manually record the prices for the “agreement”

     

    Kind Regards

     

    Andrew Thomas FCCA MCP

    YouTube - Use Business Central

    LinkedIn

  • Suggested answer
    YUN ZHU Profile Picture
    103,656 Super User 2026 Season 2 on at

    This can be achieved through customization. We recently solved a new tiered/waterfall pricing requirement for a customer; please feel free to reach out to us if you need assistance.

     

    Thanks

    ZHU

  • Suggested answer
    OussamaSabbouh Profile Picture
    20,124 Super User 2026 Season 2 on at

    Hello Rami,

    In standard Business Central, the system does not first choose one Sales Price List when several active lists apply to the same customer; instead, the pricing engine gathers all applicable price lines for the Bill-to Customer/customer price group/all customers, item, date, UOM, quantity and currency, and with the standard Lowest Price method selects the lowest applicable price and highest applicable line discount—there is no standard “Price List Code priority” or Sales Order field that tells BC to use only a specific price list. For your Agreement scenario, I would not create a new Price Calculation Method (Option 2) because you are not changing how the best price is calculated; you are changing which prices are eligible. The recommended approach is therefore Option 3 / a focused extension of the standard pricing framework: keep Lowest Price, add the Agreement as pricing context (or filter the Price List Lines by the Sales Price List Code stored on the selected Agreement) using the supported Price Source / Price Calculation Buffer / Sales Line - Price extensibility events, so when Agreement 1001 is selected only S00034 participates in calculation, and when 1002 is selected only S00011 participates; also trigger standard repricing of existing lines when Agreement No. changes. Microsoft documents exactly this extensibility pattern—for example, adding Location as a new Applies-to Type/source through Price Source Type and Sales Line - Price.OnAfterAddSources, and filtering additional pricing criteria through Price Calculation Buffer Mgt.OnAfterSetFilters. A completely new Price Calculation Method is more appropriate only if you want to change the algorithm itself, such as prioritizing one pricing source even when its price is higher.

    Regards,
    Oussama Sabbouh

  • Suggested answer
    Simon Kimani Profile Picture
    213 on at

    Hello,

    In standard Business Central pricing, when multiple sales prices are available for the same customer and item, the system automatically selects the lowest qualifying price. Each price must therefore be differentiated by criteria such as a minimum quantity or start date. Users cannot, however, manually select a specific price when creating a sales order.

    The Acumens Sales & Special-Order Management (NW) extension overcomes this limitation through Sales Agreements. Each agreement connects a customer to a Customer Price Group, allowing the appropriate pricing to be applied for a particular commercial arrangement.

    Depending on whether a valid agreement is available and selected, the extension handles pricing in one of three ways:

    - Agreement selected: The system considers only the prices in the Customer Price Group linked to the selected agreement.

    - No agreement selected: The system evaluates prices across all eligible customer agreements and selects the best qualifying price for each item line.

    - No eligible agreement available: The system falls back to standard Business Central pricing.

     

    An agreement is considered eligible when it matches the sell-to customer, falls within its validity dates, and is not blocked.

    This approach allows the same customer to place orders under different commercial agreements without changing the default price group on the customer card.

    Check the app here: https://acumens.com/Blog/extended-pricing-business-central/

  • Suggested answer
    Grigorios Mavrogeorgis Profile Picture
    3,638 Super User 2026 Season 2 on at

    Hi Rami, on the standard part t the V16 pricing the engine collects every active price list line that matches the customer, the item and the date, then Lowest Price wins. No priority ranking, no way to point a document at one specific list. So if you assign both lists to the customer you will always get 50, never 70.

    Because of that I wouldn't hang the agreement on the customer at all. Option 2 is the supported route  your own implementation of the price calculation interface,, so the standard flow still calls you and you filter the sources by the agreement's list. Heavier, but it stays inside the framework.

    Lighter thing worth testing first: one customer price group per agreement, and set the group on the line from the agreement. Then standard resolves it and you touch no code in the engine. 

     

    Glad to help - follow up if anything is unclear.   

    ►  If this solved it, marking it verified helps others too.       

    Regards,
    Grigorios Mavrogeorgis
    Business Central Consultant & AL Developer

    Work: Gmsoft Limited
    Blog:  insidebusinesscentral
    LinkedIn: linkedin.com/in/gregorymavrogeorgis

     

  • Suggested answer
    Grigorios Mavrogeorgis Profile Picture
    3,638 Super User 2026 Season 2 on at

    Hi, that GUID sitting in Document No. means the line is looking for a Sales Header that is not there on the BC side anymore. Usually the order was posted or deleted in BC while the coupling from the Sales order still exists, so the line job keeps retrying against a header that's gone.

    If the BC order is gone, remove the coupling, clear the failed rows in Integration Synchronization Errors, then bring it over fresh with Create in Business Central. The lines come with the order, they don't sync on their own, that's why the line mapping alone never fixes it.

    One thing that bites  if the order was already invoiced in BC, don't try to resync it at all, just uncouple and leave it.

    Glad to help - follow up if anything is unclear.   

    ►  If this solved it, marking it verified helps others too.       

    Regards,
    Grigorios Mavrogeorgis
    Business Central Consultant & AL Developer

    Work: Gmsoft Limited
    Blog:  insidebusinesscentral
    LinkedIn: linkedin.com/in/gregorymavrogeorgis

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Season of Sharing Community Challenge Winners!

Congratulations to our community stars!

Women in Power Builds Momentum

Expanding mentorship, skilling, and AI innovation

Congratulations to the August Top 10 Community Leaders

These are the community rock stars!

Leaderboard > Small and medium business | Business Central, NAV, RMS

#1
OussamaSabbouh Profile Picture

OussamaSabbouh 750 Super User 2026 Season 2

#2
YUN ZHU Profile Picture

YUN ZHU 534 Super User 2026 Season 2

#3
AndrewThomas81 Profile Picture

AndrewThomas81 287 Super User 2026 Season 2

Last 30 days Overall leaderboard

Featured topics

Microsoft Training Manuals

Product updates

Dynamics 365 release plans