Intégrer une pièce dans Gestan depuis une extension
Cette fonction permet d'intégrer facilement un document d'achat ou de vente (devis, facture, etc) dans Gestan depuis une extension, en appelant une fonction spécifique.
Les pièces produites seront à l'état brouillon.
Syntaxe
<Résultat> = gf_PIECE_Générer(<Type de pièce>, <Structure contenant les données >, <libellé retour>, "version")
Avec :
- <Résultat> : Booléen, vrai si la pièce a été ajoutée, faux dans le cas contraire
- <Type de pièce> : chaine, qui ne peut être que DEVIS, COMMANDE, FACTURE, AVOIR, BLIVR, DEMPRIXFOU, COMMANDEFOU, FACTUREFOU, AVOIRFOU, BRECEPT
- <Structure contenant les données > : Structure, contenant toutes les données de la pièces à créer, voir ci-dessous
- <libellé retour> : chaine, contenant le message d'erreur en cas de problème dans l'ajout
- Le libellé “version” est le n° de version de la fonction. Il permet de s'assurer que le programme appelant est bien en phase avec la fonction, qui peut ainsi évoluer sans risques.
La structure contenant les données
C'est une structure (type de variable Windev), contenant les données utiles à la génération de la pièce, les options de création, et un tableau de Structures contenant les données utiles à la génération des lignes de pièce.
Prenons un exemple :
LibERR est une chaîne
// Structure décrivant une ligne de facture
wLigne est une Structure
CD_PRODUIT est une chaîne
QUANTITE est un réel
PU_VENTE_HT est un monétaire
LIB_LFACT est une chaîne
TX_TVA_VENTE est un réel
TX_REMISE_LIGNE est un réel
UNITE_VENTE est une chaîne
IDFAMPROD est un entier
LIB_TITREFACT est une chaîne
LIB_LOTFACT est une chaîne
NUMORDRE est un entier
FIN
// Structure décrivant une facture
wFacture est une Structure
// Données de la facture
IDCONTACT est un entier sur 8
IDCONTACT_LIVR est un entier sur 8
REFEXTERNECLT est une chaîne
NOMFAMILLE est une chaîne
PRENOM est une chaîne
RAISON_SOCIALE est une chaîne
ADRESSEL1 est une chaîne
ADRESSEL2 est une chaîne
CDREGION est une chaîne
CPOSTAL est une chaîne
VILLE est une chaîne
CDPAYS est une chaîne
EMAIL est une chaîne
IDCIVILITE est un entier sur 8
DT_FACTURE est une chaîne
IDDELPMT est un entier sur 8
ID2_MODEPAIEMENT est un entier sur 8
NATURE est une chaîne
VREF est une chaîne
REFEXTERNEFACT est une chaîne
TX_REMISE_GLOB est un réel
COMMENTAIRE est une chaîne
TRIERLIGNE est un entier // A alimenter si on veut un tri conforme à la pièce de départ quand on génère une pièce à partir d'une autre
IDPROJET est un entier sur 8
IDTACHE est un entier sur 8
DOCUMENTLIE est un tableau de 7 chaînes
TABLOLIGNE est un tableau <agrandissement=1> de wLigne
// Option de création
TYPEREF est un entier // 0 (défaut) : on lit sur IDCONTACT; 1 : on lit sur REFEXTERNECLT
CLTPRO est un entier // 1 si c'est un client privé, 2 si c'est un client pro (dans le cas ou l'ID client n'est pas renseigné et qu'on va le créer)
USRSUIVI est un booléen // faux : la pièce sera suivie par le créateur; Vrai : la pièce sera suivie par le responsable du contact
BFORCERPRIX est un booléen // Vrai si on lit exclusivement les prix dans le catalogue
PRODUITEXIST est un booléen // Faux : un produit inexistant sera hors catalogue. Vrai : un produit inexistant sera rejeté
FIN
wMaFacture est une wFacture
wTblLigne est un tableau <agrandissement=1> de wLigne
wMaLigne est une wLigne
// Alimentation des zones des lignes de facture
VariableRAZ(wMaLigne)
wMaLigne.CD_PRODUIT = "SCOLTC4"
wMaLigne.QUANTITE = 1
wMaLigne.TX_REMISE_LIGNE = 12
wTblLigne[1] = wMaLigne
VariableRAZ(wMaLigne)
wMaLigne.CD_PRODUIT = "SCOLTC3"
wMaLigne.QUANTITE = 5
wMaLigne.TX_REMISE_LIGNE= 0
wTblLigne[2] = wMaLigne
// Alimentation des zones de la facture
wMaFacture.IDCONTACT = 12
wMaFacture.TX_REMISE_GLOB = 8
wMaFacture.DOCUMENTLIE[1] = "C:\Facturation\Mon document.docx"
wMaFacture.DOCUMENTLIE[2] = "C:\Facturation\Mon tableur.xlsx"
wMaFacture.TABLOLIGNE = wTblLigne
SI gf_PIECE_Générer("FACTURE", wMaFacture , LibERR, "1.4") ALORS Info("OK, la pièce a été générée.") SINON Erreur(LibERR)
Regardons dans le détail :
Dans la stucture wFacture
- IDCONTACT : obligatoirement renseigné si TYPEREF = 0 (sinon il n'est pas utilisé)
- REFEXTERNECLT : référence externe client, obligatoirement renseignée si TYPEREF = 1 (sinon il n'est pas utilisé)
- NOMFAMILLE, PRENOM, RAISON_SOCIALE, etc jusqu'à IDCIVILITE : ne sont à alimenter que si l'on veut écraser les valeurs du fichier CONTACT, ou qu'on veut créer un nouveau contact.
- CLTPRO : pour une création de client, à alimenter à 1 si c'est un client particulier, 2 si c'est un client entreprise. Si non-alimenté (0), sera considéré comme un client entreprise
- TYPEREF : si 0 : on lit le contact exclusivement sur l'ID; si 1 : on lit le contact sur REFEXTERNE. Si TYPEREF est à 0 et que IDCONTACT est aussi à zéro, le contact sera créé dans la base
- DT_FACTURE : alimenté par la date du jour si non précisé
- NATURE : alimenté par la première ligne du premier produit si non précisé
- REFEXTERNEFACT : référence externe facture éventuelle
- BFORCERPRIX : si 0, le prix du produit est lu dans la fiche produit. Sinon, on prend les prix transmis dans le tableau des lignes. Si non renseigné, c'est la valeur 0 qui est prise en compte (lecture dans la fiche produit)
- TRIERLIGNE : si 0, l'ordre de tri sera celui par défaut de la pièce. Dans le cas de la génération d'une pièce depuis une autre (par ex Facture depuis Devis), cela permet de prendre l'ordre de tri non pas de la facture par défaut, mais du devis d'origine.
- DOCUMENTLIE[1] à [7] peut contenir le chemin des documents éventuellement liés à la pièce.
Dans la structure wLigne
- CD_PRODUIT : peut être un produit hors catalogue. Dans ce cas, il faut renseigner IDFAMPROD
- QUANTITE : à renseigner obligatoirement
- PU_VENTE_HT : si non-renseigné, prendra le prix de la fiche produit
- LIB_LFACT : si non-renseigné, prendra le libellé produit
- TX_TVA_VENTE : si non-renseigné, prendra le taux du client, ou si non spécifié, le taux produit
- TX_REMISE_LIGNE : à renseigner si différent de 0
- UNITE_VENTE est une chaîne
- IDFAMPROD est un entier
- LIB_TITREFACT : libellé éventuel du titre
- LIB_LOTFACT : libellé éventuel du lot
- NUMORDRE : n° d'ordre de classement pour les lignes
Cet exemple va créer une facture pour le contact ID n°12, avec une ligne de produit code SCOLTC4, quantité 1, remise 12%, une seconde ligne de produit SCOLTC3, quantité 5, sans remise. Une remise globale de 8% sera appliquée à la facture.
Magique, non ?!
Trucs et astuces
BFORCERPRIX à vrai
Si ce paramètre est à faux (valeur par défaut), le prix de vente et la TVA seront lus dans le catalogue produit.
Dans le cas inverse, ils devront être transmis dans wLigne.
Si vous utilisez BFORCERPRIX à vrai, il ne faut pas oublier de renseigner le taux de TVA à appliquer.
Par exemple, pour calculer le taux de TVA client :
TX_TVA_Client est un réel // Calcul du taux de TVA client SELON CONTACT.REGIME_TVACLI CAS 2,4,5,6 : TX_TVA_Client =0 // 2=Exonéré, 4=ImportExport 5=Suspension 6=UE 7=Autre cas CAS 3 // Autres taux défini TX_TVA_Client =CONTACT.TX_TVACLI AUTRE CAS // 1 Normal, et 0 ou -1 (non défini=>Normal) et 8 (exo supp) HLitRecherche(TAUXTVA,DEF,1) TX_TVA_Client =TAUXTVA.TX_TVA FIN
Boucle de génération de pièces
Quand vous générez une série de pièces à partir d'une sélection de pièces (par exemple, vous voulez générer 5 factures à partir de 5 devis), le tableau des lignes de pièces varie en nombre de lignes, étant agrandi dynamiquement.
Si votre première pièce a 3 lignes, et la suivante 4, tout va bien se passer.
En revanche, dans le cas contraire, une première pièce de 4 lignes et une suivante de 3, vous aller adresser à la procédure de création de pièces un tableau de lignes avec 4 lignes, dont une vide, qui sera refusée.
Pour ce faire, utilisez
TableauSupprimeTout(wTblLigne)
entre deux créations, ce qui supprimera le tableau (par opposition à VariableRAZ, qui ne fait que le remette à zéro).
Gestion de NUMORDRE
En création d'une facture ex nihilo, vous pouvez ne pas l'alimenter, il sera alimenté automatiquement dans l'ordre des insertions dans le fichier des lignes de facture.
En revanche, quand vous créez une pièce à partir d'une autre pièce (par ex une facture en titre/lot depuis un devis en titre/lot), il faut les recopier, pour retrouver le bon ordre des titres/lots dans la pièces générée.
Gestion des versions
Depuis le 22/4/20, cette fonction demande un n° de version dans l'appel, pour que les structures qui lui sont envoyées soient cohérentes.
Attention ! Si votre extension embarque une copie de la fonction gf_PIECE_Générer d'une ancienne version, c'est cette copie qui va être appelée par l'extension, et non pas la fonction gf_PIECE_Générer “core”. Aucune erreur ne sera donc détectée !
Il faut donc :
- soit déclarer gf_PIECE_Générer en externe dans votre extension
- soit la mettre à jour dans votre extension.
| Version | Date | Observations | Version Gestan |
|---|---|---|---|
| 1.4 | 01/01/25 | Adaptation pour Gestan A1 | A1.00.00 |
| 1.2 | 19/03/21 | Ajout de la gestion des DEEE, et gestion de la recopie du numéro d'ordre de tri des lignes. | 15.23.01 |
| 1.1 | 09/01/21 | Ajout de la gestion des titres/lot + option de recopie du mode de tri des lignes. | 15.19.06 |
| 1.0 | 22/04/20 | Ajout de la gestion de version + gestion de REFEXTFACT | |
| <N/A> | 02/02/19 | Version initiale | |
Extensions utilisant cette fonction
WARNING A renseigner obligatoirement par les auteurs concernés, pour information de mise à jour.
| Extension | Auteur |
|---|---|
| GESTAN_INTEROR | ICS |
| PLUGIN_LOADPIECE | ICS |
| GESTAN_EASYVRP | ICS |
| GESTAN_WORDPRESS | LCP |
| GESTAN_WOOCOMMERCE | LCP |
| GESTAN_FACTURETTE | LCP |
| GESTAN_DATASYNC | CATS |
| GESTAN_ECOMMERCE | CATS |
Autres articles “Développement”