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 :

Traitement sur plusieurs plans/bouton dans un POUR TOUT [WD23]


Sujet :

WinDev

  1. #1
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 219
    Points : 72
    Points
    72
    Par défaut Traitement sur plusieurs plans/bouton dans un POUR TOUT
    Bonjour,

    Je suis en train de développer un petit module sur terminal industriel dans le but de préparer des bons de commande.
    Je lance donc une requete pour avoir l'ensemble des lignes à préparer puis je navigue dans un POUR TOUT.
    Voici le bout de code :

    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
    REQ_LIGNE_BON_PREPARATION.ParamNumNE=TABLE_REQ_BON_PREPA_PAR_STATUT.COL_NumNE
    HExécuteRequête(REQ_LIGNE_BON_PREPARATION)
     
    POUR TOUT REQ_LIGNE_BON_PREPARATION // Traitements des lignes à préparer
    	gsLocalisationEnCours=REQ_LIGNE_BON_PREPARATION.Localisation
    	gxQteATrouver=REQ_LIGNE_BON_PREPARATION.QuantitéFacturé
    	gsNumArticle=REQ_LIGNE_BON_PREPARATION.NumArticle
    	gsDésignationArticle=REQ_LIGNE_BON_PREPARATION.Désignation
     
    	LIB_NumArticle=gsNumArticle
    	LIB_DesignationArticle=gsDésignationArticle
    	LIB_RefEqp=""
    	LIB_RefOE=""
    	LIB_LocalisationAtrouver=gsLocalisationEnCours
    	LIB_QteATrouver = " / "+gxQteATrouver
     
    	MaFenêtre..Plan=2 //On va à la fenetre de localisation d'étagère
    	DonneFocus(SAI_LocalisationBip)
     
    FIN
    J'ai un souci sur mon DonneFocus. Ou EcranPremier? Ou RepriseSaisie?

    En fait, pour chaque résultat de requête je veux passer sur le plan 2 faire un traitement pour vérifier que la personne est au bon endroit. Il y a donc un champ de saisie à remplir et un bouton validation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SI SAI_LocalisationBip<>gsLocalisationEnCours ALORS
    	Erreur("Vous n'avez pas scanné la bonne étagère !")
    	DonneFocus(SAI_LocalisationBip)
    FIN
     
    MaFenêtre..Plan=3
    DonneFocus(SAI_NumArticleScanné)
    Toujours même intérrogation avec mon DonneFocus.

    Ensuite je part en plan 3 avec d'autres traitements, etc...Puis une fois terminer je voudrais passer à l'enregistrement suivant.

    En debogant le 1er code, je m'apercois de ce que dit l'aide. Le DonneFocus et EcranPremier ne bloque pas le traitement. Du coup, je parcours ma requête sans pause et sans tenier compte des mes traitement de plan 2, 3 etc...
    Le RepriseSaisie me stoppe bien pour aller faire le reste mais ne reviens jamais à la suite pour continuer le parcours de la requête.

    Quelle serait votre solution?
    Faut-il que je me dirige vers des Hlit?

    Merci

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    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 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Il va falloir passer par des hlitSuivant, mais ça ne suffira pas. C'est la structure de ta boucle toute entière qu'il faut modifier.

    Ton problème est plus large. On va généraliser. Tu veux demander 10 saisies à l'utilisateur.
    Tu ne peux pas faire ça, ça ne marchera pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    pour i_boucle = 1 a 10
       mafenetre..plan = 2  //   ou donnefocus(xxx)   // ou ecranpremier(xxx)
    fin

    Mais tu peux faire quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    pour i_boucle = 1 a 10
       si saisie ( " donnez un nombre ", valeur_saisie ) <> 1 alors 
          erreur ( " Vous avez cliqué sur le bouton ANNULER ")
          retour
       fin
    fin
    A la place de la fonction saisie() , tu peux ouvrir une fenêtre avec plein de choses. Et dans ce cas, tu as d'une part la fenêtre où se trouve cette boucle, et d'autre part unee fenêtre, que tu ouvres 10 fois.
    Mais tu ne peux pas 'interrompre' ton traitement en attendant une action dans la fenêtre en cours. Si tu veux faire une boucle, et à chaque étape de ta boucle , demander une action de l'utilisateur, forcément, cette action se fera dans une fenêtre fille. Une boite de dialogue, comme par exemple la fenêtre Ouinon(), c'est une fenêtre fille.

    Si tu veux faire une boucle, sans passer par une fenêtre fille, tu vas avoir un premier bouton 'LANCER boucle' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    i_boucle = 1
    mafenetre..plan = 2
    Et dans le plan 2, dans le bouton valider , tu vas avoir quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // code pour mémoriser les paramètres saisis
    i_boucle++
     
    si i_boucle > 10 alors
     mafenetre..plan = 1 
    sinon
      // code pour réinitialiser plan 2 pour l'élément suivant.
    fin
    Dans ton cas, il faudra passer par des hlitsuivant() pour la partier 'réinitialiser plan2' , et aussi pour remplacer le test de fin de boucle.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 219
    Points : 72
    Points
    72
    Par défaut
    Merci @tcb92

    J'essai ça en début de semaine et reviens vers vous.

    Cordialement,

  4. #4
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 219
    Points : 72
    Points
    72
    Par défaut
    Bonjour,

    Tout me semble OK, mais j'ai simplifié un peu le code.

    Dans le 1er valider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    REQ_LIGNE_BON_PREPARATION.ParamNumNE=TABLE_REQ_BON_PREPA_PAR_STATUT.COL_NumNE
    HExécuteRequête(REQ_LIGNE_BON_PREPARATION)
     
    gnNbreEnrReq=HNbEnr(REQ_LIGNE_BON_PREPARATION)
    i_boucle = 1
    HLitPremier(REQ_LIGNE_BON_PREPARATION)
     
    ChargeChampsLigneBonPréparation()
    Dans le dernier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SI gxQteScanner<gxQteATrouver
    	RepriseSaisie(SAI_NumArticleScanné)
    FIN
     
    HLitSuivant(REQ_LIGNE_BON_PREPARATION)
    SI PAS HEnDehors() ALORS
    	ChargeChampsLigneBonPréparation()
     
    SINON
    Info("Fin de traitement")	
    FIN
    Et ma procédure

    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
    PROCÉDURE ChargeChampsLigneBonPréparation()
    RAZ()
    gsLocalisationEnCours=REQ_LIGNE_BON_PREPARATION.Localisation
    gxQteATrouver=REQ_LIGNE_BON_PREPARATION.QuantitéFacturé
    gsNumArticle=REQ_LIGNE_BON_PREPARATION.NumArticle
    gsDésignationArticle=REQ_LIGNE_BON_PREPARATION.Désignation
    gxQteScanner=0
     
    LIB_NumArticle=gsNumArticle
    LIB_DesignationArticle=gsDésignationArticle
    LIB_RefEqp=""
    LIB_RefOE=""
    LIB_LocalisationAtrouver=gsLocalisationEnCours
    LIB_QteATrouver = " / "+gxQteATrouver
     
    MaFenêtre..Plan = 2
    RepriseSaisie(SAI_LocalisationBip)

    Merci

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

Discussions similaires

  1. idee pour traitement sur plusieurs fichier excel
    Par jumpman dans le forum VB.NET
    Réponses: 0
    Dernier message: 28/10/2009, 19h38
  2. [AC-2007] Sélection sur plusieurs listes déroulantes dans un bouton
    Par Razorback dans le forum IHM
    Réponses: 61
    Dernier message: 05/06/2009, 20h16
  3. Déplacement sur plusieurs plans
    Par kiwio dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 09/04/2009, 13h06
  4. Réponses: 4
    Dernier message: 27/11/2006, 18h06
  5. [SQL] Traitement de plusieurs requêtes .SQL dans un script PHP?
    Par M4x dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 19/03/2006, 19h59

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