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

0000002135     -      30/10/2013

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 C(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.

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.Drawing;
using System.Windows.Forms;

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

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

        void Sig_BeforeSearch(object sender, MercatorUi.Sig.SigClasses.BeforeSearchEventArgs e)
        {
            Form form = MercatorUi.Globals.Main.WonTopForm();
            if ((form == null) || !(form is MercatorUi.Forms.Booking.BookingForm)) // on n'est pas dans un écran d'écriture comptable
                return;
            MercatorUi.Forms.Booking.BookingForm bookingForm = (MercatorUi.Forms.Booking.BookingForm)form;
            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.PIEDS_C["supplier"].ToString().TrimEnd() == "") // 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.FOU["f_comptea"].ToString() != "")
            {
                sb.AppendFormat("(g_id='{0}')", bookingForm.BookingEngine.FOU["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.ToString()) && (bookingForm.BookingEngine.FOU["f_id_gen" + i_gen.ToString()].ToString() != ""))
                {
                    if (premier_fait)
                        sb.Append(" or ");
                    sb.AppendFormat("(g_id='{0}')", bookingForm.BookingEngine.FOU["f_id_gen" + i_gen.ToString()]);
                    premier_fait = true;
                }
            }
            e.DesiredWhereClause = sb.ToString();
        }

        
    }
}