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

Afficher les mouvements précédents dans la recherche articles depuis les documents de la gestion commerciale

0000003021     -      16/11/2021

Mercator 10.9 ou ultérieur permet d'afficher les mouvements précédents dans la recherche articles depuis les documents de la gestion commerciale. Ceci permet de visualiser rapidement, au sein de cette liste de recherche, les dernières ventes par article au client en cours. Mercator ajoute une colonne contenant des sous-cellules correspondants au mouvements précédents.
Par défaut, la date et la quantité sont affichées.

mouvements_precedents

Le même procédé s'applique aux fournisseurs dans les achats.

Pour activer cette fonctionnalité, il faut établir ses paramètres via l'option "Encodage > Recherche articles : mouvements précédents"  (id=LAST_MVTS)

option_last_mvts

Les paramètres sont respectivement :

  • les types de documents à afficher (1 = factures, 12 = factures et livraisons, ...)
  • le nombre de jours à prendre en compte dans le passé, depuis la date du jour
  • le nombre de lignes maximum par article
  • la colonne doit-elle être ajoutée automatiquement ou manuellement
    • via le menu contextuel "Mouvements Précédents"
    • via CTRL-R

 

Au sein de chaque cellule de cette colonne supplémentaire, les lignes sont triées par ordre décroissant de date. Ce tri est figé. Par contre, au niveau de la colonne, les lignes générales sont triables. Le tri est effectué sur base de la date de la première ligne de la cellule. Ainsi, il est aisé, avec un tri décroissant, d'obtenir sur la première ligne le dernier achat.

 

Si on souhaite désactiver cette fonctionnalité pour certains clients (par exemple, le client comptoir), il suffit d'ajouter cette colonne dans la table CLI :

alter table CLI add C_NO_LAST_MVTS bit not null default 0

et d'y associer une case à cocher dans le signalétique des clients. Une fois cette case cochée, le mécanisme sera désactivé.

Le même principe existe pour les achats : une colonne F_NO_LAST_MVTS peut être ajoutée de façon identique dans la table FOU.

 


Le customizer ci-dessous montre comment ajouter une information (par exemple, le prix unitaire) dans la colonne "Mouvements Précédents".

mouvements_precedents2

Il est conçu sous la forme d'un customizer BrowseStock, qui implémente 

  • IStringUpdater pour modifier la requête SQL de sélection de ces données (ID = LAST_MVTS_V ou LAST_MVTS_A)
  • IFormGridCustomizer, qui permet d'inscrire l'event LastMvts, appelé pour chaque DataGridViewRow
    • pour ajouter la sous-colonne supplémentaire dans la colonne LastMvts (la 3ème) - lors du premier appel
    • pour fixer le nouveau contenu de chacune des cellules 
  • IFormClosedCustomizer pour désinscrire l'event LastMvts

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;
using MercatorExtensions;
using MercatorUi;
using MercatorDatabase;
using System.Windows.Forms;
using System.Drawing;

namespace BrowseStock
{
    public class Customizer : MercatorUi.ICustomizers.IStringUpdater, MercatorUi.ICustomizers.IFormGridCustomizer, MercatorUi.ICustomizers.IFormClosedCustomizer
    {

        public string StringUpdate(string stringToModify)
        {
            string id = Api.StrExtract(stringToModify, "<ID>", "</ID>");
            if (id.StartsWith("LAST_MVTS_"))
                stringToModify = stringToModify.Replace(", date", ", date, pu").Replace(", p.date", ", p.date, l.pu");
            return stringToModify;
        }

        public void FormGridCustomize(Form form)
        {
            MercatorUi.Forms.Sig.SigBrowseForm sigBrowseForm = (MercatorUi.Forms.Sig.SigBrowseForm)form;
            sigBrowseForm.LastMvts += sigBrowseForm_LastMvts;
        }

        void sigBrowseForm_LastMvts(object sender, MercatorUi.Forms.Sig.SigBrowseForm.LastMvtsEventArgs e)
        {
            MercatorUi.Forms.Sig.SigBrowseForm sigBrowseForm = (MercatorUi.Forms.Sig.SigBrowseForm)sender;
            MercatorUi.GridPro.DataGridViewMultiColsRowsColumn colLastMvts = (MercatorUi.GridPro.DataGridViewMultiColsRowsColumn)sigBrowseForm.dataGridView.Columns["LastMvts"];
            // ajouter la sous-colonne supplémentaire dans la colonne LastMvts
            if (colLastMvts.Columns.Count == 2)
                colLastMvts.Columns.Add(new MercatorUi.GridPro.DataGridViewMultiColsRowsColumn.Column(StringAlignment.Far, 60));

            e.RowInList["LastMvts"] = string.Join("\n", e.RowsLastMvts.Select(p =>
                Convert.ToDateTime(p["date"]).ToShortDateString()
                    + "\t" + Api.Transform(Convert.ToDouble(p["q"]), Globals.PictQ)
                    + "\t" + Api.Transform(Convert.ToDouble(p["pu"]), "### ##0.00")
                ));
        }

        public void FormClosedCustomize(Form form)
        {
            MercatorUi.Forms.Sig.SigBrowseForm sigBrowseForm = (MercatorUi.Forms.Sig.SigBrowseForm)form;
            sigBrowseForm.LastMvts -= sigBrowseForm_LastMvts;
        }
    }
}