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

Lors de l'encodage des écritures d'achats, disposer de dix comptes par défaut associés au fournisseur

0000002135     -      15/01/2025

Cette programmation requiert l'ajout de 10 zones permettant de saisir des comptes par défaut associés à chaque fournisseur. Ensuite, dans une écriture comptable d'achat, si l'utilisateur tape 0 (zéro) + enter dans la colonne du compte, la liste de ces comptes par défaut lui sera présentée.

Pour implémenter ce paramétrage, il faut tout d'abord ajouter les champs F_ID_GEN0 à F_ID_GEN9 de type char(10) dans la table FOU. Il est possible d'ajouter un nombre plus limités de champs. Ces champs correspondent à des liaisons croisées entre signalétiques.

alter table FOU add F_ID_GEN0 char(10) not null default '', 
F_ID_GEN1 char(10) not null default '',
F_ID_GEN2 char(10) not null default '',
F_ID_GEN3 char(10) not null default '',
F_ID_GEN4 char(10) not null default '',
F_ID_GEN5 char(10) not null default '',
F_ID_GEN6 char(10) not null default '',
F_ID_GEN7 char(10) not null default '',
F_ID_GEN8 char(10) not null default '',
F_ID_GEN9 char(10) not null default ''

Ensuite, via le paramétrage de signalétique, il convient d'ajouter des textboxes associées à ces champs. (Cfr. "Outils / Ecrans Signalétiques / Paramétrage / Fournisseurs")

Ces textboxes permettront à l'utilisateur de saisir dans la fiche de chaque fournisseur jusqu'à 10 comptes généraux. Cette saisie sera validée par Mercator (impossible de saisir un compte inexistant).

Ensuite, il faut placer ce code qui utilise l'interface MercatorUi.ICustomizers.ISigCreated dans un customizer SigGen. Ce customizer utilise l'évènement BeforeSearch.

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
using System.Windows.Forms;
// <CompileWithRoslyn />

namespace SigGen
{
    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)
        {
            Form form = Globals.Main.WonTopForm();
            if ((form == null) || !(form is MercatorUi.Forms.Booking.BookingForm bookingForm)) // on n'est pas dans un écran d'écriture comptable
                return;
            if (bookingForm.BookingEngine == null) // on est dans une écriture comptable mais en mode paramétrage
                return;
            if (bookingForm.BookingEngine.Type != 2) // on n'est pas dans une écriture d'achat
                return;
            if (e.Key != "0") // l'utilisateur n'a pas saisi 0 : donc il veut une recherche normale
                return;
            if (bookingForm.BookingEngine.PiedsCRecord.SUPPLIER == "") // le fournisseur n'est pas sélectionné
                return;
            
            StringBuilder sb = new StringBuilder();
            bool premier_fait = false;
            // on prend en compte le champ f_comptea du fournisseur en cours
            if (bookingForm.BookingEngine.FouRecord.F_COMPTEA != "")
            {
                sb.AppendFormat("(g_id='{0}')", bookingForm.BookingEngine.FouRecord.F_COMPTEA);
                premier_fait = true;
            }
            // on prend en compte les champs f_id_gen0 à f_id_gen9 du fournisseur en cours
            for (int i_gen = 0; i_gen <= 9; i_gen++)
            {
                if (bookingForm.BookingEngine.FOU.Table.Columns.Contains("f_id_gen" + i_gen) && (bookingForm.BookingEngine.FOU["f_id_gen" + i_gen].ToString() != ""))
                {
                    if (premier_fait)
                        sb.Append(" or ");
                    sb.AppendFormat("(g_id='{0}')", bookingForm.BookingEngine.FOU["f_id_gen" + i_gen]);
                    premier_fait = true;
                }
            }
            e.DesiredWhereClause = sb.ToString();
        } 
    }
}