IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Somme des champs [WD22]


Sujet :

WinDev

  1. #41
    Nouveau Candidat au Club
    Femme Profil pro
    ide
    Inscrit en
    Octobre 2019
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ide
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 191
    Points : 0
    Points
    0
    Par défaut
    Bonjour,
    Merci pour ta réponse Voroltinquo. je t'apporte une petite précision, dans mon projet il n'est pas question de prix d'achat ou de prix de vente. J'achète un produit TTC et je le livre au même prix puisque c'est un produit que nous fournissons au patient sans bénéfice. La valeur du stock final sera imputée dans notre comptabilité en variation de stock.
    Pour ta remarque concernant la table de données "Régularisation de stock", tu me dit qu'elle est inutile. Certes, mais comment rentré une valeur Stock Initial est un Ajustement Stock nécessaire en cas de perte d'un produits. C'est vrai aussi, que cette table est alimentée via la requête et dans ce cas comment faire apparaitre les champs table.
    Précision supplémentaire, c'est une association donc il n'y a pas de TVA.
    Je vais néanmoins essayer de voir les choses d'après ton commentaire.
    Merci

  2. #42
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 804
    Points : 5 251
    Points
    5 251
    Billets dans le blog
    1
    Par défaut
    J'ai expliqué le cas du stock initial : c'est une entrée (logiquement ce devra être celle ayant la date la plus éloignée), en cas de perte, c'est une sortie. C'est à cela que sert le champ remarque. Il est possible d'ajouter un boléen "perte" si on veut vraiment voir l'ensemble des pertes, une autre solution est de catégoriser ça dans le type de mouvement.
    Pour revenir au stock initial, c'est comme si on avait un nouveau produit.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  3. #43
    Nouveau Candidat au Club
    Femme Profil pro
    ide
    Inscrit en
    Octobre 2019
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ide
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 191
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Voroltinquo Voir le message
    J'ai expliqué le cas du stock initial : c'est une entrée (logiquement ce devra être celle ayant la date la plus éloignée), en cas de perte, c'est une sortie. C'est à cela que sert le champ remarque. Il est possible d'ajouter un boléen "perte" si on veut vraiment voir l'ensemble des pertes, une autre solution est de catégoriser ça dans le type de mouvement.
    Pour revenir au stock initial, c'est comme si on avait un nouveau produit.
    Rebonjour,
    Bon j'ai suivi ton conseil et j'ai créé un projet essai pour mettre en place tes instructions que j'ai suivi à la lettre.
    J'y ai passé 4 heures, hélas sans succès. Lorsque je met en place la requête afin de la tester, j'obtiens NULL+NULL+NULL, etc …..
    J'ai donc supprimé mon projet essai. Je reste donc sur mon projet initial en espérant qu'une âme charitable ai une piste à me donner.
    Je vais donc continuer à chercher une solution tout en sachant que tbc92 est très fort en codage et que pour le moment il n'a pas de solution. Alors moi je ta laisse imaginé, mais je ne baisse pas les bras.

    Merci encore pour ta piste.

  4. #44
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 051
    Points : 9 386
    Points
    9 386
    Par défaut
    Peux-tu refaire un état des lieux synthétique.

    En effet, dans l'un des fichiers, il y a une colonne StockFinal (que je vais nommer StockF1). Si je me souviens bien de la dernière version, dans la requête, on lit les données de cette colonne, mais on n'en fait rien.
    Et par ailleurs, on utilise une formule stock+mouvements pour calculer le stock final. (que je vais nommer stockF2)

    Que se passe-t-il si tu enlèves tout ce qui touche à StockF1 ?
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  5. #45
    Nouveau Candidat au Club
    Femme Profil pro
    ide
    Inscrit en
    Octobre 2019
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ide
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 191
    Points : 0
    Points
    0
    Par défaut
    Bonsoir tbc92,

    Je te remets le code SQL de la Requête_Stock et une copie écran de mes liaisons fichiers.
    Je vous ai tellement ennuyer avec mon projet et nous avons passé tellement de temps qu'il serait un peu bête de baisser les bras.
    Je ne vous serais jamais assez reconnaissant.

    Voici le code :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    37
    38
    39
    40
    41
    42
    43
    SELECT Produits, Conditionnement, COALESCE(Stock_Initial,0), la_somme_Quantité_Livrée, la_somme_Quantité_Sortie, COALESCE(Régul_Stock,0), Prix_Unitaire, 
    Stock_Initial + Régul_Stock + COALESCE(Variation_stock,0) AS Stock_Final, Stock_Initial + Régul_Stock + COALESCE(Variation_stock,0) * Prix_Unitaire 
    AS Valeur_Stock
    FROM 
    (
    SELECT
    Produits.IDProduits AS IDProduits,
    MIN(Produits.Produits) AS Produits,
    MIN(Produits.Conditionnement) AS Conditionnement,
    SUM(Régularisation.Stock_Initial) AS Stock_Initial,
    SUM(Livraisons.Quantité_Livrée) AS la_somme_Quantité_Livrée,
    SUM(Sorties.Quantité_Sortie) AS la_somme_Quantité_Sortie,
    SUM(Régularisation.Régul_Stock) AS Régul_Stock,
    Produits.Prix_Unitaire AS Prix_Unitaire,
    SUM( Livraisons.Quantité_Livrée - Sorties.Quantité_Sortie ) AS Variation_Stock ,
    SUM(Stock_Final * Prix_Unitaire) AS Valeur_Stock
     
    FROM 
    (
    (
    Produits
    LEFT OUTER JOIN
    Livraisons
    ON Produits.IDProduits = Livraisons.IDProduits
    )
    LEFT OUTER JOIN
    Sorties
    ON Produits.IDProduits = Sorties.IDProduits
    )
    LEFT OUTER JOIN
    Régularisation
    ON Produits.IDProduits = Régularisation.IDProduits
     
     
    GROUP BY 	
    Produits.Conditionnement,	
    Produits.Prix_Unitaire,	
    Régularisation.Stock_Initial,	
    Régularisation.Régul_Stock,	
    Régularisation.Stock_Final,	
    Régularisation.Valeur_Stock,
    Produits.IDProduits
    )

    Et la copie d'écran :

    Pièce jointe 514621

    Un grand merci

  6. #46
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 051
    Points : 9 386
    Points
    9 386
    Par défaut
    Déjà, parlons de l'analyse. Je n'ai pas vérifié avec la précédente, si c'était déjà comme ça, mais celle-ci ne me plait pas du tout.

    Tu as différents fichiers. Ok. On peut certainement discuter des fichiers, mais je ne les regarde même pas.
    Et tu as des liaisons. Et là, ça ne va pas du tout.

    Tu as un fichier Produits. C'est en quelque sorte le fichier central. Je crée un produit, et ensuite, je peux associer des commandes, des livraisons, des factures, et plein d'autres choses.
    Dans les autres fichiers, il y a systématiquement une colonne IdProduits. Bien.
    Mais en terme de liaisons, tu devrais avoir des liaisons entre chacun des autres fichiers et le fichier produits. Une image en étoile, avec le fichier Produits au centre, et une fleche vers chaque autre fichier.
    Et c'est tout ce que tu devrais avoir comme liaisons.

    Ce schéma en étoile, c'est très courant comme analyse. Eventuellement on a plusieurs étoiles, reliées entre elles.

    J'allais dire que tout ça, on s'en fout un peu. Mais en remettant le nez dans la requête, je suis perdu. J'ai besoin des liaisons pour comprendre.


    Revenons donc à l'analyse.

    On a le fichier produits. Avec la colonne IdProduits, qui est ESSENTIELLE, ok ? C'est la clé qui permettra de faire les liaisons entre les différents fichiers.

    Si j'ai un Idproduits=12345 par exemple dans le fichier SORTIES, ça veut dire qu'on aura donc forcément une ligne avec le même IdProduits=12345 dans le fichier Produits, c'est bien ça ? On ne peut pas avoir un idProduits présent dans le fichier Sortie, et qui n'existe pas dans le fichier Produits ?

    Mais par contre, dans le fichier Sorties, on peut avoir par exemple 4 ou 5 lignes qui ont le même IdProduits . Et normalement, ces 4 ou 5 lignes auront des dates différentes (pas obligatoirement, mais ça me paraît logique).

    Et ce que je raconte sur le fichiers Sorties, on a exactement le même fonctionnement pour le fichier livraisons, c'est ça ?

    Par contre, pour le fichier Regularisation, c'est comment ? On peut avoir plusieurs lignes qui concernent un même idProduit ? ou pas ? Je ne vois pas de date_regularisation ... Je ne sais pas à quoi sert ce fichier.
    J'ai lu quelque part que ce fichier servait à tracker les pertes par exemple... mais dans ce cas, on devrait avoir en gros 3 colonnes : IdProduits, DateRegul, nombreProduitPerdus. Et ce n'est pas du tout ce que je vois dans ce fichier.


    Sur les liaisons... aux extrémités de chaque trait, il y a des nombres[0,1,n] ... Si ces nombres sont mis au hasard(comme maintenant), ceux qui regardent l'analyse (comme moi) ne peuvent pas comprendre. Et en plus, Windev va éventuellement vous interdire certaines actions, alors qu'il ne devrait pas. Et Windev va laisser passer des anomalies, qu'il pourrait détecter si les liaisons étaient correctement paramétrées.

    Il faut paramétrer correctement ces liaisons, sinon on ne peut pas avancer.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  7. #47
    Nouveau Candidat au Club
    Femme Profil pro
    ide
    Inscrit en
    Octobre 2019
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ide
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 191
    Points : 0
    Points
    0
    Par défaut
    Bonsoir tbc92,

    Je te remercie d'avoir pris le temps de me répondre, je vais t'expliquer le fonctionnement des différents fichiers :

    Des Produits ont des Livraisons (ou Entrées), des Produits ont des Sorties et ces mêmes Produits sont affectés à des Secteurs (ou Lieux), ça c'est le plus simple.

    En ce qui concerne le Fichier Régularisations, celui qui semble poser problème, ce fichier ne me sert qu'à saisir le Stock_Initial et l'ajustement du Stock ( ou Régul) par Produits. Cet ajustement peut être positif ou négatif. Chaque trimestre, je compte le stock réel (ou physique) et en fonction du comptage j'ajuste le Stock. Tout ceci, me donne un stock réel que je multiplie par le Prix_Unitaire, ce qui me donne le valeur du Stock.

    Mais comme le disait Voroltinquo, peut-être que ce fichier Régularisations n'a pas lieu d'être, puisque une requête SQL calcule le tout : Stock Initial + Les Livraisons - Les Sorties + la Régul du stock = Stock_Final * Prix_Unitaire, ce qui me donne la valeur du Stock par Produit.

    Pour les liaisons, j'ai tout refait comme tu me l'a dit en étoile et en faisant cela je me suis rendu compte que j'avais de belles erreurs. Je te donne donc la copie d'écran rectifiée selon tes instructions et je pense que ce sera plus clair.

    J'espère avoir été le plus simple possible dans mon énoncé. Du coup je pense que je vais être obligé de refaire mes fiches et mes tables, qu'en penses-tu?

    Pièce jointe 514654

    Encore merci

  8. #48
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 051
    Points : 9 386
    Points
    9 386
    Par défaut
    On n'avance pas, on recule.

    Pour le fichier Secteurs, il était bien. Il était relié au fichier Sorties, et a priori, c'était très bien. Quand je parle de dessin en étoile, il peut y avoir des branches un peu complexes ...
    Là , en créant une liaison entre le fichier produits et le fichier secteurs, Windev a rajouté une colonne 'IdProduits dans le fichier Secteurs... cette colonne n'a pas de raison d'être (enfin, je suppose).

    Les liaisons entre Produits et Sorties ou Produits et Livraisons.
    Normalement, on devrait avoir [1,1] et [0,n], et pas [0,1] et [0,n]. Pourquoi 1,1 ? Parce que pour chaque livraison, on a 1 et 1 seule ligne dans le fichier Produits.
    Et surtout, il y a un sens. Chaque livraison concerne 1 et 1 seul produit, et chaque produit peut être dans plusieurs livraisons.

    Ici, on se retrouve maintenant avec des colonnes IdLivraison, IdSorties, IdSecteurs dans le fichier Produits. Il faut supprimer ces colonnes.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  9. #49
    Nouveau Candidat au Club
    Femme Profil pro
    ide
    Inscrit en
    Octobre 2019
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ide
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 191
    Points : 0
    Points
    0
    Par défaut
    Là je pense que ce sera mieux :

    Pièce jointe 514669

    Bonne nuit

  10. #50
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 051
    Points : 9 386
    Points
    9 386
    Par défaut
    Bon,
    J'ai toujours des gros problèmes avec le fichier Regularisation, mais tant pis.

    Voici 3 petites requêtes, toute simples :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select idproduits, sum(quantite_livree) as qlivr from livraisons group by idProduits 
     
    select idproduits, sum(quantite_sortie) as qsor from sorties group by idProduits 
     
    select idProduits, sum(regul_stock) as qregul , max (stock_initial) as qstock1 from regularisation group by idProduits
    Pour les 2 premières, je suis serein, pour la 3ème, je ne sais pas si elle est bonne.
    Ces 3 requêtes font sens, normalement.
    Dans le fichier Livraisons, je prend idProduit, et je prend quantite_Livree, et ça me permet de calculer la quantite totale livrée par produit. La colonne Prix_Unitaire ne me sert pas.
    Idem pour le fichier Sorties.
    Et plus ou moins idem pour le fichier Regularisationn, mais là, il faudra peut-être ajuster cette petite requête. C'est cette étape, clarifier le fichier Regularisation, qui peut être compliquée. Là, le fichier Régularisation contient le stock initial ( donc figé normalement, une seule ligne par produit donc), mais aussi des données de Régularisation ... Pas clair.

    A partir de ces 3 petites requêtes, il ne reste qu'à assembler les briques :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select   A.IdProduits , A.Produits, A.conditionnement, 
        coalesce( B.qlivr,0) as qlivr , coalesce( C.qsor ,0) as qsor , coalesce( D.qregul,0) as qregul , A.prix_unitaire ,
        coalesce(D.qstock1,0) + coalesce(D.qregul,0) + coalesce( B.qlivr,0)  - coalesce(C.qsor,0) as stock_final ,
        ( coalesce(D.qstock1,0) + coalesce(D.qregul,0) + coalesce( B.qlivr,0)  - coalesce(C.qsor,0) ) * A.Prix_Unitaire  as Valeur_Stock
    from produits A
    outer join ( select idproduits, sum(quantite_livree) as qlivr from livraisons group by idProduits  ) B
       on B.idProduits = A.idProduits
    outer join  (select idproduits, sum(quantite_sortie) as qsor from sorties group by idProduits) C
      on C.idProduits = A.idProduits
    outer join  (select idProduits, sum(regul_stock) as qregul , max (stock_initial) as qstock1 from regularisation group by idProduits) D
      on D.idProduits = A.idProduits

    L'organisation est totalement différente des requêtes précédentes. Dans les requêtes précédentes, si un produit avait 2 livraisons et 3 sorties et 4 régularisations, les montants auraient tous été multipliés par 2*3*4=24.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  11. #51
    Nouveau Candidat au Club
    Femme Profil pro
    ide
    Inscrit en
    Octobre 2019
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ide
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 191
    Points : 0
    Points
    0
    Par défaut Somme des champs
    Bonjour tbc92,

    Tout d'abord, un grand merci pour ton travail, j'ai testé ton code et il y a 4 petites choses, je sais j'abuse. J'ai regardé ton code et essayé de le modifier pour ne pas te déranger, mais je fais pire que bien. Heureusement que je l'ai sauvegarder sur mon PC.

    J'ai volontairement laissé les entêtes de colonne qui correspondent à ton code SQL.

    Lorsque je saisie un nombre négatif dans la colonne régularisation, par exemple sur la ligne essuie-main, le stock final ne change pas 10-3-1 je devrais avoir 12 et j'ai 13.

    Pièce jointe 514881

    Par contre lorsque je mets un nombre positif pour les même choses, la le stock final me mets 10+3+1 = 15 au lieu de 14.

    Pièce jointe 514887


    Sur cette même table, je n'ai pas la colonne Stock initial.
    Lorsque j'ajoute une nouvelle livraison pour un produit différent de celui qui est dans l'exemple de la copie d'écran, la ligne ne s'affiche pas, idem lorsque je teste la requête SQL.

    Info :
    Pour le stock initial, c'est effectivement une seule valeur numérique par produit. Cette valeur correspond à l'inventaire réel fait chaque année, souvent le 31/12. Donc la valeur n'est saisie qu'une seule fois.
    Pour la régularisation +/-, nous sommes amenés à faire un inventaire intermédiaire pour faire un contrôle. Lors de ce contrôle, on peut constater que par rapport au stock virtuel (le stock en informatique) et l'inventaire réel, il y a des produits en moins ou en plus. C'est ridicule je sais, mais là où je travaille cela arrive.
    Donc cet inventaire intermédiaire, nous permet d'ajuster le stock informatique pour être en corrélation avec le stock réel, et le tout par produit.

    Voilà à quoi sert le stock initial et la régularisation +/-.

    Tout mes remerciements pour ton aide. Crois-tu que l'on va s'en sortir parce que je ne veux pas te faire perdre ton temps, tu as surement autre chose à faire. Rien ne presse tu sais.

    Bonne soirée

  12. #52
    Nouveau Candidat au Club
    Femme Profil pro
    ide
    Inscrit en
    Octobre 2019
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ide
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 191
    Points : 0
    Points
    0
    Par défaut La ligne ne s'affiche pas
    Bonsoir,

    J'ai réussi à solutionner les problèmes précédents, à savoir le champ Stock Initial, les erreurs de calcul.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT   A.IDProduits , A.Produits, A.Conditionnement,
    COALESCE (E.qinit) AS Stock_Initial,COALESCE( B.qlivr,0) AS qlivr , COALESCE( C.qsor ,0) AS qsor , COALESCE( D.qregul,0) AS qregul ,  A.Prix_Unitaire ,
    COALESCE(D.qstock,0) + COALESCE(D.qregul,0) + COALESCE( B.qlivr,0)  - COALESCE(C.qsor,0) AS Stock_Final ,
    ( COALESCE (E.qinit) + COALESCE(D.qstock,0) + COALESCE(D.qregul,0) + COALESCE( B.qlivr,0)  - COALESCE(C.qsor,0) ) * A.Prix_Unitaire  AS Valeur_Stock
    FROM Produits A
    OUTER JOIN ( SELECT IDProduits, SUM(Quantité_Livrée) AS qlivr FROM Livraisons GROUP BY IDProduits) B
    ON B.IDProduits = A.IDProduits
    OUTER JOIN  (SELECT IDProduits, SUM(Quantité_Sortie) AS qsor FROM Sorties GROUP BY IDProduits) C
    ON C.IDProduits = A.IDProduits
    OUTER JOIN  (SELECT IDProduits, SUM(Régul_Stock) AS qregul , MAX (Stock_Initial) AS qstock FROM Régularisation GROUP BY IDProduits) D
    ON D.IDProduits = A.IDProduits
    OUTER JOIN (SELECT IDProduits, SUM(Stock_Initial) AS qinit FROM Régularisation GROUP BY IDProduits) E
    ON E.IDProduits = A.IDProduits

    Mais j'ai toujours le problème lorsque j'ajoute une nouvelle livraison pour un produit différent de ceux existants, la ligne de la nouvelle livraison ne s'affiche pas dans ma table Stock Final, idem lorsque je teste la requête SQL.
    Toujours avec le risque éventuel que pour les champs vide affiche NULL.

    Merci pour votre aide...

  13. #53
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 051
    Points : 9 386
    Points
    9 386
    Par défaut
    Il y a un utilitaire livr avec Windev qui s'appelle WDMAP.

    Avec cet utilitaire, tu peux lancer des petites requêtes ( ou des grosses requêtes...) et voir le résultat. Pour voir si ces requêtes donnent bien le résultat attendu.

    Ici on a la méga-requête, qui fait plein de choses. Mais on a des petites requêtes qui font chacune quelque chose de très simple.

    Dans WDMAP, lance ces 2 requêtes ( pas en même temps, tu peux lancer une seule requête à la fois) :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT IDProduits, SUM(Régul_Stock) AS qregul , MAX (Stock_Initial) AS qstock FROM Régularisation GROUP BY IDProduits
    SELECT IDProduits, SUM(Stock_Initial) AS qinit FROM Régularisation GROUP BY IDProduits
    SELECT IDProduits,  Stock_Initial , Regul AS qinit FROM Régularisation

    Ces 2 requêtes sont extraites de ton dernier message. La 3ème affiche tout le fichier.
    Dans un cas, on fait MAx(stock_initial), dans l'autre, on fait SUM(Stock_initial).
    A mon avis, il faut faire l'un ou l'autre, mais pas une fois l'un et une fois l'autre.
    Donc en regardant ces différentes requêtes, tu dois pouvoir dire laquelle affiche des choses sensées, et laquelle affiche n'importe quoi. Moi, je ne sais pas le faire.



    Autre façon d'aborder le problème.

    J'ai un produit avec AUCUNE livraison, et AUCUNE sortie. Simple donc.
    Dans le fichier Regularisation, j'ai 2 lignes pour ce produit.
    Une qui dit Stock_initial = 15 et Regul=1
    L'autre qui dit Stock_initial = 20 et Regul = 3.
    Ton programme doit afficher combien dans le stock final ? Et combien dans le stock initial ?
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  14. #54
    Nouveau Candidat au Club
    Femme Profil pro
    ide
    Inscrit en
    Octobre 2019
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ide
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 191
    Points : 0
    Points
    0
    Par défaut
    Bonsoir tbc92,

    Nos messages ont dû se croiser et comme je te le disait, j'ai réussi à solutionner certains problèmes , à savoir le champ Stock Initial et les erreurs de calcul.
    Mais j'ai toujours le problème à savoir lorsque j'ajoute une nouvelle livraison pour un produit différent de ceux existants, la ligne de la nouvelle livraison ne s'affiche pas dans mon Stock Final, idem lorsque je teste la requête SQL.
    Toujours avec le risque éventuel que pour les champs vide affiche NULL.

    Mon programme doit afficher un stock initial et un stock final par produit.

    Bonne fin de soirée

    P.S. : D'après mon test, il faut que je saisisse le stock initial, la quantité livrée, la quantité sortie et la régul stock pour que ma ligne s'affiche dans mon stock final. Hors un produits n'a pas forcément toutes ces données.

  15. #55
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 941
    Points : 1 931
    Points
    1 931
    Par défaut
    Il faut mettre des coalesce également dans tes sous-requêtes au cas où certaines valeurs seraient à NULL

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT   A.IDProduits , A.Produits, A.Conditionnement,
    COALESCE (E.qinit) AS Stock_Initial,COALESCE( B.qlivr,0) AS qlivr , COALESCE( C.qsor ,0) AS qsor , COALESCE( D.qregul,0) AS qregul ,  A.Prix_Unitaire ,
    COALESCE(D.qstock,0) + COALESCE(D.qregul,0) + COALESCE( B.qlivr,0)  - COALESCE(C.qsor,0) AS Stock_Final ,
    ( COALESCE (E.qinit) + COALESCE(D.qstock,0) + COALESCE(D.qregul,0) + COALESCE( B.qlivr,0)  - COALESCE(C.qsor,0) ) * A.Prix_Unitaire  AS Valeur_Stock
    FROM Produits A
    OUTER JOIN ( SELECT IDProduits, SUM(COALESCE(Quantité_Livrée,0)) AS qlivr FROM Livraisons GROUP BY IDProduits) B
    ON B.IDProduits = A.IDProduits
    OUTER JOIN  (SELECT IDProduits, SUM(COALESCE(Quantité_Sortie,0)) AS qsor FROM Sorties GROUP BY IDProduits) C
    ON C.IDProduits = A.IDProduits
    OUTER JOIN  (SELECT IDProduits, SUM(COALESCE(Régul_Stock,0)) AS qregul , MAX (Stock_Initial) AS qstock FROM Régularisation GROUP BY IDProduits) D
    ON D.IDProduits = A.IDProduits
    OUTER JOIN (SELECT IDProduits, SUM(COALESCE(Stock_Initial,0)) AS qinit FROM Régularisation GROUP BY IDProduits) E
    ON E.IDProduits = A.IDProduits
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  16. #56
    Nouveau Candidat au Club
    Femme Profil pro
    ide
    Inscrit en
    Octobre 2019
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ide
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 191
    Points : 0
    Points
    0
    Par défaut
    Bonjour Philippe,

    C'est déjà fait, vu que le code vient de tbc92, où alors je n'ai pas compris le sens de ta réponse.
    Mais je te remercie d'avoir pris le temps de me répondre.

  17. #57
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 051
    Points : 9 386
    Points
    9 386
    Par défaut
    Coalesce sert à corriger 2 types de problèmes
    - données manquantes ( pas de livraison pour un produit par exemple) : c'est le cas que je traite.
    - la ligne est présente, mais dans la colonne 'Quantité_livrée', on peut éventuellement avoir NULL : cas rarissime, voire impossible si on a coché la case 'interdire NULL'
    Donc le chnagement proposé par PhilouZ me paraît inutile.

    Ici, l'objectif est de simplifier une requête anormalement compliquée, pas de rajouter des trucs sur des trucs.

    Dans ta dernière requête ( hier 22h20) tu as un truc comme ça :
    select x1, y, z , x2+x+z ...
    et tu t'étonnes parce que x2+y+z ne coincide pas avec la somme des 3 autres colonnes x1, y et z.

    Normal. ok y et z sont les mêmes, repris 2 fois. Mais pour le stock initial, dans un cas tu extrais MAX(Stock_initial) ( alias d.qstock dans la requête ) et dans l'autre cas , tu extrais SUM(stock_initial) (alias e.qinit dans la requête).

    Et MAX(stock_initial) ou SUM(stock_initial), ce n'est pas la même chose.

    Tu as ajouté une table E ( en plus de B C D qui existaient déjà). Il ne fallait pas. Il fallait éventuellement modifier D...

    Je dis souvent ; "quand ça buggue, qu'est-ce qu'il faut enlever dans ce programme pour que ça marche ?" Parce que souvent, les programmeurs tatonnent, ils ajoutent une instruction ici ou là, ils ajoutent une colonne dans un fichier ... Et ça devient incompréhensible.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  18. #58
    Nouveau Candidat au Club
    Femme Profil pro
    ide
    Inscrit en
    Octobre 2019
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ide
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 191
    Points : 0
    Points
    0
    Par défaut Ligne ne s'affiche pas
    Bonsoir tbc92,
    J'ai effectué la correction que tu m'as indiqué et cela fonctionne.
    Cela étant, j'ai toujours le problème concernant la livraison d'un nouveau produit. La ligne ne s'affiche pas dans le stock final. Tu me parles d'interdire la valeur NULL cochée, je ne sais pas comment on fait.
    Merci pour ton aide.

  19. #59
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 051
    Points : 9 386
    Points
    9 386
    Par défaut
    La case 'interdire NULL' cochée, peu importe, je pense qu'on n'est pas concerné.

    Tu dis que dans certains cas, les montants affichés ne sont toujours pas bons. Mais tu ne montres pas la dernière version de ta requête, et tu ne montres pas un jeu de données qui ne marche pas. Donc on ne peut pas t'aider.

    A-tu fait les tests que je proposais avec WDMAP ? As-tu regardé parmi les 3 petites requêtes d'une lignes celles qui donnaient des résultats conformes à ta demande, et celles qui n'étaient pas bonnes ?

    En particulier, tu n'as pas répondu à la question :

    J'ai un produit avec AUCUNE livraison, et AUCUNE sortie. Simple donc.
    Dans le fichier Regularisation, j'ai 2 lignes pour ce produit.
    Une qui dit Stock_initial = 15 et Regul=1
    L'autre qui dit Stock_initial = 20 et Regul = 3.
    Ton programme doit afficher combien dans le stock final ? Et combien dans le stock initial ?
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  20. #60
    Nouveau Candidat au Club
    Femme Profil pro
    ide
    Inscrit en
    Octobre 2019
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ide
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 191
    Points : 0
    Points
    0
    Par défaut Ligne ne s'affiche pas
    Bonjour tbc92,

    Voici la dernière version de la requête stock :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT   A.IDProduits , A.Produits, A.Conditionnement,
    COALESCE (qstock,0) AS qstock , COALESCE( B.qlivr,0) AS qlivr , COALESCE( C.qsor,0) AS qsor , COALESCE( D.qregul,0) AS qregul ,  A.Prix_Unitaire ,
    COALESCE(D.qstock,0) + COALESCE(D.qregul,0) + COALESCE( B.qlivr,0)  - COALESCE(C.qsor,0) AS Stock_Final ,
    (COALESCE(D.qstock,0) + COALESCE(D.qregul,0) + COALESCE( B.qlivr,0)  - COALESCE(C.qsor,0) ) * A.Prix_Unitaire  AS Valeur_Stock
    FROM Produits A
    OUTER JOIN ( SELECT IDProduits, SUM(Quantité_Livrée) AS qlivr FROM Livraisons GROUP BY IDProduits) B
    ON B.IDProduits = A.IDProduits
    OUTER JOIN  (SELECT IDProduits, SUM(Quantité_Sortie) AS qsor FROM Sorties GROUP BY IDProduits) C
    ON C.IDProduits = A.IDProduits
    OUTER JOIN  (SELECT IDProduits, SUM(Régul_Stock) AS qregul , MAX (Stock_Initial) AS qstock, MAX(Stock_Initial) AS qstock FROM Régularisation GROUP BY IDProduits) D
    ON D.IDProduits = A.IDProduits

    Pour ce qui est des deux requêtes que tu m'as demandé de tester, elles affichent un résultat conforme à ce que j'attends, donc cela est bon et à priori on a plus à y revenir.
    Par contre j'ai un problème d'affichage de ligne comme je te l'expliquais précédemment, je te mets les copie d'écran :
    J'ai une livraison, dans mon exemple ( Gants T7 ) pour 15 unités, OK

    Pièce jointe 515692

    Dans la table stock final, cette ligne ne s'affiche pas

    Pièce jointe 515691

    J'ai parcouru divers sites pour trouver une solution dans la requête SQL sans résultat cohérent.

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. la somme des champs
    Par petchy dans le forum Access
    Réponses: 9
    Dernier message: 11/12/2006, 10h08
  2. [reporting services] Somme des champs
    Par Wells dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 07/08/2006, 11h28
  3. rave report (somme des champs par pages)
    Par mozcity dans le forum Composants VCL
    Réponses: 3
    Dernier message: 17/03/2006, 21h51
  4. somme des champs null
    Par s.rais dans le forum Access
    Réponses: 4
    Dernier message: 09/02/2006, 09h05
  5. Somme des champs ? existe t il une fonction ...
    Par dark_vidor dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/01/2006, 11h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo