Lors de l'import d'une facture Peppol en gestion commerciale identifier les articles sur base de n'importe quelle information du nœud cac:InvoiceLine

0000003406     -      14/12/2025

Lors de l'import de factures Peppol en gestion commerciale, il est possible de modifier la requête SQL qui permet d'identifier les articles se trouvant dans cette facture. Cela se fait via un customizer Gescom qui implémente IStringUpdater. L'id de la requête à modifier est EINVOICE_IMPORT_ITEM. Elle reçoit ces paramètres : @cle1@cle2@cle3@modele@f_id et @c_id. Ces deux derniers peuvent être à blanc si le fournisseur (ou le client en cas de self-billing) n'a pas être identifié préalablement.

Elle reçoit aussi le paramètre @InvoiceLineXml dont le type SQL est XML. Il correspond au nœud XMLcac:InvoiceLine pour lequel Mercator tente de reconnaître l'article.

Le code ci-dessous montre comment populer un paramètre SQL @name avec la valeur de cac:InvoiceLine/cac:Item/cbc:Name.

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

namespace Gescom
{
    public class Customizer : MercatorUi.ICustomizers.IStringUpdater
    {
        public string StringUpdate(string stringToModify)
        {
            string id = Api.StrExtract(stringToModify, "<ID>", "</ID>");
            if (id == "EINVOICE_IMPORT_ITEM")
            {
                stringToModify = stringToModify.Replace("/*search on s_modele*/",
                    @"declare @name varchar(100)
                    select @name = @InvoiceLineXml.value(
                        'declare namespace cac=""urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"";
                        declare namespace cbc=""urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"";
                        (/cac:InvoiceLine/cac:Item/cbc:Name/text())[1]', 'varchar(100)')

                    if (@name is not null) and exists (select * from STOCK (NOLOCK) where s_cle1=@name)
                    begin
                        select top 1 * from STOCK (NOLOCK) where s_cle1=@name
                        return
                    end

                    /*search on s_modele*/".UnIndent(5));
            }
            return stringToModify;
        }
    }
}

 

✅ Même si le fichier reçu n'utilise pas les namespaces habituels (cac: et cbc:), ce code reste valide car ces namespaces sont correctement définis dans la requête XQuery.



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)