Toutes mes réponses sur les forums
-
AuteurRéponses
-
alexParticipant
Pour retrouver votre formulaire protégé vierge même sur une tentative d’enregistrement:
Actions du document>Le document sera enregistré>
app.alert(“Avertissement:rLes donnu00E9es saisies dans ce formulaire ne seront pas conservu00E9es!”,3);
this.resetForm();Avec ou sans alerte, c’est comme au bon vieux temps.
alexParticipantBonjour à tous,
J’ai remplacé le champ ” ldentifier/localiser les composants” par un champ de type texte baptisé “Text” qui embarque un script de calcul personnalisé qui devrait répondre au problème…
Voir maquette, on peut tester en saisissant directement la note finale.alexParticipantBonjour,
Ci-joint une variante à adapter à votre cas. Attention, le format de ce champ ne peut pas être “nombre” puisqu’on analyse une chaîne de caractères. Il faudrait ajouter un script pour forcer la saisie des nombres si nécessaire.alexParticipantBonsoir,
Il vous suffit de créer un champ au format texte et de le nommer “Total”, Puis d’ajouter le script suivant au script existant:cMsg=”Il y a “+boutonCoche+ ” boutons cochu00E9s sur ” + boutonRadio + ” boutons-radios.”;
this.getField(“Total”).value=cMsg;alexParticipantSolution avec script unique donc …Comme promis précedemment.
alexParticipantBonjour à tous.
Pour prendre en compte les “Tab”, peut-être faut-il préférer les events.
Un seul script commun si on veut encore raffiner.
Amitiés
Voir maquette.alexParticipantBonjour,
Voici un petit script de validation de saisie qui pourra être repris dans d’autre configurations.
Les impressions dans la console illustrent le fonctionnement.
Voir maquette jointe.alexParticipantBonjour,
Sur Pc je vous conseille NotePad++ (pas NotePad).alexParticipantDepuis Acrobat 8 la version de JavaScript embarquée est 1.6.
Voir Mozilla Developer Center, http://developer.mozilla.org/en/docs/JavaScript
Pour moi, la majeure partie des méthodes et propriétés sont utilisables.alexParticipantBonjour à tous,
N’oubliez pas qu’il existe d’autre moyens que le code barre pour collecter des données de formulaire….alexParticipantCorrectif pour BB1.
alexParticipantVariante qui n’affiche que le numéro de la semaine.
alexParticipantBebarth a du louper quelque chose. Voir maquette jointe qui correspond à ce qu’il aurait du proposer.
Onglet calcul du champ “Semaine”, on lance le script weelcalc() légèrement modifié pour prendre en compte la forme de la saisie.
Amitiés à tous.7 avril 2016 à 09:30 en réponse à : Comment faire la mise en page d’une liste qui se remplit à partir de la database #60500alexParticipantNawelCPA travaille peut-etre sous Acrobat Pro 11 et Adobe® LiveCycle® Enterprise Suite …
alexParticipantJe ne comprends pas le problème !
Une liste déroulante ne peut pas contenir des champs puisque par nature elle est elle-même un champ.
Une liste déroulante embarque un certain nombre d’items auxquels on peut associer des valeurs d’export. Ces couples items/valeurs d’export peuvent être manipulées par script, donc variables en fonction du contexte de travail (la valeur d’un autre champ, l’état d’une case à cocher ou d’un bouton radio où l’heure du jour, etc…)
Merci de reformuler votre question.alexParticipantAttention, pour satisfaire votre demande, il faut utiliser un script de format personnalisé. Voir exemple joint.
Après saisie, le script l’analyse digit par digit en partant de la gauche.
Si on détecte la présence d’une virgule, on analyse les chiffres qui suivent en partant de la droite pour supprimer les digits “0” jusqu’à rencontrer un digit non “0”.
Ce script fonctionne quelque soit le nombre de chiffres désirés après la virgule.
A tester avant de valider…alexParticipantVoir les exemples dans la maquette jointe. Le script se trouve pour chaque champ dans l’onglet Calcul> Script de calcul personnalisé.
this.event.value=util.printd(“yyyy”,new Date());alexParticipantDésolé, une erreur s’est glissée dans l’initialisation de ma précédente version.
Il y a aussi des améliorations à apporter à l’analyse des saisies…alexParticipantJ’ai déplacé les scripts “Action” en scripts de “Validation” pour gérer la couleur des pavés.
J’ai ajouté quelques lignes dinitialisation.
J’ai créé un script de document pour gérer la couleur de la note.
Faites un essai, c’est sans garantie…17 mars 2016 à 08:47 en réponse à : Comment récupérer les données des variables créées dans l’onglet Propriétés #60485alexParticipantOn trouve ça dans la documentation de référence page 243 (JavaScript for Acrobat API Reference):
info
Specifies an object with properties from the document information dictionary in the PDF file. (See the PDF Reference version 1.7.) Standard entries are:
Title
Author
Subject
Keywords
Creator
Producer
CreationDate
ModDate
TrappedExemples:
oDoc=this;
var aAuteur=oDoc.info.Author;
var cDocTitle = oDoc.info.Title;
Par ailleurs on put créer ses propres paramètres Propriétés du document: onglet Personnalisées
Nom:parametre, Valeur: “Info perso”var x=this.info.parametre;
Enfin, on a souvent besoin du nom du fichier dans les scripts d’application:
cNomFichier=this.documentFileName;alexParticipantBonjour,
Pour les couleurs de remplissage basiques on peut écrire:if(condition)
{
this.getField(“Note1”).fillColor=color.green;
}
else
{
this.getField(“Note1”).fillColor=color.red;
}14 mars 2016 à 18:26 en réponse à : Convention de dénomination & Javascript (a…, c…, n…, etc.) #58011alexParticipantBonsoir,
Il s’agit bien de désigner la nature ce qui est manipulé comme le dit Merlin:
a pour les tableaux, exemple, var aFruits = [“Fruits”,”Apples”,”Oranges”];
b pour les variables binaires, exemple bBlockEx8 = true;
c pour les variables chaines de caractères, exemple cContactName = this.getField(“Ex8.ContactDropDown”).value;
n pour les entiers
o pour les objets, exemple var oFld = this.getField(“Ex7.” + cName); où oFld est un champEn ce qui concerne nStart, il s’agit du nom d’un argument associé à une méthode app. (app.print() par exemple) où nStart désigne un numéro de page (donc un entier).
Exemple de méthode app. (ajout d’un item de menu):
app.addMenuItem({cName:”Close All PD&Fs”,
cParent:”File”,
nPos:6,
cExec:”DoCloseAllDocs()”,
cEnable:”event.rc = app.doc != null”
});Je pense que c’est une bonne habitude de développeur. Je ferais bien de la faire mienne…
14 mars 2016 à 17:32 en réponse à : Récupérer les données de formulaires PDF dans un seul tableau Excel #59471alexParticipant
Suivez bien cette procédure à la lettre et vos attentes seront récompensées…
Procédure à suivre :Cette procédure s’effectue sous Adobe Acrobat PRO versions 10, 11 ou sous Adobe Acrobat DC.
Collecter les formulaires remplis et les placer dans un répertoire dédié.
Ouvrir le formulaire ayant servi à la saisie des données sous Acrobat PRO.
Faire apparaître les outils de formulaires: Affichage>Outils>Formulaires.
Cliquer sur l’onglet “Autres options de formulaire et sélectionner l’item:
“Fusionner les fichiers de données dans une feuille de calcul”, la fenêtre “Exporter les données provenant de plusieurs formulaires” apparaît.
A l’aide des boutons “Ajouter des fichiers” et “Supprimer des fichiers”, établir la liste des formulaires dont vous souhaitez collecter les données.
La liste étant établie, cliquer sur “Exporter”.
Choisir le nom du fichier d’export et le format .csv puis “Enregistrer”. Compter moins de 20 secondes pour une centaine d’enregistrements.
Ouvrir le fichier des données sous Excel. La première ligne donne le nom des champs de formulaire dans l’ordre où ils apparaissent sur le formulaire.
Chaque ligne correspond aux données d’un formulaire, la première colonne étant réservée au nom du fichier.
Procéder à une mise en forme des données et au remplacement des caractères accentués manuellement ou via une macro pour plus de commodité.
Enregistrer le fichier au format Excel.alexParticipantLe & est destiné à la manipulation des nombres binaires:
exemple avec les nombres 3 et 9 en binaire:
3 & 9
3 = 0 0 1 1 en binaire
9 = 1 0 0 1 en binaire
L’opérateur donne 1 car:
. 0 0 1 1
& 1 0 0 1
0 0 0 1&& est le ET de la logique combinatoire
(condition1 && condition2)
vaut true si les 2 conditions sont vraies(true en JS), false sinon.Conclusion: j’aurais du, en toute rigueur choisir &&
alexParticipantPOur interdire la saisie des chiffres….
Un peu de logique combinatoire:
Onglet Format: script de touches personnalisé:saisie=this.event.change;
codedigit=saisie.charCodeAt(0);
if(codedigit<57&codedigit>48)
{
this.event.change=””;
app.beep(0);
}alexParticipantBonjour Merlin,
Voici une nouvelle maquette dédiée à la détection des saisies non numériques dans un champ texte. Je pense que l’item 3 répond à ton problème. A chaque fois qu’un digit est saisi on teste sa nature en s’assurant que son code ASCII est bien sur le segment 0-9 (codes ASCII 48 à 57).Conseillé:
Onglet Format: script de touches personnalisé:saisie=this.event.change;
codedigit=saisie.charCodeAt(0);
if(codedigit>57|codedigit<48)
{
this.event.change=””;
app.beep(0);
}Nota: pas de beep sur Mac !
alexParticipantEt oui, j’ai eu tort de mettre la solution basique d’Adobe (sans script) en quatrième position de mon exemple:
4-Contrôle standard sur un champ formaté nombre sans recours à un script.
Elle aurait du figurer en tête!
Cependant, dès qu’on sort de cet usage basique (limitation de la saisie à une plage numérique unique min/max), le script s’impose et permet des analyses beaucoup plus fines (plages multiples et disjointes, saisies combinées de chiffres et de caractères alphanumériques, et autres contraintes) et des alertes adaptées.alexParticipantEt voici les exemples (on est limité à une pièce jointe apparemment).
alexParticipantBonjour à tous,
Voici ci-joint l’illustration de plusieurs types de contrôles de saisie.
1-Contrôle après saisie complète sur un champ non formaté. Saisie limitée aux nombres de 0 à 9
2-Contrôle du digit unique sur un champ non formaté . Saisie limitée à un nombre du segment 0-6
3-Contrôle digit par digit sur un champ non formaté . Saisie limitée aux nombres de 0 à 6
4-Contrôle standard sur un champ formaté nombre sans recours à un script.
Par ailleurs je vous joins une table ASCII qui vous permettra de retrouver les codes à utiliser dans les scripts.alexParticipantJe vous propose cette maquette pour avancer. J’ai séparé la saisie des heures (champ “Heures”) et celle des minutes (champ “Minutes”).
Un seul script embarqué dans le champ d’affichage des centièmes (onglet calcul) fait le travail.
Le bouton RAZ pourra être supprimé.
J’aurai une correction à faire sur l’arrondi à la prochaine version.
A+23 février 2016 à 11:45 en réponse à : Formule de calcul non prise en compte dans l’onglet Calcul #60381alexParticipantPour ceux qui aiment le JavaScript, il en suffit d’un !
Placer ce script dans le champ de total (onglet calcul). Pour tester, rendre les champs taux.x et page2.dep.x saisissables et de format numérique.//calcul des montants
console.clear();
console.println(“Calcul sur champ “+this.event.target.name+” sur evenement “+this.event.name)
x=0;
total=0;
while(x<
{
//test d’existance du champ “montant.x”
if(this.getField(“montant.”+x))
{
//calcul montant ligne
this.getField(“montant.”+x).value=this.getField(“page2.dep.”+x).value*this.getField(“taux.”+x+”.1″).value;
console.println(“Calcul ligne “+x+”=”+this.getField(“montant.”+x).value);
total=total+this.getField(“montant.”+x).value;
}
x=x+1;
}
//calcul du total en ajoutant le forfait fixe.
this.event.value=total+this.getField(“forfaitfixe”).value;alexParticipantSalut Merlin,
J’ai répondu strictement à la question posée, à savoir trouver une chaîne de caractères.
Si l’on souhaite limiter la recherche à des mots (donc une chaine précédée d’un blanc ou d’une apostrophe), il faut légèrement modifier le script.Amitiés à tous
alexParticipantCi-joint une maquette où un script à adapter ferait l’affaire.
On peut le modifier pour prendre en compte la casse.
La variable recherche prend la valeur true si la recherche est fructueuse, false dans le cas contraire.
Cette manière de faire ouvre la porte à de nombreuses variantes (exclusion de chaines particulières lors de la recherche).alexParticipantBonsoir,
Désolé pour l’attente.
Merci de faire les tests. Cette maquette pourra être améliorée dans une prochaine version (choix de l’écriture belge ou française, niveau d’arrondi)
Cordialement.Alex
alexParticipantBonjour à tous,
Ligne 3 de mon script vous pouvez tester les trois variantes :num=Math.round(saisie);
(arrondi au plus près comme dans mon dernier script)
saisie de 122,55 donne 123 ,
saisie de 122,45 donne 122num=Math.floor(saisie);
(arrondi par défaut)
saisie de 122,55 donne 122,
saisie de 122,45 donne 122num=Math.ceil(saisie);
(arrondi par excès)
saisie de 122,55 donne 123,
saisie de 122,45 donne 123Ci-joint exemple avec Math.round
alexParticipantJ’utilise ce petit livre que l’on trouve chez Eyrolles à Paris ou ailleurs:
JavaScript de David Flanagan (Auteur), James Guérin (Traduction) Édition : O’Reilly.Une bonne adresse à retenir: http://javascript.developpez.com/cours/
21 janvier 2016 à 18:21 en réponse à : Formulaire remplissable après un choix sur bouton radio #60272alexParticipantIl faut écrire:
if (choix.isBoxChecked(0)) ou bien
if (choix.isBoxChecked(0)==true)
et non pas:
if (choix.isBoxChecked=true)alexParticipantBonsoir,
Ligne 3, il suffit d’utiliser la méthode suivante (arrondi):
num=Math.round(saisie);
Au lieu de l’arrondi par défaut
num=Math.floor(saisie);Voir maquette jointe.
alexParticipantBonsoir,
Voici une maquette à peaufiner….
Amitiés à tous.alexParticipantBonjour,
Voici ma seconde copie mais il faut la tester à fond, il peut rester des erreurs. En principe on écrit bien:
un million, un milliard
cent et pas un cent, mille et pas un mille.J’ai laissé des éditions console sur la fin du script (Ctrl-J pour l’ouvrir sous Acrobat PRO)
Merci pour le retour.13 janvier 2016 à 12:14 en réponse à : Valeur d’exportation identique dans une liste déroulante #60178alexParticipantPour être sûr de passer la valeur de l’item sélectionné et pas la valeur d’export utilisez ce script de calcul associé à la semelle droite:
console.clear();
//capter l’indice de la sélection gauche
indice=this.getField(“SemelleG”).currentValueIndices;
//Lire la valeur de l’item (pas l’export)
item=this.getField(“SemelleG”).getItemAt(indice,false);
//Passer la valeur à la sélection droite.
event.target.value = item;Je déconseille l’usage immodéré des scripts de calcul, je reviendrai sur ce sujet.
alexParticipantCi-joint le script corrigé vite fait (il y a des petites choses à peaufiner pour que tout soit parfait).
Amitiés à tous.alexParticipantBonjour et bonne année.
Un seul script de document à étudier: il est lancé par le script de calcul unique associé au seul champ “Texte.9.0”. Ce script calcul() est un script de document (Outils>Scripts JavaScript du document).
Je pense qu’on ne doit pas pouvoir cocher simultanément les deux cases.
Attention au formats numériques des cellules de saisie. Pour les calculs il faut vérifier.alexParticipantBonjour et bonne année.
Dans votre document, manque le script d’initialisation et, bien sûr les valeurs des items des deux menus déroulants.
…15 décembre 2015 à 11:19 en réponse à : Export de certaines données d’un formulaire vers un .fdf #60082alexParticipantBonjour,
Sous Acrobat PRO et Standard uniquement, vous pouvez utiliser le script suivant pour exporter une partie des champs de formulaire, ici pour trois d’entre eux pour mon exemple:
this.exportAsFDF(
{
aFields:[“Data”,”Dropdown”,”Saisie.1.1″]
});A l’inverse, vous pouvez utiliser le script suivant pour importer une partie des champs de formulaire, ici pour trois d’entre eux pour mon exemple:
this.importAnFDF(
{
aFields:[“Data”,”Dropdown”,”Saisie.1.1″]
});Voir maquette jointe avec trois boutons:
“Reset Form” associé à script qui efface toutes les saisies
“Export” et “Import” avec les scripts ci-dessus. L’argument aFields est donc un tableau listant les champs concernés.Voir documentation page 287 pour plus de détails (JavaScript for Acrobat API Reference version 8.1)
13 décembre 2015 à 16:25 en réponse à : Duplication de calculs de champs en rangées et en colonnes #60073alexParticipantRegardez le fil “Calcul d’heures dans un formulaire PDF” comme exemple de script…
12 décembre 2015 à 11:24 en réponse à : Duplication de calculs de champs en rangées et en colonnes #60069alexParticipantBonjour,
Il suffit de faire une boucle de calcul !
Voir mes derniers exemples…alexParticipantDésolé de répondre si tard mais oui le script peut-être embarqué en totalité par le champ TotalTemps (onglet “Calcul” script de calcul personnalisé) sans recourir à un script de document.
Ce qui doit concorder, c’est le nom des champs DepartDate.xx , DepartHeure.xx, ArriveeDate.xx, ArriveeHeure.xx, Pause.xx bien sûr.
Par contre on peut augmenter librement le nombre de lignes (plus de 4 donc en numérotant à partir de 0).alexParticipantPour ceux qui sont sur PC, je conseille Notepad++ que ce soit pour le JavaScript ou le PHP.
Je vais essayer sublimetext…alexParticipantMaquette jointe.
Il suffit de définir les produits et leurs référence dans le script Initialisation() qui s’exécute à l’ouverture du document.
A chaque liste déroulante est associé un script de format qui en fonction de la sélection synchronise l’autre liste.alexParticipantOui, c’est assez simple. Il suffit de synchroniser les deux listes.
Une maquette va suivre.alexParticipantMa maquette fonctionne indifféremment sous Acrobat PRO, Acrobat Standard et Acrobat Reader ou Adobe Reader à partir des versions 10.
L’usage d’Acrobat Pro est conseillé pour ouvrir le capot et aller plus loin et comprendre le fonctionnement (le script).
Bonne soirée.alexParticipantBonjour à tous,
Sur cette maquette le script est un script de calcul est associé au champ “TotalTemps”.
Une boucle balaye les lignes de saisies et fait les calculs souhaités. La difficulté provient du fait que la saisie du jour est séparée de celle de la date ce qui conduit à reconstituer les objets Date(). Pour cela on décompose les saisies en tables par la méthode split() et on récupère les morceaux pour générer un objet Date.
Pour voir les calculs ouvrir la console sous Acrobat PRO.
Faites des tests avec des missions démarrant à une date donnée et finissant un autre jour.
Pour une application plus PRO, il faudra aller un peu plus loin dans l’analyse des saisies.J’ai choisi de garder les formats Adobe !
alexParticipantBonjour,
Voilà pour vous remettre sur les rails.
Il faut respecter le nom des champs utilisés par les scripts, ici “ListeMere” et “ListeFille”.
Ctrl J vous permet d’ouvrir la console et de suivre la trace des impressions intermédiaires lors du déroulement des scripts.
Bon courage.alexParticipantBonjour à tous,
Voici une version plus aboutie de la maquette établie sur la base micka92
Dans le script Initialisation(), vous pouvez renommer manuellement les items à votre convenance mais il vaut mieux préparer la hiérarchie et son paramétrage…
Pour les applications “PRO”, je dispose d’un outil qui permet les modifications dynamiques de ces paramètres, la structure des données étant un peu différente.
Si la case à cocher “Memoriser” est cochée, l’état des menus déroulants est conservée.
Si la case à cocher “Memoriser” n’est pas cochée, les menus déroulants sont réinitialisés.
Si la case à cocher “Memoriser” est supprimée, les menus déroulants sont réinitialisés à chaque ouverture de page.
Bon week-end à tous.alexParticipantVoici la maquette corrigée mais avec le service minimum de commentaires.
Je reviendrai sur ce sujet ultérieurement pour proposer une maquette adaptable à différentes configurations d’architectures mères/filles…
Bonne soirée.alexParticipantPour répondre à bebarth, voir ci-dessous:
https://acrobatusers.com/tutorials/print/formatting_text_fieldsalexParticipantMaquette que j’espère sans erreur.
La fermeture du document réinitialise le formulaire:
this.resetForm();Amitiés à tous.
alexParticipantBonjour,
Mon script est prévu pour fonctionner sur un nombre quelconque de pages en respectant la dénomination des cases à cocher suivante:
Page 1: “1Case 1” et “1Case 2” associées à “1ListeContrats”
Page 2: “2Case 1” et “2Case 2”associées à “2ListeContrats”
Page x: “xCase 1” et “xCase 2”associées à “xListeContrats”
D’où le script faisant référence à la page courante: page=this.pageNum+1;
Par ailleurs j’ai choisi la valeur d’export comme variable de départ du script associé au format personnalisé plutôt que le rang de l’item sélectionné (bebarth).
numero=this.event.changeEx;
L’évènement déclencheur est l’action de sélection d’un item du menu déroulant dont on tire la nouvelle valeur d’export.
Pour plus de détails:
https://acrobatusers.com/tutorials/print/formatting_text_fieldsVoir The Keystroke Event
alexParticipantBonjour,
J’ai un doute, mais si ce formulaire répond bien à votre problème, je préciserai son fonctionnement.
Versions Adobe Reader postérieures à 9.Amitiés
AlexalexParticipantVoici donc ma seconde manière à la fois plus simple et plus complexe.
On saisit les valeurs d’export dans le menu déroulant “DropSown1”, onglet “Options”.
Cette fois le script est encore associé au menu déroulant “DropSown1”, mais sous l’onglet “Format”, script de touche personnalisé.
Onglet “Options”, il ne faut pas nécessairement cocher la case “Valider la valeur sélectionnée immédiatement”.Plus simple : la saisie des données.
Moins simple à comprendre : le script associé à l’évènement :if(!event.willCommit)
{
bb=this.getField(“BRow1”);
bb.value=this.event.changeEx;
}Bonsoir.
alexParticipantBonjour,
Voir maquette jointe. Le script est associé au menu déroulant “DropDown1”, onglet “Validation” “Exécuter le script de validation personnalisé”.
Attention, onglet “Options”, il faut cocher la case “Valider la valeur sélectionnée immédiatement”.
Cette solution est basique:
bb=this.getField(“BRow1”);
bb.value=””;
if(saisie==”choix A”){bb.value=20.59;}
if(saisie==”choix B”){bb.value=41.17;}
if(saisie==”choix C”){bb.value=54.76;}
Une autre méthode consiste à associer les valeurs aux items du menu déroulant. Je donnerai également une maquette illustrant cette méthode apparemment plus simple…Amitiés à tous.
alexParticipant//Un peu de logique combinatoire !
Si je lis bien, une seule condition devrait suffire à rendre un objet visible, ici un champ de formulaire.
fff=this.getField(“Nom du champ”);
if(ccc==”Oui”&adher==”Oui”){
//condition satisfaite
fff.display=display.visible;
}
else
{
//condition non satisfaite (tous les autres cas)
fff.display=display.hidden;
}alexParticipantVoici corrigé le pb des débuts d’années. Reste l’analyse de la validité des saisies jour/mois/année.
Merci Merlin pour l’info. Effectivement, ça m’aurait bien aidé pour écrire le script.
Amitiés à tous
AlexalexParticipantVoici ma copie provisoire revisitée et téléchargeable j’espère.
On peut y faire des tests et elle est facilement transposable pour obtenir le calcul de la semaine du jour courant.
Le bouton Today affiche la date du jour et la semaine correspondante.
Toute saisie du jour, du mois ou de l’année active le calcul de la semaine. Attention, aucun contrôle des saisies n’est configuré (on peut saisir un 15ème mois).
Il reste à gérer l’affichage des 52 èmes et 53èmes semaines des années n-1 qui débordent sur les premiers jours de l’année en cours.
Pour l’instant j’affiche 0 pour les journées concernées (par exemple pour 2016 et 2017).Une ultime version réglera ce problème et les contôles. Un peu de patience…
Amitiés à tous.
alexParticipantMerci pour l’info,
Voici ma copie provisoire revisitée, il reste à gérer l’affichage des 52 èmes et 53èmes semaines des années n-1 qui débordent sur l’année en cours. Pour l’instant j’affiche 0 pour les journées concernées.alexParticipantOops, je dois revoir mon script pour la détermination de la première semaine de chaque année. Il y a sans doute une règle à respecter que je vais chercher et corriger en conséquence.
Mais oui, il y a bien des semaines 53 qui sont aussi la semaine 1 de l’année qui suit !
Patience.alexParticipantBonjour à tous,
Non aucune retouche à faire d’une année sur l’autre. On fait le choix 1-52 ou 1-53 une fois pour toutes.alexParticipantBonjour à tous,
Voici une maquette répondant à votre problème.
Le script weekcalc() fait le travail.Il est conçu de manière à pouvoir faire des tests sur la date d’entrée en désactivant la ligne:
dd=new Date();
Il calcule de 1 à 53 ou de 1 à 52 si on active la ligne:
//if(weeksNum>52){weeksNum=1;}
Activer la ligne:
//console.show();
pour afficher les calculs dans la console.
Le script:
function weekcalc()
{
console.clear();
//Date pour tests attention, mois de 0 à 11
dd=new Date(2015,11,27);
//Date du jour
dd=new Date();
//
year=dd.getFullYear();
month=dd.getMonth();
dd0=new Date(year,0,0);
console.println(dd0);
console.println(dd);
//jour de la semaine du 31 dec precedant.
ref=dd0.getDay();
console.println(“jour de reference 31 dec de l annee qui precede=”+ref)
delta=(dd.getTime()-dd0.getTime())/1000/60/60/24;
console.println(“delta en jours=”+delta);
weeksNumDef =(delta+ref)/7;
console.println(“calcul semaine sans arrondi par exces=”+weeksNumDef);
weeksNum = Math.ceil((delta+ref)/7);
console.println(“calcul semaine arrondi par exces=”+weeksNum);
//if(weeksNum>52){weeksNum=1;}
this.getField(“Semaine”).value=weeksNum;
//console.show();
}alexParticipantUn truc comme ça ferait-il l’affaire ?
Voir script de validation personnalisé du champs de saisie dans la maquette jointe.
Le nombre de caractères est paramétrable (longueur).Beaucoup de variantes sont possibles à partir de ce script:
8 caractères alphabétiques uniquement.
8 chiffresuniquement.
Avoir un minimum de chiffres, de nombres, de majuscules ou minuscules.
etc.alexParticipantBonjour à tous,
Voici ma contribution (une maquette) à votre problème que j’ai repris disons, à la base….Un seul script de calcul associé au champ “Total” fait l’affaire, ici avec 5 termes à additionner.
Pour voir les résultats intermédiaires (console.println), afficher la console.Le nombre de termes et l’ordre de l’arrondi sont des paramétrables.alexParticipantBonjour à tous,
Voici votre maquette. Pour chaque sélecteur, veiller à cocher la case “Valider la valeur sélectionnée immédiatement” (Onglet “Options”).
Un seul script de calcul est alors nécessaire pour obtenir le résultat dans le champ “champ”:v1=this.getField(“ld1”).value;
v2=this.getField(“ld2”).value;
v3=this.getField(“ld3”).value;
v4=this.getField(“ld4”).value;
v5=this.getField(“ld5”).value;
this.event.value=Math.max(v1,v2,v3,v4,v5);alexParticipantBonjour à tous,
bonjour Merlin,
Dans ton tuto sur “les différents niveaux d’utilisation des scripts JavaScript” on trouve au paragraphe 4 la liste des évènements susceptibles de lancer l’exécution d’un script. On pourrait peut-être ajouter un petit paragraphe concernant les événements suivants:- Ouverture de page.
- Fermeture de page.
[/list]Et en précisant la manière de faire pour:
- Ouverture du document.
[/list]Dans l’exemple qui nous intéresse dans ce fil, le script de document Initialisation() est activé en ouverture de page.
alexParticipantBonjour à tous,
Oui, on peut très bien lancer le script d’initialisation à l’ouverture de page.
On peut aussi le lancer à l’ouverture du document en utilisant la procédure suivante:function Initialisation()
{
//suite des opérations à effectuer…
}
Initialisation()C’est ce que j’ai illustré dans l’exemple joint.
alexParticipantEn première instance je répondrai comme Merlin.
Il est cependant possible de nommer automatiquement, puis d’enregistrer un document .pdf (en général c’est intéressant pour les formulaires) dans un répertoire choisi en fonction de critères logiques mais il faudra pour ça recourir à un JavaScript d’application (sous Acrobat PRO ou, cerise sur le gâteau sous Acrobat Reader) qui fera passer en contexte privilégié.
A titre d’exemple, un formulaire unique MERE disponible sur un serveur permettra la saisie puis l’enregistrement de factures dans un répertoire Facture, des bon de livraison dans le répertoire livraison, etc…
Nous avons déjà illustré ici ce genre de démarche avec une machine à tickets.
Je ne peux pas vous aider plus dans le cadre du forum. Désolé.alexParticipantBonjour,
Voilà un formulaire provisoire. Un seul script de document à étudier (lancé par le calcul du total). Je pense qu’on ne doit pas pouvoir cocher simultanément les deux cases.
Attention au formats numériques des cellules de saisie.
Pour les calculs il faut vérifier.
Bon week-endalexParticipantBonjour,
Les champs de saisie sont au format numérique. Une saisie 0 est interprétée comme une saisie vide et la comparaison n’est pas effectuée dans ce cas d’où le problème.
Dans la boucle du script de contrôle remplacer la ligne suivante:
if(sp.value!=””&sp.value!=9&r.value!=””&r.value!=9)
Par:
if((sp.value!=””|sp.value==0)&sp.value!=9&(r.value!=””|r.value==0)&r.value!=9)alexParticipantOui, c’est usant de paramétrer les formats des champs numériques un à un (et on ne peut pas le faire par script). Alors, quand ce n’est pas nécessaire on s’en passe… au moins dans les tests.
alexParticipantDésolé, mais une petite analyse s’impose avant de scripter le calcul du résultat:
Case 1 et case 2 cochées simultanément: on fait quoi ?
Case 1 cochée et case 2 non cochée: on fait quoi ?
Case 1 non cochée et case 2 cochée: valeur à 0
Case 1 non cochée et case 2 non cochée: valeur à 0
Ensuite, quel est l’état initial de notre affaire (valeurs par défaut à 0 ou vide comme proposé par Merlin, cases non cochées ?).alexParticipantBonjour,
Si on ne précise pas le format des données saisies, le traitement procède à une concaténation de chaînes.
On peut s’affranchir de cette “formalité” en forçant le traitement à calculer une somme, pour cela on ajoute 1* (multiplication par 1 qui lève l’ambiguité puisqu’il y a un opérateur).//Je veux faire la somme de 4 champs. j’ai mis ce script :
console.clear();
var PH11 = this.getField(“PH1-1”).value;
var PH12 = this.getField(“PH1-2”).value;
var PH13 = this.getField(“PH1-3”).value;
var PH14 = this.getField(“PH1-4”).value;
var U1 = this.getField(“U1”).value;
if(U1 != “” && U1 != “0”)
{
total=1*PH11+1*PH12+1*PH13+1*PH14;
console.println(“Resultat=”+total);
this.event.value = total + ” u20AC”;
}
else
{
this.event.value = “”;
}
Voir maquette.7 mai 2015 à 15:50 en réponse à : Afficher ou masquer un bouton "activé" selon la valeur d’un champ texte #57757alexParticipantBonjour, voici le script de la case à cocher:
console.clear();
console.println(“Action sur “+this.event.target.name);
if(this.event.target.isBoxChecked(0))
{
this.getField(“Bouton”).display=display.visible;
}
else
{
this.getField(“Bouton”).display=display.hidden;
}
Et par la même occasion celui du champ de saisie pour l’exemple précédant après correction d’une de mes bêtises:console.println(“Action sur “+this.event.target.name);
if(this.event.value>0)
{
this.getField(“Bouton”).display=display.visible;
}
else
{
this.getField(“Bouton”).display=display.hidden;
}
Maquette jointe illustrant simultanément les deux usages.7 mai 2015 à 09:19 en réponse à : Comment faire apparaitre des calques par sélection dans une liste déroulante ? #58835alexParticipantBonjour,
Voici un script qui va lister les calques du document et les désactiver:
function desactivationCalques()
{
console.clear();
calqueArray=this.getOCGs();
index=0;
while(index{
name=calqueArray[index].name;
console.println(“Calque de rang “+index+”-“+name);
calqueArray[index].state=false;
index=index+1;
}
}
Ensuite, il faut créer une table précisant les calques à activer pour chacun des items de la liste déroulante.
Puis un script qui, en fonction de la sélection va activer ces calques… Ce n’est pas trop difficile.
…alexParticipantBonjour,
En conservant votre manière de faire voici le script de calcul du champ “Texte10”:
if(this.getField(“Case2”).isBoxChecked(0))
{
event.target.value = 0;
}
else
{
event.target.value = this.getField(“Texte13”).value*0.66
}alexParticipantBonjour,
Dans votre script qui me parait bon, il ne faut pas recourir à une variable globale (global.f), remplacez la par f.
Il n’est sans doute pas utile de cocher la case de validation immédiate.
Ci-joint ma version avec trace dans la console.alexParticipantLes commandes d’affichage/masquage de champs sont assez pratiques pour de petits formulaires mais rapidement illisibles et sources de conflits lorsque le nombre de commandes croît.
Je vous conseille le JavaScript. A titre d’exemple j’ai écrit un script unique associé aux occurrences du bouton radio “Group1” auxquelles j’ai associé la fonction affichage() suivante:
function affichage()
{
//masquer les champs associés
console.clear();
this.getField(“RER”).display=display.hidden;
this.getField(“REAA”).display=display.hidden;
this.getField(“RF”).display=display.hidden;
this.getField(“RE”).display=display.hidden;
this.getField(“RSE”).display=display.hidden;
this.getField(“RY”).display=display.hidden;
//noter la valeur d’export du bouton radio Group1
ckaction=this.event.target.name;
valeur=this.event.target.value;
console.println(“Selection de “+ckaction+” avec pour valeur :”+valeur);
//Afficher le champ.
this.getField(valeur).display=display.visible;
}
Voir maquette.alexParticipantBonjour,
Oops, j’ai été trop vite !
Voici le script corrigé. Il vérifie que les champs obligatoires de type txt et combobox sont bien saisis. Reste à ajouter les cases à cocher obligatoires. Je reviendrai sur ce sujet à l’occasion.
A vérifier. Ctrl-J pour afficher la console et voir la trace du déroulement du script.alexParticipantBonjour à tous,
Voilà un script plus généraliste que le précédant et qui devrait convenir à votre formulaire. En effet, celui-ci embarque des listes déroulantes avec saisies obligatoires et une valeur par défaut vide.
Ce script prend donc en compte les champs texte et combobox obligatoires.A propos de mon premier script:
Celui-ci comporte une erreur lorsque l’on tente d’obtenir la propriété .required qui est inconsistante pour les boutons. Il faut donc exclure les boutons de l’analyse.14 avril 2015 à 07:58 en réponse à : Bouton envoi formulaire PDF par mail avec objet et nom de fichier personnalisés #58753alexParticipantJ’ai été trop vite…
13 avril 2015 à 20:33 en réponse à : Bouton envoi formulaire PDF par mail avec objet et nom de fichier personnalisés #58751alexParticipantBonsoir,
Voir script du bouton sur le fichier joint. A vérifier (Ctrl-J) pour ouvrir la console sousAcrobat PRO et voir les résultats intermédiaires.
Attention au format du champ date à respecter mais on peut saisir : “3/1/2013” par exemple.alexParticipantMerci Merlin et désolé, jeanine63000, je suis avare en explications.
alexParticipantBonsoir,
Qu’est-ce qui ne fonctionne pas chez vous ?
1-Ma maquette ? Dans ce cas il faut s’assurer que le JavaScript du viewer (Acrobat PRO ou Standard ou Adobe Reader sur PC, Mac, Linux ou UNIX) est activé.
2-Votre formulaire. Dans ce cas il faut nous le faire parvenir pour qu’on y jette un oeil.Par ailleurs, je ne fais plus de tests JavaScript sur les tablettes. J’attends la prochaine version d’Adobe Reader qui interprètera correctement toutes les méthodes du JavaScript et fonctionnera sur tous les supports…. Je suis très optimiste.
alexParticipantBonjour à tous,
Voici ma manière de répondre à cette problématique qui diffère un peu de ce que propose Merlin:
Pour une fois j’utilise la détection d’entrée du curseur dans le champ de signature (Action>Souris entrée)
Je passe en revue tous les champs de saisie obligatoire du formulaire pour rechercher une éventuelle saisie manquante.Celle-ci trouvée, j’y place le curseur ce qui interdit la signature.
Voir ma petite maquette jointe.NB:ce script peut être repris tel quel pour tout autre formulaire.
11 avril 2015 à 14:54 en réponse à : Lier la saisie d’un menu déroulant avec la saisie d’un champ texte #58738alexParticipantDisons que j’ai un peu dépassé la limite d’age….
Je reviendrai plus tard sur ce formulaire, avec une autre méthode…10 avril 2015 à 11:18 en réponse à : Lier la saisie d’un menu déroulant avec la saisie d’un champ texte #58736alexParticipantBonjour,
Voilà un premier jet qui démontre la faisabilité du projet (enregistrement de données sous Adobe Reader):
Pour ajouter un nouvel enregistrement, sélectionner l’item vide (le dernier de la liste) puis presser “?” ce qui rend les champs saisissables. Saisir les données et valider.
Les enregistrements enregistrés sont modifiables.Quelques restrictions:
-On ne peut ajouter qu’un seul enregistrement à la fois (il faut réouvrir le formulaire).-Pas de suppression d’enregistrement (sauf à les effacer tous).
-Pas de tri des items.
-Nombre d’enregistrements limités.alexParticipantOn approche du but.
C’est le calcul de la variable sommeRP qui était concerné par cette erreur car il passait par la mise à jour des champs RP. Une erreur de débutant….
J’ai indiqué en commentaire dans le script de controle les modifications que j’ai apporté.
Reste à faire quelques tests pour les cas particuliers (saisies inconsistantes en particulier).
On voit dans cet exemple qu’il faut préférer le script unique à une cascade de calculs associés à des champs, enchaînement toujours délicat à gérer.alexParticipantBonjour,
C’est justement pour éviter les retards que les calculs sont regroupés dans un script unique, malgré cela il y a quelques précautions à prendre.
J’ajoute les derniers calculs (SRS et SDS) et je reviens vers vous avec un petit commentaire.6 avril 2015 à 17:41 en réponse à : Lier la saisie d’un menu déroulant avec la saisie d’un champ texte #58734alexParticipantEffectivement, les listes mères-filles de nos exemples sont prédéfinies (un script décrit les tables des items des menus déroulants).
Deux problèmes pour votre projet:
1-La mémorisation des données:
Pour résoudre ce problème, et si on s’impose de travailler avec Adobe Reader, ces données seront obligatoirement stockées dans des champs de texte invisibles et restituées à chaque usage. Par ailleurs, et le formulaire aura ses “Reader Extensions” activées pour s’assurer de la mémorisation des données saisies.
2-La saisie du nouveau nom:
Ce n’est pas possible de l’ajouter directement sur le menu déroulant, on devrait le faire sur la partie affichage.On peut voir…
alexParticipantVoici une maquette qui fonctionne avec deux scripts:
1-chaque saisie validée active le script unique baptisé controleSaisie() qui vérifie la validité de la saisie des 34 champs de votre formulaire et note le rang du couple SP/rawSP impacté par la saisie.
2-Un script de contrôle unique baptisé controle() lié au calcul du champ “SSS” vérifie la cohérence des saisies “SP” et “rawRP”, détermine “RP” et calcule et renseigne les champs de résultats “SSS”,”SRSraw” et “SDSraw” et les LVS. Pour les champs “SRS” et “SDS” et les “TID” je n’ai pas les formules de calcul.
Le bouton “Normal” côté STRESS PERFUSION réinitialise la partie du formulaire gauche correspondante. Script initialisationSP().
Le bouton “Normal” côté REST PERFUSION réinitialise la partie du formulaire droite correspondante et les “RP”. Script initialisationrawRP().Il reste à replacer les champs de saisies dans l’ordre souhaité par l’utilisateur pour usage des TAB et les formules de calcul manquantes à ajouter dans le script de contrôle.
Notez bien que je n’utilise qu’une seule action de type calcul (sur le champ “SSS”).
alexParticipantPour info, si ça intéresse du monde, voici comment j’ai contourné le problème : j’ai lancé plusieurs commandes “print” en les faisant débuter à l’endroit où j’avais besoin.
Bonjour,
Je pense qu’on peut faire la même chose par script en lançant des tâches d’impression consécutives genre:
console.clear();
// Passer le statut à true pour faire apparaître le menu lors des tests.
statutPopUp=false;
console.println(“Impression partie pages 1 à 3.”);
//On se positionne page 1 et on lance une tâche d’impression.
this.pageNum=0;
this.print({
bUI:statutPopUp,
nStart:0,
nEnd:2,
bSilent:false,
bReverse:true,
bShrinkToFit:true
});6.”);
//On se positionne page 3 et on lance une seconde tâche d’impression.
this.pageNum=3;
this.print({
bUI:statutPopUp,
nStart:3,
nEnd:5,
bSilent:false,
bReverse:true,
bShrinkToFit:true
});Puis mettre ce script en boucle pour imprimer plus d’un exemplaire….
-
AuteurRéponses