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.
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();
}
}
}