Met deze programmering kan u bij het ingeven van een boeking van een verkoop of aankoop in de boekhouding de lijst raadplegen van de voorgaande algemene rekeningen die gebruikt werden voor deze klant/leverancier. De gebruiker kan voortaan de rekening selecteren in het weergegeven dialoogvenster. De functie wordt geactiveerd door op de toets = in de kolom van de algemene rekening te drukken.
De code is gebaseerd op een customizer SigGen die de interface MercatorUi.ICustomizers.ISigCreated implementeert en gebruik maakt van het event BeforeSearch van de klasse MercatorUi.Sig.Sig.
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
using System.Windows.Forms;
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 = MercatorUi.Globals.Main.WonTopForm();
if ((form == null) || !(form is MercatorUi.Forms.Booking.BookingForm)) // u bevindt zich niet in een boekhoudkundig boekingsscherm
return;
MercatorUi.Forms.Booking.BookingForm bookingForm = (MercatorUi.Forms.Booking.BookingForm)form;
if (bookingForm.BookingEngine == null) // u bevindt zich in een boeking in de boekhouding maar in configuratiemodus
return;
if ((bookingForm.BookingEngine.Type != 1) && (bookingForm.BookingEngine.Type != 2)) // u bevindt zich niet in een aan- of verkoopboeking
return;
if (e.Key != "=") // de gebruiker heeft geen = ingegeven: hij wil dus een gewone zoekopdracht
return;
if ((bookingForm.BookingEngine.Type == 1) && bookingForm.BookingEngine.CLI == null) // de leverancier werd niet geselecteerd
return;
if ((bookingForm.BookingEngine.Type == 2) && bookingForm.BookingEngine.FOU == null) // de leverancier werd niet geselecteerd
return;
string reqSql = string.Format("create table #id_gen_tmp (id_gen char(10)) \r\n"
+ "insert into #id_gen_tmp \r\n"
+ " exec {0}.dbo.SP_GET_LAST_BOOKINGS @id_tiers,@type_doc \r\n"
+ "select rtrim(g_id)+' '+g_nom as nom,g_id as id from #id_gen_tmp inner join gen on (id_gen COLLATE DATABASE_DEFAULT=g_id COLLATE DATABASE_DEFAULT) \r\n"
+ "drop table #id_gen_tmp \r\n"
, MercatorUi.Globals.DatabaseName);
MercatorUi.Sig.Sig sigGen = MercatorUi.Sig._SigsStatic.SigByModule(MercatorUi.Sig._SigEnum.GEN);
string langue = Globals.Langue.ToString();
if ((langue != Globals.Params["LANGUE_DEF"]) && sigGen.FieldList.ContainsKey("G_NOM" + langue))
reqSql = reqSql.Replace("g_nom", string.Format("(case when g_nom{0} = '' then g_nom else g_nom{0} end)", langue.ToLower()));
DataSet ds = Api.Zselect(MercatorUi.Globals.RepData, reqSql
, new MercatorSqlParam("@id_tiers", (bookingForm.BookingEngine.Type == 1 ? bookingForm.BookingEngine.CliRecord.C_ID : bookingForm.BookingEngine.FouRecord.F_ID), SqlDbType.Char)
, new MercatorSqlParam("@type_doc", bookingForm.BookingEngine.Type));
if (ds == null) // deze SQL-opdracht veroorzaakte een fout -> de normale zoekopdracht wordt verder uitgevoerd
return;
if (ds.Tables[0].Rows.Count == 0) // geen lijn gevonden -> de normale zoekopdracht wordt verder uitgevoerd
return;
Api.TrimEndDataTable(ds.Tables[0]);
string id_gen_selected = MercatorUi.Dialogs.AskList(MercatorUi._Divers.Iif_langue(MercatorUi.Globals.Langue, "Previous bookings :", "Vorige boekingen :", "Imputations précédentes :"), "", ds.Tables[0]);
if (string.IsNullOrEmpty(id_gen_selected)) // u koos 'Annuleren' -> de normale zoekopdracht wordt verder uitgevoerd
return;
e.DesiredWhereClause = string.Format("g_id='{0}'", id_gen_selected);
}
}
}