Dans les documents de la gestion commerciale avec lignes, les transferts de dépôts et les inventaires, décoder un code-barres

0000003004     -      15/01/2021

MercatorPenguin et MercatorPenguinServer 2.9.5 ou ultérieurs permettent d'effectuer un prétraitement sur toutes les clés de recherche effectuée depuis un EditEntry permettant une recherche dans un signalétique. Ceci s'effectue via un customizer de signalétique lié au signalétique de recherche. (Par exemple, pour une recherche articles, SigStock). Il faut utiliser pour cela l'événement PenguinServerDecodingSearchKey, qui est levé en amont de la recherche. Il permet notamment de changer la clé de recherche passée. Cette nouvelle valeur sera utilisée en aval par l'algorithme de recherche comme si l'utilisateur avait saisi directement cette clé.

L'eventArgs de cet événement dispose de ces propriétés :

  • Key : la clé de recherche. Cette propriété est modifiable.
  • Context : une information permettant d'identifier le contexte de la recherche 
    • Pour une vente : <BillingV><Id>...</Id><Journal>...</Journal><Piece>...</Piece><Type>...</Type><IdUser>...</IdUser></BillingV>
    • Pour un achat : <BillingA><Id>...</Id><Journal>...</Journal><Piece>...</Piece><Type>...</Type><IdUser>...</IdUser></BillingA>
    • Pour un transfert de dépôt : <Transfer><Id>...</Id><Piece>...</Piece><Type>...</Type><IdUser>...</IdUser></Transfer>
    • Pour un inventaire : <Inventory><Id>...</Id><Piece>...</Piece><Type>...</Type><IdUser>...</IdUser></Inventory>
    • Dans tous les autres cas : Other
  • BillingEngine : uniquement pour les ventes et les achats. Null dans les autres cas.
  • DecimalChar : le séparateur de décimales dans l'application mobile.
  • ExtraInfo : un Dictionnary<string, object> permettant de renvoyer des informations dans la ligne en cours. La clé doit correspondre à une colonne de la table des lignes. L'information passée ici est toujours prioritaire par rapport à celle que MercatorPenguinServer aurait déterminée par défaut. (Le système lève une exception si on tente de modifier par ce biais une colonne non autorisée.)

Ceci requiert une version 10.8.81 ou ultérieure de MercatorUi.dll.


L'exemple de customizer ci-dessous montre comment splitter un code-barres structuré comme suit :

  • le code de l'article (ou une clé de recherche permettant de trouver cet article)
  • @ utilisé comme séparateur
  • le prix unitaire de l'article
Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;
using MercatorExtensions;
using MercatorUi;
using MercatorDatabase;

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

        public void SigCreated(MercatorUi.Sig.Sig Sig)
        {
            Sig.PenguinServerDecodingSearchKey += Sig_PenguinServerDecodingSearchKey;
        }

        void Sig_PenguinServerDecodingSearchKey(object sender, MercatorUi.Sig.Sig.PenguinServerDecodingSearchKeyEventArgs e)
        {
            if ((e.BillingEngine != null) && (e.BillingEngine.Journal == "Brou") && e.Key.Contains("@") && (e.Key.Split('@').Length == 2))
            {
                e.ExtraInfo.Add("PU", e.Key.Split('@')[1].Replace(".", e.DecimalChar).Replace(",", e.DecimalChar));
                e.Key = e.Key.Split('@')[0];
            }
        }
    }
}