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

MercatorPenguin en tant que terminal portable code-barres

0000003065     -      30/05/2023

MercatorPenguin 2.10 ou ultérieur peut être utilisé en tant que terminal portable code-barres de Mercator (version min. 10.10). Ceci permet donc d'utiliser MercatorPenguin à tous les endroits de Mercator qui proposent le chargement de données depuis un terminal portable.

Ceci permet, comme pour les autres terminaux, soit la saisie d'une liste d'articles, soit la saisie de numéros de série.

Pour activer cette fonctionnalité, il faut indiquer Penguin dans une des trois options "Terminal Portable". (X_GUN, X_GUN2 ou X_GUN3), via "Outils > Options". Il est possible de référencer plusieurs fois ce type de terminal, si on souhaite utiliser des configurations différentes.

Ensuite, il convient de paramétrer cette fonctionnalité via "Outils > Terminal - MercatorPenguin > Paramètres". Cet écran permet de configurer, pour les deux situations (liste d'articles / liste de numéros de série), les deux onglets de MercatorPenguin : encodage et lignes déjà encodées.

Note : il faut entrer au moins une fois dans ce paramétrage et cliquer sur "OK" pour installer le paramétrage par défaut.

Le paramétrage par défaut se présente comme ceci :

     ptpenguin_serie

Il est aussi nécessaire de créer un ou plusieurs bundles de type "Liste" afin de mettre en place un point d'entrée vers les écrans illustrés ci-dessus. Ce bundle doit implémenter un PtEditButton dont les propriétés sont :

<m:PtEditButton Text="@CAPTION" Font="Small" PtId="@ID" PtType="Items" PtNum="2" />
  • PtId : id du jeu de données scannées (voir table PENGUIN_PT, colonne ID). Null ou vide, si on souhaite créer un nouveau jeu de scanning.
  • PtType :
    • Items : pour une liste d'articles
    • Serials : pour une liste de numéros de série
  • PtNum : n° du terminal dans les options. Paramètre optionnel. Valeur par défaut : 1

Le fichier zip ci-dessous contient deux bundles prêts à l'emploi.

 

Concernant les listes d'articles

Si le paramétrage "XAML Tab1 Articles" contient un EditEntry dont la source est ID_ART (paramétrage par défaut)

La validation article est toujours effectuée dans MercatorPenguin, grâce à sa connexion permanente à la base de données via MercatorPenguinServer. En conséquence, lors de l'import d'une liste d'articles, la recherche au travers des différentes clés de recherche n'est plus effectuée dans Mercator Desktop, l'article ayant été définitivement identifié dans MercatorPenguin.

Si la gestion des numéros de série est de niveau 3 et que la recherche articles sur base du n° de série est activée (SEARCH_SER), alors le numéro de série peut être inséré automatiquement dans un document de la gestion commerciale (uniquement). Toutefois, le contrôle quant à la cohérence du dépôt/emplacement par rapport à ce numéro de série ne sera effectué que lors de la sauvegarde dans Mercator.

Si la gestion des lots est active et que la recherche articles sur base du libellé du lot est activée (SEARCH_LOT), alors le numéro de lot peut être inséré automatiquement dans un document de la gestion commerciale (uniquement). Toutefois, le contrôle quant à la cohérence du dépôt/emplacement par rapport à ce lot ne sera effectué que lors de la sauvegarde dans Mercator.

Si on souhaite scanner des codes-barres non validés dans MercatorPenguin (par ex. des SSCC)

Dans ce cas, il faut modifier le paramétrage "XAML Tab1 Articles" afin qu'aucun EditEntry n'ait la source ID_ART. Le contenu de la grid peut être remplacé par ce paramétrage :

<m:EditEntry Source="CLE" HorizontalOptions="FillAndExpand" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="3" />

<Label Text="Q" FontSize="12" VerticalOptions="Center" HorizontalOptions="End" Margin="0,0,5,0" Grid.Column="0" Grid.Row="1" />
<m:EditEntry Source="Q" WidthRequest="120" Decimals="2" Grid.Column="2" Grid.Row="1" DefaultLineValue="1"/>

Dans le "XAML ListViewCell Articles", les labels connectés à @ID_ART et @DESIGNATIO seront remplacés par un label lié à @CLE.

Dans ce cas, l'identification de l'article est exclusivement effectuée dans Mercator, sur base des clés articles et autres critères de recherche habituels pour les terminaux portables.


Possibilités de programmation

La mécanique qui prévaut ici consiste au déplacement d'une DataTable unique entre MercatorPenguin, MercatorPenguinServer et Mercator Desktop.

Par défaut, la structure de cette DataTable est :

  • Pour une liste de articles :
    • CLE : code-barres non validé scanné
    • ID_ART : id de l'article scanné
    • DESIGNATIO : désignation de l'article
    • Q : quantité encodée
    • NUM_SERIE : n° de série : uniquement si gestion des n° de série de niveau 3 et recherche article par n° de série activée (SEARCH_SER)
    • ID_LOT : n° de lot : uniquement si la gestion des lots est active et la recherche articles par libellé du lot activée (SEARCH_LOT)
    • LIB_LOT : libellé du lot : uniquement si la gestion des lots est active et la recherche articles par libellé du lot activée (SEARCH_LOT)
  • Pour une liste de numéros de série :
    • NUM_SERIE : n° de série.

    Cette DataTable peut être modifiée via l'évènement DataTableCreated de la classe MercatorUi.BarcodeTerm.BarcodeTermPTPENGUIN. Cette adaptation de structure permet de transporter des valeurs supplémentaires qui peuvent être récupérées dans un évènement BeforeInsert ou AfterInsert de ce BarcodeTerm.

    Il est aussi possible de mettre en place le mécanisme d'interaction avec l'utilisateur Penguin.

    L'exemple de code ci-dessous montre comment

    1. Ajouter une colonne MYCOL de type chaîne de caractères dans la DataTable de base
    2. Poser une question de confirmation à l'utilisateur.
Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using MercatorApi;
using MercatorUi;
using MercatorExtensions;
using MercatorUi.BarcodeTerm;

// <CompileWithRoslyn />

namespace BarcodeTerm
{
    public class Customizer : MercatorUi.ICustomizers.IBarcodeTermCreated, MercatorUi.ICustomizers.IBarcodeTermClosed
    {
        public void BarcodeTermCreated(MercatorUi.BarcodeTerm.BarcodeTerm barcodeTerm)
        {
            if (barcodeTerm is BarcodeTermPTPENGUIN ptPenguin)
            {
                ptPenguin.DataTableCreated += DataTableCreated;
                ptPenguin.BeforeSave += BeforeSave;
            }
        }

        public void BarcodeTermClosed(MercatorUi.BarcodeTerm.BarcodeTerm barcodeTerm)
        {
            if (barcodeTerm is BarcodeTermPTPENGUIN ptPenguin)
            {
                ptPenguin.DataTableCreated -= DataTableCreated;
                ptPenguin.BeforeSave -= BeforeSave;
            }
        }

        void DataTableCreated(object sender, BarcodeTermPTPENGUIN.DataTableCreatedEventArgs e)
        {
            if (!e.DataTable.Columns.Contains("mycol"))
            {
                e.DataTable.Columns.Add("mycol", typeof(string));
                foreach (DataRow dr in e.DataTable.Rows)
                    dr["mycol"] = "";
            }
        }

        void BeforeSave(object sender, BarcodeTermPTPENGUIN.BeforeSaveEventArgs e)
        {
            BarcodeTermPTPENGUIN ptPenguin = (BarcodeTermPTPENGUIN) sender;
            if (!ptPenguin.PenguinBeforeSaveAnswers.ContainsKey(1))
            {
                e.PenguinQuestion = new MercatorPenguin.Question
                {
                    Id = 1,
                    Text = "Confirmer dans customizer ?",
                    Type = MercatorPenguin.Question.QuestionTypeEnum.YesNo,
                    AbortIfCancel = true
                };
                return;
            }
            ...
        }
    }
}

 

Pour que la colonne MYCOL reçoivent automatiquement des données provenant de l'article scanné, il faut référencer cette colonne supplémentaire dans la propriété ReqSql2ExtraColumns de l'EditEntry dont la source est ID_ART. (voir cette page)

ReqSql2ExtraColumns="stock.s_cle2+stock.s_cle3 as mycol"


A télécharger : 0000003065.zip (29 Kb - 25/01/2022)