Over de 10 laatste boekingsregels beschikken die voor deze klant/leverancier gebruikt worden bij een verkoop- of aankoopboeking

0000002148     -      27-08-2017

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.

Zoom
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);
        }
    }
}