La requête Calcul de Facturation
Le calcul de facturation peut être lancé :
automatiquement lors de la validation des expéditions si la méthode de facturation définie sur le client rattaché à l’événement logistique est « 1 » (Facturation / BL expédié automatiquement)
manuellement depuis la liste des factures à valider
manuellement depuis la liste des sociétés comptables
manuellement à partir de la liste des traitements non paramétrés (traitement FAC-CAL) de l’explorateur applicatif « Exploitation »
répétitivement en utilisant un traitement paramétré sur le traitement FAC-CAL
Le calcul de facturation est basé sur une requête de type REB de sous-type FAC ; c’est-à-dire qui utilise au moins une des listes liées aux factures (WfCDFaEn, WfCDFaLi, WfCDFaDe).
Le calcul de facturation doit aller rechercher les informations commerciales (lignes de commandes, quantités, prix…) afin de mettre à jour les listes standards qui décriront le contenu des factures et leur mode de gestion.
Comment structurer une requête de calcul de facturation ?
La requête de calcul de facturation peut se décomposer en 3 grandes phases :
Rechercher les entités a facturer ( Lignes commandes expédiées , lignes de prestation déclarées, retours clients à facturer)
Regrouper ces différentes entités sous forme de factures distinctes ( Entêtes et Lignes)
Alimenter les listes standards WfCdFaEn ( Entete Facture) , WfCdFaLi ( Lignes Factures) et WfCdFaDe ( Détail Lignes de Factures / Expéditions) afin d’indiquer a Diapason comment on souhaite facturer les lignes à facturer : combien de factures sont à créer ? combien de lignes ,a quel prix, TVA …
Schématiquement, voici le fonctionnement :
Quel est le contexte d’exécution de la requête ?
La variable « SCR.TypeDeCalcul » contient l’origine de lancement du calcul :
NOR ou vide ou non défini : génération classique par traitement FAC-CAL (pas de contexte particulier)
LIS-BL : facturation automatique depuis la validation des événements d’expéditions (les variables « SCR.CliResRef » et « SCR.CliGenRef » contiennent les informations relatives à l’événement d’expédition à facturer et la variable « SCR.FacLisBL » contient la liste des BLs à facturer pour ce client)
SEL-DIALOG : Sélection des lignes d’expéditions via DIALOG en utilisant la fonction ENR-ACT-ENT (la liste standard WfCDFaDe est pré-initialisée avec les BLs expédiés sélectionnés par DIALOG)
SEL-INTER : Sélection interactive depuis la liste des lignes d’expéditions non facturées (la liste standard WfCDFaDe est pré-initialisée avec les BLs expédiés sélectionnés
Listes utilisées dans la requête
Une facture est modélisée par :
une entête qui présente les informations générales de la facture ;
des lignes qui présentent le contenu particulier de la facture ;
un détail pour chaque ligne calculée qui décrit les entités commerciales et logistiques rattachées à la ligne.
Une facture manuelle générée par macro langage (WfCDFaEn.CdeFacTyp = « FM ») ne peut avoir de détail d’événement d’expédition rattaché (WfCDFaDe).
CDCoLi.CdeLigRemFor_IS sur les WfCDFaLi. Ce champ permet de forcer en priorité la prise en compte de la remise ou non.
Si la valeur logique est à YES, alors la remise de la (ou les) remise(s) de la ligne permettront de calculer le prix Net Unitaire HT par rapport au prix public. A l’inverse, si la valeur logique est à NO, alors c’est à partir du prix Net Unitaire HT que l’on calculera la remise.
Déroulé de la requête
1- Rechercher les entités a facturer |
---|
La facturation Diapason se base schématiquement sur 3 origines distinctes:
quelles sont les expéditions réalisées qui n’ont pas été facturées ?
quelles sont les déclarations de prestations réalisées qui n’ont pas été facturées ?
quels sont les retours clients qui ont été validés et identifiés comme à facturer et qui n’ont pas encore été facturés
D’autres entités comme l’avancement d’un chantier pourraient être à l’origine de la création d’une facture, ces cas d’usages ne sont pas décrit spécifiquement dans cette documentation mais devront se baser sur la même logique de création de facture.
La requête de facturation doit donc dans un premier temps identifier ce qui est en “attente” de facturation. Votre requête peut s’appuyer sur les données des tables :
CdExli ( expéditions réalisées , le statut CdeExpFacSta permet de cibler les expéditions non encore facturées)
POUR CHAQUE/SOC DTD CDExLi AVEC INDEX (ParFacValCDExLiIdx) DTD CDExLi.CdeExpValSta VRAI ET DTD CDExLi.CdeExpFacSta FAUX …
CDCoPrDec ( prestations réalisées , le statut CdeDecFac_IS permet de cibler les prestations non encore facturées)
POUR CHAQUE/SOC DTD CDCoPrDec AVEC INDEX (I2) DTD CDCoPrDec.CdeDecFac_IS FAUX …
CDClRt ( retour client, le statut CdeRetSta permet de cibler les retours validés non encore facturés, le statut CdeRetAFac permet de cibler parmis tous les retours, ceux à facturer )
POUR CHAQUE/SOC DTD CDClRt AVEC DTD CDClRt.CdeRetSta = CLO."V" ET DTD CDClRt.CdeRetAFac VRAI …
2-Regrouper ces différentes entités sous forme de factures distinctes ( Entête et Lignes) |
---|
Une fois les entités a facturer identifiées, vous devez les trier pour les regrouper entre elles par futures factures, par exemple regroupement au sein d’une même future facture des lignes d’expédition et de prestation d’une même commande.
3-Alimenter les listes standards WfCdFaEn - WfCdFaLi - WfCdFaDe |
---|
Vous pourrez à la suite constituer vos demandes de création de factures en alimentant 3 listes standards que Diapason viendra relire en sortie de votre requête de facturation.
Diapason appliquera ses propres contrôles de cohérence ainsi que ses compléments( cumul des différents montants …) avant la création des factures
Les différentes données de l’entête de votre facture proviennent majoritairement des données de commandes commerciales liées. Vous retrouverez pour la majorité des champs de la liste WfCdFaEn leur équivalent dans la structure CdCoEn : adresse de facturation, TVA , condition d’escompte, remise d’entete, Plus values , frais de transport … Vous ne devez en aucun cas alimenter dans la liste WfCdFaEn les champs Montants totaux ou les montant de TVA. Ces calculs sont en nouvelle méthode de facturation obligatoirement réalisés par Diapason ! | ![]() |
Cette liste correspondant aux différentes lignes que vous voulez faire apparaitre dans votre facture, elle comporte de manière schématique l’article à facturer, la désignation liée, la quantité facturée, le prix de base, la remise , le prix net , les plus values HT et le trio des critères comptables qui permettront d’alimenter les différents comptes comptables à alimenter en comptabilité pour cette ligne. Diapason n’impose pas que l’article facturé ainsi que la quantité facturée corresponde nécessairement à l’article expédié. Cela est essentiellement lié au fait qu’une ligne de commande puisse est découpée en plusieurs lignes de gestion, qui sont les entités expédiées ! |
WfCDFaDe : la structure WFCdFaDe permet de faire le lien entre une ligne de facture et la ou les lignes de gestion liées via les expéditions réalisées (BL ) , ou de faire le lien entre une ligne de facture et la ligne commerciale liée via la table des déclarations des prestations réalisées pour les lignes commerciales liées a des articles prestations. Cette structure de liaison n’est pas directement visible sur une facture mais est essentielle et obligatoire pour permettre de savoir qu’une ligne de gestion expédiée a bien été facturée, et qu’elle n’est donc plus à facturer !
Comment remplir la liste WfCDFaDe ?
Un des points de départ du calcul de facturation sont les expéditions non facturées. Ces expéditions s’appuient sur des lignes de gestions et non des lignes de commandes commerciales. Diapason permet pour des problématiques d’expédition ou d’organisation de production de “morceler” le besoin commercial exprimé par votre client en plusieurs éléments pouvant être expédiés séparément. Chacun de ces éléments correspondants alors a une ligne de gestion rattachée à la même ligne commerciale. Cette possibilité offerte par Diapason nécessite une attention particulière dans votre calcul de facturation afin de faire le lien entre les lignes de gestions expédiées et les lignes de factures liées qui sont à générer.
Comment souhaitez-vous gérer la facturation des découpes ?
Par exemple, on sépare notre ligne de commande en 2 lignes de découpe expédiables séparément :
Comment souhaites-t-on facturer ?
Facturer la ligne de gestion VR seule | Facturer à la ligne commerciale | Facturer uniquement la ligne de gestion principale |
---|---|---|
Dans notre exemple le prix de la fenêtre avec VR est de 1000, vous devrez ventiler dans la requête GIL , par exemple 800 pour la ligne fenêtre et 200 pour la ligne VR. Suite a l’expédition de la fenêtre seule, vous établirez sur le même principe une nouvelle facture de 800. |
On attend que le VR et la fenêtre soient expédiés tous les 2 pour facturer le montant de la ligne de commande commerciale. Comment procède-t-on ? Suite à l’expédition du VR, on vérifie si la ligne de gestion Fenêtre est elle aussi expédiée :
Cependant Diapason a besoin de faire un lien entre la ligne de facture et le détail des expéditions liées. Il est donc nécessaire pour cela d’alimenter pour chaque WfCdFali, la ou les lignes de gestion liées a cette ligne de facture dans la structure WfCdFaDe. Dans l’exemple ci dessus on aurait un enregistrement WfCdFaLi : Fenetre avec VR et deux enregistrements dans WfCdFaDe rattachés a la ligne WfCdFaLi, un pour le VR et un autre pour la fenêtre. Dans le cas de ligne de prestation ( article de type 5) il n’y a pas d’expédition ni de ligne de gestion, on alimente alors directement le N° de ligne de commande commerciale ainsi que le N° de Clé de déclaration de ou des prestations réalisées. ![]() | Dans l’exemple ci dessus, la ligne porteuse de la facturation pourrait être est la ligne découpée Fenêtre seule. Dès que la fenêtre seule est expédiée on facture le montant de la ligne de commande commerciale liée. Dans ce cas de figure la ligne découpée VR lorsqu’elle sera expédiée sera considérée par défaut par Diapason comme ligne a facturer. Il sera donc nécessaire dans votre calcul de facturation de “neutraliser” cette ligne en lui indiquant que l’on ne souhaite pas la facturer. Il est nécessaire pour cela d’affecter cette ligne a une facture “fictive” via l’alimentation de la liste WfCdFaDe avec comme référence de facture la valeur *NF. Aucune alimentation de WfCdFaEn ni WfCdFaLi n’est nécessaire, juste WfCdFaDe. ![]() |
Quelques cas de gestion particuliers
Gestion des Acomptes
L’affectation d’un ou de plusieurs acomptes à une facture produit doit être réalisée en dernière étape de la création de la facture produit.
Le montant d’acompte pouvant être affecté à la facture dépend du montant de la facture.
On doit donc créer la facture dans un premier temps ( avec les listes WfCdFaEn - WfCdFaLi et WfCdFaDe ) sans prendre en compte d’acompte, et demander à Diapason de calculer les différents totaux de la facture via la fonction macro langage dédiée CALCUL-MTENT ( et en particulier les totaux Hors Taxes par taux de TVA).
Les totaux Hors Taxes ventilés par taux de TVA permettent fixer le seuil maximum d’acompte à déduire au titre de la facture encours.
Exemple d’utilisation de la fonction CALCUL-MTENT permettant de demander un “calcul” de la facture en cours


On va ensuite rechercher les montants d’acompte disponibles sur la commande en cours de facturation.

Chaque montant disponible pourra être affecté à la facture en cours via la création d’une nouvelle ligne de facture de type acompte dans la facture produit courante.
Chacune des lignes devra faire obligatoirement référence à une ligne de facture d’acompte ( Numéro de facture d’acompte, ligne de facture d’acompte.
Le montant d’acompte initialisé sur la ligne de facture produite ne pourra excéder le montant disponible restant pour la ligne de facture d’acompte liée et le taux de TVA de la ligne de facture produit devra impérativement correspondre au taux de TVA de la ligne de facture d’acompte liée.

De manière schématique, dans une facture produit on créé des lignes produits avec un montant HT et un taux de TVA, sur lesquelles on déduit les lignes de facture d’acompte déjà générées au titre de la commande facturée. La différence entre les deux correspond au reste à payer par le client.
Il existe 3 règles de gestions distinctes pour déterminer le montant d’acompte à déduire au titre d’une facture :
Consommation de l’acompte sur les première factures de la commande
Consommation de l’acompte au prorata du montant facturé
Consommation de l’acompte sur les dernières factures de la commande
Le choix de la méthode est déterminé par la valeur du champ Consommation Acompte défini sur le client lié à la facture ( pour plus de détail voir Définition des Clients ou Prospects )
Lignes de Commandes de type Prestation ( non Intégrables)
Il est possible de créer des détails de lignes de facture pour des lignes de commande commerciales de type prestation non intégrables (portant sur un article ayant comme définition commerciale « 5 : article NON géré »).
Pour cela :
WfCDFaDe.CdeExpRef doit contenir « C »,
WfCDFaDe.CdeNumCom doit contenir le numéro de la commande commerciale,
WfCDFaDe.CdeNumLig doit contenir le numéro de la ligne de commande commerciale suivi du numéro d'évènement de déclaration séparé par une virgule
Retour Client
Dans la requête de calcul de facturation, il est possible de créer des détails de lignes de factures pour des lignes de retours clients.
Pour cela :
WfCDFaDe.CdeExpRef doit contenir « R »,
WfCDFaDe.CdeNumCom doit contenir le numéro du retour client,
WfCDFaDe.CdeNumLig doit contenir le numéro de la ligne du retour client
Toutes les lignes d’un retour client doivent être facturées dans une même facture.
Suppression de Facture
Il est possible d'indiquer, dans la requête, la référence des factures que l'on souhaite supprimer avant la génération des nouvelles factures.
Pour cela, pour chaque facture à supprimer, créer WfCDFaEn tel que :
WfCDFaEn.CdeFacTyp = « FS »
WfCDFaEn.CdeFacRef = Référence_Facture_A_Supprimer (doit être une facture non validée)
Lors du traitement des listes standards générées par la requête, pour chaque détail de ligne de facture (WfCDFaDe), si une facture non validée existe déjà pour celui-ci, cette facture est supprimée.
Comment écarter des éléments à facturer du calcul de facturation ?
Diapason permet de forcer le fait qu’une ligne de gestion expédiée n’est plus à prendre en compte dans le calcul de facturation.
Par exemple : on ne souhaite pas facturer une ligne de gestion dont le montant est à zéro, on ne souhaite pas créer de facture pour des commandes de type SAV…
Comment faire ?
Dans la requête de calcul de facturation, il faut, pour chaque ligne d’expédition non facturable, créer un enregistrement dans la liste standard WfCDFaDe tel que :
WfCDFaDe.CdeFacRef = « *NF »
Contenant les informations de la ligne d’expédition, à savoir :
WfCDFaDe.CdeExpRef : Evt_Expédition
WfCDFaDe.CdeNumCom : Besoin_de_Gestion
WfCDFaDe.CdeNumLig : Ligne_Besoin_de_Gestion
Que se passe-t-il dans DIAPASON ?
➡️ En sortie de requête de calcul de facturation, les enregistrements de WfCDFaDe tels que WfCDFaDe.CdeFacRef = « *NF » sont traités avant la création des factures.
Pour chaque ligne non facturable trouvée :
le statut de facturation est forcé à « VRAI » ;
la quantité facturée est forcée avec la quantité expédiée ;
les quantités et montants facturés sont mis à jour sur la commande commerciale ;
les montants facturés sont mis à jour pour le client ;
un enregistrement est conservé dans le détail de facturation pour conservé la trace de ce traitement.
Comment voir que la facturation a été forcée ?
Dans les listes présentant le détail de facturation pour une ligne d’expédition, la valeur ‘*NF’ dans le numéro de facture indique que la facturation a été forcée sur cette ligne et la colonne présentant le numéro de BL donne la date à laquelle a été fait ce traitement.
Editer ou valider automatiquement la facture lors de sa génération
Dans la liste WfCdeFAEn de la requête de facturation, ( REB FacGenPro pour DIAPASON Start et requête REB stockée dans le paramètre FAC-CAL pour DIAPASON Standard)
pour valider en auto la facture à sa génération: CdeFacAutVal = Oui
pour confirmer en auto la facture à sa génération: CdeFacAutEdt = Oui
