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 :

Problème de sélection à partir de deux fichiers [WD15]


Sujet :

WinDev

  1. #1
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 71
    Points : 62
    Points
    62
    Par défaut Problème de sélection à partir de deux fichiers
    Bonjour

    Je suis débutant et je suis en train de développer une application de gestion de stock pour un entrepot de stockage

    J'ai crée dans mon analyse les fichiers suivants :

    - "MASTER DATAS " avec les rubriques suivantes : Référence , Description , Fournisseur , Quantité par unité de manutention , Poids , Volume.
    - "Réception" avec les rubriques suivantes : N° Réception , Date , Fournisseur , Quantité totale reçues
    - "Ligne de réception" avec les rubriques suivantes : N° IDLigneReception , N° réception , Référence, Description , Quantité unitaire.
    - "commande" avec les rubriques suivantes : N° Commande , Date , Client.
    - "Ligne de commande" avec les rubriques suivantes : N° IDLigneCde , N° Commande , référence , Description,Quantité commandée

    Remarques importante : lors d'une Livraison par un fournisseur , la réception ou l'entrée en stock dans l'entrepot se fait par unité de livraison (par exemple colis ou palette) , chaque ligne de réception correspond à une unité de livraison fournisseur

    Ce que je souhaite faire : c'est lorsque j ai une commande d'un client pour un Référence donnée avoir (via un requette ou autre dans WINDEV) la liste des "n" premiers N° IDLigneReception dont la somme des quantités unitaires est égale ou inférieures à la quantité commandée de mon fichier Ligne de Commande ?

    Merci beaucoup de votre aide.
    Slts Totik

  2. #2
    Membre confirmé Avatar de PaulNero
    Homme Profil pro
    DBA Senior Oracle and SQL SERVER
    Inscrit en
    Octobre 2010
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Inde

    Informations professionnelles :
    Activité : DBA Senior Oracle and SQL SERVER
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 416
    Points : 470
    Points
    470
    Par défaut
    Bonjour,
    déja dans ton analyse faudra que tu revois bien ton modèle de donnée (conception).Car j'aperçois certaines redondances.Il va falloir peut être crée une table fournisseur et produit.Ainsi un fournisseur sera lié à une commande et un produit concernera une commande....
    D'autre part,il faudrait que tu nous présentes ton code.Car un effort de ta part nous permet de déviner qu'on a affaire à une personne qui cherche mais qui sèche sur certain concepts de windev.
    Ce que tu veux faire est faisable avec des Hlit,Hlitrecherche, tantque,...ou encore des filtres ou des requêtes.

    Mais une bonne conception te permettra même toi même de mieux voir le problème en terme de développement.Et si tu travailles avec un responsable qui connait rien de la conception, propose lui ton modèle en argumentant, sinon c'est la galère.

    Cordialement
    Cordialement,
    J'ose espérer que m'a contribution vous a été d'une grande aide.
    Pensez tout de Même à dire MERCI et marquer RESOLU en cas de satisfaction.
    Paul

  3. #3
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 71
    Points : 62
    Points
    62
    Par défaut
    Bonjour

    Vous trouverez en pièce jointe le modèle logique de données de mon projet.

    J'ai crée une fenetre dans laquelle j'ai inséré 3 champs tables (Table_Commande , Table ligneCommande et Table En cours Préparation Cde) qui sont liés à des fichiers . le but est d'afficher dans la table en cours de préparation Cde les lignes de références produit qui sont nécessaire à satisfaire la commande du client si le stock le permet.

    J'usqua à présent ma fenetre m affiche toutes lignes de référence produit en stock , comment puis je limiter l'affichage de ces lignes pour n avoir que les lignes dont la somme de quantités unitaires est égale ou inférieur à la commande ?

    Ci-dessous le code que j ai essayé de faire sur sélection d'une ligne table ligneCde:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [/[// Filtre le fichier LigneRéception avec l'identifiant de la référence du produit
    HFiltre(LigneRéception,Référence,LigneCde.Référence,LigneCde.Référence)
    // Réaffiche la table des LigneRéception
    TableAffiche(TABLE_Encours_Préparation,taInit)
    Trace(COL_Quantité[ligneTotal])
    TableActiveFiltre(TABLE_Encours_Préparation.COL_Quantité,filtreInférieurOuEgal,TABLE_LigneCde.COL_Quantitécommandée)
    TableAffiche(TABLE_Encours_Préparation)]
    :]

    Slts
    Totik
    Fichiers attachés Fichiers attachés

  4. #4
    Membre confirmé Avatar de PaulNero
    Homme Profil pro
    DBA Senior Oracle and SQL SERVER
    Inscrit en
    Octobre 2010
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Inde

    Informations professionnelles :
    Activité : DBA Senior Oracle and SQL SERVER
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 416
    Points : 470
    Points
    470
    Par défaut
    ton modèle a beaucoup de redondances.
    Peux tu m'édifier à propos des fichiers qui rentrent en compte dans ta préoccupation?

    Car pour moi je vois les fichiers:LigneCmde,Master Data,Commande.
    Tu parles de lignes inférieures à la commande, laquelle, veux tu parler de la quantité commandée du fichier commande ou du fichier lignecmde?

    Sinon une requête peut le faire.Il te suffit de remplir la table préparation en cour grâce à cette requête.
    Mais je le rappelle, cette requête ne peut être construite si je ne comprends pas bien votre préocuppation.


    Cordialement
    Cordialement,
    J'ose espérer que m'a contribution vous a été d'une grande aide.
    Pensez tout de Même à dire MERCI et marquer RESOLU en cas de satisfaction.
    Paul

  5. #5
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 71
    Points : 62
    Points
    62
    Par défaut
    Bonjour

    Les fichiers qui rentrent dans ma préoccupation sont les fichiers : Commande , Ligne de commmande et Ligne de réception

    - C'est la quantité commandée du fichier Ligne de commande

    Ci-dessous un exemple de ce que je souhaite avoir :
    - Fichier Commande avec les rubriques suivantes : N° Commande : 1 , Date : 16 05 2012 , Client : Entreprise SA ,
    - Fichier LigneCommande avec les rubriques suivantes : N° IDLigneCommande : 1 , N° Commande : 1 , Référence Produit : 999999 , Description : Produit nettoyant , Quantité commandée : 100
    - Fichier LigneRéception (qui représente mon stock) avec les rubriques suivantes :

    N°LPN ==== Référence ======= Description ========== Quantité unitaire LPN === Emplacement de stock
    1 ==== 999999 ======= Produit nettoyant ==== 25 === A1
    2 ==== 999999 ======= Produit nettoyant ==== 25 === A2
    3 ==== 999999 ======= Produit nettoyant ==== 25 === A3
    4 ==== 999999 ======= Produit nettoyant ==== 25 === A4
    5 ==== 999999 ======= Produit nettoyant ==== 25 === A5

    Résultat de la requette :

    N° Commande ====== Quantité Commandée ======N°LPN ==== Référence ======= Description ========== Quantité unitaire LPN === Emplacement de stock
    1 ================ 100 ================ 1 ==== 999999 ======= Produit nettoyant ==== 25 === A1
    1 ================= 100 =============== 2 ==== 999999 ======= Produit nettoyant ==== 25 === A2
    1 ================= 100 =================3 ==== 999999 ======= Produit nettoyant ==== 25 === A3
    1 ================= 100 ===================4 ===== 999999 ======== Produit nettoyant ==== 25 === A4

    Merci

    Slts
    Totik

  6. #6
    Membre confirmé Avatar de PaulNero
    Homme Profil pro
    DBA Senior Oracle and SQL SERVER
    Inscrit en
    Octobre 2010
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Inde

    Informations professionnelles :
    Activité : DBA Senior Oracle and SQL SERVER
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 416
    Points : 470
    Points
    470
    Par défaut
    bonjour,
    visiblement, tu n'a pas besoin de faire figurer le nom du client ou de l'entreprise (enfin à ce que je vois).Donc tu peux faire ceci:
    req_ListeValeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select numero commande,reférence produit,description,quantité commandée,quantité unitaire LPN,N°LPN,emplacement stock from  LigneCommmande inner join LigneReception on Lignecommande.Reference=LigneReception.reference;
    une fois cette requête est faite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Hexecuterequete(req_ListeValeur)
     
    hlitpremier(req_ListeValeur)
    tantque pas hEndehors() 
           // ajoute seulement les valeurs qu'on veut dans la table
          si   req_ListeValeur.quantitécommandée>req_ListeValeur.quantitéunitaireLPN
    tableajoute(nomtable,req_ListeValeur.NumeroCommande+TAB+req_ListeValeur.QuantitéCommandée+TAB+req_ListeValeur.N°LPN+TAB+req_ListeValeur.reference+TAB+req_ListeValeur.Description Produit+TAB+req_ListeValeur.QuantitéUnitaireLPN+TAB+req_ListeValeur.EmplacementStock)
       FIN
        Hlisuivant(req_ListeValeur)
    FIN
    Cordialement
    Cordialement,
    J'ose espérer que m'a contribution vous a été d'une grande aide.
    Pensez tout de Même à dire MERCI et marquer RESOLU en cas de satisfaction.
    Paul

  7. #7
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 71
    Points : 62
    Points
    62
    Par défaut
    Bonjour

    Je vous remercie , cette requette marche à merveille mais elle me donne la totalité des valeurs de Quantité unitaireLPN de la ligne de réception ( 5 lignes)

    Serait il possibile de limiter le resultat de cette requette ( à 4 lignes seulement) de telle sorte que la somme des quantités unitaire LPN soit inférieure ou égale à la valeur de la quantité commandée de la ligne de commande ?

    Slts
    Totik

  8. #8
    Membre confirmé Avatar de PaulNero
    Homme Profil pro
    DBA Senior Oracle and SQL SERVER
    Inscrit en
    Octobre 2010
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Inde

    Informations professionnelles :
    Activité : DBA Senior Oracle and SQL SERVER
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 416
    Points : 470
    Points
    470
    Par défaut
    Bonjour,
    si tu veux afficher seulement 4lignes tu peux modifier la requête comme ceci(selon ce que j'ai compris jusque là):

    1ère technique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select  numero commande,reférence produit,description,quantité commandée,quantité unitaire LPN, TOP 4 N°LPN,emplacement stock from  LigneCommmande inner join LigneReception on Lignecommande.Reference=LigneReception.reference
    Order by N°LPN   ASC;
    2ème technique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Tablesupprimetout(nomtable)
    Hexecuterequete(req_ListeValeur)
    
    hlitpremier(req_ListeValeur)
    tantque pas hEndehors() 
     // ajoute seulement les valeurs qu'on veut dans la table
          si   req_ListeValeur.quantitécommandée>req_ListeValeur.quantitéunitaireLPN ET 
    req_ListeValeur.N°LPN<=4 ALORS
        tableajoute(nomtable,req_ListeValeur.NumeroCommande+TAB+req_ListeValeur.QuantitéCommandée+TAB+req_ListeValeur.N°LPN+TAB+req_ListeValeur.reference+TAB+req_ListeValeur.Description Produit+TAB+req_ListeValeur.QuantitéUnitaireLPN+TAB+req_ListeValeur.EmplacementStock)
       FIN
        Hlisuivant(req_ListeValeur)
    FIN
    tableaffiche(nomtable)
    Puis après tu parles de:Somme des quantité Unitaire LPN qui doit être inférieur ou égal à la quantité commandée.
    il suffit de modifier la requête comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select  numero commande,reférence produit,description,quantité commandée,SUM(quantité unitaire LPN) AS somQtLPN, TOP 4 N°LPN,emplacement stock from  LigneCommmande inner join LigneReception on Lignecommande.Reference=LigneReception.reference
    Order by N°LPN   ASC;
    Puis tu implémentes comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Tablesupprimetout(nomtable)
    Hexecuterequete(req_ListeValeur)
    
    hlitpremier(req_ListeValeur)
    tantque pas hEndehors() 
     // ajoute seulement les valeurs qu'on veut dans la table et là plus besoin de tester si les LPN sont inférieurs à 4
          si  req_ListeValeur.somQtLPN<=req_ListeValeur.QuantitéCommandée ALORS
    
        tableajoute(nomtable,req_ListeValeur.NumeroCommande+TAB+req_ListeValeur.QuantitéCommandée+TAB+req_ListeValeur.N°LPN+TAB+req_ListeValeur.reference+TAB+req_ListeValeur.Description Produit+TAB+req_ListeValeur.QuantitéUnitaireLPN+TAB+req_ListeValeur.EmplacementStock)
       FIN
        Hlisuivant(req_ListeValeur)
    FIN
    
    tableaffiche(nomtable)
    Bonne chance.

    Cordialement
    Cordialement,
    J'ose espérer que m'a contribution vous a été d'une grande aide.
    Pensez tout de Même à dire MERCI et marquer RESOLU en cas de satisfaction.
    Paul

  9. #9
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 615
    Points : 841
    Points
    841
    Par défaut
    Bonjour
    Si je comprend bien ta commande est basée sur 100 articles identiques qui eux sont stockés par 25 dans des endroits différents et c'est pour cela que tu ne veux que 4 lignes de résultat
    tu peux utiliser ce que te conseille PaulNéro

    Dans sa requete qui te renvoit les 5 résultats tu prends les lignes de résultat une par une
    tu additionnes tout simplement les valeurs en stock et quand cela dépasse ou atteint la quantité commandée, tu n'ajoutes pas dans ta table
    ensuite tu affiches ta table

    Bon dev
    gancau

  10. #10
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Bonjour,

    je serais plutôt d'avis de lier la réception à la commande. Cela te permettra de savoir si la livraison est bien justifiée, quelle commande est soldée, depuis la commande est livrée etc ...

    Si la livraison est liée à la commande, dans ce cas tu ne peux pas livrer plus que ce qu'il y a dans la commande et donc si tu recherches les produits livrés, tu tombes forcément sur le nombre de produits commandés au maximum.

    à bientôt,

    Nicolas

  11. #11
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 71
    Points : 62
    Points
    62
    Par défaut
    Bonjour Paul

    Quand j'ai utilisé la somme des quantités unitaire LPN dans la req-listevaleur, je n ai plus les N° LPN qui s'affiche , non plus les emplacements de stockage

    Gancau vous avez dis:

    Dans sa requete qui te renvoit les 5 résultats tu prends les lignes de résultat une par une
    tu additionnes tout simplement les valeurs en stock et quand cela dépasse ou atteint la quantité commandée, tu n'ajoutes pas dans ta table
    ensuite tu affiches ta table
    Est ce que tu peux me dir comment je peux additionner les lignes de la requette une par une ?

    Je vous remercie tous pour votre soutien et votre aide précieuse

    Slts
    Totik

  12. #12
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 71
    Points : 62
    Points
    62
    Par défaut
    Bonjour

    J'ai trouvé la solution à mon problème de limiter les enregistrement d'une requette :

    Remarque importante :
    - J'ai ajouté une colonne dans ma table mémoire , le but de cette colonne est de déterminer lors de la création de la commande le Nombre des unités prévisionnelles (LigneCde.NBUC) pour satisfaire la commande du client , par rapport à cette unité prévisionnelle j'éxécute ma requette avec une boucle (i).
    - Avec l'identificateur x , j'ai pu déterminer s'il y aura du picking a faire dans la commande ( quand la quantité commandée comparée au standard de la palettisation du produit commandée donne des chiffres après la virgule et nom pas un entier ( par exemple LigneCde.NB UC = 1.5 , cela veut dire qu'il faut sortir 1 palette et 5 cartons).

    Code : 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
    REQ_ListeValeurs.Param1 = LigneCde.Référence
    HExécuteRequête(REQ_ListeValeurs)
    HLitRecherche(REQ_ListeValeurs,REQ_ListeValeurs.Référence,"")
    i est un entier
    i = HNbEnr(REQ_ListeValeurs)
    POUR i = 1 A LigneCde.NBUC
       TableAjoute(TABLE_Encours_Préparation)
       TABLE_Encours_Préparation.COL_N°_LPN[i] = REQ_ListeValeurs.IDLigneRéception
       TABLE_Encours_Préparation.COL_Référence[i] = REQ_ListeValeurs.Référence
       TABLE_Encours_Préparation.COL_Désignation[i] = REQ_ListeValeurs.Description
       TABLE_Encours_Préparation.COL_N°_Lot[i] = REQ_ListeValeurs.Lot
       TABLE_Encours_Préparation.COL_Quantité[i] = REQ_ListeValeurs.QuantitéUC
       TABLE_Encours_Préparation.COL_Adresse[i] = REQ_ListeValeurs.Adresse
       TABLE_Encours_Préparation.COL_Statut[i] = REQ_ListeValeurs.Statut
       HLitSuivant(REQ_ListeValeurs)
     
    FIN
     
    x est un réel
    x = LigneCde.NBUC - LigneCde.Quantitécommandée / 10
     
    SI x = 0 ALORS
       Erreur("Cette commande ne contient pas  du Picking.")
     
    SINON
       HExécuteRequête(REQ_PICKING)
       HLitPremier(REQ_PICKING)
       TableAjoute(TABLE_Encours_Préparation)
       TABLE_Encours_Préparation.COL_N°_LPN = REQ_PICKING.IDLigneRéception
       TABLE_Encours_Préparation.COL_Référence = REQ_PICKING.Référence
       TABLE_Encours_Préparation.COL_Quantité = REQ_PICKING.QuantitéUC
       TABLE_Encours_Préparation.COL_Adresse = REQ_PICKING.Adresse
       TABLE_Encours_Préparation.COL_Statut = REQ_PICKING.Statut
       Info("Cette commande des colis qui doivent etre pickés ?")
    FIN
     
    TableAffiche(TABLE_Encours_Préparation)
    mon code il marche , j'ai un petit problème de tableajouteline , mais je vais le résoudre.

    Slts
    Totik

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/12/2013, 10h08
  2. Réponses: 1
    Dernier message: 30/09/2013, 14h46
  3. Problème liste chainée à partir d'un fichier .txt
    Par bretdu55 dans le forum Linux
    Réponses: 10
    Dernier message: 17/11/2011, 17h07
  4. faire une liste a partir de deux fichiers txt
    Par finelady dans le forum SL & STL
    Réponses: 4
    Dernier message: 15/04/2008, 10h39
  5. Réponses: 2
    Dernier message: 24/08/2007, 20h17

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