Price List Hierarchy

We have Customers that receive specific pricing for specific parts. If the Part/Price is not found in the Customer Price List (Unit Price by Part), they can receive discounted pricing from the base price by Product Group. When we first set this up, we had the Part/Price price list at the Customer Price list level and the Discounts set at the Customer Price Discount level. The system would look at the Customer Price List and if the Part was found, the Unit Price from the Customer Price List was used. If the Part was not found in the Customer Price List, the system would then follow through to the Discount Prices lists. However, now, the system is applying both the Unit Price and the Discount pricing by taking the discounts from the Unit Price.

I tried flagging the Price Lists to use “Both” rather than “Unit” or “Discount” and putting them all in as Discount Price Lists. This works if they are all using Discounts, but not if the first Discount is set to use Unit Pricing. Has anyone else found a solution to this? We don’t want to apply discounts to the table price if found.

Welcome to the group!

I’ll reply since no one else has yet, to get the ball rolling, but this is not a strong area for me.

We do a flat discount rate per customer, set on the Customer Maintenance screen. I don’t suppose you are fortunate enough to go that route? Or are your discounts very micromanaged per part?

I started with discount price lists, but that is definitely a chore and not what we needed.

My internal notes say for customer discounts, I wanted them to be “MAX” not “ADD” (the default).

The field help says this about the “discount qualifier”:

I don’t know if any of that helps. It sounds like your setup is much more intricate than mine.

Just because, I dug up this PPT I made when I had to explain this to coworkers. I was feeling very artistic that day, it seems.

Again, this may not apply to your situation.

The first category - that goes unexplained - is for internal sales. We “sell” intercompany at standard cost, so I had to make a BPM for that.

Pricing in Epicor.pptx (289.3 KB)

Hi Jason,

The PPT is helpful as to how pricing works in Epicor, but does not really apply to our situation. We do not have Customer Discounts across the board at the Customer level. We have some Customers that have Customer/Part Specific pricing on all Products. That works fine as their pricing comes only from Unit Price Customer Price Lists. We also have Customers that only get discounts based on a percentage of Base Price (From Part Master) for specific Product Groups. That works fine as all discounts come from Customer Discount Price lists.

Our issue is with Customers that have Customer/Part Specific pricing on SOME products and percentage discounts on Parts by Product Group on Parts not found in the Unit Price Customer Price list. We tested this when we first set the Price lists up and it was working properly. I don’t know what version that was, but I believe it was January 2023 Multi-Tenant Cloud. It is now applying the Specific Unit Price from the Customer Price list and then applying the Discount percentage by Product Group to the Unit Price from the Price List.

This is not what we are looking for. We only want the Specific Unit price if found. If not, then apply the Percentage discount.

Thanks, Zane

1 Like

Zane, I just got asked this question, but our use case was… we have parts that are on mulitple price lists and we have a customer with a few of these price lists, which price gets selected and why.

In 10.2.500 it seems whatever price list is listed first in customer maintenance is the one that gets chosen for us.

Utah,

Thanks for the reply.

Do you know whether all price lists are of the same type (Unit Price or Discount)? Or are they mixed? In Kinetec 2022.2.11, the hierarchy works from top down if all the price lists are of the same type, but no discounted price is returned if they are mixed. For instance, if I have a Unit-Price price list as the first price list and discount percent price lists following, no discount is returned. However, If I change the first price list to Discount, and calculate the percentage that would be required to make the set Unit Price, it will work. I just don’t want to have to calculate the percentage to come up with the quoted Unit Price for all Customer/Part combinations.

Thanks, Zane

Zane, that’s the million dollar question… and I can’t say if there is any more functionality built in than the top down logic.

I also am perplexed by your use case. Are you saying that you are targeting a certain price so you need to know what discount percent allows for that price?

This is what I am confused by. I am not sure I follow.

In a Unit-Price price list, we assign a set price. If the Part Master price for an Item is 7.00 and the Unit Price in the price list is 2.20, the 2.20 price should be used with no other discounts applied. If I change the price list type to Discount rather than Unit Price (to match the discount price lists following), I have to calculate the percentage needed to come up with 2.20. The Discount percentage would be .68571428571 in this instance. This works in the Hierarchy as the calculation stops at the first price list if the Part is found there and all price lists are the same type. However, it would create a real maintenance disaster for price changes/updates.

OK, so ignoring the customer for a minute, you have pricing possibilities (I did not put these in any special order) of:

  1. Customer Price List, type is Unit Price
  2. Customer Price List, type is Discount
  3. NOT the Part table? (if so, good!)

And then you have customers that get assigned
A. Customer Price List, type is Unit Price
B. Or, Customer Price List, type is Discount
C. Or, Both A and B are assigned to one customer (this is the problem child)

And for customer C, part 789XYZ is not on both price list, right? It’s only on A -or- B, right?

Because I don’t understand this statement:

How is it doing 2 things if the part is only on one list?

Just trying to wrap my head around it all.

Or is it this:

  • Part 789XYZ is on B but not A and that works fine
  • Part 456JKL is on A and B but you only wanted it to use A and not B and it’s using both?

Not quite.

We do have a price in the Part table. This is the “Base Price” that Product Group discounts apply to.

We have Customer Price Lists that are of type “Unit Price”. So there is a table of parts in the price list with specific Unit Pricing.

We have Customer Discount Price Lists that are of type “Discount” and are tied to Product Groups. So a Part could be assigned to a Product group and still be in a Customer Price List. The Customer could be assigned both a Customer Price List and Customer Discount Price Lists. This is where the issue is. Currently, if a Part is in a Customer Price List with a Unit Price and also in a Customer Discount Price List by Product group, the Group discount percentage is assigned to the Unit Price in the Customer Price List. We don’t want to apply any additional discounts to a Part that has been assigned a Unit Price from a Customer Price List.

I can make it work by making the Customer Price Lists Type “Both” with the Part lines of Type “Discount” and putting them all in as Customer Discount Price Lists, but I have to calculate the discount based on the current Base Price to come to the Unit Price. This is a maintenance disaster, but it does work because the Hierarchy of Discount Price Lists stops at the first Price List with a match. I am trying to find a way to get the process to stop when a match is found at the Customer Price List and not continue on to apply Discounts from the Customer Discount Price Lists as it did at one point.

Confused yet?

Customer Price List Type of Unit Price contains Table of Parts with Unit Price. (Used to be a part of the hierarchy of price lists, but is no longer)

Customer Discount Price Lists Type of “Discount” with Percentage discounts off of “Base Price” by Product Group. (Still in Hierarchy)

Part Table contains “Base Price” (Still in Hierarchy)

Part 301B Product group Blends Base Price 7.00.

Part 244P Product Group Parts Base Price 11.00

Part 144 Product Group of Inserts Base Price 2.00

Customer A has Customer Price List with 301B having Unit Price of 2.20 and Customer Discount price lists of 30% off on Blends and 20% off on Parts.

Customer A orders 301B, 244P, and 144.

Part Selling Price

301B 2.20 Is in Customer Price List and in Customer Discount Price List. Only Customer Price List should be applied (first price list)

244P 8.80 Is not in Customer Price List but is in Customer Discount Price List by Product Group

144 2.00 Is not in either Customer Price List or Customer Discount Price List by Product Group

Thanks, Zane

Sorry, that is rather difficult to read as the formatting did not carry over.

I did some tests. I believe you are right that there’s a bug, but for the wrong reasons.

First, my philosophy would be (or I expected it to be):

  1. Do not use part table for pricing
  2. Make a “base price” price list and assign it to all customers always
    a. This goes in Customer Maintenance > Billing > Price Lists
    b. Or, to simplify it, just assign it to customer groups instead (Price Lists tab)
    c. Point is, you can make them expire and still retain the old data - you can’t do that with the part table
  3. Then assign discount lists in a hierarchy
    a. This goes in Customer Maintenance > Billing > Discount Price Lists
    b. Part discounts at the top
    c. Product group percentage discounts on the next row

In reality, we don’t do #3 where I work - it’s a flat percent. But I’m saying if we did it your way (which is perfectly reasonable).

But I tried this, and it only half worked.

I made part 10017 have

  • Base price list (“unit” type) = $10.00 each
  • Discount PART list = $6.49 each
  • Discount PRODUCT GROUP list = 25% off

I assigned the base list as the customer’s “price list” and the others as their “discount price lists.”

image

image

I used Price List Inquiry and entered the following:

And it came up with $10 each, not 6.49 as I expected and wanted:

But when I look at its logic, it’s right: $10 base…

…And $6.49 discount price (and no prod grp discount):

So why won’t it use the $6.49?

Jason,

I think you are seeing the same thing I did. If the Discount Price List is using a Unit Price, the system sees the part in the price list, but is only looking at the Discount Percentage field for a value. Since the Unit Price field is populated, it stops at that point, but does not pick up the Unit Price value. I think this is a bug if Unit Price is an option in the Discount Price List, but the system does not look at it. If you change your Discount Part List for Part 10017 to Discount percent and put the Percentage value needed to calculate out to a unit price of 6.49 in the Percentage field, I suspect it will work correctly.

In your last screen shot. I don’t believe the system is looking at the Parts record or even the Unit Price field if the Price Breaks record is populated. If you populate the Price Breaks record with a quantity of 1 and a Discount Pct needed to calculate to 6.49, it will use that calculation and stop there. Any of the other options, the system sees the record, but is not picking up any values so no discount is applied.

Right.

And I tried in 2022.2 also and still get the same effect.

Just to give a picture to this, the $6.49 is here, in a discount-type price list, as the “Base Unit Price” of the part.

Whereas what I consider to be the base price of $10.00 is here, in a unit-type list:

So, yeah, how are you supposed to have hierarchical discounts unless they are all percents?

PS, this is not true. It does apply discounts. But only percentages.

I do like the idea of using a Base Price Price list that can be outdated rather than the Part Table pricing.

1 Like