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 :

[W10] Comparer les résultats d'une requête avec des lignes de table mémoire


Sujet :

WinDev

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    Points : 39
    Points
    39
    Par défaut [W10] Comparer les résultats d'une requête avec des lignes de table mémoire
    Bonjour,

    je cherche à comparer des références produits listées dans une table mémoire et celles listées dans un fichier précis. J'explique mon cas.

    Quand j'ouvre une fenêtre Bon de réception en mode "modification", je liste dans une table toutes les références produits composant ce bon. Je peux le modifier en supprimer par exemple une ligne (une référence produit). A l'enregistrement de la modif, il faut que je sache quel est le produit qui a été supprimé (pour pouvoir gérer son stock derrière).

    Toutes les autres modifi ne m'ont pas "trop" !!! posées de problème (ajout ou modif) mais je bloque sur la suppression.

    J'ai déjà fait une requête (REQ_BR_ESSAI) qui me permet de lister les références produits de chaque ligne du bon en cours de modification. Maintenant, il faudrait que je compare cette liste avec les réf. de la table.

    J'ai essayé des boucles, comme ci-dessous mais FORCEMENT, cela ne va pas puisque la boucle fait plusieurs fois les mêmes tests !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // On liste toutes les références enregistrées avant modif dans le bon en modification
    HExécuteRequête(REQ_BR_Essai,hRequêteDéfaut,SAI_NumeroBon)
    POUR TOUT REQ_BR_Essai.Reference
    	Info(REQ_BR_Essai.Reference)
    	i est un entier
    	POUR i=1 A TableOccurrence(TABLE_BonReception)
    		SI TABLE_BonReception.Reference[i]=REQ_BR_Essai.Reference ALORS
    			Info("la réf : "+REQ_BR_Essai.Reference+" est présente")
    		SINON
    			Info("la réf : "+REQ_BR_Essai.Reference+" est absente")
    		FIN
    	FIN
    FIN
    HAnnuleDéclaration(REQ_BR_Essai)

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Tu n'aurais pas meilleur compte de balayer ta table et pour chaque ligne chercher le produit ?
    • tu mets une case à cocher pour valider les lignes
    • tu "balayes" a table
    • pour chaque ligne : si la ligne n'est pas cochée (donc pas validée, donc à supprimer) tu cherches la fiche produit et tu modifies la Quantité du stock

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    Points : 39
    Points
    39
    Par défaut
    J'aime pas trop le principe de case à cocher. J'essai d'éviter d'imposer ce genre de manip à l'utilisateur. Pour le balayage, la boucle, c'est ok. Mais voilà, je me retrouve avec 2 boucles !!!
    J'aimerais faire d'abord la boucle pour balayer la table et, pour chaque produit, voir si la réf. fait partie des résultats de la requête. Mais comment ?

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Mais comment vas-tu valider les lignes à supprimer ?
    Avec une table multi-sélection et supprimer les lignes sélectionnées ?
    Dangereux ça

    Sinon quel est le problème d'avoir 2 boucles ?
    Et pourquoi 2 boucles ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par Guardian
    Mais comment vas-tu valider les lignes à supprimer ?
    Avec une table multi-sélection et supprimer les lignes sélectionnées ?
    Dangereux ça
    En fait j'utilise le même principe que pour la création du bon. Un bouton permet d'ajouter un produit dans la table, un autre l'effacer.

    Sinon quel est le problème d'avoir 2 boucles ?
    Et pourquoi 2 boucles ?
    La première pour lire tous les lignes de la table, l'autre pour lire tous les résultats de la requête. Je ne sais pas comment faire autrement pour lire tous les résultats de la requête.

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    - Donc tu vas effacer ligne par ligne ?

    - Mais pourquoi une requête ?
    Tu fais ta boucle table et à chaque ligne supprimées (ce n'est pas nécessaire pour les autres lignes qui ne sont pas modifiées) tu vas chercher l'enregistrement correspondant avec HLitRecherche()
    Tu dois avoir un champ clef sur ton article, soit un N° d'article, soit la désignation, qui te permet une recherche extrêmement rapide avec les fonctions HF

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    Points : 39
    Points
    39
    Par défaut
    En fait l'édition d'un bon se passe en 2 étapes : une première avec sélection (via une popup ou un code-barre) et ajout des articles dans la table ou effacement des produits sélectionnés dans la table ; une seconde avec le bouton valider qui va enregistrer le bon et modifier les fichiers stocks.
    Le soucis que j'avais c'était de savoir quels étaient les réf supprimées de la table (à l'étape 1) afin de modifier leur stock lors de la validation du bon (à l'étape 2). Comme elles sont absentes de la table, le traitement de leur stock ne pouvait se faire.
    Je voulais faire une requête pour lister les réf. enregistrées avant la modif. pour les comparer aux réf listées dans la table. Et ainsi trouver les réf supprimées pour pouvoir gérer leur stock (indépendament des autres réf).
    Mais j'ai trouvé + simple . En fait, lors de la modif. et de l'effacement des lignes, je vais faire une boucle et à chaque ligne supprimée, je récupère la réf. Et à la validation, je supprime ou modifie le stock de ces réf. supprimées (en des autres).
    On a eu la même idée !!!

Discussions similaires

  1. Récupérer les résultats d'une requête dans des variables
    Par christophebolmontcha dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 23/05/2014, 10h14
  2. Afficher les résultats d'une requête comme des colonnes
    Par bouts dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/08/2010, 17h39
  3. problème avec les résultats d'une requête select top1
    Par kariiim dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 19/03/2007, 15h05
  4. Réponses: 2
    Dernier message: 10/02/2007, 05h52
  5. Afficher le résultat d'une requête avec des côtes
    Par sweet_hell dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/10/2006, 10h32

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