Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Tarif par quantité et réinitialisation de la remise 2 après changement de la quantité

0000003437     -      15/02/2026

Les tarifs par quantité sont activés et un article est défini avec plusieurs seuils de quantité. La colonne remise 2 est en place. Dans un document de vente, j'encode une ligne article avec une certaine quantité. Je saisis aussi "manuellement" une remise 2. Lorsque je modifie ultérieurement la quantité, en restant dans le même palier ou non, la remise 2 repasse d'office à 0.
Comment préserver la remise 2 dans ce scénario ?


Lors d'un changement de quantité dans une vente, alors que les tarifs par quantité sont activés, Mercator recalcule de façon complète le prix de vente ainsi que toutes les remises. Une remise 2 pourrait, par exemple, être trouvée dans "Outils / Remises" (BAREMES). Le comportant décrit est donc souhaité et correct. Si on souhaite y déroger, il suffit de mettre en place ce customizer simple.

💡 Notez la présence du test if (e.FromChangeQ) qui permet de n'appliquer le code que si l'appel du recalcul est effectué depuis un changement de quantité en situation de tarif par quantité.

Zoom
// <CompileWithRoslyn />

namespace Billing
{
    public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
    {

        public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
        {
            billingEngine.BeforeApplyPricingInfo += BillingEngine_BeforeApplyPricingInfo;
            billingEngine.AfterApplyPricingInfo += BillingEngine_AfterApplyPricingInfo;
        }

        public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
        {
            billingEngine.BeforeApplyPricingInfo -= BillingEngine_BeforeApplyPricingInfo;
            billingEngine.AfterApplyPricingInfo -= BillingEngine_AfterApplyPricingInfo;
        }

        private (string dl_id, double remise2) tupple;

        private void BillingEngine_BeforeApplyPricingInfo(object sender, MercatorUi.Engine.Gescom.BillingEngine.BeforeApplyPricingInfoEventArgs e)
        {
            if (e.FromChangeQ)
                tupple = (e.LignesVRecord.DL_ID, e.LignesVRecord.REMISE2);
        }

        private void BillingEngine_AfterApplyPricingInfo(object sender, MercatorUi.Engine.Gescom.BillingEngine.AfterApplyPricingInfoEventArgs e)
        {
            if (e.FromChangeQ && (tupple.dl_id == e.LignesVRecord.DL_ID))
                e.LignesVRecord.REMISE2 = tupple.remise2;
        }
    }
}


Cookies fonctionnels : Cookies nécessaires à l'utilisation du site et cookies de préférence. Ils ne contiennent aucune donnée à caractère personnel. (En savoir plus)

Cookies statistiques : Captation de statistiques liées aux comportements des internautes. (En savoir plus)

Cookies marketing : Pour effectuer le suivi des visiteurs au travers des sites web, à des fins publicitaires. (En savoir plus)