Donnez vie à vos documents numériques !
 

Vérification et tri

abracadabraPDF Forums PDF – Général Vérification et tri

  • Créateur
    Sujet
  • #75407
    michel c.
    Participant

    Bonjour, j’ai crée un document qui me permettra de positionner les dates de passages d’examen pour mes élèves et j’aimerais ajouter quelques fonctionnalités :

    • Lors du clic sur le bouton “générer les listes d’élèves”, j’aimerais que les champs groupe.n.1 listent tous les élèves d’un même groupe (chaque groupe correspond à la valeur des champs gato.i)

    • J’aimerais que les champs groupe.n.2 fassent le total des lignes (des élèves) qui se trouvent dans les champs au dessus (groupe.n.1)

    • Lors du clic sur vérifier j’aimerais avoir un message d’alerte si un élève a été oublié et un autre si un élève a été positionné 2 fois

    Merci

    Attachments:
    You must be logged in to view attached files.
Affichage de 13 réponses de 1 à 13 (sur un total de 13)
  • Auteur
    Réponses
  • #75410
    Merlin
    Maître des clés

    Salut

     

    C’est typiquement une question pour bebarth, les array c’est mon cauchemar !

    #75411
    bebarth
    Maître des clés

    bonjour,
    Voici ma proposition :
    var listeEleves=this.getField("entreesListe").value;
    var VP1=[];
    var VTR=[];
    var VP2=[];
    var Alternance=[];
    var inconnus=[];
    var elevesX2=[];
    var lesEleves=listeEleves.split("\r");
    lesEleves.sort(function(a,b){return a.localeCompare(b)});
    var elevePrecedent="";
    for (var i=0; i<lesEleves.length; i++) {
    var unEleve=lesEleves.split("/");
    try {
    if (unEleve[0]==elevePrecedent) elevesX2.push(unEleve[0]);
    switch (unEleve[1]) {
    case "VP1":
    VP1.push(unEleve[0]);
    break;
    case "VTR":
    VTR.push(unEleve[0]);
    break;
    case "VP2":
    VP2.push(unEleve[0]);
    break;
    case "Alternance":
    Alternance.push(unEleve[0]);
    break;
    default:
    if (unEleve[0]!="-") inconnus.push(unEleve[0]);
    }
    var elevePrecedent=unEleve[0]
    } catch(e) {}
    }
    this.getField("groupe.1.1").value=VP1.toString().replace(/,/g,"\r");
    this.getField("groupe.1.2").value=VP1.length;
    this.getField("groupe.2.1").value=VTR.toString().replace(/,/g,"\r");
    this.getField("groupe.2.2").value=VTR.length;
    this.getField("groupe.3.1").value=VP2.toString().replace(/,/g,"\r");
    this.getField("groupe.3.2").value=VP2.length;
    this.getField("groupe.4.1").value=Alternance.toString().replace(/,/g,"\r");
    this.getField("groupe.4.2").value=Alternance.length;
    if (inconnus.length) app.alert("Les élèves suivants n'ont pas de groupe :\r"+inconnus.toString().replace(/,/g,"\r"),3);
    else app.alert("Tous les élèves ont un groupe.",3);
    if (elevesX2.length) app.alert("Les élèves suivants sont dans plusieurs groupes :\r"+elevesX2.toString().replace(/,/g,"\r"),3);

    Ceci est une version où l’on indique les noms des champs et des variables. On aurait pu en faire une qui les trouve automatiquement, mais ça complique un peu le script… Je me suis dit “commençons par le plus simple, on verra si il y a de la demande !”.

    @+
    😎

    • Cette réponse a été modifiée le il y a 2 semaines et 5 jours par bebarth.
    Attachments:
    You must be logged in to view attached files.
    #75414
    michel c.
    Participant

    Merci beaucoup, c’est exactement ce que je voulais.

    Je souhaiterais également lors du clic sur le bouton vérifier (qui est sur la 2ème) page avoir un message d’alerte si un élève a été oublié et un autre si un élève a été positionné 2 fois dans le tableau.

    Je ne vois pas du tout comment je pourrais m’y prendre pour cela…

    Merci

    #75417
    bebarth
    Maître des clés

    bonsoir,
    Je regarde rapidement…
    Je pense faire en sorte que lorsqu’un nom a été sélectionné il n’apparaisse plus dans les autres menus déroulants et afficher le nombre de noms qui n’ont pas encore été sélectionnés.
    Ça te conviendrait ???

    @+
    😎

    #75418
    Merlin
    Maître des clés

    bebarth = ce type est top !

    #75419
    michel c.
    Participant

    Oui, ce serait parfait, je ne savais pas que c’était possible.

    #75425
    bebarth
    Maître des clés

    bonjour,
    Je ne vais pas vous raconter ma vie, mais pour info j’ai terminé mais je ne pense pas avoir le temps de peaufiner le script aujourd’hui… Certainement demain !

    @+
    😎

    #75426
    bebarth
    Maître des clés

    bonjour,
    Je viens de finaliser le script.
    J’ai un peu galéré sur une erreur que je qualifierais “de débutant” (“<=” au lieu de “<“), mais avec un instant de lumière pendant la nuit j’ai enfin pu débloquer le script que voici :

    // Script de document
    var dropdownName="gato";
    var dropdownNumber=0;
    for (var i=0; i<this.numFields; i++) {
    if (this.getField(this.getNthFieldName(i)).name.indexOf(dropdownName+".")==0) dropdownNumber++;
    }
    function liste() {
    var listeEleves=this.getField("entreesListe").value;
    var lesEleves=listeEleves.split("\r");
    lesEleves.sort(function(a,b){return a.localeCompare(b)});
    lesNoms=lesEleves.map(function(element) {return [element.split("/")[0],element]});
    var theIndex=event.target.name.substr(event.target.name.indexOf(".")+1);
    theValue=event.target.value;
    for (var i=0; i<dropdownNumber; i++) {
    if (i!=theIndex) {
    var laPosition=this.getField(dropdownName+"."+i).currentValueIndices;
    for (j=0; j<lesNoms.length; j++) {
    if (lesNoms[j][0]==this.getField(dropdownName+"."+i).getItemAt(laPosition,false) && this.getField(dropdownName+"."+i).value!="-") {
    lesNoms.splice(j,1);
    break;
    }
    }
    }
    }
    }
    function fillDropdown() {
    liste();
    event.target.setItems(lesNoms);
    event.target.value=theValue;
    }
    function selection() {
    var theIndex=event.target.name.substr(event.target.name.indexOf(".")+1);
    if (event.changeEx=="-") this.getField("Group."+theIndex).value="-";
    else this.getField("Group."+theIndex).value=event.changeEx.split("/")[1];
    liste();
    if (event.changeEx=="-") this.getField("nonListes").value=lesNoms.length-1;
    else this.getField("nonListes").value=lesNoms.length-2;
    }
    liste();
    this.getField("nonListes").value=lesNoms.length-1;

    // Pour placer les scripts sur tous les menus déroulants
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    if (nomChamp.indexOf("gato.")==0) {
    this.getField(nomChamp).setAction("MouseEnter", "fillDropdown();");
    this.getField(nomChamp).setAction("Keystroke", "if (!event.willCommit) {selection();}");
    };
    }

    Tu me dis si tu as des questions…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #75428
    Merlin
    Maître des clés

    Bravo, beau boulot mais cette erreur s’affiche à l’ouverture du PDF :

    TypeError: event.target.name is undefined
    12:Document-Level:init

     

    Et je crois qu’il y a un problème dans la colonne “Groupe” (image jointe)

    Attachments:
    You must be logged in to view attached files.
    #75430
    bebarth
    Maître des clés

    Oups ! Ça vient de la mise en fonction… et “event.target.name” lancé depuis le script de document n’a aucun sens… Je regarde demain !

    Par contre, je ne comprends pas ta copie d’écran !!! Ça fonctionne chez moi.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #75432
    michel c.
    Participant

    C’est exactement ce qu’il me faut. A part l’erreur à l’ouverture c’est parfait.

    Il y a aussi un souci sur l’affichage des groupes sur le tableau de la page 2 lors du clic sur vérifier mais j’ai une idée pour remédier à cela.

     

    #75433
    bebarth
    Maître des clés

    bonjour,
    Il y avait plusieurs méthodes pour pallier ce message. En voici une :
    // Script de document
    var dropdownName="gato";
    var dropdownNumber=0;
    for (var i=0; i<this.numFields; i++) {
    if (this.getField(this.getNthFieldName(i)).name.indexOf(dropdownName+".")==0) dropdownNumber++;
    }
    var listeEleves=this.getField("entreesListe").value;
    var lesEleves=listeEleves.split("\r");
    lesEleves.sort(function(a,b){return a.localeCompare(b)});
    function liste() {
    lesNoms=lesEleves.map(function(element) {return [element.split("/")[0],element]});
    var theIndex=event.target.name.substr(event.target.name.indexOf(".")+1);
    theValue=event.target.value;
    for (var i=0; i<dropdownNumber; i++) {
    if (i!=theIndex) {
    var laPosition=this.getField(dropdownName+"."+i).currentValueIndices;
    for (j=0; j<lesNoms.length; j++) {
    if (lesNoms[j][0]==this.getField(dropdownName+"."+i).getItemAt(laPosition,false) && this.getField(dropdownName+"."+i).value!="-") {
    lesNoms.splice(j,1);
    break;
    }
    }
    }
    }
    }
    function fillDropdown() {
    liste();
    event.target.setItems(lesNoms);
    event.target.value=theValue;
    }
    function selection() {
    var theIndex=event.target.name.substr(event.target.name.indexOf(".")+1);
    if (event.changeEx=="-") this.getField("Group."+theIndex).value="-";
    else this.getField("Group."+theIndex).value=event.changeEx.split("/")[1];
    liste();
    if (event.changeEx=="-") this.getField("nonListes").value=lesNoms.length-1;
    else this.getField("nonListes").value=lesNoms.length-2;
    }
    function comptage() {
    lesNoms=lesEleves.map(function(element) {return [element.split("/")[0],element]});
    for (var i=0; i<dropdownNumber; i++) {
    var laPosition=this.getField(dropdownName+"."+i).currentValueIndices;
    for (j=0; j<lesNoms.length; j++) {
    if (lesNoms[j][0]==this.getField(dropdownName+"."+i).getItemAt(laPosition,false) && this.getField(dropdownName+"."+i).value!="-") {
    lesNoms.splice(j,1);
    break;
    }
    }
    }
    this.getField("nonListes").value=lesNoms.length-1;
    }
    comptage();

    Avec mon script, le bouton “Vérifier n’a plus lieu d’être” vu que les champs “Group” sont rempli automatiquement lors de chaque sélection d’élève.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #75435
    michel c.
    Participant

    C’est incroyable, je ne savais pas que c’était possible de faire ça !

    Un grand merci et bravo !

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