Automatiser l'import en comptabilité d'une eInvoice

0000003289     -      11/04/2025

L'import des factures et notes de crédit provenant de Peppol peut se faire dans l'interface de Mercator. Il est aussi possible d'automatiser totalement le processus. Le processus déclenchant de cet import automatique peut être une tâche en mode console. Dans ce code, il faut utiliser les outils mis à disposition via le PeppolBoxHelper.

La méthode ImportIntoAccounting du MercatorUi.Forms.Other.OtherClasses.PeppolBoxHelper.PeppolMessage est utilisée. Elle attend un paramètre de type ImportFromEinvoiceDescriptor qui contient ces propriétés :

  • bool Silent : à mettre à true pour un import sans interface utilisateur.
  • string Journal : le journal comptable de destination. Obligatoire si Silent vaut true.
  • string IdGen : le compte général à utiliser. Peut-être vide si la fiche du fournisseur contient un compte général par défaut.

La méthode ImportIntoAccounting renvoie un BookingEngine. Ce BookingEngine n'est pas déjà sauvegardé. Il est dès lors aisé d'apporter toutes les modifications souhaitées avant d'appeler sa méthode Save. Le fichier PDF inclus dans le XML sera automatiquement joint à l'écriture par Mercator (dans les fichiers SQL). Le contenu XML sera aussi attaché en tant que fichier XML. Ce qui permet de supprimer le message de la PeppolBox sans inquiétude.

Le code s'établit comme suit :  

Zoom
public void ImportEinvoiceIntoAccounting()
{
    using (MercatorUi.Forms.Other.OtherClasses.PeppolBoxHelper peppolBoxHelper = new MercatorUi.Forms.Other.OtherClasses.PeppolBoxHelper())
    {
        if (peppolBoxHelper.DataTable == null)
        {
            MercatorUi.Globals.MercatorTasksToMain.Log("Erreur lors de l'initialisation du PeppolBoxHelper : " + Api.LastError, isError: true);
            return;
        }

        MercatorUi.Forms.Other.OtherClasses.PeppolBoxHelper.PeppolMessage message = peppolBoxHelper.Messages.FirstOrDefault(m => m.IsInvoiceOrCreditNote); // mettre ici une logique de sélection du message à importer
        if (message == null)
        {
            MercatorUi.Globals.MercatorTasksToMain.Log("Message non trouvé", isError: true);
            return;
        }

        using (MercatorUi.Engine.Cpta.BookingEngine bookingEngine = message.ImportIntoAccounting(new MercatorUi.Forms.Accounting.AccountingClasses.ImportFromEinvoiceDescriptor { Silent = true, Journal = "ACH" }, out string error))
        {
            if (error != null)
            {
                MercatorUi.Globals.MercatorTasksToMain.Log(error, isError: true);
                return;
            }
            bookingEngine.PeppolBoxId = message.Id;


            // ici on peut ajouter dans l'écriture comptable des informations provenant du contenu XML. Par exemple le nom et l'adresse mail du contact
            MercatorPeppol.ReceivedDoc.ParseContentRet parsedContent = message.ReceivedDoc.ParseContent(MercatorUi.Globals.Langue);
            bookingEngine.PiedsCRecord.NOTE1 = parsedContent.XmlSelectNodes("cac:AccountingSupplierParty/cac:Party/cac:Contact/cbc:Name").FirstOrDefault()?.InnerText + " "
                + parsedContent.XmlSelectNodes("cac:AccountingSupplierParty/cac:Party/cac:Contact/cbc:ElectronicMail").FirstOrDefault()?.InnerText;

            if (!bookingEngine.Save())
            {
                MercatorUi.Globals.MercatorTasksToMain.Log("Erreur lors de l'enregistrement du document comptable : " + bookingEngine.LastError, isError: true);
                return;
            }

            if (!message.RemoveFromListAndDb()) // supprimer le message de la PeppolBox
            {
                MercatorUi.Globals.MercatorTasksToMain.Log("Erreur lors de la suppression du message : " + Api.LastError, isError: true);
                return;
            }

            MercatorUi.Globals.MercatorTasksToMain.Log(string.Format("Import terminé {0} {1} correctement", bookingEngine.Journal, bookingEngine.Piece));
        }
    }
}

Lors d'une importation en mode silencieux, le contexte du BookingEngine est ContextEnum.ImportEinvoiceSilent.



Cookies fonctionnels : Cookies nécessaires à l'utilisation du site et cookies de préférence. Ils ne contiennent aucune donnée à caractère personnel. (En savoir plus)

Cookies statistiques : Captation de statistiques liées aux comportements des internautes. (En savoir plus)

Cookies marketing : Pour effectuer le suivi des visiteurs au travers des sites web, à des fins publicitaires. (En savoir plus)