Donnez vie à vos documents numériques !
 

Message apparait plus d’une fois

abracadabraPDF Forums PDF – Général Message apparait plus d’une fois

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45121
    Rockabilly
    Participant

    Je prépare un pdf pour mon département dans lequel les médecins doivent quantifier le traceur dans chacune des artères du coeur lorsque le patient est soumis à un stress et lorsque le patient est au repos.
    J’ai attaché une maquette du formulaire.

    Comme précisé dans les formulaire, chaque case ne peut contenir qu’un chiffre entre 0 et 4, ou 9. En temps normal, le chiffre de repos devrait être plus petit ou égal à celui de stress, mais dans certains cas le repos pourrait être plus haut que le stress. J’ai mis un « app.alert » dans chaque case, mais le problème est que si celà se reproduit plus d’une fois, l’avertissement reviendra pour chaque case même si la case avait déjà été validée. Donc si ça arrive une fois, le message apparait une fois, si ça arrive une autre fois, le message n’apparaitra pas qu’une fois, mais deux fois.

    Est-il possible de ne voir qu’une seule fois le message et que lorsque validé, le message ne ré-apparaitra pas une autre fois?

Affichage de 17 réponses de 1 à 17 (sur un total de 17)
  • Auteur
    Réponses
  • #58680
    Merlin
    Maître des clés

    Je ne suis pas certain de bien comprendre la question…
    :Euuuh:

    Ce que tu voudrais c’est une boite de dialogue qui affiche une case « Ne plus afficher » ?

    Autre chose : tes scripts de validation pourraient avantageusement être mis en fonction. C’est plus rapide à exécuter et c’est beaucoup plus facile à maintenir.
    :Smiley03:

    #58681
    alex
    Membre

    Bonjour,
    Il faut savoir que tous les scripts de calcul (en particulier des champs rawRP et RP) sont exécutés quelque soit la saisie effectuée.

    Je vous conseille de revoir globalement ce document et suivre le conseil de Merlin avec:
    une unique fonction liée à la validation de chaque saisie SP baptisée controleSP() pour s’assurer de sa validité (chiffre de 0 à 4 ou 9) .
    une unique fonction liée à la validation de chaque saisie rawSP baptisée fonctionrawSP()
    pour s’assurer de sa validité (chiffre de 0 à 4 ou 9) .
    une unique fonction dédiée au contrôle liée à la validation des saisies rawRP controle() assurant la comparaison de la valeur rawRP à la valeur SP correspondante.
    une unique fonction de calcul pour chacun des champ RP

    Par ailleurs les calculs des champ SRS et SRSraw me semblent erronés mais je peux me tromper.

    #58682
    alex
    Membre

    Quelques pistes pour commencer…
    Ci-dessous exemple pour le premier script des champs rawSp:
    function controlerawSP()
    {
    console.clear();
    saisie=this.event.value;
    champsaisierw=this.event.target;
    nomchamprw=this.event.target.name;
    nomchampRP= »RP »+nomchamprw.substring(5,nomchamprw.length)
    console.println(« Saisie de la valeur « +saisie+ » sur « +nomchamprw+ » associe a « +nomchampRP);
    //Validite de la saisie
    if(saisie!= » »)
    {
    if((saisie>=0&saisie {
    //Valid
    this.getField(nomchampRP).required = false;
    }
    else
    {
    app.alert(« ERROR: Please input a value between 0 and 4, or 9 if Unevaluable »,1);
    event.rc = false;
    }
    }
    else
    {
    champsaisierw.required = true;
    this.getField(nomchampRP).required = true;
    }
    }

    Ci-dessous correction du script pour le calcul de SSS:
    console.println(« Calcul SSS »)
    var total = 0; 
    for (var i=1; i{
    var v =this.getField(« SP »+i).value; 
    if (v!=9) {total+v; }

    event.value = total; 

    if(event.value

    #58683
    Rockabilly
    Participant

    Merci pour les conseils de fonctions, mais j’aurai besoin d’aide.
    J’ai réussi à faire fonctionner le script des champs rawRP et du même coup les champs SP.
    Maintenant j’ai essayé de d’écrire un script pour le contrôle des champs rawRP avec les champs SP, mais je crois que j’ai besoin d’aide.
    Voici ce que j’ai qui ne fonctionne pas (de plus lorsque je rajoute cette fonction, l’autre ne fonctionne plus):

    Code:
    function controle()
    {
    console.clear();
    var r = this.getField(« rawRP »+n);
    var s = this.getField(« SP »+n);

    console.println(r.name +  » value = ‘ » + r.value + « ‘ »);
    console.println(s.name +  » value = ‘ » + s.value + « ‘ »);

    //Controle de la saisie
      if(r.value > s.value)
      {
          var nRtn = app.alert(« ERROR: Rest Perfusion should not be greater than Stress Perfusion. Are you sure this is correct? »,1,2);
          if(nRtn == 4)
          {
          //Valid
          r.required = false;
          }
          else if(nRtn == 3)
          {
          r.required = true;
          event.rc = false;
          }
      }
      else
      {
      r.required = false;

      }
    }

    #58684
    alex
    Membre

    Dans votre script, n n’est pas défini.
    Sans votre maquette, je ne peux rien faire car je ne vois pas les déclencheurs.

    Aussi, je vous propose la mienne qui fonctionne avec deux scripts:
    1-chaque saisie validée active le script unique baptisé controleSaisie() qui vérifie la validité de la saisie des 34 champs de votre formulaire.
    2-Un script de contrôle baptisé controle() lié au calcul du champ « SSS » vérifie la cohérence des saisies « SP » et « rawRP », calcule et renseigne les champs de résultats « RP », »SRS » et « SDS ». Il faudra ajouter les calculs des champs manquants au sein de ce même script.
    Le bouton « Reset » est à vocation pédagogique. Il réinitialise le formulaire pour faire des tests.
    Pour la compréhension, les champs non saisis ont une bordure rouge par défaut, à corriger si besoin.
    Pour la compréhension, les champsRP valides apparaissent au fur et à mesure des saisies, à corriger si besoin.

    Il reste sans doute un peu de travail, mais l’essentiel est là. Inspirez vous du script initialisation() pour vos boutons radio « SPNormal » et « RPNormal ».

    #58685
    alex
    Membre

    Attention, je n’ai pas saisi le script de validation de tous les champs « SP » et « rawRP », à compléter donc avec :
    controleSaisie();

    #58686
    Rockabilly
    Participant

    Je crois que je préfère la première façon que tu avais proposé, i.e. 4 fonctions. De cette façon ce sera plus facile pour moi de faire des modifications au script.
    Je voudrais garder le calcul de SSS, SRS et SDS de façon indépendante que j’avais préalablement oublié d’expliquer:
    – SSS est la somme des 17 champs SP;
    – SRSraw est la somme des 17 champs rawRP;
    – SDSraw est la différence de SSS et rawSRS.

    une unique fonction de calcul pour chacun des champ RP

    J’ai le script individuel que je pourrais mettre dans chaque champs RP, mais j’aimerais pouvoir le rendre en fonction pour les champs RP

    if((this.getField(« rawRP1 »).value>=0&this.getField(« rawRP1 »).value
    {
    if((this.getField(« rawRP1 »).value
    {this.getField(« RP1 »).value.value = this.getField(« rawRP1 »).value
    this.getField(« RP1 »).required = false;
    }
    else
    if((this.getField(« rawRP1 »).value > this.getField(« SP1 »).value) && (this.getField(« rawRP1 »).value!=9))
    {this.getField(« RP1 »).value = this.getField(« SP1 »).value
    this.getField(« RP1 »).required = false;
    }
    else
    {this.getField(« RP1 »).required = true;}}

    #58687
    alex
    Membre

    Voici une maquette qui fonctionne avec deux scripts:
    1-chaque saisie validée active le script unique baptisé controleSaisie() qui vérifie la validité de la saisie des 34 champs de votre formulaire et note le rang du couple SP/rawSP impacté par la saisie.
    2-Un script de contrôle unique baptisé controle() lié au calcul du champ « SSS » vérifie la cohérence des saisies « SP » et « rawRP », détermine « RP » et calcule et renseigne les champs de résultats « SSS », »SRSraw » et « SDSraw » et les LVS. Pour les champs « SRS » et « SDS » et les « TID » je n’ai pas les formules de calcul.

    Le bouton « Normal » côté STRESS PERFUSION réinitialise la partie du formulaire gauche correspondante. Script initialisationSP().
    Le bouton « Normal » côté REST PERFUSION réinitialise la partie du formulaire droite correspondante et les « RP ». Script initialisationrawRP().

    Il reste à replacer les champs de saisies dans l’ordre souhaité par l’utilisateur pour usage des TAB et les formules de calcul manquantes à ajouter dans le script de contrôle.

    Notez bien que je n’utilise qu’une seule action de type calcul (sur le champ « SSS »).

    #58688
    Rockabilly
    Participant

    Merci Alex pour ton aide.
    Je ne sais pas s’il y a un problème avec le script de controle, mais la valeur de Ischemia Defect est calculée en retard. e.g. la valeur de sdsraw égale à 2, le Ischemia Defect ne sera calculé qu’au prochain changement de valeur mais en utilisant le 2 comme valeur même si la valeur est maintenant de 3.

    Modification: Parfois ça fonctionne en synchro et parfois il est en retard.

    Comment puis-je insérer le calcul de SRS et SDS dans la même fonction de contrôle, où SRS est la somme des valeurs de RP (pas les rawRP) et SDS est la différence entre SSS et SRS?
    J’ai essayé en utilisant le même patron de script, mais je n’y arrive pas.

    #58689
    alex
    Membre

    Bonjour,
    C’est justement pour éviter les retards que les calculs sont regroupés dans un script unique, malgré cela il y a quelques précautions à prendre.
    J’ajoute les derniers calculs (SRS et SDS) et je reviens vers vous avec un petit commentaire.

    #58690
    alex
    Membre

    On approche du but.
    C’est le calcul de la variable sommeRP qui était concerné par cette erreur car il passait par la mise à jour des champs RP. Une erreur de débutant….
    J’ai indiqué en commentaire dans le script de controle les modifications que j’ai apporté.
    Reste à faire quelques tests pour les cas particuliers (saisies inconsistantes en particulier).
    On voit dans cet exemple qu’il faut préférer le script unique à une cascade de calculs associés à des champs, enchaînement toujours délicat à gérer.

    #58691
    Merlin
    Maître des clés

    Il y a longtemps que j’ai décroché mais  :bravo: quand même.

    :Smiley01:

    #58692
    Rockabilly
    Participant

    Tout fonctionne à merveille.

    Une dernière question. J’ai retravaillé la fonction SPNormal et RPNormal qui remplit toutes les cases avec 0. Par contre je sais pertinemment comment les utilisateurs utiliseront cette fonction. Ils cliqueront dessus pour remplir tous les champs, et ensuite ne changeront que les segments affectés. Donc, je voudrais faire en sorte que si la fonction SPNormal (ou RPNormal) est activée et qu’un des champs n’est plus égal à 0, d’enlever le crochet dans la boîte SPNormal. J’ai essayé de plusieurs façons, mais je n’y arrive pas car je ne sais pas où mettre le script. Dois-je le mettre dans le script de bouton normal ou dois-je le mettre dans chacune des cases?

    #58693
    Rockabilly
    Participant

    On approche du but.
    C’est le calcul de la variable sommeRP qui était concerné par cette erreur car il passait par la mise à jour des champs RP. Une erreur de débutant….
    J’ai indiqué en commentaire dans le script de controle les modifications que j’ai apporté.
    Reste à faire quelques tests pour les cas particuliers (saisies inconsistantes en particulier).
    On voit dans cet exemple qu’il faut préférer le script unique à une cascade de calculs associés à des champs, enchaînement toujours délicat à gérer.

    J’ai retravaillé le formulaire et j’ai remarqué un problème qui était déjà présent dans ta maquette V4.
    Lorsque l’on rentre la valeur « 0 » dans la partie Stress et qu l’on insère une valeur plus élevée dans la partie Rest, il n’y a pas de message d’erreur indiquant que Rest>Stress. Cela ne fonctionne que si la valeur de Stress est  >= 1. Comment puis-je intégrer le message d’erreur pour qu’il s’affiche également lorsque la valeur est « 0 »?

    #58694
    Merlin
    Maître des clés
    #58695
    alex
    Membre

    Bonjour,
    Les champs de saisie sont au format numérique. Une saisie 0 est interprétée comme une saisie vide et la comparaison n’est pas effectuée dans ce cas d’où le problème.
    Dans la boucle du script de contrôle remplacer la ligne suivante:
    if(sp.value!= » »&sp.value!=9&r.value!= » »&r.value!=9)
    Par:
    if((sp.value!= » »|sp.value==0)&sp.value!=9&(r.value!= » »|r.value==0)&r.value!=9)

    #58696
    Rockabilly
    Participant

    Bonjour,
    Les champs de saisie sont au format numérique. Une saisie 0 est interprétée comme une saisie vide et la comparaison n’est pas effectuée dans ce cas d’où le problème.
    Dans la boucle du script de contrôle remplacer la ligne suivante:
    if(sp.value!= » »&sp.value!=9&r.value!= » »&r.value!=9)
    Par:
    if((sp.value!= » »|sp.value==0)&sp.value!=9&(r.value!= » »|r.value==0)&r.value!=9)

    Bonjour Alex
    Cela fonctionne bien, mais il semble y avoir un autre problème. Si Rest > Stress, et que l’on accepte la valeur lors de la vérification, le message de vérification revient lorsque l’on touche un autre champ.
    Par exemple, dans la maquette v4 j’ai rajouté deux boites. Si on provoque une situation où Rest > Stress et que l’on accepte, jusque là tout va bien. Mais is après je veux aller cliquer sur Modality (ou changer un chiffre dans le champ TID), le message revient.

    Est-ce possible de faire en sorte que lorsque le message est apparu une fois et que la vérification a été faite, de ne plus revoir le message?
    Merci encore pour ton aide.

Affichage de 17 réponses de 1 à 17 (sur un total de 17)
  • Vous devez être connecté pour répondre à ce sujet.