Considérations à propos de l'import d'eInvoices en gestion commerciale

0000003295     -      20/11/2025

En gestion commerciale, une facture fournisseur est un aboutissement d'un flux de documents commençant par le réapprovisionnement, une ou plusieurs commandes, ainsi qu'une ou plusieurs livraisons. Les processus habituels de Mercator fonctionnent par augmentation de statut d'un document vers un niveau supérieur. La réception d'une eInvoice, donc un facture, document final par essence, qui tend à se substituer comme aboutissement de cette chaîne de documents transformés vient en fait briser ce concept.

👉 Mercator y répond de différentes manières.

1. Transformation de commandes ou livraisons préalables

Lors de l'import d'une eInvoice, Mercator présente la liste des commandes et de livraisons associées au fournisseur lié à cette facture.

Cela permet de sélectionner soit des livraisons, soit des commandes. Elle seront "augmentées" vers le niveau facture, leurs lignes seront ensuite supprimées et la facture contiendra les lignes importées depuis l'eInvoice. Le mécanisme de gestion des reliquats (back-orders) fera alors son office afin de déterminer les lignes qui demeurent éventuellement dans les documents d'origine.

Voir aussi : Ajouter des colonnes dans les documents précédents

 

2. Transformation de commandes ou livraisons préalables avec mode "comparaison"

L'inconvénient du mécanisme décrit ci-dessus est que certaines informations présentes dans les commandes / livraisons, et non disponibles dans l'eInvoice sont perdues et devraient donc être saisies à nouveau. Cela peut être le cas pour les lots, les numéros de série, les emplacements, …

Mercator permet ici d'utiliser le mode "comparaison" sous cette forme :

  • les commandes / livraisons sont augmentées de façon habituelle, et demeurent dans les lignes de la facture en cours d'édition.
  • le contenu de l'eInvoice est placé dans l'écran de comparaison.

Ce mode est activé en choisissant une valeur dans ce déroulant, qui n'est actif que si une ou plusieurs commandes / livraisons ont été sélectionnées :

eInvoice_comparaison

Les modes disponibles sont documentés sur cette page.

Le traitement peut alors se poursuivre en utilisant les fonctionnalités de comparaison de Mercator.

 

3. Importer en ignorant les articles présents dans le fichier XML

Ce déroulant présente aussi un élément "Ignorer les articles dans le message". Ce mode est utilisable si une ou plusieurs commandes ou livraisons ont été sélectionnées. Dans ce cas, la facture générée sera strictement le résultat de leur augmentation de statut. L'onglet "Articles" est désactivé. Aucune reconnaissance d'articles trouvés dans le fichier XML ne sera effectuée et aucun article manquant ne devra être crée. 

 

4. Importation de l'eInvoice dans un brouillon

Si ces mécanismes standards ne conviennent pas, il est alors possible de mettre en place un système personnalisé, basé sur une augmentation par code custom des différents documents antérieurs. Afin de disposer d'un point de départ stable, Mercator suggère d'importer l'eInvoice dans un brouillon. Ainsi, l'eInvoice est déjà disponible sous la forme d'un contenu au format Mercator, auquel il est possible de donner suite plus facilement.

Lorsque l'importation se fait dans un brouillon, la sélection de documents antérieurs ainsi que le mode "comparaison" sont désactivés.


Actions possibles par code sur cette boîte de dialogue

La boîte de dialogue évoquée ici est de type MercatorUi.Forms.Gescom.GescomDialogs.GescomAskEinvoiceImport. Elle dispose de deux événements spécifiques :

  • BeforeButtonOkClick : dès que l'on clique sur le bouton OK
  • AfterButtonOkClick : juste avant que la fenêtre ne se ferme après avoir cliqué sur le bouton OK

Ces deux événements permettent d'interrompre le processus avec e.Cancel = true;

Le second permet en plus de passer e.DialogResult = System.Windows.Forms.DialogResult.Cancel pour annuler le processus et fermer la fenêtre.

 

Exemple de code : contrôler le journal de destination

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

// <CompileWithRoslyn />

namespace Gescom
{
    public class Customizer : MercatorUi.ICustomizers.IDialogLoadCustomizer, MercatorUi.ICustomizers.IDialogClosedCustomizer
    {
        public void DialogLoadCustomize(Form form)
        {
            if (form is MercatorUi.Forms.Gescom.GescomDialogs.GescomAskEinvoiceImport gescomAskEinvoiceImport)
            {
                gescomAskEinvoiceImport.BeforeButtonOkClick += GescomAskEinvoiceImport_BeforeButtonOkClick;
            }
        }

        public void DialogClosedCustomize(Form form)
        {
            if (form is MercatorUi.Forms.Gescom.GescomDialogs.GescomAskEinvoiceImport gescomAskEinvoiceImport)
            {
                gescomAskEinvoiceImport.BeforeButtonOkClick -= GescomAskEinvoiceImport_BeforeButtonOkClick;
            }
        }

        private void GescomAskEinvoiceImport_BeforeButtonOkClick(object sender, System.ComponentModel.CancelEventArgs e)
        {
            MercatorUi.Forms.Gescom.GescomDialogs.GescomAskEinvoiceImport gescomAskEinvoiceImport = (MercatorUi.Forms.Gescom.GescomDialogs.GescomAskEinvoiceImport)sender;
            if (gescomAskEinvoiceImport.Sequenc.SelectedValue.ToString() == "FactF")
            {
                Dialogs.Stop("Ce journal n'est pas autorisé !");
                e.Cancel = true;
                return;
            }
        }
    }
}

 

Exemple de code : si une ou plusieurs commandes / livraisons sont cochées, forcer le mode "comparaison"

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

// <CompileWithRoslyn />

namespace Gescom
{
    public class Customizer : MercatorUi.ICustomizers.IDialogLoadCustomizer, MercatorUi.ICustomizers.IDialogClosedCustomizer
    {
        public void DialogLoadCustomize(Form form)
        {
            if (form is MercatorUi.Forms.Gescom.GescomDialogs.GescomAskEinvoiceImport gescomAskEinvoiceImport)
            {
                gescomAskEinvoiceImport.BeforeButtonOkClick += GescomAskEinvoiceImport_BeforeButtonOkClick;
            }
        }

        public void DialogClosedCustomize(Form form)
        {
            if (form is MercatorUi.Forms.Gescom.GescomDialogs.GescomAskEinvoiceImport gescomAskEinvoiceImport)
            {
                gescomAskEinvoiceImport.BeforeButtonOkClick -= GescomAskEinvoiceImport_BeforeButtonOkClick;
            }
        }

        private void GescomAskEinvoiceImport_BeforeButtonOkClick(object sender, System.ComponentModel.CancelEventArgs e)
        {
            MercatorUi.Forms.Gescom.GescomDialogs.GescomAskEinvoiceImport gescomAskEinvoiceImport = (MercatorUi.Forms.Gescom.GescomDialogs.GescomAskEinvoiceImport)sender;
            if (gescomAskEinvoiceImport.ComboBoxCompareMode.Enabled)
                gescomAskEinvoiceImport.ComboBoxCompareMode.SelectedIndex = 1;
        }
    }
}


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)