Toutes mes réponses sur les forums
-
AuteurRéponses
-
30 septembre 2023 à 10:28 en réponse à : Action automatisée pour ajouter une page à une autre #73309bebarthMaître des clés
bonjour,
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 1 année et 3 mois 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 1 année et 3 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 1 année et 5 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 1 année et 6 mois 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 et 7 mois 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 et 7 mois 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”.@+
😎bebarthMaître des clésbonjour,
En même temps, le script d’une horloge n’est pas très compliqué !
function affichage() {
var lesHeures=new Date().getHours();
if (lesHeures<10) var lesHeures="0"+lesHeures;
var lesMinutes=new Date().getMinutes();
if (lesMinutes<10) var lesMinutes="0"+lesMinutes;
var lesSecondes=new Date().getSeconds();
if (lesSecondes<10) var lesSecondes="0"+lesSecondes;
this.getField("horloge").value=lesHeures+":"+lesMinutes+":"+lesSecondes;
}
run=app.setInterval("affichage()",1000);
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Difficile de retrouver ce fichier sans savoir d’où il vient ! Merlin à peut-être une idée, 2004 c’était le début du forum et moi je n’y connaissais rien…
Par contre, voici un fichier de Thom Parker où tu trouveras une horloge intégrée.@+
😎PS : Voici le lien car le fichier est trop gros pour être placé sur le forum :
https://www.pdfscripting.com/public/FreeStuff/PDFSamples/JavaScriptClock.pdfCi-joint également un fichier que j’ai fait avec un chronomètre si ça peut t’aider…
- Cette réponse a été modifiée le il y a 1 année et 8 mois par bebarth.
Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Il faut écrire :
this.getField("text1").readonly=true;
@+
😎bebarthMaître des clésbonjour,
…avec un petit script :
if (this.getField("coche1").value=="Off") var c1=0;
else var c1=this.getField("coche1").value;
if (this.getField("coche2").value=="Off") var c2=0;
else var c2=this.getField("coche2").value;
if (c1+c2==0) event.value="";
else event.value=(c1+c2)+" €";
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
La difficulté est qu’il n’y a pas de message d’erreur retourné, juste une alerte qui indique que le format n’est pas conforme !
Je doute sur la possibilité d’effectuer ceci via JavaScript…@+
😎bebarthMaître des clésbonjour,
En script de format personnalisé :
event.value=event.target.value.toFixed(2)+" m"
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clés…comme ça !
console.clear();
console.show();
var lesElements=[]
for (var i=0; i<this.numFields; i++) {
if (this.getField(this.getNthFieldName(i)).type=="combobox" || this.getField(this.getNthFieldName(i)).type=="listbox") lesElements.push(this.getNthFieldName(i));
}
if (!lesElements.length) app.alert("Il n'y a ni menu d\u00E9roulant ni zone de liste dans ce document.",3);
else {
lesElements.unshift("- S\u00E9lectionnez -");
var listeElements="var laListe \= \{";
for (var j=0; j<lesElements.length; j++) listeElements+="\""+lesElements[j]+"\": "+(-1*(j+1)).toString()+",";
var listeElements=listeElements.substring(0, listeElements.length-1);
listeElements+="\}";
eval(listeElements);
var bDialog={
DoDialog: function(){return app.execDialog(this);},
initialize: function(bDialog) {this.loadDefaults(bDialog)},
validate: function(bDialog) {
results=bDialog.store();
oRslt=bDialog.store();
var listeElements=bDialog.store()["LIST"];
testOK=1;
for (var j in listeElements) {
if (listeElements[j]>0) {
valItem=listeElements[j];
if (valItem==1) testOK=0;
}
}
var alertReturn=(testOK);
if(!alertReturn) app.alert("\nVeuillez s\u00E9lectionner un menu d\u00E9roulant.");
return alertReturn;
},
loadDefaults: function (bDialog) {
bDialog.load({LIST: laListe,});
},
description: {
name: "Dialog",
align_children: "align_top",
elements: [
{
type: "view",
align_children: "align_fill",
elements: [
{
type: "popup",
item_id: "LIST",
width: 120,
},
{
alignment: "align_right",
type: "ok_cancel",
},
]
},
]
}
};
if("ok"==bDialog.DoDialog()) {
var nomChamp=lesElements[valItem-1];
var f=this.getField(nomChamp);
var numItems=f.numItems;
if (f.type=="combobox") var leType="Menu d\u00E9roulant";
else var leType="Zone de liste";
console.println("***** "+leType+" \""+nomChamp+"\" *****\r\u00C9l\u00E9ment -> Valeur d'exportation");
for (var i=0; i<f.numItems; i++) {
console.println("– "+f.getItemAt(i,false)+" -> "+f.getItemAt(i,true));
}
console.println("**********************************\r");
}
}
@+
😎bebarthMaître des clésEn script de format personnalisé :
if (event.value!="") {
var somme=event.value.split(",");
if (somme.length==1) event.value=somme[0]+",00 €";
else event.value=somme[0]+","+(somme[1]+"00").substr(0,2)+" €";
}
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clés…et si on veut être perfectionniste il faut modifier l’alerte et le message affiché dans la console !!!
@+
😎bebarthMaître des clésil suffit d’écrire :
…
if (this.getField(this.getNthFieldName(i)).type==”combobox” || this.getField(this.getNthFieldName(i)).type==”listbox”) lesElements.push(this.getNthFieldName(i));
…@+
😎bebarthMaître des clésbonjour,
En script de format personnalisé :
if (event.value!="") event.value+=" €";
ou :
if (event.value!="") event.value="€ "+event.value;
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Je suis un peu à la bourre sur ce post, mais voici un script que j’avais écrit il y a quelques temps sur le même sujet.
Le script retourne une boite de dialogue avec le nom de tous les menus déroulants (ça évite d’entrer un nom incorrect) puis liste tous les éléments et leur valeur d’exportation.
console.clear();
console.show();
var lesElements=[]
for (var i=0; i<this.numFields; i++) {
if (this.getField(this.getNthFieldName(i)).type=="combobox") lesElements.push(this.getNthFieldName(i));
}
if (!lesElements.length) app.alert("Il n'y a pas de menu d\u00E9roulant dans ce document.",3);
else {
lesElements.unshift("- S\u00E9lectionnez -");
var listeElements="var laListe \= \{";
for (var j=0; j<lesElements.length; j++) listeElements+="\""+lesElements[j]+"\": "+(-1*(j+1)).toString()+",";
var listeElements=listeElements.substring(0, listeElements.length-1);
listeElements+="\}";
eval(listeElements);
var bDialog={
DoDialog: function(){return app.execDialog(this);},
initialize: function(bDialog) {this.loadDefaults(bDialog)},
validate: function(bDialog) {
results=bDialog.store();
oRslt=bDialog.store();
var listeElements=bDialog.store()["LIST"];
testOK=1;
for (var j in listeElements) {
if (listeElements[j]>0) {
valItem=listeElements[j];
if (valItem==1) testOK=0;
}
}
var alertReturn=(testOK);
if(!alertReturn) app.alert("\nVeuillez s\u00E9lectionner un menu d\u00E9roulant.");
return alertReturn;
},
loadDefaults: function (bDialog) {
bDialog.load({LIST: laListe,});
},
description: {
name: "Dialog",
align_children: "align_top",
elements: [
{
type: "view",
align_children: "align_fill",
elements: [
{
type: "popup",
item_id: "LIST",
width: 120,
},
{
alignment: "align_right",
type: "ok_cancel",
},
]
},
]
}
};
if("ok"==bDialog.DoDialog()) {
var nomChamp=lesElements[valItem-1];
var f=this.getField(nomChamp);
var numItems=f.numItems;
console.println("***** Menu d\u00E9roulant \""+nomChamp+"\" *****\r\u00C9l\u00E9ment -> Valeur d'exportation");
for (var i=0; i<f.numItems; i++) {
console.println("– "+f.getItemAt(i,false)+" -> "+f.getItemAt(i,true));
}
console.println("**********************************\r");
}
}
@+
😎bebarthMaître des clésbonjour,
Adobe Reader demande une connexion ?
Quel OS ? Il existe d’autres lecteurs gratuits.@+
😎bebarthMaître des clésbonjour,
Une petite amélioration du script pour ne pas pouvoir taper une série de zéro en début de frappe !
Voici l’expression régulière :
/^(([0]|([1-9]\d{0,11}))(\,\d{0,2})?)?$/
…et ajout automatique d’une virgule après un chiffre qui commence par zéro.@+
😎- Cette réponse a été modifiée le il y a 1 année et 9 mois par bebarth.
Attachments:
You must be logged in to view attached files.bebarthMaître des clésQuand j’ai quelque chose dans la tête, je ne l’ai pas au… tre part !
Voici donc un fichier avec le script mis en fonction.Script de touches personnalisé :
if (!event.willCommit) {
if (event.value.length==0 && event.change==",") event.change="0,";
var aTester=event.value.split("");
aTester.splice(event.selStart,event.selEnd-event.selStart,event.change);
var testeChaine=aTester.join("");
RegExAmount=/^(\d{0,12}(\,\d{0,2})?)$/;
if (RegExAmount.test(testeChaine)) {
ecriture(testeChaine);
} else event.rc=false;
} else {
RegExAmount=/^(\d{1,12}(\,\d{0,2})?)$/;
if (event.value=="" || RegExAmount.test(event.value)) {
ecriture(event.value);
} else event.rc=false;
}
Le reste est en script de document.
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Voici un fichier avec script de touches personnalisé qui permet de répondre aux 2 demandes.
L’écriture en lettres se fait au fur et à mesure de la frappe des chiffres.
J’ai recopié 2 fois le script d’origine pour raison de temps mais cela nécessiterait d’écrire une fonction en script de document !
Si j’avais à réécrire ce script aujourd’hui il serait un peu différent mais vu qu’il fonctionne…var etoiles="**********";
if (!event.willCommit) {
var aTester=event.value.split("");
aTester.splice(event.selStart,event.selEnd-event.selStart,event.change);
var testeChaine=aTester.join("");
RegExAmount=/^(\d{0,12}(\,\d{0,2})?)$/;
...
}
} else event.rc=false;
}
@+
😎- Cette réponse a été modifiée le il y a 1 année et 9 mois par bebarth.
Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
As-tu réussi ?@+
😎bebarthMaître des clés👍
@+
😎bebarthMaître des clésbonjour,
Dans mon idée « this » représente le document qui vient d’être enregistré, qui est actif et donc au premier-plan à l’instant T.
Ce n’est effectivement pas bien clair, mais pour moi “this” représente “l’objet” d’où est lancé la partie du script. Si c’est un document, “this” est ce document, si c’est d’une boite de dialogue, “this” est cette boite de dialogue.
Bonjour, le script a fonctionné
Combien de fichiers as-tu traité et en combien de temps ?
@+
😎bebarthMaître des clésbonjour,Je suppose que c’est automatique, mais si ce n’est pas le cas il faudra ajouter (après l’étape Enregistrement) une nouvelle étape « Exécuter un JavaScript » en utilisant ce script : this.closeDoc(true);
“this” représente le fichier dont on veut extraire la première page donc this.closeDoc(true); ne fermera pas le fichier temporaire.
Pour ma part voici le script à utiliser :
var newDoc=app.newDoc();
newDoc.insertPages ({
nPage: 0,
cPath: this.path,
nStart: 0
});
newDoc.deletePages(0);
newDoc.saveAs({
cPath: this.path.replace(/.pdf$/i,"_extrait.jpg"),
cConvID: "com.adobe.acrobat.jpeg",
bCopy: true,
bPromptToOverwrite: true
});
newDoc.closeDoc(true);
Il vaut effectivement traiter les 5000 fichiers par lots, sinon il faudrait écrire un autre script pour savoir où on en est dans le traitement…
@+
😎bebarthMaître des clés…pas besoin d’indiquer nEnd si on n’imprime qu’une seule page.
@+
😎
bebarthMaître des clésbonjour,
pour moi il faudra attendre la semaine prochaine car je suis sans ordinateur…
j’espère que ton stage est un peu plus long
@+
😎bebarthMaître des clésbonjour,
regarde les actions Acrobat :
https://helpx.adobe.com/fr/acrobat/using/applying-actions-scripts-pdfs.html
tu devrais y arriver, sinon il faudra attendre la semaine prochaine…@+
😎bebarthMaître des clésbonjour,
avec Acrobat Pro ou Reader ?
je n’ai pas d’ordinateur avec moi cette semaine mais regarde la méthode « print » de l’api référence…
@+
😎bebarthMaître des clésbonjour,
Il faudrait écrire un script de touches personnalisé comme celui que j’ai fait pour ce post :
je serai de retour la semaine prochaine.
@+
😎bebarthMaître des clésVoici quelquelques liens pour t’aider à comprendre le script :
https://www.w3schools.com/jsref/jsref_obj_date.asp
https://developer.mozilla.org/fr/docs/Web/JavaScript/Guide/Numbers_and_dates#lobjet_date
et
https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#printd@+
😎bebarthMaître des clésbonjour,
Il y avait effectivement une erreur dans le script !
Mieux, on met le script au niveau du document :
if (this.getField("validite").value=="") this.getField("validite").value=util.printd("dd/mm/yyyy", new Date(new Date().getTime()+(365*24*3600*1000)));
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Si tu caches le champ de la date du jour cela signifie que tu n’en a pas besoin !
Tu peux donc réduire ton script à :
Oups! Script modifié…
if (event.value=="") event.value=util.printd("dd/mm/yyyy", new Date(new Date().getTime()+(365*24*3600*1000)));
@+
😎- Cette réponse a été modifiée le il y a 1 année et 9 mois par bebarth.
Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
En script de document tu écris :
this.getField("nomDuChamp").setFocus();
@+
😎bebarthMaître des clés👍
bebarthMaître des clésbebarthMaître des clésbonjour,
Le plus simple est de donner un nom à l’annotation lors de sa création puis supprimer celle qui porte ce nom !if (event.target.buttonGetCaption()=="AJOUTER") {
var coordonnees=event.target.rect;
var annotation=this.addAnnot({
page: 0,
type: "Text",
point: [coordonnees[2]+20,coordonnees[1]+20],
name: "annotationNo1",
});
event.target.buttonSetCaption("SUPPRIMER");
event.target.fillColor=color.red;
event.target.textColor=color.white;
} else {
var lesAnnotations=this.getAnnots({nPage:0});
for (var i=0; i<lesAnnotations.length; i++)
if (lesAnnotations.name=="annotationNo1") lesAnnotations.destroy();
event.target.buttonSetCaption("AJOUTER");
event.target.fillColor=color.green;
event.target.textColor=color.black;
}@+
😎- Cette réponse a été modifiée le il y a 1 année et 9 mois par Merlin. Raison: Ce script n'est pas complet, voir ci-dessous
Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Il faut écrire le script comme ceci :
for (var i=0; i<this.numFields; i++) {
var oFld=this.getField(this.getNthFieldName(i));
if (oFld.type == "text" && (/^Question\.\d+\.\d+/.test(oFld.name) || /^R\.\d+\.\d+/.test(oFld.name) || /^Q\.\d+\.\d+/.test(oFld.name))) {
oFld.setAction("Calculate", "EditReps();");
oFld.setAction("Keystroke", "Default();");
}
}
@+
😎bebarthMaître des clésIl faut mettre les champs en lecture seule uniquement si ils ont été remplis !
var lesChamps=["champs1","champs2","champs3","etc."];
for (var i=0; i<lesChamps.length; i++) {
if (this.getField(lesChamps).value!=this.getField(lesChamps).defaultValue) this.getField(lesChamps).readonly=true;
}
@+
😎Attachments:
You must be logged in to view attached files.bebarthMaître des clésbonjour,
Le plus simple est de mettre le noms des champs dans une table et de placer ce script au même endroit que le précédent : “Lorsque le document sera enregistré” :
var lesChamps=["champs1","champs2","champs3","etc."];
for (var i=0; i<lesChamps.length; i++) this.getField(lesChamps).readonly=true;
@+
😎PS : Voir la copie d’écran car les crochets n’apparaissent pas dans la ligne de code !
- Cette réponse a été modifiée le il y a 1 année et 9 mois par bebarth.
Attachments:
You must be logged in to view attached files.bebarthMaître des clésVoici une petite modification de ton formulaire sur le champ Email ou j’ai rajouté un script pour demander une adresse valide
L’expression régulière que tu utilises vérifies vraiment que le minimum… On peut par exemple utiliser des caractères accentués alors qu’ils ne sont pas autorisés.
Si tu cherches sur internet tu trouveras des dizaines d’expressions régulières pour cette vérification et toutes différentes !
Moi j’utilise celle-ci…
/^[a-zA-Z0-9.!#$%&'*+/=?^_
{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/`@+
😎bebarthMaître des clésbonjour,TOUT fonctionne correctement comme je le souhaitais
Une petite précision : lorsqu’on utilise “event” dans un script, ce n’est pas la peine de le faire précéder par “this”.
“event” ne s’utilise que dans le document actif et “this” indique que c’est pour le document actif ! C’est donc redondant…@+
😎bebarthMaître des clésbonjour,
Oui, en script d’action lorsque le document sera enregistré on peut passer ces champs en lecture seule !@+
😎bebarthMaître des clésbonjour,
Il faut modifier l’ordre de calcul des champs.
Voici un des scripts :
if (this.getField("CARTE").value=="") var total=this.getField("1JS").value*this.getField("PU1JSE").value;
else var total=this.getField("1JS").value*this.getField("PU1JS").value;
if (this.getField("SUPPL").value=="") event.value=total;
else event.value=total*0.3;
Ici on peut indiquer n’importe quoi en numéro de carte et pour la réduction supplémentaire !
On pourrait peut-être ajouter une expression régulière afin de vérifier si c’est bien un numéro de carte correct…Désolé pour ne pas t’avoir répondu directement sur ta boite mail, j’ai encore été très occupé ces derniers jours.
@+
😎Attachments:
You must be logged in to view attached files. -
AuteurRéponses