Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Invité de passage
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    janvier 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Emirats Arabes

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Arts - Culture

    Informations forums :
    Inscription : janvier 2013
    Messages : 4
    Points : 0
    Points
    0

    Par défaut Aide calcul quantité en stock

    Bonjour tout le monde
    Je cherche depuis quelques jours une solution à mon problème.
    Mon projet consiste à gérer la gestion de stock des produits. Ce que je veux faire c'est de gérer les stocks.
    j'ai 3 fichiers, Ligne Prod-Livraison « relation composée BL-Produit » :"ID_BL_Prod , N° BL, IDProd ,Quantité Liv ", Produit:" IDProd, Nom Produit, Prix HT", Stocks :"N° Stock , IDProd, Quantité en stock ".
    Je veux que lorsque je clique sur ajouter, chaque produit livré diminue en stock .
    Par exemple la Qté En Stock du produit X = 200, si dans ma table (Table fichier) je livre ce produit avec Qté=50 la Qté En Stock de celui-ci devient 150 (y compris la Qté en stock du fichier stocks bien sûr) et ainsi de suite pour chaque produit.
    J’ai essayé plusieurs procédures d’indice produit mais ca n’a pas marcher (La Qté en stock du produit prédécesseur ou successeur soustraire la qté du produit indicé (selon action insertion – ajout – ou modif de la Qté)
    Voici mon code :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    PROCEDURE AjouteLigneBL()
    
    nRefProduit			est un entier
    nIndiceProduit		est un entier
    
    nRefProduit = COMBO_Produits..Valeur
    nIndiceProduit = TableCherche(TABLE_Bon_Liv.COL_Num_Prod,nRefProduit)
    
    SI nIndiceProduit = -1 ALORS 
     
    	HLitRecherchePremier(Stocks, Num_Prod,TABLE_Bon_Liv.COL_Num_Prod)		
    	
    	SI HTrouve(Stocks) = Vrai ALORS  		
    		Stocks.Qte_en_Stock = Stocks.Qte_en_Stock - (SAI_Qte_BLExt) 	
    	FIN	
    
    HModifie(Stocks)	
    	// Ajoute une ligne pour ce produit
    TableAjouteLigne(TABLE_Bon_Liv, 0, Bon_Liv.Num_BL,Produit.Num_Prod, Produit.Des_Prod,SAI_Qte_BL, Stocks.Qte_en_Stock)
    	
    	TableEnregistre(TABLE_Bon_Liv)
    		
    	
    SINON  //1 : Ajouter
    	//2 : Modifier
    	//3 : Annuler
    	
    	SELON Dialogue ("La référence du produit indiquée est déjà présente dans la commande.")
    		// Ajouter
    									
    CAS 1	Stocks.Qte_en_Stock += TABLE_Bon_Liv.COL_Qte_Livree_Ext[nIndiceProduit] 	
    	TABLE_Bon_Liv.COL_Qte_Livree_Ext[nIndiceProduit] += SAI_Qte_BLExt
    			
    	Stocks.Qte_en_Stock -= TABLE_Bon_Liv.COL_Qte_Livree_Ext[nIndiceProduit]	
    	HModifie(Stocks)			
    	TABLE_Bon_Liv.COL_Qte_Stock[nIndiceProduit] = stocks.Qte_en_Stock
    Que dois-je faire? Pouvez-vous m'aider s'il vous plaît ?

    Merci bien.

  2. #2
    Membre Expert
    Homme Profil pro Mathurin
    Développeur informatique
    Inscrit en
    mars 2009
    Messages
    904
    Détails du profil
    Informations personnelles :
    Nom : Homme Mathurin
    Âge : 30

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2009
    Messages : 904
    Points : 1 473
    Points
    1 473

    Par défaut

    Bonjour,

    Je ne suis pas sûr de bien comprendre votre problème....

    Ce que je sais c'est qu'une gestion de stock nécessite généralement une table d'entrée sortie où chaque mouvement a un sens (le plus simple de gérer le sens 1 pour les entrées et -1 pour les sorties afin de calculer les quantités avec une simple multiplication).

    Le stock initial + la somme des mouvements multipliés par leurs sens permettra alors de connaitre la quantité actuellement en stock.

    Lors d'un inventaire c'est la démarche inverse, on mets à jour le stock de la table des produits et la différence permet de calculer le mouvement nécessaire (en 1 ou -1).

    Je ne sais pas si ça vous aidera....
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  3. #3
    Invité de passage
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    janvier 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Emirats Arabes

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Arts - Culture

    Informations forums :
    Inscription : janvier 2013
    Messages : 4
    Points : 0
    Points
    0

    Par défaut

    Merci michel.souris
    par exemple l'ajout dans la table:

    Chaise 260
    Table 340

    Chaise - Qte Liv 10 * En Stk 250
    Table - 20 * 230 calculé 250 moin 20
    --
    évidement je sais,l'augmentation de la Qté en stock ce fait par l'achat 'Entrées' inversement aux sorties "ce que j'ai dans l'analyse *Entrées,Sorties et Stocks* comme fichiers.si j'ai bien compris votre réponse un seul fichier Mouvement stocks gère tous le stock

  4. #4
    Expert Confirmé Sénior
    Homme Profil pro
    Développeur Freelance
    Inscrit en
    janvier 2009
    Messages
    2 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Freelance

    Informations forums :
    Inscription : janvier 2009
    Messages : 2 304
    Points : 4 633
    Points
    4 633

    Par défaut

    Bonjour,
    Chez nous on a deux tables:
    Une pour les encours de stock
    Une pour les mouvements de stock.

    La mise à jour des encours de stock passe par 2 triggers:
    Le premier trigger est sur la table des lignes de document: la création/modification d'une ligne de document crée ou modifie un mouvement de stock
    Le deuxième trigger est sur la table des mouvements: la création/modification d'un mouvement modifie l'encours de stock corrrespondant

    Pour les calculs, dans les premier trigger il suffit de soustraire la valeur "avant modification" et d'ajouter la valeur "après modification".

    Ainsi tous les cas sont gérés, et le fait de passer par des triggers permet de s'affranchir de l'interface utilisateur.

    Chez nous comme on enregistre autant les mouvement "réels" (qui influent sur le stock) que "prévisionnels" (qui n'influent pas sur le stock), la table des mouvements est quelque peu volumineuse, ce qui ne pose pas de problème avec les bons indexes.

    Tatayo.

  5. #5
    Membre Expert
    Homme Profil pro Mathurin
    Développeur informatique
    Inscrit en
    mars 2009
    Messages
    904
    Détails du profil
    Informations personnelles :
    Nom : Homme Mathurin
    Âge : 30

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2009
    Messages : 904
    Points : 1 473
    Points
    1 473

    Par défaut

    Citation Envoyé par tatayo Voir le message
    Bonjour,

    La mise à jour des encours de stock passe par 2 triggers:
    Le premier trigger est sur la table des lignes de document: la création/modification d'une ligne de document crée ou modifie un mouvement de stock
    Le deuxième trigger est sur la table des mouvements: la création/modification d'un mouvement modifie l'encours de stock corrrespondant

    Pour les calculs, dans les premier trigger il suffit de soustraire la valeur "avant modification" et d'ajouter la valeur "après modification".

    Ainsi tous les cas sont gérés, et le fait de passer par des triggers permet de s'affranchir de l'interface utilisateur.
    Gros +1 pour les triggers !
    si j'ai bien compris votre réponse un seul fichier Mouvement stocks gère tous le stock
    Une table sert à gérer les entrées sorties
    L'autre table sert à gérer l'état de votre stock (on pourrait également que vous stockiez d'autre information dans cette table si vous deviez par exemple gérer des origines et des zones de stockage).

    Si tu n'as pas la possibilité de faire tourner de trigger (parce que tu es en HF classic par exemple) tu peux faire tourner un script qui assure la cohérence des données.

    En ce qui concerne ton script... J'avoue je n'y comprend pas grand chose...

    Là je n'ai pas Windev sous la main mais j'ai l'impression que :

    Code :
    1
    2
    3
    4
    5
    6
    nIndiceProduit = TableCherche(TABLE_Bon_Liv.COL_Num_Prod,nRefProduit)
    
    SI nIndiceProduit = -1 ALORS 
    
    	HLitRecherchePremier(Stocks, Num_Prod,TABLE_Bon_Liv.COL_Num_Prod)
    C'est plutôt bizarre... tu cherche la valeur de ta combo dans ta table au début puis tu dis que si tu trouve pas dans ta table tu bas chercher dans ton fichier la ligne sélectionnée (enfin je crois moi je mets plutôt COL_Num_Prod[TABLE_Bon_Liv] si je veux la ligne courante) donc forcément, enfin il me semble, que tu vas trouver n'importe quoi. Je crois que tu devrais plutôt chercher la valeur de ta combo dans ton fichier.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	SI HTrouve(Stocks) = Vrai ALORS 
    		Stocks.Qte_en_Stock = Stocks.Qte_en_Stock - (SAI_Qte_BLExt) 
    	FIN 
    
    	HModifie(Stocks) 
    	// Ajoute une ligne pour ce produit
    	TableAjouteLigne(TABLE_Bon_Liv, 0, Bon_Liv.Num_BL,Produit.Num_Prod, Produit.Des_Prod,SAI_Qte_BL, 	Stocks.Qte_en_Stock)
    
    	TableEnregistre(TABLE_Bon_Liv)
    Ensuite ici tu ne traite pas tout les cas.

    Si tu trouve ton stock tout va bien, ton curseur se positionne sur le bon enregistrement tu modifie ton stock "de la bonne ligne" en base de données.

    Par contre si tu appelle plusieurs fois à la suite ta fonction le curseur reste sur la même position (enfin je pense) du coup je sais pas trop ce que tu fais !

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SINON
    //1 : Ajouter
    //2 : Modifier
    //3 : Annuler
    
    SELON Dialogue ("La référence du produit indiquée est déjà présente dans la commande.")
    // Ajouter
    
    	CAS 1 Stocks.Qte_en_Stock += TABLE_Bon_Liv.COL_Qte_Livree_Ext[nIndiceProduit] 
    		TABLE_Bon_Liv.COL_Qte_Livree_Ext[nIndiceProduit] += SAI_Qte_BLExt
    
    		Stocks.Qte_en_Stock -= TABLE_Bon_Liv.COL_Qte_Livree_Ext[nIndiceProduit] 
    		HModifie(Stocks) 
    		TABLE_Bon_Liv.COL_Qte_Stock[nIndiceProduit] = stocks.Qte_en_Stock
    Là tu t'y prends mal. Déjà tu devrais décrémenter ton stock de la quantité à ajouter au BL.

    Donc :
    Code :
    1
    2
    3
    Stocks.Qte_en_Stock-=SAI_Qte_BLExt
    HModifie(Stocks)
    Ensuite tu modifie ton affichage :
    Code :
    1
    2
    3
    TABLE_Bon_Liv.COL_Qte_Livree_Ext[nIndiceProduit] += SAI_Qte_BLExt
    TABLE_Bon_Liv.COL_Qte_Stock[nIndiceProduit] -= SAI_Qte_BLExt
    En plus je crois que tu oublie de modifier la position de ton curseur, tu ne fais pas de HLitRecherche sur la table Stocks....

    Et du manière général, si je peux permettre, teste le retour de tes fonctions et traite les SINON.

    [EDIT]
    Et passe ton code au pas à pas !
    [/EDIT]
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  6. #6
    Invité de passage
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    janvier 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Emirats Arabes

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Arts - Culture

    Informations forums :
    Inscription : janvier 2013
    Messages : 4
    Points : 0
    Points
    0

    Par défaut

    Salut michel.souris , tatayo , merci d'avoir répondus , de vos aides et précieuses informations
    j'ajouterai les fichiers mouvement et encours du stock en liaison avec le le fichier produit et fournisseur ainsi que le client , pour les intégrités réferencielle ça sera un combat
    Mouvement :"IdMouv,Num_Four,Num_Prod,Libelle*Entrées,Sorties*,Qté,Date,
    et Num_Client" qui peut être sera mon probleme -Num_Client-

    le premier trigger j'ai pas d'idées de ses champs ...

    voici une partie de mon analyse comment était :


    Lors de l’ajout initial d’un produit ne pose aucun problème en Qté du stock (calculée parfaitement)



    le problème que j'avais c'est que lors de l'ajout ou modification d'une Qté à la livrée d'un produit existe dans la table :
    QtéStock = 390+2 - 22 = 380


    la soustraction se fait entre la qté du dernier ajouté*dernière position du curseur* et la somme : Col_Qté_Livrée+Sai_Qté_Liv :
    800 - 22 = 780


    c se que j'ai voulu résourde s'il y'a un script pour ça..et merci pour vos lumières

  7. #7
    Membre Expert
    Homme Profil pro Mathurin
    Développeur informatique
    Inscrit en
    mars 2009
    Messages
    904
    Détails du profil
    Informations personnelles :
    Nom : Homme Mathurin
    Âge : 30

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2009
    Messages : 904
    Points : 1 473
    Points
    1 473

    Par défaut

    Citation Envoyé par AlelMourad Voir le message
    Salut michel.souris , tatayo , merci d'avoir répondus , de vos aides et précieuses informations
    j'ajouterai les fichiers mouvement et encours du stock en liaison avec le le fichier produit et fournisseur ainsi que le client , pour les intégrités réferencielle ça sera un combat
    Mouvement :"IdMouv,Num_Four,Num_Prod,Libelle*Entrées,Sorties*,Qté,Date,
    et Num_Client" qui peut être sera mon probleme -Num_Client-

    le premier trigger j'ai pas d'idées de ses champs ...

    voici une partie de mon analyse comment était :


    Lors de l’ajout initial d’un produit ne pose aucun problème en Qté du stock (calculée parfaitement)



    le problème que j'avais c'est que lors de l'ajout ou modification d'une Qté à la livrée d'un produit existe dans la table :
    QtéStock = 390+2 - 22 = 380


    la soustraction se fait entre la qté du dernier ajouté*dernière position du curseur* et la somme : Col_Qté_Livrée+Sai_Qté_Liv :
    800 - 22 = 780


    c se que j'ai voulu résourde s'il y'a un script pour ça..et merci pour vos lumières
    Bonjour,

    Je voudrais bien vous aider mais malheureusement je ne pense pas comprendre pas tout ce que vous cherchez à dire.

    La chose que je constate sur votre MCD c'est qu'il y a une table ENTREE et une table SORTIE au lieu d'avoir une table MOUVEMENT unique qui gère les entrées et les sorties.

    Ensuite vos exemples de calculs sont erronés...

    QtéStock = 390+2 - 22 = 380 >>>> QtéStock = 390+2 - 22 = 370

    Col_Qté_Livrée+Sai_Qté_Liv :
    800 - 22 = 780 >>> 800 - 22 = 778

    Ca ne facilite pas la compréhension de votre problème.
    Peut être est-ce volontaire afin de montrer ce qui vous dérange ?
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •