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

Décodage d'un code-barres contenant le prix unitaire

0000002520     -      11/10/2023

Ce code illustre comment utiliser des codes-barres contenant un prix unitaire. L'exemple est donné ici pour un code-barres EAN13 se composant comme suit :

  • 7 caractères : une racine fixe à trouver. Constante fixée dans notre exemple à 1234567
  • 5 caractères : le prix unitaire en euro-cents
  • dernier caractère : check-digit

Si un tel code-barres est détecté, alors l'article dont le S_ID vaut MY_S_ID est placé dans le document en cours au prix unitaire fixé dans le code-barres.

Ce customizer exploite l'évènement BeforeSearch du signalétique des articles ainsi que la capacité qu'a Mercator de pouvoir passer un BeforeSearchEventArgs à la méthode InsertItem du BillingEngine.

Zoom
using MercatorApi;
using MercatorUi;
using System.Drawing;
using System.Windows.Forms;

namespace SigStock
{
    public class Customizer : MercatorUi.ICustomizers.ISigCreated
    {

        public void SigCreated(MercatorUi.Sig.Sig Sig)
        {
            Sig.BeforeSearch += Sig_BeforeSearch;
        }

        void Sig_BeforeSearch(object sender, MercatorUi.Sig.SigClasses.BeforeSearchEventArgs e)
        {
            if ((e.FormContext == null) || !(e.FormContext is MercatorUi.Forms.Billing.BillingForm) || (((MercatorUi.Forms.Billing.BillingForm)e.FormContext).BillingEngine.TypeVA != MercatorUi.Engine.Gescom.Billing.TypeVAEnum.V)) // on n'est pas dans un document de vente
                return;
            if (e.OriginalKey.Length != 13) // cette clé n'est certainement pas un EAN13
                return;
            if (!e.OriginalKey.StartsWith("1234567")) // la clé de recherche ne commence pas par 1234567
                return;
            double cents;
            if (!double.TryParse(e.OriginalKey.Substring(7, 5), out cents)) // le prix attendu à partir du caractère n° 8 n'est pas sous forme numérique
                return;
            e.DesiredWhereClause = "(s_id='MY_S_ID')";
            e.ForcedPricingInfosV = new MercatorUi.Engine.Gescom.BillingEngine.PricingInfosV();
            e.ForcedPricingInfosV.Prix = cents / 100;
        }
    }
}