function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Katir DriavalKatir Driaval 

Validation rule on OpportunityLineItem (opportunity product)

On a visualforce page, I am creating an opportunity and I am adding an OpportunityLineItem (opportunity product) to it.

The product2 linked to the opportunity product has a field called Maximum_Discount_in_percent_EUR__c, which is a percent field and specify the maximun discount possible.

When adding the opportunity product on the visualforce page, you can enter a discount in % (standard Discount field) or a net price (Net_Price_Discount__c). There is a validation rule preventing you for entering both.

The opportunity product has a validation rule checking if the discount is not superior to the authorized discount.
Here is the rule's formula:

    AND(
    NOT($User.ByPass_VR__c),
    OR(
    AND(
    Product2.Maximum_Discount_in_percent_EUR__c <> 0,
    IF(ISBLANK(Discount) || ISNULL(Discount),
    (ListPrice - (Product2.Maximum_Discount_in_percent_EUR__c * ListPrice)) >= Net_Price_Discount__c,
    Product2.Maximum_Discount_in_percent_EUR__c < Discount))
    )
    )

I have tested the NOT($User.ByPass_VR__c) line, and it is not giving me any problems.

When I enter a discount in the Discount field superior the authorized one, the validation rule worked fine and I get my error message.
But when I enter e net price in Net_Price_Discount__c inferior to the authorized one, then it doesn't work and I can save the opportunity product.

Is the problem in my formula or can it be somewhere else?
Thank you for your help
Best Answer chosen by Katir Driaval
Katir DriavalKatir Driaval
I actually find a solution to my problem.

I made a new  separated validation rule. Because there is already a validation rule preventing you for entering a discount i percent and a net price, I don't need to check if the Discount field is blank or null.
Here is the validation rules formula:

    AND(
    NOT($User.ByPass_VR__c),
    OR(
    AND(
    Product2.Maximum_Discount_in_percent_NOK__c <> 0,
    (PricebookEntry.UnitPrice - (Product2.Maximum_Discount_in_percent_NOK__c * PricebookEntry.UnitPrice)) > Net_Price_Discount__c)
    )
    )

A good old divide and conquer solution ;-)