In een boekhoudkundig document: de opslag verhinderen als een bepaalde rekening niet wordt gebruikt

0000002036     -      26-08-2017

Deze programmering laat zien hoe u tussenkomt in de opslagprocedure van een boekhoudkundig document. Ze laat gewoon toe om de opslag te blokkeren indien het document geen enkele boeking op de rekening 499000 omvat. Deze customizer wordt gecreëerd voor het voorbeeld en kan als vertrekpunt dienen voor meer ambitieuze programmeringen.

De code moet worden ingevoerd in een Booking-customizer gecreëerd op basis van de overeenstemmende boekhoudsequentie. Deze implementeert de volgende interfaces:

Hierbij wordt hoofdzakelijk het event BeforeSave van de BookingEngine van het actieve document gebruikt. Dit event laat toe om de voortzetting van de procedure te annuleren.

De code ziet er als volgt uit:

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using MercatorApi;
using MercatorUi;
using System.Linq;
using MercatorExtensions;

namespace Booking
{
    public class Customizer : MercatorUi.ICustomizers.IBookingEngineCreated, MercatorUi.ICustomizers.IBookingEngineClosed
    {

        public void BookingEngineCreated(MercatorUi.Engine.Cpta.BookingEngine BookingEngine)
        {
            BookingEngine.BeforeSave += BookingEngine_BeforeSave;
        }

        public void BookingEngineClosed(MercatorUi.Engine.Cpta.BookingEngine BookingEngine)
        {
            BookingEngine.BeforeSave -= BookingEngine_BeforeSave;
        }

        void BookingEngine_BeforeSave(object sender, MercatorUi.Engine.Cpta.BookingEngine.BeforeSaveEventArgs e)
        {
            MercatorUi.Engine.Cpta.BookingEngine bookingEngine = (MercatorUi.Engine.Cpta.BookingEngine)sender;
            // We controleren of minstens één lijn de rekening 499000 en een bedrag verschillend van nul omvat.
            if (bookingEngine.LignesCRecords.Where(l => (l.COMPTE == "499000") && (l.TOT_DV.CompareTo(0d, bookingEngine.PiedsCRecord.N_DEC) != 0)).Count() == 0)
            {
                Dialogs.Stop("Cette écriture ne contient aucune imputation sur le compte 499000 !");
                e.CancelSave = true; // Deze flag laat Mercator weten dat men de opslag van het document weigert.
            }
        }
    }
}