Voici un guide complet sur la mise en place d'une gestion de stock avec WinDev. Cet article est structuré pour vous servir de référence technique et fonctionnelle, tout en étant facilement exportable au format pour vos documentations internes.
Une application robuste repose sur une base de données parfaitement normalisée. Avec le moteur HFSQL de WinDev, vous devez modéliser au minimum trois fichiers de données essentiels. Le Fichier ARTICLE
Cet article vous guide à travers les fondamentaux de la création d'un système de gestion de stock sous WinDev, avec un accent particulier sur la génération et l'exploitation des documents PDF. Que vous soyez un développeur chevronné ou un professionnel cherchant à comprendre les possibilités techniques, ce guide complet vous apportera les clés pour maîtriser cet outil puissant.
// Après une sortie de stock PROCÉDURE Gerer_Reapprovisionnement(RefP, QuantiteRestante) SI QuantiteRestante < Produit.Seuil ALORS // Créer commande Commande.Numero = N°Auto() Commande.Fournisseur = Produit.FournisseurRef Commande.Date = DateSys() HAjoute(Commande) // Lier les lignes LigneCmd.CommandeNum = Commande.Numero LigneCmd.ProduitRef = RefP LigneCmd.Quantite = Produit.QuantiteReappro HAjoute(LigneCmd)
: Lors d'une sortie de stock, si PRODUIT.StockActuel <= PRODUIT.StockAlerte , déclenchez automatiquement l'envoi d'un email au service achat avec le PDF de rupture joint en utilisant les fonctions EmailEnvoieMessage() .
WinDev offers several high-productivity tools that simplify stock management: Gestion de stock, créez votre propre application en WinDev
Description (Chaîne, ex: "Commande fournisseur n°123" ou "Ajustement inventaire") Fichier EMPLACEMENT (Optionnel mais recommandé)
Si vos rapports contiennent des images d'articles, veillez à compresser ces images dans votre base de données ou utilisez les paramètres de compression PDF de WinDev ( iParamètrePDF ) pour éviter de générer des fichiers de plusieurs dizaines de mégaoctets, difficiles à envoyer par mail. Conclusion
// Procédure d'enregistrement d'un mouvement de stock Procédure EnregistrerMouvement(sReference est une chaîne, nQuantite est un entier, sTypeMouvement est une chaîne) // 1. Recherche de l'article SI HLitRecherchePremier(ARTICLE, AR_Ref, sReference) ALORS // Début de la transaction pour sécuriser les données HTransactionDébut() // 2. Création du ticket de mouvement HRAZ(STOCK_MOUVEMENT) STOCK_MOUVEMENT.AR_Ref = sReference STOCK_MOUVEMENT.MO_DateHeure = DateHeureSys() STOCK_MOUVEMENT.MO_Quantite = nQuantite STOCK_MOUVEMENT.MO_Type = sTypeMouvement SI PAS HAjoute(STOCK_MOUVEMENT) ALORS HTransactionAnnule() Erreur("Impossible d'enregistrer le mouvement : " + HErreurInfo()) RETOUR FIN // 3. Mise à jour du stock physique de l'article ARTICLE.AR_StockPhysique = ARTICLE.AR_StockPhysique + nQuantite SI PAS HModifie(ARTICLE) ALORS HTransactionAnnule() Erreur("Impossible de mettre à jour le stock de l'article : " + HErreurInfo()) RETOUR FIN // Validation finale de l'opération HTransactionFin() // 4. Alerte visuelle si le stock passe sous le seuil critique SI ARTICLE.AR_StockPhysique <= ARTICLE.AR_StockAlerte ALORS Info(ChaîneConstruit("Alerte ! Le produit %1 a atteint le seuil critique.", ARTICLE.AR_Designation)) FIN SINON Erreur("Référence article inconnue.") FIN Use code with caution. 3. Génération et Exportation du Rapport de Stock en PDF
PROCÉDURE EnregistrerMouvement(nIDArticle est un entier, nQuantite est un entier, sType est un chaîne) // 1. Ajout du mouvement dans l'historique MOUVEMENT.IDArticle = nIDArticle MOUVEMENT.Quantite = nQuantite MOUVEMENT.TypeMouvement = sType MOUVEMENT.DateMouvement = DateHeureSys() HAjoute(MOUVEMENT) // 2. Mise à jour du stock réel HLitRecherchePremier(STOCK, IDArticle, nIDArticle) SI HTrouve(STOCK) ALORS SI sType = "ENTRÉE" ALORS STOCK.QuantiteEnStock += nQuantite SINON SI sType = "SORTIE" ALORS STOCK.QuantiteEnStock -= nQuantite FIN HModifie(STOCK) SINON // Si l'article n'avait pas encore de ligne de stock STOCK.IDArticle = nIDArticle STOCK.QuantiteEnStock = (sType = "ENTRÉE") ? nQuantite SINON -nQuantite HAjoute(STOCK) FIN Use code with caution. 3. Création des États et Génération des Rapports PDF
// Génération d'un nom de fichier unique AFile is string = fWebDir() + "\" + DateSys() + TimeSys() + ".pdf"
Code, désignation, prix d'achat, prix de vente, stock minimum, stock d'alerte.
PROCEDURE ValiderVente() HTransactionStart() IF HAdd(DETAIL_VENTE, maVente) THEN HReadSeek(PRODUIT, maVente.PRO_Ref) IF HFound(PRODUIT) THEN PRODUIT.PRO_Stock = PRODUIT.PRO_Stock - maVente.DEV_Qte IF HModify(PRODUIT) THEN HTransactionEnd(hTransactionValid) RETURN True END END END
Voici un guide complet sur la mise en place d'une gestion de stock avec WinDev. Cet article est structuré pour vous servir de référence technique et fonctionnelle, tout en étant facilement exportable au format pour vos documentations internes.
Une application robuste repose sur une base de données parfaitement normalisée. Avec le moteur HFSQL de WinDev, vous devez modéliser au minimum trois fichiers de données essentiels. Le Fichier ARTICLE
Cet article vous guide à travers les fondamentaux de la création d'un système de gestion de stock sous WinDev, avec un accent particulier sur la génération et l'exploitation des documents PDF. Que vous soyez un développeur chevronné ou un professionnel cherchant à comprendre les possibilités techniques, ce guide complet vous apportera les clés pour maîtriser cet outil puissant.
// Après une sortie de stock PROCÉDURE Gerer_Reapprovisionnement(RefP, QuantiteRestante) SI QuantiteRestante < Produit.Seuil ALORS // Créer commande Commande.Numero = N°Auto() Commande.Fournisseur = Produit.FournisseurRef Commande.Date = DateSys() HAjoute(Commande) // Lier les lignes LigneCmd.CommandeNum = Commande.Numero LigneCmd.ProduitRef = RefP LigneCmd.Quantite = Produit.QuantiteReappro HAjoute(LigneCmd) gestion de stock windev pdf
: Lors d'une sortie de stock, si PRODUIT.StockActuel <= PRODUIT.StockAlerte , déclenchez automatiquement l'envoi d'un email au service achat avec le PDF de rupture joint en utilisant les fonctions EmailEnvoieMessage() .
WinDev offers several high-productivity tools that simplify stock management: Gestion de stock, créez votre propre application en WinDev
Description (Chaîne, ex: "Commande fournisseur n°123" ou "Ajustement inventaire") Fichier EMPLACEMENT (Optionnel mais recommandé) Voici un guide complet sur la mise en
Si vos rapports contiennent des images d'articles, veillez à compresser ces images dans votre base de données ou utilisez les paramètres de compression PDF de WinDev ( iParamètrePDF ) pour éviter de générer des fichiers de plusieurs dizaines de mégaoctets, difficiles à envoyer par mail. Conclusion
// Procédure d'enregistrement d'un mouvement de stock Procédure EnregistrerMouvement(sReference est une chaîne, nQuantite est un entier, sTypeMouvement est une chaîne) // 1. Recherche de l'article SI HLitRecherchePremier(ARTICLE, AR_Ref, sReference) ALORS // Début de la transaction pour sécuriser les données HTransactionDébut() // 2. Création du ticket de mouvement HRAZ(STOCK_MOUVEMENT) STOCK_MOUVEMENT.AR_Ref = sReference STOCK_MOUVEMENT.MO_DateHeure = DateHeureSys() STOCK_MOUVEMENT.MO_Quantite = nQuantite STOCK_MOUVEMENT.MO_Type = sTypeMouvement SI PAS HAjoute(STOCK_MOUVEMENT) ALORS HTransactionAnnule() Erreur("Impossible d'enregistrer le mouvement : " + HErreurInfo()) RETOUR FIN // 3. Mise à jour du stock physique de l'article ARTICLE.AR_StockPhysique = ARTICLE.AR_StockPhysique + nQuantite SI PAS HModifie(ARTICLE) ALORS HTransactionAnnule() Erreur("Impossible de mettre à jour le stock de l'article : " + HErreurInfo()) RETOUR FIN // Validation finale de l'opération HTransactionFin() // 4. Alerte visuelle si le stock passe sous le seuil critique SI ARTICLE.AR_StockPhysique <= ARTICLE.AR_StockAlerte ALORS Info(ChaîneConstruit("Alerte ! Le produit %1 a atteint le seuil critique.", ARTICLE.AR_Designation)) FIN SINON Erreur("Référence article inconnue.") FIN Use code with caution. 3. Génération et Exportation du Rapport de Stock en PDF
PROCÉDURE EnregistrerMouvement(nIDArticle est un entier, nQuantite est un entier, sType est un chaîne) // 1. Ajout du mouvement dans l'historique MOUVEMENT.IDArticle = nIDArticle MOUVEMENT.Quantite = nQuantite MOUVEMENT.TypeMouvement = sType MOUVEMENT.DateMouvement = DateHeureSys() HAjoute(MOUVEMENT) // 2. Mise à jour du stock réel HLitRecherchePremier(STOCK, IDArticle, nIDArticle) SI HTrouve(STOCK) ALORS SI sType = "ENTRÉE" ALORS STOCK.QuantiteEnStock += nQuantite SINON SI sType = "SORTIE" ALORS STOCK.QuantiteEnStock -= nQuantite FIN HModifie(STOCK) SINON // Si l'article n'avait pas encore de ligne de stock STOCK.IDArticle = nIDArticle STOCK.QuantiteEnStock = (sType = "ENTRÉE") ? nQuantite SINON -nQuantite HAjoute(STOCK) FIN Use code with caution. 3. Création des États et Génération des Rapports PDF Avec le moteur HFSQL de WinDev, vous devez
// Génération d'un nom de fichier unique AFile is string = fWebDir() + "\" + DateSys() + TimeSys() + ".pdf"
Code, désignation, prix d'achat, prix de vente, stock minimum, stock d'alerte.
PROCEDURE ValiderVente() HTransactionStart() IF HAdd(DETAIL_VENTE, maVente) THEN HReadSeek(PRODUIT, maVente.PRO_Ref) IF HFound(PRODUIT) THEN PRODUIT.PRO_Stock = PRODUIT.PRO_Stock - maVente.DEV_Qte IF HModify(PRODUIT) THEN HTransactionEnd(hTransactionValid) RETURN True END END END