abracadabraPDF › Forums › PDF – Général › Permutation de contenu de champs
- Ce sujet contient 18 réponses, 3 participants et a été mis à jour pour la dernière fois par michel c., le il y a 2 années et 8 mois.
-
CréateurSujet
-
9 avril 2022 à 18:19 #70945michel c.Participant
Bonjour, j’ai un document qui me servira de base pour faire mes plans de salle de classe. L’idée c’est qu’en cliquant sur le nom d’un élève j’arrive sur une page qui lui est dédiée dans laquelle je pourrais inscrire quelques observations.
Il y aura dans le futur une page d’observation par élève. Donc ce document comportera 17 pages (le plan de salle sur la 1ère).
Dans le cas ou je change de place 2 élèves j’aimerais ne pas avoir à copier / coller leurs noms et les observations qui les concernent.
J’aimerais donc au travers de 2 listes déroulantes et un bouton pouvoir permuter le contenu des champs contenants les noms des élèves ainsi que les champs des observations qui les concernent.
Mais je ne sais pas trop comment m’y prendre.
Merci
Attachments:
You must be logged in to view attached files. -
CréateurSujet
-
AuteurRéponses
-
9 avril 2022 à 22:35 #70947bebarthMaître des clés
bonsoir,
Voilà pour la permutation.
function permutation(x,y) {
var lesChamps=["eleve","observations"];
for (var i=0; i<lesChamps.length; i++) {
var temp=this.getField(lesChamps+"."+x).value;
this.getField(lesChamps+"."+x).value=this.getField(lesChamps+"."+y).value;
this.getField(lesChamps+"."+y).value=temp;
}
}
permutation(this.getField("place1").value,this.getField("place2").value);
@+
😎Attachments:
You must be logged in to view attached files.9 avril 2022 à 22:54 #70949michel c.ParticipantJ’ai trouvé une solution plus simple que de permuter les champs :
Je saisis les noms des élèves dans la liste au centre et j’affecte le n° de place dans la liste déroulante attenante.
La position des élèves dans la liste centrale ne changeant pas, je n’ai plus ce problème de permutation.
Cela a fonctionné au début mais je ne comprends pas pourquoi ça ne marche plus…
Le problème vient peut être du fait qu’il y a la possibilité d’affecter 2 fois la même place à un élève.
Je ne sais pas trop comment remédier à cela.
Merci
Attachments:
You must be logged in to view attached files.11 avril 2022 à 13:03 #70951michel c.ParticipantJ’ai pensé à permuter les champs “eleves” grâce à leur position mais je coince aussi, il faudrait qu’il y ait une “détection” du nom des champs qu’il faut permuter.
Dans l’exemple, j’ai fait un bouton qui permet de permuter les champs “eleve.1” et “eleve.2” mais ça ne va pas, il faudrait permuter le champ qui se trouve à la position x avec le champ qui se trouve à la position y….
Il y a certainement une fonction que je ne connais pas qui pourrait m’aider à faire ce que je souhaite.
- Cette réponse a été modifiée le il y a 2 années et 8 mois par michel c..
Attachments:
You must be logged in to view attached files.11 avril 2022 à 18:55 #70954bebarthMaître des clésbonjour,
Je ne comprends pas pourquoi déplacer la position des champs plutôt que permuter les valeurs !@+
😎11 avril 2022 à 21:47 #70957michel c.ParticipantEn fait lorsque je suis en classe, je me base sur mon plan de classe pour plusieurs choses :
- faire l’appel plus rapidement (si une place est libre, l’élève est absent)
- me permettre d’avoir un suivi de l’élève : lorsque je clique sur le nom d’un élève dans un champ “eleve.i”, cela me renvoie directement à la page qui le concerne. Là je peux inscrire si il a été en retard, absent, si il a besoin d’une aide particulière, ses difficultés….
Le souci c’est que sur une année scolaire, il y a parfois des changements de place.
Si je permute les valeurs des champs eleve.1 avec eleve.5 par exemple, lorsque je vais cliquer sur sur le champ élève.1 cela va me renvoyer à la page de suivi de l’élève.5 qui était à cette place auparavant.
Il faut aussi que je permute les contenus des champs que j’ai nommé _motif.i et amotif.i.
Je pourrais donc faire cela sauf que je n’y arrive pas non plus…
Mais je cherche…
12 avril 2022 à 08:19 #70958bebarthMaître des clésbonjour,
Il suffit de permuter également l’action sur champ.
https://opensource.adobe.com/dc-acrobat-sdk-docs/acrobatsdk/html2015/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FField_methods.htm%23TOC_setAction2bc-17&rhtocid=_6_1_8_31_2_16Attention : on ne peut pas lire les actions des champs (avec un “get” par exemple) mais uniquement les écrire avec la méthode setAction. Mais lorsqu’on connait l’action qu’on veut définir, c’est tout à fait faisable !
@+
😎12 avril 2022 à 22:14 #70963michel c.ParticipantJe n’ai pas encore essayé le setAction car je galère déjà à permuter les contenus de mes champs élèves.i
Je ne sais pas si j’ai la bonne approche, ça marche pour certains champs mais pas tous….
Le script ne me renvoie pas d’erreur mais il y a un truc qui cloche…
J’ai l’impression d’avoir fait une usine à gaz ….
Attachments:
You must be logged in to view attached files.13 avril 2022 à 07:26 #70966MerlinMaître des clésBonjour
Pour moi ce document devrait ne contenir que deux pages : le plan et la “page élève”.
Les champs de la “page élève” étant remplis dynamiquement en fonction du nom sélectionné à partir d’un fichier texte placé en pièce jointe contenant les données.
Ça résoudrait la plupart des problèmes.
13 avril 2022 à 12:26 #70967michel c.ParticipantJe vais me pencher là dessus, je ne sais pas trop encore comment faire. Dans l’immédiat, mon script permettant d’attribuer chaque élève à une place ne fonctionne toujours pas (sauf pour 3 élèves).
Je l’ai simplifié mais je ne vois pas ou est le problème…
for (var l=1 ; l<18 ; l++){
this.getField("place."+l).fillColor=color.white;}
for (var i=1 ; i<18 ; i++){
if (this.getField("place."+i).value < 1 | this.getField("place."+i).value>17) {
app.alert({cMsg:"La valeur est hors de la plage", nIcon:1});}
}
for (var j=1 ; j<17 ; j++){
var k = j+1
if (this.getField("place."+j).value == this.getField("place."+k).value)
{app.alert({cMsg:"Attention, deux élèves ne peuvent pas partager la même place", nIcon:1});
this.getField("place."+j).fillColor=["RGB", 255, 255/255, 0];
this.getField("place."+k).fillColor=["RGB", 255, 255/255, 0];
}
}
for (var m=1 ; m<18 ; m++) {
if (this.getField("place."+m).value == this.getField("El."+m).name.substring(3,5)) {this.getField("eleve."+m).value = this.getField("El."+m).value;}}
Merci
Attachments:
You must be logged in to view attached files.14 avril 2022 à 08:44 #70972MerlinMaître des clésBonjour
Il y a une erreur dans ces deux lignes, donc le script doit s’arrêter quand il arrive dessus :
this.getField("place."+j).fillColor=["RGB", 255, 255/255, 0];
this.getField("place."+k).fillColor=["RGB", 255, 255/255, 0];Il faudrait l’écrire ainsi :
this.getField("place."+j).fillColor=["RGB", 255/255, 255/255, 0/255];
this.getField("place."+k).fillColor=["RGB", 255/255, 255/255, 0/255];
14 avril 2022 à 08:49 #70973MerlinMaître des clésTu gagnerais en rapidité d’exécution si tu remplaçais :
for (var l=1 ; l<18 ; l++){
this.getField("place."+l).fillColor=color.white;}
for (var i=1 ; i<18 ; i++){
if (this.getField("place."+i).value < 1 | this.getField("place."+i).value>17) {
app.alert({cMsg:"La valeur est hors de la plage", nIcon:1});}
}
Par :
for (var i=1 ; i<18 ; i++){
this.getField("place."+i).fillColor=color.white;}
if (this.getField("place."+i).value < 1 | this.getField("place."+i).value>17) {
app.alert({cMsg:"La valeur est hors de la plage", nIcon:1});}
}
Par ailleurs, de façon générale il est inutile de changer la lettre qui représente la valeur de l’index (l, i, j, m) car chaque boucle est indépendante. Tu peux donc utiliser le “i” à chaque fois.
14 avril 2022 à 10:50 #70974michel c.ParticipantBonjour, j’ai corrigé ces erreurs, malgré tout j’ai le même problème :
Lorsque je clique sur le bouton, seul l’élève affecté à la place 13 s’inscrit dans le champ “eleve.13”
Lorsque je clique une seconde fois, l’élève affecté à la place 14 s’inscrit dans le champ “eleve.14”
Et lorsque je clique encore, plus rien…
Attachments:
You must be logged in to view attached files.14 avril 2022 à 18:57 #70976bebarthMaître des clésbonjour,
S’il n’est pas permis d’entrer un numéro <1 et >17, ce n’est plus la peine de vérifier ce numéro !
Je te propose donc un script de touches personnalisé avec une expression régulière. Les plus curieux essayeront de comprendre, et peuvent demander s’ils ne comprennent pas.
Voici une version de ton fichier avec quelques modifications de scripts.@+
😎Attachments:
You must be logged in to view attached files.15 avril 2022 à 08:33 #70979michel c.ParticipantMerci,
J’ai effectivement quelques questions sur la solution que tu proposes.
- La 1ère est sur la forme : pourquoi sur cette ligne :
for (var i=1; i<=nbPlaces; i++) posEleve=[this.getField("El."+i).value,this.getField("place."+i).value];
il n’y a pas d’accolades ? - Ensuite celle ci :
posEleve=[this.getField("El."+i).value,this.getField("place."+i).value];
je ne comprends pas trop le rôle de la virgule - Et globalement, je ne connais pas les tableaux. Celui ci possède 18 lignes et 2 colonnes si je comprend bien avec pour la 1ère colonne :
this.getField("El."+i).value
et pour la 2ème :this.getField("place."+i).value
? - La fonction placement possède 2 paramètres (indice et position) ?
for (var i=1; i<=nbPlaces; i++)
: pour les valeurs i comprises entre 1 et 17 :if (pos==posEleve[1] && ind!=i)
: si le paramètre pos égale à la place i et l’indice différent de i ? (pas sûr du tout)app.alert(posEleve[ind][0]+" et "+posEleve[0]+" ont le même numéro de place : "+posEleve[1],3);
: afficher le message d’alerte…pas bien comprisposEleve[1],3
Bref, il y a pas mal de trucs que je ne maîtrise pas ici. Il faudrait que je m’exerce sur des tableaux plus basiques.
Sinon, j’avais réussi à arriver à mes fins cette nuit d’une autre manière :
for (var i=1 ; i<17 ; i++){
var k = i+1
if (this.getField("place."+i).value == this.getField("place."+k).value)
{app.alert({cMsg:"Plusieurs élèves partagent la même place", nIcon:1});
this.getField("place."+i).fillColor=["RGB", 255/255, 255/255, 0/255];
this.getField("place."+k).fillColor=["RGB", 255/255, 255/255, 0/255];
}
}
for (var i=1 ; i<18 ; i++){
this.getField("eleve."+i).value = this.getField("El."+this.getField("place."+i).value).value;}
Je me demandais si il était possible dans le cas ou le même numéro est attribué que la boite de dialogue affiche en plus du message les n° de places disponibles restantes.
- Cette réponse a été modifiée le il y a 2 années et 8 mois par michel c..
- Cette réponse a été modifiée le il y a 2 années et 8 mois par michel c..
- Cette réponse a été modifiée le il y a 2 années et 8 mois par michel c..
Attachments:
You must be logged in to view attached files.15 avril 2022 à 15:16 #70984MerlinMaître des clés“Pour moi ce document devrait ne contenir que deux pages : le plan et la « page élève ».”
Je pensais à certains documents que j’avais déjà fait, je viens de regarder mais ça ne va pas aller. Il y a une mini base de données mais avec une seule fiche affichée à la fois, pas 16…
15 avril 2022 à 16:38 #70985michel c.ParticipantMon fichier a des bugs, celui de BB marche bien.
J’ai apporté une modif pour éviter la saisie en double d’un élève.
Attachments:
You must be logged in to view attached files.15 avril 2022 à 19:15 #70987bebarthMaître des clésbonjour,
Voici quelques réponses :nbPlaces=17; // Nombre de places
posEleve=new Array(nbPlaces+1); // Définition d'une table à 18 éléments (de 0 à 17)
function noPlace() {
// S'il n'y a qu'une seule ligne pour une boucle "for" ou une condition "if else"
// il n'y a pas besoin d'accolades qui définissent l'ensemble des lignes à exécuter
for (var i=1; i<=nbPlaces; i++) posEleve=[this.getField("El."+i).value,this.getField("place."+i).value];
// posEleve=[this.getField("El."+i).value,this.getField("place."+i).value];
// L'élément i de la table posEleve est une table [] de 2 éléments et la virgule indique la séparation des éléments
}
noPlace();
// Fonction "placement" selon 2 paramètres "ind" -> indice et "pos" -> position
function placement(ind,pos) {
// Boucle pour vérifier toutes les positions
for (var i=1; i<=nbPlaces; i++) {
// So la position indiquée est identique à la position dans la table posEleve
// mais que l'indice du champs est différent de l'indice de la table posEleve
if (pos==posEleve[1] && ind!=i) {
// Message d'alerte
app.alert(posEleve[ind][0]+" et "+posEleve[0]+" ont le même numéro de place : "+posEleve[1],3);
break;
} else if (ind==i) {
posEleve[ind][1]=pos;
}
}
}
Les tables et les boucles permettent de réduire beaucoup les lignes de scripts.
Les expressions régulières sont assez compliquées à comprendre, mais sont très efficaces !@+
😎16 avril 2022 à 08:10 #70989michel c.ParticipantMerci beaucoup pour ces précisions, ça va bien m’aider à comprendre.
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.