Toutes mes réponses sur les forums
-
AuteurRéponses
-
bebarthMaître des clés
bonjour,
Je vois 2 erreurs :
var RepUser2 = this.getField("RepUser<span style="color: #ff9900;">2</span>").valueAsString;
...
if (RepUser2 == (vC2 + ("×" || "*" || " × " || " * ") + vC3) || <span style="color: #ff9900;">RepUser2 ==</span> (vC3 + ("×" || "*" || " × " || " * ") + vC2) || <span style="color: #ff9900;">RepUser2 ==</span> (Number(vC2) * Number(vC3))<span style="color: #ff0000;"><del> && vC1</del></span>)...
Ici j’ai retiré “&& vC1” car je ne sais pas ce que tu veux vérifier…
Tu testes et tu me dis !@+
😎15 novembre 2023 à 20:57 en réponse à : Champs adresses remplis après sélection nom dans liste #73523bebarthMaître des clésMerci pour ta réponse ! C’est ok mais j’ai un problème avec mon dernier script for (var i = 0; i < colonnes.length; i++) { if (event.value == colonnes[2]) { this.getField(“43 Deplacement”).value = colonnes[6]; break; } } j’ai un message d’erreur car le format du champ 43 est nombre monétaire
Essaye :
...
this.getField("43 Deplacement").value = Number(colonnes[6]);
...
En supposant que “colonnes[6]” (la septième colonne numérotée basée sur 0) est bien un nombre !
@+
😎- Cette réponse a été modifiée le il y a 5 mois et 3 semaines par bebarth.
15 novembre 2023 à 20:55 en réponse à : Champs adresses remplis après sélection nom dans liste #73522bebarthMaître des clésDésolé, existe-t-il une autre méthode que vous pouvez utiliser pour saisir et mettre à jour des données avec le lecteur gratuit ? peccato, nessun altro metodo da poter utilizzare per inserire e aggiornare dati con il lettore gratuito?
Je ne pense pas !
@+
😎15 novembre 2023 à 18:08 en réponse à : Champs adresses remplis après sélection nom dans liste #73516bebarthMaître des clésBonjour Bebarth J’ai réussi à importé et modifier les scripts avec adresses sans problème par contre pour les NPA j’ai qqch qui beug ! Même en reprenant le NPA du fichier avec les adresses afin d’avoir qu’un seul csv … Une case efface l’autre !? Je souhaite utiliser le script dans chaque case du formulaire avec ville et adresse il me suffit de copier ton script dans les actions des cases en question ? for (var i=0; i<colonnes.length; i++) { if (event.value==colonnes[3]) { this.getField(“npaCabinet”).value=colonnes[2]; break; } } J’ai loupé qqch ? Il me semple que c’est les colonnes 3 et 4 Non ? Pas 2 et 3 ? J’ai essayé de remplacer “npaCabinet” par “06 NPA” et villeCabinet par “07 ville” qui corresponde au champs de mon document mais cela ne fonctionne pas Je souhaite aussi ajouter une colonne dans mon csv ( N°7 frais de déplacements) avec un montant et le reprendre dans une case plus loin dans le formulaire en fonction en fonction du NPA ajouté dans le champs ” 06 NPA”
Il faudrait partager ton fichier car comme ça je ne comprends pas !
@+
😎15 novembre 2023 à 18:06 en réponse à : Champs adresses remplis après sélection nom dans liste #73515bebarthMaître des clésSalut, en faisant les tests j’ai vu que ça marche sur Acrobat 2020 (je mets à jour le livre) alors qu’avec le lecteur Adobe gratuit, ça ne marche pas. (il ne le met pas à jour pour moi) Existe-t-il un moyen pour que le lecteur gratuit mette à jour le fichier Excel ? Merci
Le message retourné par la console avec Adobe Reader est :
NotAllowedError: Les paramètres de protection interdisent l’accès à cette propriété ou à cette méthode.
Doc.setDataObjectContents:27:Field addAbook.4:Mouse UpDonc pas possible…
@+
😎15 novembre 2023 à 14:23 en réponse à : Champs adresses remplis après sélection nom dans liste #73510bebarthMaître des clésbonjour,
Si je comprends bien, tu veux alimenter le fichier .csv à partir de données entrées dans le pdf !
Si c’est cela, il y a un post où j’avais répondu :
…et le fichier correspondant en pièce jointe.N’hésite pas à demander pour des informations complémentaires.
@+
😎Attachments:
You must be logged in to view attached files.14 novembre 2023 à 10:34 en réponse à : Champs adresses remplis après sélection nom dans liste #73486bebarthMaître des clésbonjour,
C’est possible ! Il faut donc appeler chaque fichier csv plutôt par son nom que sa position…...
//
var fichier=this.getDataObjectContents("NPA.csv");
var donnees=util.stringFromStream(fichier).replace(/\r/g,"");
var rangees=donnees.split("\n");
var NPA=new Array();
for (var i=0; i<rangees.length; i++) NPA=rangees.split(";");
// Script champ "npaCabinet" désactivé
if (event.value) {
for (var i=0; i<NPA.length; i++) {
if (event.value==NPA[1]) {
this.getField("villeCabinet").value=NPA[0];
break;
}
this.getField("villeCabinet").value="";
}
} else this.getField("villeCabinet").value="";
// Script champ "villeCabinet" désactivé
if (event.value) {
for (var i=0; i<NPA.length; i++) {
if (event.value.toUpperCase()==NPA[0].toUpperCase()) {
this.getField("npaCabinet").value=NPA[1];
event.target.value=NPA[0];
break;
}
this.getField("npaCabinet").value=""
}
} else this.getField("npaCabinet").value="";
@+
😎- Cette réponse a été modifiée le il y a 5 mois et 3 semaines par bebarth.
13 novembre 2023 à 15:38 en réponse à : Champs adresses remplis après sélection nom dans liste #73458bebarthMaître des clésTu peux écrire ceci :
// Script champ "npaCabinet" désactivé
for (var i=0; i<colonnes.length; i++) {
if (event.value==colonnes[2]) {
this.getField("villeCabinet").value=colonnes[3];
break;
}
}
// Script champ "villeCabinet" désactivé
for (var i=0; i<colonnes.length; i++) {
if (event.value==colonnes[3]) {
this.getField("npaCabinet").value=colonnes[2];
break;
}
}
@+
Attachments:
You must be logged in to view attached files.13 novembre 2023 à 14:03 en réponse à : Champs adresses remplis après sélection nom dans liste #73456bebarthMaître des clés??? Je ne comprends pas les questions !
Tu veux un menu déroulant pour “ville” et “NPA” ?@+
13 novembre 2023 à 12:58 en réponse à : Champs adresses remplis après sélection nom dans liste #73452bebarthMaître des clésbonjour,
Voici les scripts à indiquer :
// Script de document
this.getField("nomCabinet").clearItems();
var p=this.getDataObject(this.dataObjects[0].name);
var fichier=this.getDataObjectContents(p.name);
var donnees=util.stringFromStream(fichier);
var rangees=donnees.split("\n");
var colonnes=new Array();
for (var i=0; i<rangees.length; i++) colonnes=rangees.split(";");
var cellule=new Array();
for (var j=0; j<colonnes.length; j++) cellule[j]=[colonnes[j][0],j];
cellule[0][0]="";
this.getField("nomCabinet").setItems(cellule);
// Script de touches personnalisé du menu déroulant
if (!event.willCommit) {
if (event.changeEx!=0) {
this.getField("adresseCabinet").value=colonnes[event.changeEx][1];
this.getField("npaCabinet").value=colonnes[event.changeEx][2];
this.getField("villeCabinet").value=colonnes[event.changeEx][3];
this.getField("telephoneCabinet").value=colonnes[event.changeEx][4];
this.getField("emailCabinet").value=colonnes[event.changeEx][5];
} else {
this.getField("adresseCabinet").value="";
this.getField("npaCabinet").value="";
this.getField("villeCabinet").value="";
this.getField("telephoneCabinet").value="";
this.getField("emailCabinet").value="";
}
}
…et si tu as des caractères accentués, il faut absolument enregistrer ton fichier .csv en UTF-8.
@+
- Cette réponse a été modifiée le il y a 5 mois et 3 semaines par bebarth.
Attachments:
You must be logged in to view attached files.bebarthMaître des clésCadeau !
Affichage dans différents formats :
if (this.getField("NB.1").value) {
function decomposition(nombre) {
nbPremiers=[];
while (nombre%2==0) {
nbPremiers.push(2);
nombre=nombre/2;
}
for (var i=3; i<=Math.sqrt(nombre); i=i+2) {
while (nombre%i==0) {
nbPremiers.push(i);
nombre=nombre/i;
}
}
if (nombre>2) nbPremiers.push(nombre);
return nbPremiers;
}
this.getField("Resultat").value=decomposition(this.getField("NB.1").value).toString().replace(/[,]/g," x ");
//
var nbEtExposant=[[nbPremiers[0],1]];
for (var i=1; i<nbPremiers.length; i++) {
if (nbEtExposant[nbEtExposant.length-1][0]==nbPremiers) nbEtExposant[nbEtExposant.length-1][1]++;
else nbEtExposant.push([nbPremiers,1])
}
for (var i=0; i<nbEtExposant.length; i++) {
if (nbEtExposant[1]==1) nbEtExposant=nbEtExposant.toString().replace(/,1$/,"");
else nbEtExposant=nbEtExposant.toString().replace(/,/,"^");
}
this.getField("Resultat1").value=nbEtExposant.toString().replace(/[,]/g," x ");
//
var f=this.getField("Resultat2");
f.textSize=16;
spans=new Array();
var j=0;
for (var i=0; i<nbEtExposant.length; i++) {
var XX=nbEtExposant.split("^");
spans=new Object();
spans.text=XX[0];
j++;
if (XX.length>1) {
spans=new Object();
spans.text=XX[1];
spans.superscript=true;
j++;
}
if (i<nbEtExposant.length-1) {
spans=new Object();
spans.text=" x ";
spans.textSize=f.textSize-4;
j++;
}
}
f.richValue=spans;
} else {
this.getField("Resultat").value="";
this.getField("Resultat1").value="";
this.getField("Resultat2").value="";
}
@+
Attachments:
You must be logged in to view attached files.11 novembre 2023 à 14:17 en réponse à : Champs adresses remplis après sélection nom dans liste #73441bebarthMaître des clésbonjour,
Pouvez-vous m’expliquer comment le mettre en place dans le formulaire (Est-ce dans action du champ liste ?)
Le code est placé en “Script de touches personnalisé” du menu déroulant (cf. copie d’écran).
Est-ce que le fichier Excel peut-être masqué ou invisible pour les utilisateur ?
Le fichier Excel peut-être masqué si on cache les volets de navigation… On peut peut-être essayer qu’il ne soit pas possible à afficher !
Est-ce que le système marchera avec le lecteur pdf ou uniquement la version pro ?
Ça fonctionnera sur ordinateur PC/Mac avec Acrobat Reader ou Pro (ou autres lecteurs pdf) mais pas avec les téléphones et tablettes dont les readers sont allergiques au JavaScript.
Si tu veux plus d’aide, merci de partager un fichier (en messagerie privée si tu le souhaites).
@+
Attachments:
You must be logged in to view attached files.10 novembre 2023 à 20:52 en réponse à : Champs adresses remplis après sélection nom dans liste #73438bebarthMaître des clésDu coup, voici un script pour un autre post que j’avais écris il y a quelques années (déjà) !
// Script de document
var id=this.getField(“ID”).value;
var studentName=this.getField(“Name”).value;
var parentName=this.getField(“Parent_Name”).value;
var address=this.getField(“Address”).value;
var phoneNumber=this.getField(“Phone_Number”).value;
var email=this.getField(“E-mail”).value;
// Initialisation liste déroulante
this.getField(“ID”).clearItems();
// Importer l’unique PJ sans la nommer
var p=this.getDataObject(this.dataObjects[0].name);
var fichier=this.getDataObjectContents(p.name);
var donnees=util.stringFromStream(fichier);
// Séparation des rangées (saut de ligne)
var rangees=donnees.split(“\n”);
// Séparation des colonnes (TAB)
var colonnes=new Array();
for (var i=0; i<rangees.length; i++) colonnes=rangees.split(“;”);
var cellule=new Array();
for (var j=0; j<colonnes.length; j++) cellule[j]=[colonnes[j][0], j];
// Remplissage de la liste déroulante
this.getField(“ID”).setItems(cellule); // champ liste déroulante
// Re-remplissage des champs
this.getField(“ID”).value=id;
this.getField(“Name”).value=studentName;
this.getField(“Parent_Name”).value=parentName;
this.getField(“Address”).value=address;
this.getField(“Phone_Number”).value=phoneNumber;
this.getField(“E-mail”).value=email;// Script de touches personnalisé du menu déroulant
if (!event.willCommit) {
try {
var studentName=colonnes[event.changeEx][1];
} catch(e) {
var studentName=””;
}
try {
var parentName=colonnes[event.changeEx][2];
} catch(e) {
var parentName=””;
}
try {
var address=colonnes[event.changeEx][3];
} catch(e) {
var address=””;
}
try {
var phoneNumber=colonnes[event.changeEx][4];
} catch(e) {
var phoneNumber=””;
}
try {
var email=colonnes[event.changeEx][5];
} catch(e) {
var email=””;
}
this.getField(“Name”).value=studentName;
this.getField(“Parent_Name”).value=parentName;
this.getField(“Address”).value=address;
this.getField(“Phone_Number”).value=phoneNumber;
this.getField(“E-mail”).value=email;
}@+
Attachments:
You must be logged in to view attached files.10 novembre 2023 à 18:19 en réponse à : Champs adresses remplis après sélection nom dans liste #73436bebarthMaître des clésbonjour,…
var excelFilePath = « /chemin/fichier.xlsx »; //
var selectedName = this.getField(« nomMenuDeroulant »).value;
var excelData = app.Excel.importDataObjects(excelFilePath);Ça ce n’est pas possible !
Ton fichier .csv doit être en pièce jointe de ton pdf.@+
bebarthMaître des clésTu veux que je développe ?
😉
bebarthMaître des clésbonjour,
J’avais fait ça il y a quelques temps…
Voici le script adapté à ton exemple :
function decomposition(nombre) {
var nbPremiers=[];
while (nombre%2==0) {
nbPremiers.push(2);
nombre=nombre/2;
}
for (var i=3; i<=Math.sqrt(nombre); i=i+2) {
while (nombre%i==0) {
nbPremiers.push(i);
nombre=nombre/i;
}
}
if (nombre>2) nbPremiers.push(nombre);
return nbPremiers;
}
this.getField("Resultat").value=decomposition(this.getField("NB.1").value).toString().replace(/[,]/g," x ");
@+
Attachments:
You must be logged in to view attached files.9 novembre 2023 à 22:41 en réponse à : Champs adresses remplis après sélection nom dans liste #73422bebarthMaître des clésbonsoir,
Le sujet a déjà été traité plusieurs fois, dont :
et ci-joint le script associé :
// Importation de l'unique pièce jointe sans la nommer
var pj=this.getDataObject(this.dataObjects[0].name);
var fichier=this.getDataObjectContents(pj.name);
var donnees=util.stringFromStream(fichier);
// Suppression du fichier
this.removeDataObject(pj.name);
// Suppression du champ "script"
this.removeField("script");
// Séparation des lignes de la feuille de calcul (saut de ligne)
var lignes=donnees.split("\r\n");
// Séparation des cellules de chaque ligne de la feuille de calcul (TAB)
cellules=new Array();
for (var i=1; i<lignes.length; i++) {
// i est le numéro de la ligne et on commence par la deuxième ligne : i=1
cellules=lignes.split(";");
this.getField("Nom").value=cellules[0]; // Cellule 0 de la ligne i, donc Nom
this.getField("Prenom").value=cellules[1]; // Cellule 1 de la ligne i, donc Prénom
this.getField("Adresse").value=cellules[2]; // etc.
this.getField("Telephone").value=cellules[3];
this.getField("e-mail").value=cellules[4];
var nomFichier="Fichier "+cellules[0]+" "+cellules[1]+".pdf";
if (i!=lignes.length-1) this.saveAs({cPath: nomFichier,bCopy: true});
else this.saveAs({cPath: nomFichier});
}
…et le fichier en pièce jointe.
@+
Attachments:
You must be logged in to view attached files.bebarthMaître des clés…et si tu veux utiliser une fonction pour indiquer les bornes, tu peux écrire :
function getRandomIntInclusive(min,max) {
return Math.ceil(Math.random()*(max-min+1)+min-1);
}
for (var i=1; i<=100; i++) console.println(i+" : "+getRandomIntInclusive(-20,20));
@+
bebarthMaître des clésbonjour,
Le ∆ étant de 40 et vu qu’avec “Math.ceil” on arrondi à l’entier supérieur, personnellement j’écrierais simplement :
var Nb2=Math.ceil(Math.random()*41-21);
Si tu lances une boucle dans la console pour 100 nombres aléatoires :
for (var i=1; i<=100; i++) console.println(i+" : "+Math.ceil(Math.random()*41-21));
Tu vois que ça fonctionne.@+
bebarthMaître des clésbonjour,
En script de calcul du champ Val1 tu écris :
for (var i=1; i<=6; i++) {
this.getField("c"+i).display=display.visible;
if (event.value<3000 && this.getField("c"+i).value=="Off") this.getField("c"+i).display=display.hidden;
}
@+
Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Voici un script :
for (var i=1; i<=27; i++) this.getField("M"+i).value="Off";
@+
bebarthMaître des clésbonjour,
Il faudrait peut-être déclarer et initialiser les variables avant la boucle while !@+
Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Personnellement je placerais tes lignes dans une boucle while :
while (Nb1*Nb6 == Nb3*Nb4) {
var Nb1=Math.round(Math.random()*7)+2;
var Nb2=Math.round(Math.random()*9)+1;
var Nb3=Math.round(Math.random()*9)+1;
var Nb4=Math.round(Math.random()*8)+1;
var Nb5=Math.round(Math.random()*8)+1;
var Nb6=Math.round(Math.random()*9)+1;
}
@+
bebarthMaître des clésbonjour,
Tu pourrais combiner les 2 scripts en ajoutant une alerte entre !
Du coup, vu que le dernier fichier sélectionné avec l’interface le reste (du moins sur Mac), l’utilisateur n’a pas à re-naviguer pour le trouver…
Dans l’exemple, j’ai mis le bouton “PJ” invisible car on a besoin de sa position dans le script.@+
Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Non, ce n’est pas possible pour des raisons de sécurité. Avec les pièces jointes on ne peut manipuler via JavaSript que celles importées manuellement. Celles importées par script sont invisibles.@+
bebarthMaître des clés…et ici, à la place de “if (annots != null…” on peut même juste écrire “if (annots…”.
Donc :
...
if (annots && annots[j].type == "FreeText") {annots[j].destroy();}
@+
bebarthMaître des clésbonjour,
Tu as l’api reference en ligne où tu pourras trouver tous les types d’annotations :
https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#annotation-types
Mais je pense que lorsqu’on programme régulièrement c’est pas mal de télécharger une version pdf.@+
bebarthMaître des clésBonjour,
tu peux utiliser l’exemple de l’api référence :
var annots = this.getAnnots({ nPage:0 }); for (var j = 0; j < annots.length; j++) if (annots[j].type == "FreeText") annots[j].destroy();
À la place de « FreeText » tu indiques le type d’annotation que tu veux supprimer.
@+
Attention : J’ai changé la variable i en j à cause du problème d’affichage lorsque i est entre crochets.
Pour exécuter le script sur tout le document il faut écrire : var annots = this.getAnnots();
bebarthMaître des clésbonsoir,
Ça se fait avec la méthode « destroy » des annotations.
@+
bebarthMaître des clésbonjour,
C’est un copier/coller du script dans cette fenêtre.@+
bebarthMaître des clésbonjour,
Voici maintenant le lien d’une vidéo pour créer une action puis l’exécuter sur plusieurs fichiers.
https://we.tl/t-YdvFt48Twx- Cette réponse a été modifiée le il y a 7 mois par bebarth.
bebarthMaître des clésÀ ce moment là il faut créer une action.
Je te fait une vidéo demain !
@+
😎bebarthMaître des clésbonjour,
Voici une petite vidéo pour la façon d’exécuter le script à partir de la console.
https://we.tl/t-47Z3Y2wHXP@+
😎bebarthMaître des clésbonjour,
Essaye ce script en validation du champ “DATE DE SIGNATURE_1” :
f=this.getField("DATE_DU_JOUR");
g=this.getField("DATE DE SIGNATURE_1");
if (g.value!="") {
var dateDuJour=util.scand("dd/mm/yyyy", f.value).getTime();
var dateSignature=util.scand("dd/mm/yyyy", g.value).getTime();
if (dateSignature<dateDuJour) {
app.alert("Merci de ne pas antidater ce document",3);
event.rc=false;
}
}
@+
😎bebarthMaître des clésLe fichier verso fermé, tu ouvres une fiche pui la console que tu vides et tu colles le script, puis tout sélectionner et Enter du clavier numérique.
Les 2 fichiers doivent être dans le même répertoire.@+
😎
- Cette réponse a été modifiée le il y a 7 mois et 1 semaine par bebarth.
bebarthMaître des clésJ’ai retiré le lien de ton précédent message mais je n’ai pas pu retiré les fichiers !
@Merlin : Il faut une autorisation spéciale que je n’ai pas ?@+
😎bebarthMaître des clésPour faire simple, tu n’ouvres pas le fichier VersoPage.pdf mais uniquement l’autre.
Si tu veux ajouter les 2 pages il faut modifier un peu le script et indiquer nEnd au lieu de nStart pour insertPage que ce soit avec la console ou avec une action :
var Chemin=this.path;
var nomDocument=this.documentFileName;
var repertoire=Chemin.substring(0,Chemin.length-nomDocument.length);
this.insertPages ({
nPage: this.numPages-1,
cPath: repertoire+"VersoPage.pdf",
nEnd: 1
});
this.saveAs({
cPath: Chemin,
bPromptToOverwrite: false,
});
Attention au droit à l’image refusé ! Il vaudrait mieux retirer le fichier.
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Tu utilises le script avec le fichier VersoPage.pdf qui est le fichier dont tu ajoutes la page…
Es-tu certain que ça ne fonctionne pas, car ce fichier à maintenant 4 pages au lieu d’une initialement !@+
😎Attachments:
You must be logged in to view attached files.30 septembre 2023 à 11:17 en réponse à : Action automatisée pour ajouter une page à une autre #73312bebarthMaître des clésIl faut activer la console JavaScript, puis ctrl J pour l’afficher.
Dans la console vide tu colles le script, puis sélectionne tout (ctrl A) et ENTER du clavier numérique (et pas la touche Return).
Le script s’exécute…@+
😎Attachments:
You must be logged in to view attached files.30 septembre 2023 à 10:28 en réponse à : Action automatisée pour ajouter une page à une autre #73309bebarthMaître des clésbonjour,
On peut lancer le script soit par une action ou directement depuis la console.@+
😎bebarthMaître des clésbebarthMaître des clésbonjour,
En script de calcul du champ Mht01 :
this.getField("Mht02").value="";
if (this.getField("QLigne01").value!=0) {
event.value=this.getField("QLigne01").value*950;
if (this.getField("CC.0").value!="Off") this.getField("Mht02").value=event.value*1.1;
}
else event.value="";
J’ai modifié les formats des 2 champs pour qu’ils soient identiques.
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Tu crée une fonction “verif()” en script de document :
function verif() {
var nbCases=0;
for (var i=0; i<21; i++) {
if (this.getField("CC1."+i).value!="Off") nbCases++;
if (nbCases>3) {
this.getField("CC1."+i).value="Off";
app.alert("Vous ne pouvez pas cocher plus de 3 cases.",3);
break;
}
}
}
Et pour chaque case à cocher une action qui appelle cette fonction en souris relâchée :
verif();
Pour écrire ce script pour toutes les cases à cocher, tu lances celui-ci à partir de la console :
for (var i=0; i<21; i++) {
this.getField("CC1."+i).setAction("MouseUp", "verif();");
}
@+
😎Attachments:
You must be logged in to view attached files.29 septembre 2023 à 18:18 en réponse à : Action automatisée pour ajouter une page à une autre #73295bebarthMaître des clésbonjour,
Pour ajouter la page du fichier “VersoPage.pdf” après la dernière page, il faut écrire :
var Chemin=this.path;
var nomDocument=this.documentFileName;
var repertoire=Chemin.substring(0,Chemin.length-nomDocument.length);
this.insertPages ({
nPage: this.numPages-1,
cPath: repertoire+"VersoPage.pdf",
nStart: 0
});
this.saveAs({
cPath: Chemin,
bPromptToOverwrite: false,
});
@+
😎bebarthMaître des clés…et si tu as besoin pour vérifier que les champs nécessaires sont bien remplis dans la boite de dialogue, n’hésite pas !
@+
😎bebarthMaître des clésbonjour,
J’ai passé pas mal de temps à étudier les tampons et boites de dialogue, donc si je peux me permettre, voici un script un peu “simplifié”.
S’il n’y a rien à initialiser ou rien à vérifier, pas besoin des fonctions “initialize” et “validate” dans le script.
Par contre, si on veut qu’il y ait au moins une case cochée et tous les champs textes remplis, ce serait peut-être bon de les vérifier…
Et si on met les valeurs de la boite de dialogue en variables, autant s’en servir lorsqu’on les rappelle pour remplir les champs !///////////////////////////////////
// Acrobat JavaScript Dialog
//////////////////////////////////
var oJSDlg={
DoDialog: function(){return app.execDialog(this);},
commit: function (oJSDlg) {
var oRslt=oJSDlg.store();
// Lorsqu'on a plusieurs lignes semblables on peut simplifier
for (var i=1; i<=4; i++) eval("bChk"+i+"=oRslt[\"Chk"+i+"\"];");
for (var i=1; i<=3; i++) eval("text"+i+"=oRslt[\"Txt"+i+"\"];");
},
description: {
name: "Conformité",
elements: [{
type: "view",
width: 362,
height: 200,
elements: [
{
type: "check_box",
item_id: "Chk1",
name: "Vu",
},
{
type: "check_box",
item_id: "Chk2",
name: "Vu avec annotation(s)",
},
{
type: "check_box",
item_id: "Chk3",
name: "Corriger tel qu’annoté",
},
{
type: "check_box",
item_id: "Chk4",
name: "Refusé",
},
{
type: "edit_text",
item_id: "Txt1",
width: 300,
height: 20,
name: "Text Field 1",
},
{
type: "static_text",
name: "Description for Text Field 1",
},
{
type: "edit_text",
item_id: "Txt2",
width: 300,
height: 20,
name: "Text Field 2",
},
{
type: "static_text",
name: "Description for Text Field 2",
},
{
type: "edit_text",
item_id: "Txt3",
width: 300,
height: 20,
name: "Text Field 3",
},
{
type: "static_text",
name: "Description for Text Field 3",
},
{
type: "ok",
},
],
}],
},
};
if (event.source.forReal && event.source.stampName=="#VBC") {
if ("ok"==oJSDlg.DoDialog()) {
// On pourrait également simplifier
this.getField("Chk1").checkThisBox(0,bChk1);
this.getField("Chk2").checkThisBox(0,bChk2);
this.getField("Chk3").checkThisBox(0,bChk3);
this.getField("Chk4").checkThisBox(0,bChk4);
this.getField("Text1").value=text1;
this.getField("Text2").value=text1;
this.getField("Text3").value=text1;
}
}
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésOups, je n’avais pas la réponse Thom Parker lorsque j’ai répondu. Désolé !
@+
😎bebarthMaître des clésbonjour,
je n’ai que mon téléphone avec moi et je ne peux donc pas essayer, mais les noms des « ID » ne doivent contenir que 4 caractères !
A essayer donc…
@+
😎bebarthMaître des clésbonjour,
Tu peux stocker des variables dans des champs invisibles que tu mets en page 1 ou les enregistrer en script de document.@+
😎bebarthMaître des clésbonjour,
Sauf erreur, ça fonctionne dans ce fichier joint !@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésAvant de rendre un calque visible, ils faut les rendre tous non visibles, sinon si on choisi un calque sur un plan avant ça fonctionne mais si il est sur un plan arrière ça ne fonctionne pas.
Il faudrait donc écrire pour rester dans son style :
if(event.willCommit) {
this.getOCGs().some(function(a){return a.state = false};);
this.getOCGs().some(function(a){return a.state = (a.name==event.value);});
}
@+
😎bebarthMaître des clésbonjour,
Voici mon script à moi ! 😉
if (!event.willCommit) {
var lesCalques=this.getOCGs();
for (var ii=0; ii<lesCalques.length; ii++) lesCalques[ii].state=false;
for (var ii=0; ii<lesCalques.length; ii++) {
if (lesCalques[ii].name==event.changeEx) {
lesCalques[ii].state=true;
break;
}
}
}
@+
😎PS : Indice ii au lieu de i à cause d’un problème d’affichage losque i est entre crochets…
- Cette réponse a été modifiée le il y a 7 mois et 3 semaines par bebarth.
Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Tu peux utiliser l’indice du préfixe de la page dupliquée !@+
😎bebarthMaître des clésIl suffit d’une petite modification pour l’affichage du nom dans le popup:
var aParams=[];
for (var d=0; d<this.dataObjects.length; d++) aParams.push({cName: this.dataObjects[d].name.substr(0,this.dataObjects[d].name.lastIndexOf(".")), cReturn: d.toString()});
var cChoice=app.popUpMenuEx.apply(app, aParams);
if (cChoice!=null) this.exportDataObject({cName: this.dataObjects[cChoice].name, nLaunch:2});
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
En script d’action souris entrée :
var aParams=[];
for (var d=0; d<this.dataObjects.length; d++) aParams.push({cName: this.dataObjects[d].name, cReturn: d.toString()});
var cChoice=app.popUpMenuEx.apply(app, aParams);
if (cChoice!=null) this.exportDataObject({cName: this.dataObjects[cChoice].name, nLaunch:2});
@
😎- Cette réponse a été modifiée le il y a 8 mois par bebarth.
Attachments:
You must be logged in to view attached files.bebarthMaître des clésOups ! Je n’avais pas vu le dernier post… Je regarde demain !
@+
😎bebarthMaître des clésbonjour,
En script d’action souris entrée :
var aParams=[
{cName: "OUVRE PDF2", cReturn: "1"},
{cName: "OUVRE html2", cReturn: "2"},
];
var cChoice=app.popUpMenuEx.apply(app, aParams);
if (cChoice!=null) {
switch (cChoice) {
case "1":
this.exportDataObject({cName: "PDF2.pdf", nLaunch:2});
break;
case "2":
this.exportDataObject({cName: "html2.html", nLaunch:2});
}
}
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Avec ton script :
...
this.insertPages ({
nPage: 0,
cPath: repertoire+"Verso.pdf",
nStart: 0
});
...
Tu insères la première page du fichier “Verso.pdf” après la première page de ton fichier.
Ça n’a de sens que si ton fichier n’est pas le fichier “Verso.pdf” !@+
😎bebarthMaître des clésbonjour,
En script de format personnalisé :
if (event.value<=0) event.value="";
Pas besoin d’écrire this.event car event ne s’applique qu’au document en cours !
@+
😎bebarthMaître des clésbonsoir,
Ne serait-ce point la même demande que ce post :@+
😎bebarthMaître des clésbonjour,
Voici un script de calcul pour le champ “Text5” :
if (this.getField("Dropdown1").value!=0) event.value=this.getField("Text"+this.getField("Dropdown1").value).valueAsString;
else event.value="";
…et le fichier qui va avec !@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésHeureusement qu’il IA encore nous !
@+
😎bebarthMaître des clésbonjour,
Voici un exemple avec un champ pour indiquer la vitesse, et le script :
var leTemps=this.getField("ResultatKM").value/this.getField("vitesse").value;
var lesHeures=Math.floor(leTemps);
var resteHeures=leTemps-lesHeures;
var lesMinutes=Math.floor(resteHeures*60);
var lesSecondes=(resteHeures*3600-lesMinutes*60).toFixed(1);
//
if (lesHeures<10) var lesHeures="0"+lesHeures;
if (lesMinutes<10) var lesMinutes="0"+lesMinutes;
if (lesSecondes<10) var lesSecondes="0"+lesSecondes;
//
event.value=lesHeures+":"+lesMinutes+":"+lesSecondes;
Ce script est un peu développé pour une meilleure compréhension.
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Il faudrait écrire :
if (event.value!="") event.value=event.value+" %";
@+
😎bebarthMaître des clésbonjour,
Je t’ai fait un exemple vite fait car après je pars en vacances…
Script de calcul lorsqu’il n’y a pas beaucoup de champs (cf. premier exemple) :
if (this.getField("distance").value && this.getField("temps").value && this.getField("allureAux").value) {
var Temps=this.getField("temps").value.split(":");
var enSecondes=Number(Temps[0])*3600+Number(Temps[1])*60+Number(Temps[2]);
var regleDe3=enSecondes*this.getField("allureAux").value/this.getField("distance").value;
var lesMinutes=Math.floor(regleDe3/60);
var enSecondes=(regleDe3-lesMinutes*60).toFixed(2).toString().split(".");
var lesSecondes=enSecondes[0];
var lesCentiemes=enSecondes[1];
event.value=lesMinutes+"\'"+util.printf("%,302.0f", lesSecondes)+"\"";
if (lesCentiemes!="00") event.value+=lesCentiemes;
} else event.value="";
Vu que tu as souvent beaucoup de champs, il est préférable de mettre une fonction en script de document et de l’appeler uniquement lorsqu’un champ modifié est désactivé, ce qui évite de lancer le calcul pour tous les champs après chaque évènement (cf. second exemple).
La fonction :
function allure(laDistance,leTemps,lAllureAux) {
if (laDistance && leTemps && lAllureAux) {
var Temps=leTemps.split(":");
var enSecondes=Number(Temps[0])*3600+Number(Temps[1])*60+Number(Temps[2]);
var regleDe3=enSecondes*lAllureAux/laDistance;
var lesMinutes=Math.floor(regleDe3/60);
var enSecondes=(regleDe3-lesMinutes*60).toFixed(2).toString().split(".");
var lesSecondes=enSecondes[0];
var lesCentiemes=enSecondes[1];
this.getField("allure."+ind).value=lesMinutes+"\'"+util.printf("%,302.0f", lesSecondes)+"\"";
if (lesCentiemes!="00") this.getField("allure."+ind).value+=lesCentiemes;
} else this.getField("allure."+ind).value="";
} <code>et tu l'appelles avec :</code> var indice=event.target.name.split(".");
ind=indice[1];
allure(this.getField("distance."+ind).value,this.getField("temps."+ind).value,this.getField("allureAux."+ind).value);
@+
😎- Cette réponse a été modifiée le il y a 10 mois par bebarth.
Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Si tu regardes le format de ton champ end.0, tu verras que ce n’est pas un nombre mais une valeur au format H:MM:ss (personnalisé).
Tu ne peux donc pas l’utiliser telle quelle dans ta boucle.@+
😎bebarthMaître des clésJe n’ai pas étudié le fichier complètement pour savoir à quoi correspondent les différents champs, mais dans ton script :
for (var a=0 ; a<14 ; a++){
var d = this.getField("dist."+a).value;
var b = 500/d;
}
event.value= "";
var somme=Time2Num("mm:ss", this.getField("end.0").value)/b;
HM_Format()
La boucle ne sert à rien vu qu’il n’y a pas d’opération, et ton b sera donc toujours celui de l’indice 13…
Je pense que ce n’est pas ce que u souhaites !@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésIl n’y a toujours pas de champs “t.”…
Et pour la boucle de la première ligne, a<=13 (et non a<17).@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Moi je n’ai pas d’erreur mais la première chose que je vois c’est qu’il n’y a pas de champs “t.” (t minuscule).@+
😎4 juillet 2023 à 18:33 en réponse à : Il y a-t-il une façon de faire un calcul plus court que ça? #73046bebarthMaître des clésEssaye comme ça :
var laSomme=0;
for (var i=1; i<=8; i++) laSomme+=Number(this.getField("TOTAL"+i).value);
if (laSomme==0) event.value="";
else event.value=laSomme;
@+
😎Attachments:
You must be logged in to view attached files.4 juillet 2023 à 17:36 en réponse à : Il y a-t-il une façon de faire un calcul plus court que ça? #73044bebarthMaître des clésevent.value=0;
for (var i=1; i<=8; i++) event.value+=this.getField("TOTAL"+i).value;
if (event.value==0) event.value="";
@+
😎4 juillet 2023 à 16:51 en réponse à : Il y a-t-il une façon de faire un calcul plus court que ça? #73042bebarthMaître des clésbonjour,
Quelle est la question ?@+
😎bebarthMaître des clésbonjour,
Il faut écrire :
if (event.target.buttonGetCaption()=="SUC") event.target.buttonSetCaption("ECH");
else if (event.target.buttonGetCaption()=="ECH") event.target.buttonSetCaption("ABD");
else if (event.target.buttonGetCaption()=="ABD") event.target.buttonSetCaption("");
else event.target.buttonSetCaption("SUC");
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,Un tel script peut aussi être exécuté par une Action (Assistant Action).
Exact ! Ou même depuis la console…
Et pour ces deux façons on n’a pas besoin d’étendre les privilèges.@+
😎bebarthMaître des clésbonjour,
Il n’est pas possible d’enregistrer avec un script directement à partir d’un bouton.
Pour cela, il faut un script de d’application (un fichier .js que l’on place dans le répertoire JavaScript d’Acrobat).
Le script est du genre :
if (app.formsVersion>=8) {
Save_PDFA=app.trustedFunction(function(cheminFichier) {
app.beginPriv();
this.flattenPages();
this.saveAs({
cPath: cheminFichier,
cConvID: "com.callas.preflight.pdfa"
});
app.endPriv();
})
console.println("Le plugin d\'enregistrement \"Save_PDFA\" est actif.");
}
Et tu appelles le script via ton bouton avec :
event.target.display=display.hidden;
Save_PDFA("myDoc.pdf");
Ici la première ligne cache le bouton avant d’aplatir les champs (on ne peut pas supprimer le champ qui lance l’action).
Ci-joint les fichiers.
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clés…deux petites mofifications :
for (var laLigne=1; laLigne<=34; laLigne++) {
var lesValeurs=[];
for (var i=1; i<=10; i++) {
if (this.getField("a."+laLigne+"."+i).value!=="") lesValeurs.push();
this.getField("a."+laLigne+"."+i).fillColor=["T"];
}
try {
lesValeurs.sort(function(a,b){return a[1]-b[1]});
for (var i=0; i<=10; i++) {
if (lesValeurs[1]==lesValeurs[0][1]) {
if (this.getField("a."+laLigne+"."+lesValeurs[0]).value!=="") this.getField("a."+laLigne+"."+lesValeurs[0]).fillColor=this.getField("A."+laLigne).value=="+"?color.green:color.red;
} else break;
}
for (var i=lesValeurs.length-1; i>=0; i--) {
if (lesValeurs[1]==lesValeurs[lesValeurs.length-1][1]) {
if (this.getField("a."+laLigne+"."+lesValeurs[0]).value!=="") this.getField("a."+laLigne+"."+lesValeurs[0]).fillColor=this.getField("A."+laLigne).value=="-"?color.green:color.red;
}
}
} catch(e) {}
}
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,J’ai testé le fichier joint, ça ne fonctionnait pas.
Tu as certainement testé le script de mon fichier avec ton fichier, car le miens fonctionne très bien… un peu long en script de calcul comme je l’ai expliqué précédemment. Si les valeurs sont entrées manuellement il vaut mieux utiliser un script de champ désactivé qui ne fera le calcul que sur la ligne.
Pour fonctionner correctement il faut supprimer tous tes autres scripts relatifs à ce calcul. Les menus déroulants doivent également afficher + ou – et ne doivent donc pas être vides.Je ne vois pas ou se trouvent les différences pour les valeurs des listes déroulantes (+ et -).
Il faut regarder les 2 lignes de ce type :
this.getField("a."+laLigne+"."+lesValeurs[0][0]).fillColor=this.getField("A."+laLigne).value=="+"?color.green:color.red;
@+
😎bebarthMaître des clésDu coup, le script d’un seul champ (ici ) doit être :
for (var laLigne=1; laLigne<=34; laLigne++) {
var lesValeurs=[];
for (var i=1; i<=10; i++) {
if (this.getField("a."+laLigne+"."+i).value!=="") lesValeurs.push([i,this.getField("a."+laLigne+"."+i).value]);
this.getField("a."+laLigne+"."+i).fillColor=["T"];
}
try {
lesValeurs.sort(function(a,b){return a[1]-b[1]});
if (this.getField("a."+laLigne+"."+lesValeurs[0][0]).value!=="") this.getField("a."+laLigne+"."+lesValeurs[0][0]).fillColor=this.getField("A."+laLigne).value=="+"?color.green:color.red;
if (this.getField("a."+laLigne+"."+lesValeurs[lesValeurs.length-1][0]).value!=="") this.getField("a."+laLigne+"."+lesValeurs[lesValeurs.length-1][0]).fillColor=this.getField("A."+laLigne).value=="-"?color.green:color.red;
} catch(e) {}
}
A noter que j’ai ajouté l’inégalité absolu “!==” pour renir compte des éventuels 0.@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,Cela fonctionne sauf pour la selection du + ou – dans la liste déroulante, cela ne change rien, c’est toujours la valeur mini qui apparait en vert.
Les menus déroulants + ou – sont sensés faire quoi ?
@+
😎bebarthMaître des clésbonjour,
Sur le même principe, on écrit :
for (var laLigne=1; laLigne<=34; laLigne++) {
var lesValeurs=[];
for (var i=1; i<=10; i++) {
if (this.getField("a."+laLigne+"."+i).value!="") lesValeurs.push([i,this.getField("a."+laLigne+"."+i).value]);
this.getField("a."+laLigne+"."+i).fillColor=["T"];
}
try {
lesValeurs.sort(function(a,b){return a[1]-b[1]});
if (this.getField("a."+laLigne+"."+lesValeurs[0][0]).value!="") this.getField("a."+laLigne+"."+lesValeurs[0][0]).fillColor=color.green;
if (this.getField("a."+laLigne+"."+lesValeurs[lesValeurs.length-1][0]).value!="") this.getField("a."+laLigne+"."+lesValeurs[lesValeurs.length-1][0]).fillColor=color.red;
} catch(e) {}
}
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonsoir,
Dans le principe, voici un script que l’on peut placer en script de calcul d’un seul champ :
for (var laLigne=1; laLigne<=15; laLigne++) {
var lesValeurs=[];
for (var i=1; i<=10; i++) {
lesValeurs.push([i,this.getField("a."+laLigne+"."+i).value]);
this.getField("a."+laLigne+"."+i).fillColor=["T"];
}
lesValeurs.sort(function(a,b){return a[1]-b[1]});
if (this.getField("a."+laLigne+"."+lesValeurs[0][0]).value!="") this.getField("a."+laLigne+"."+lesValeurs[0][0]).fillColor=color.green;
if (this.getField("a."+laLigne+"."+lesValeurs[9][0]).value!="") this.getField("a."+laLigne+"."+lesValeurs[9][0]).fillColor=color.red;
}
Ce script est exécuté après chaque évènement, ce qui risque de ralentir si il y a beaucoup d’autres calcul.
Si les valeur sont entrées manuellement pour chaque champ, il vaut mieux mettre une fonction en script de document :
function couleur() {
var ligne=event.target.name.split(".");
var laLigne=ligne[1];
var lesValeurs=[];
for (var i=1; i<=10; i++) {
lesValeurs.push([i,this.getField("a."+laLigne+"."+i).value]);
this.getField("a."+laLigne+"."+i).fillColor=["T"];
}
lesValeurs.sort(function(a,b){return a[1]-b[1]});
if (this.getField("a."+laLigne+"."+lesValeurs[0][0]).value!="") this.getField("a."+laLigne+"."+lesValeurs[0][0]).fillColor=color.green;
if (this.getField("a."+laLigne+"."+lesValeurs[9][0]).value!="") this.getField("a."+laLigne+"."+lesValeurs[9][0]).fillColor=color.red;
}
…et de l’appeler avec un script de champ désactivé :
couleur();
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
En script de validation du menu déroulant tu écris :
var items=[];
for (var i=0; i<event.target.numItems; i++) items.push([event.target.getItemAt(i,false),event.target.getItemAt(i,true)]);
for (var i=0; i<items.length; i++) {
if (items[0]==event.value) {
this.getField("Text1").value=items[1];
break;
}
}
Et bien sûr tu supprimes le script de calcul du champ texte…@+
😎P.S. : En script de validation d’un menu déroulant, event.value retourne le nom de l’élément et non la valeur d’exportation.
- Cette réponse a été modifiée le il y a 11 mois et 2 semaines par bebarth.
Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Je ne suis pas certain de bien comprendre !
Lorsque l’utilisateur indique un élément, tu souhaites l’ajouter à ta liste sans pour cela modifier le contenu du champ texte.
C’est ça ???@+
😎bebarthMaître des clésbonjour,
Je ne comprends pas ceci :… si observation rempli copié a l’identique ce qui est marqué dans la textbox …
@+
😎bebarthMaître des clésbonjour,
C’est également possible en dessinant les aiguilles en SVG, mais alors là bon courage.
Ça me “trottait” dans la tête depuis que j’ai répondu, je me suis donc replongé sur le sujet et voici une horloge analogique !
Le design n’est peut-être pas très moderne, je verrai si je trouve “5 minutes”. 😂@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Si tu utilises mon script pour tous les champs “Total” il faut également supprimer tous les anciens scripts des champs “Heures supplémentaires”.
Il faut également revoir l’ordre de calcul des champs, et enfin placer ce script pour le champ “Total HS” :
var total=0;
for (var i=1; i<=5; i++) total+=Time2Num("hh:mm",this.getField("Champ texte5."+i).value);
event.value=calculHeures(total);
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
En script de calcul pour le champ “cartebl” :
if (event.value!="Off") this.getField("cartejeune").value="Off";
et pour le champ “cartejeune” :
if (event.value!="Off") this.getField("cartebl").value="Off";
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Voici les scripts à placer en script de document et script de calcul des champs “Total” :// Fonctions en scripts de document
function Time2Num(sFormat,sTime) {
if(sTime=="") return "";
var oTime=util.scand("mm/dd/yyyy "+sFormat,"01/01/1970 "+sTime);
var fTZOffset=oTime.getTimezoneOffset()*1000*60;
var fTime=oTime.valueOf()-fTZOffset;
return Math.round(fTime/1000);
}
function calculHeures(nbHeures) {
//if (nbHeures<0) nbHeures=(24*3600)+(fin-debut);
nbHeures=Math.round(nbHeures/60);
heures=Math.floor(nbHeures/60);
lesMinutes=((nbHeures/60)-heures)*60;
minutes=util.printf("%,302.0f",lesMinutes);
return heures+":"+minutes;
}
function affichage(ind) {
var debutJournee=this.getField("Champ texte1."+ind).value;
var pauseJournee=this.getField("Champ texte2."+ind).value;
var finJournee=this.getField("Champ texte3."+ind).value;
var heuresTheoriques=this.getField("Champ texte4."+ind).value;
if(debutJournee!="" && finJournee!="") {
var debut=Time2Num("hh:mm",debutJournee);
var pause=Time2Num("hh:mm",pauseJournee);
var fin=Time2Num("hh:mm",finJournee);
var theoriques=Time2Num("hh:mm",heuresTheoriques);
event.value=calculHeures(fin-debut-pause);
this.getField("Champ texte5."+ind).value=calculHeures(fin-debut-pause-theoriques);
} else {
event.value="";
this.getField("Champ texte5."+ind).value="";
}
}
// Script de calcul des champs "Total"
var indice=event.target.name.substr(event.target.name.indexOf(".")+1);
affichage(indice);
Dans le fichier joint, seule la première ligne est calculée avec ce script.
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clés👍
Juste pour info, voici comment j’aurais écrit le script :
// Fonction en script de document
function light(nSuffix) {
switch (event.changeEx) {
case "Oui":
var couleur=["RGB",0,1,0];
break;
case "Partiellement":
var couleur=["RGB",1,1,0];
break;
case "Non":
var couleur=["RGB",1,0,0];
break;
default:
var couleur=["T"];
}
this.getField("gommette."+nSuffix).fillColor=couleur;
}
// Script de touches personnalisé
if (!event.willCommit) light(event.target.name.substr(event.target.name.indexOf(".")+1));
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésPeux-tu partager un fichier ?
@+
😎bebarthMaître des clésbonjour,
Si j’ai bien compris, tu dois appeler la fonction avec :
light(event.target.name);
N’importe quoi !!! ça va changer la couleur du menu déroulant…
Comme le dit Merlin, si tu as plusieur menus déroulants et plusieurs gommettes avec le même indice, lu appelles la fonction avec :
light(event.target.name.substr(event.target.name.indexOf(".")+1));
@+
😎- Cette réponse a été modifiée le il y a 1 année par bebarth.
bebarthMaître des clésbonjour,
Dans ce cas on peut simplifier un peu le script :
if (!event.willCommit) {
this.getField("gommette").fillColor=["RGB",1,1,1];
this.getField("ijaune").display=display.hidden;
this.getField("irouge").display=display.hidden;
this.getField("iverte").display=display.hidden;
this.getField("ibleu").display=display.hidden;
switch (event.changeEx) {
case "Bleu":
this.getField("gommette").fillColor=["RGB",0,0,1];
this.getField("ibleu").display=display.visible;
break;
case "Jaune":
this.getField("gommette").fillColor=["CMYK",0,0,1,0];
this.getField("ijaune").display=display.visible;
break;
case "Vert":
this.getField("gommette").fillColor=["RGB",0,1,0];
this.getField("iverte").display=display.visible;
break;
case "Rouge":
this.getField("gommette").fillColor=["RGB",1,0,0];
this.getField("irouge").display=display.visible;
}
}
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clés…oui, mais si on écrit 35132023 cela affiche 35/13/2023 ce qui n’est pas une date !
@+
😎bebarthMaître des clésbonjour,
Voici un script de touches personnalisé pour le menu déroulant :
if (!event.willCommit) {
switch (event.changeEx) {
case "Bleu":
var couleur=["RGB",0,0,1];
break;
case "Jaune":
var couleur=["CMYK",0,0,1,0];
break;
case "Vert":
var couleur=["RGB",0,1,0];
break;
default:
var couleur=["RGB",1,0,0];
}
this.getField("gommette").fillColor=couleur;
}
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Je n’ai pas trouvé où se trouve ce code, mais il sert à indiquer le formatage d’un champ où chaque 9 représente un chiffre de 0 à 9.
Vu que c’est un champ où il faut indiquer une date, il faudrait mieux utiliser AFDate_FormatEx(dd/mm/yyyy) qui ne permet d’indiquer qu’une date valide.@+
😎bebarthMaître des clésbonjour,Bonjour à tous, je suis nouveau et je découvre le langage JavaScript, j’aimerais intégrer une horloge analogique…
Je pense que tu ne commences pas par le plus facile !
Est-il techniquement possible d’avoir une horloge analogique en javascript?? Si oui avez vous un exemple? Merci
Ce sera donc possible si tu utilises les outils commentaires, mais il faudra revoir le script du fichier que Merlin à partagé car il ne fonctionne pas très bien, et après avoir regardé vite-fait je ne vois pas pourquoi ! A-t-il déjà fonctionné correctement avec des version précédentes ?
C’est également possible en dessinant les aiguilles en SVG, mais alors là bon courage.
Il n’y a aucune documentation disponible pour Acrobat et le peu de personnes qui savent utiliser cette méthode ne sont pas disposées à partager leurs connaissances. Il faut dire que c’est assez compliqué… J’ai personnellement mis des mois à comprendre un peu comment ça fonctionne et vu que je n’ai pas pratiqué également depuis d’autres mois il faudrait que je me replonge dedans car biens sur toutes les commandes disponibles (en HTML par exemple) ne le sont pas avec Acrobat.
https://www.w3schools.com/graphics/svg_intro.aspSi je peux te donner un conseil, utilise une horloge numérique !!!!
@+
😎- Cette réponse a été modifiée le il y a 1 année par bebarth.
bebarthMaître des clésbonjour,
en script de calcul du champ tu écris :
event.value=this.getField(«nonChamp»).value;
Avec des guillemets à l’anglaise…
@+
😎bebarthMaître des clés👍
je regarderai la semaine prochaine car je n’ai qu’un téléphone cette semaine…
@+
😎bebarthMaître des clésbonjour,
Ça fonctionne si le numéro est attribué à partir un seul fichier initial, mais si on veut établir une facture à partir de documents “fichier client” déjà existants il faudra utiliser un fichier “compteur”.@+
😎 -
AuteurRéponses