Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Dans une écriture comptable, empêcher la sauvegarde si un compte particulier n'est pas utilisé

0000002036     -      26/08/2017

Cette programmation montre comment intervenir sur le processus de sauvegarde d'une écriture comptable. Elle permet simplement de bloquer cette sauvegarde si l'écriture ne contient aucune imputation sur le compte 499000. Ce customizer est fait pour l'exemple et sera le point de départ de programmations plus ambitieuses.

Le code doit être placé dans un customizer Booking créé à partir de la séquence comptable correspondante. Il implémente les interfaces suivantes :

Il exploite essentiellement l'évènement BeforeSave du BookingEngine de l'écriture en cours. Cet évènement permet une annulation de la poursuite de la procédure.

Le code s'établit comme suit :

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;
            // on vérifie si au moins une ligne contient le compte 499000 et un montant non nul
            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; // ce flag indique à Mercator qu'on refuse la sauvegarde de l'écriture
            }
        }
    }
}