Toutes mes réponses sur les forums
-
AuteurRéponses
-
alexParticipant
Bonjour,
Deux colonnes fonctionnent.
Compléter les autres cases à cocher pour les autre colonnes (deux lignes de script de validation à chaque fois) en s’inspirant des deux premières….alexParticipantAttention, je n’ai pas saisi le script de validation de tous les champs “SP” et “rawRP”, à compléter donc avec :
controleSaisie();alexParticipantDans votre script, n n’est pas défini.
Sans votre maquette, je ne peux rien faire car je ne vois pas les déclencheurs.
Aussi, je vous propose la mienne 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.
2-Un script de contrôle baptisé controle() lié au calcul du champ “SSS” vérifie la cohérence des saisies “SP” et “rawRP”, calcule et renseigne les champs de résultats “RP”,”SRS” et “SDS”. Il faudra ajouter les calculs des champs manquants au sein de ce même script.
Le bouton “Reset” est à vocation pédagogique. Il réinitialise le formulaire pour faire des tests.
Pour la compréhension, les champs non saisis ont une bordure rouge par défaut, à corriger si besoin.
Pour la compréhension, les champsRP valides apparaissent au fur et à mesure des saisies, à corriger si besoin.
Il reste sans doute un peu de travail, mais l’essentiel est là. Inspirez vous du script initialisation() pour vos boutons radio “SPNormal” et “RPNormal”.alexParticipantJ’ai fait le test. Il n’est pas possible de modifier des pièces jointes sous Adobe Reader (la méthode setDataObjectContents n’est même pas fonctionnelle en contexte privilégié)
En conclusion: possibilité d’ajout d’items de menus déroulants uniquement sous Acrobat !
Désolé.alexParticipantBonjour,
Oui, je suis comme les robots de Google, je passe ici de manière aléatoire…
La maquette illustrant une manière de créer des menus déroulants en cascade ici sur trois niveaux n’est pas prévue pour être modifiée par l’utilisateur. Les données sont chargées à l’ouverture du document par le script d’initialisation.
Je suis désolé pour vous mais il faudrait pas mal travailler pour ajouter cette fonctionnalité car il faudrait recourir à un fichier .csv ou .xls associé en pièce jointe au document, utiliser les méthodes getDataObjectContents et setDataObjectContents et bien manipuler les chaînes ce caractères et les encodages. Enfin, il faut s’assurer que ça fonctionne bien sous Adobe Reader pour la partie écriture (setDataObjectContents) en faisant un test avant de s’embarquer pour l’aventure….alexParticipantBonjour,
Ajoutez à votre code la ligne suivante si vous souhaitez que la liste déroulante se positionne sur le premier item à l’ouverture de votre formulaire:
ff.currentValueIndices =[0];
Où 0 précise le rang de l’item choisi dans la liste.alexParticipantQuelques pistes pour commencer…
Ci-dessous exemple pour le premier script des champs rawSp:
function controlerawSP()
{
console.clear();
saisie=this.event.value;
champsaisierw=this.event.target;
nomchamprw=this.event.target.name;
nomchampRP=”RP”+nomchamprw.substring(5,nomchamprw.length)
console.println(“Saisie de la valeur “+saisie+” sur “+nomchamprw+” associe a “+nomchampRP);
//Validite de la saisie
if(saisie!=””)
{
if((saisie>=0&saisie<=4)||saisie==9)
{
//Valid
this.getField(nomchampRP).required = false;
}
else
{
app.alert(“ERROR: Please input a value between 0 and 4, or 9 if Unevaluable”,1);
event.rc = false;
}
}
else
{
champsaisierw.required = true;
this.getField(nomchampRP).required = true;
}
}Ci-dessous correction du script pour le calcul de SSS:
console.println(“Calcul SSS”)
var total = 0;
for (var i=1; i<=17; i++)
{
var v =this.getField(“SP”+i).value;
if (v!=9) {total+v; }
}
event.value = total;if(event.value <=0) event.value = "";
alexParticipantBonjour,
Il faut savoir que tous les scripts de calcul (en particulier des champs rawRP et RP) sont exécutés quelque soit la saisie effectuée.
Je vous conseille de revoir globalement ce document et suivre le conseil de Merlin avec:
une unique fonction liée à la validation de chaque saisie SP baptisée controleSP() pour s’assurer de sa validité (chiffre de 0 à 4 ou 9) .
une unique fonction liée à la validation de chaque saisie rawSP baptisée fonctionrawSP()pour s’assurer de sa validité (chiffre de 0 à 4 ou 9) .
une unique fonction dédiée au contrôle liée à la validation des saisies rawRP controle() assurant la comparaison de la valeur rawRP à la valeur SP correspondante.
une unique fonction de calcul pour chacun des champ RPPar ailleurs les calculs des champ SRS et SRSraw me semblent erronés mais je peux me tromper.
alexParticipantIl n’y a pas de frais sur la seule partie verte de la première page (stotal1), voici le formulaire à vérifier.
Le script est embarqué par le seul champ “frais”. Ce script gère l’affichage des frais forfaitaires et le calcul du total general.
A vérifier donc.[Fichier joint supprimé par l’administrateur le 24-06-2015]
Je viens de recevoir une requête de la RATP me demandant de supprimer le fichier joint.
C’était un bon de commande obsolète qui apparaissait en bonne place dans les résultats de Google, et que donc des internautes utilisaient…alexParticipantSi le but de cet envoi est de récupérer des données saisies dans les deux premières pages du formulaire pourquoi ne pas envoyer ces données sous forme de fichier fdf ?
Dans ce cas on aura recours à un bouton dont l’action sera: “Envoyer un formulaire” en prenant soin de libeller l’adresse d’envoi comme suit :
mailto:adresse email
et de choisir les champs dont le contenu doit être envoyé.
Voir copie d’écran.Lors de l’utilisation, sous Adobe Acrobat mais aussi sous Adobe Reader, on a le choix du type de messagerie (local ou distant), le mail est généré automatiquement, reste à l’envoyer.
alexParticipantBonjour,
Voici une maquette avec les éléments d’entrée (saisies des valeurs a, b, c) et le résultat du calcul.
Le script de document réalise les tests et le calcul lors de toute saisie des valeurs a, b ou c.
Je corrigerai dès que j’aurai compris la demande.
script:a=this.getField(“ChampA”).value;
b=this.getField(“ChampB”).value;
c=this.getField(“ChampC”).value;
if(a==0|c==0)
{
this.event.value=a+b+c;
}
else
{
this.event.value=a+b+c+30;
}
Dans l’attente….
A+alexParticipantBonjour,
Oui, il faut procéder comme indiqué par Merlin puis vérifier et corriger les paramètres d’initialisation si nécessaire:
//donnees de base numérotation automatique
//Nom du champ contenant le numero de formulaire
fNum=”Num_Bordereau”;
//Nom du bouton de numérotation.
fNumAction=”Num”;
//Nom du bouton de validation du formulaire.
fNumValid=”Validation”;
//
enTete=”RSA”;Scripts requis:
1-Ouverture document:
initialisation()
2-Bouton de validation:
enregistrement()
3-Enregisrement du document:
Le dernier numéro est mémorisé par une variable locale lors de l’enregistrement du formulaire:
global.dernNum=this.getField(fNum).value;global.setPersistent(“dernNum”,true);alexParticipantJ’ai bien dit:
Attention, cette solution fonctionne pour le format “JJ/MM/AAAA”.
J’aurais du écrire:
Attention, cette solution ne fonctionne que pour le format “JJ/MM/AAAA”.
Mais on pourrait aussi effacer les saisies de format inappropriées.alexParticipantBonsoir,
Voir la maquette jointe pour une solution basique certes, mais qui pourra facilement s’adapter à des sélections de dates par menus déroulants (Jour,mois;année).
Attention, cette solution fonctionne pour le format “JJ/MM/AAAA”.26 janvier 2015 à 15:45 en réponse à : Remplissage de champs de texte via une liste déroulante #58166alexParticipantDésolé, je n’ai pas trop de temps mais voici une maquette assez moche pour illustrer une manière de faire.
Si j’ai bien compris, il ne s’agit pas de menus déroulants en cascade même si certaines parties de scripts peuvent nous inspirer ici.Le script init() de document prépare une table de données et remplit le menu déroulant “Selecteur”.
A la sélection d’un item du menu déroulant on va rechercher les données dans la table pour renseigner les champs du formulaire.Cette action est réalisée par le script de format > script de touches personnalisé.Bonne soirée
alexParticipantVoici une maquette illustrant la proposition de Merlin.
A l’enregistrement, une alerte apparaît listant les saisies obligatoires manquantes.
Attention, la couleur de bordure des champs de saisie obligatoire est gérée par le script.
Bonne soirée.
Alex10 décembre 2014 à 12:30 en réponse à : Enregistrement avec Adobe Reader pour rendre des éléments non éditables #58073alexParticipantCi-joint une ébauche de solution…
L’administrateur peut réinitialiser la page de formulaire courante en activant un bouton transparent situé au dessus de la colonne des prix, le code est ici “1234”. Les champs de saisie des prix redeviennent alors tous saisissables (readonly=false) avec un encadrement transparent (facultatif, c’est pour la démo).
L’utilisateur peut modifier les prix. Lors de la validation une alerte lui demande s’il souhaite l’inscrire en dur. Si la réponse est positive, le champ passe en non saisissable (readonly=true) et est encadré de vert (facultatif, c’est pour la démo).
Pour le bon fonctionnement sous Adobe Reader il faut activer les Reader Extensions avant mise à disposition du formulaire.
Fichier>Enregistrer sous un autre…>Fichier PDF Reader Extended>Activer d’autres outils (notamment ….)Nota 1: le nom des champs de prix sont de la forme “BBp.x” où p est le numéro,de la page du catalogue et
x l’indice du prix. Le rang x=0 est réservé au titres des colonnes de prix. On peut donc ajouter autant de pages que nécessaire.Nota 2:On peut évidemment ajouter un bouton de reset global (boucle sur l’ensemble des pages de tarif).
alexParticipantSalut Merlin,
Je connais bien cette manière de faire qui conduit certes à un script de calcul très court mais qui restreint la liberté de choisir les noms des données, en particulier lorsqu’on doit les envoyer vers un serveur ou les récupérer en XML.
Dans mon exemple, j’ai bien sûr une série de termes de la forme “Montant.x” mais aussi des champs aux noms légèrement différents (“MontantEmballage” ou “MontantTransport” par exemple) plus explicites.
A chacun sa manière…
Bonne soirée à tous.10 novembre 2014 à 09:10 en réponse à : Javascript réinitialiser champs spécifiques avec un bouton #57930alexParticipantPour plusieurs champs, bouton 1:
this.resetForm([“Champ1″,”Champ2″,”Champ3”]);
Bouton 2:
this.resetForm([“Champ5″,”Champ6”]);
Ne pas oublier les crochets, la liste est un tableau.alexParticipantBonjour,
Ci-joint une maquette pour illustrer la manière:
Le champ “TotalMontants” embarque le script qui vous intéresse. Ce script fait la somme de tous les champs dont le nom commence par Montant.
On peut créer autant de champs de calcul que l’on veut, il suffit de préciser l’en-tête du nom des champs à additionner (teteNom=”xxxx”
Voici ce script avec quelques éditions pour la console (Ctrl J pour l’afficher).console.clear();
teteNom=”Montant”;
indexField=0;
indexTerme=0;
total=0;
while(indexField{
//Recupere le nom du champ.
nameField=this.getNthFieldName(indexField);
if(nameField.substring(0,teteNom.length)==teteNom)
{
indexTerme=indexTerme+1;
console.println(indexTerme+”-“+nameField+”-valeur=”+this.getField(nameField).value)
total=total+1*this.getField(nameField).value;
}
indexField=indexField+1;
}
console.println(“Total=”+total)
this.event.value=total;2 novembre 2014 à 09:46 en réponse à : Validation JavaScript et Contrôle sur Signature Manuscrite #57838alexParticipantBonjour à tous,
Tant que la dernière saisie d’une donnée n’est pas validée par “Enter” ou “Tab”, la valeur ne peut être prise en compte par le script du bouton “Test”.
Faites des essais avec la maquette jointe.alexParticipantMême chose avec le détail de l’analyse (ouvrir la console après validation Ctrl J ou Pomme-J)
alexParticipantBonsoir à tous,
Voici ma solution si vous ne souhaitez pas accepter les majuscules accentuées. Je passe par les codes ASCII des digits pour reconstituer le format. L’intérêt de cette manière de faire, c’est qu’on peut l’adapter à des formats très divers.
Les codes ASCII des chiffres vont de 48 à 57 et ceux des majuscules de 65 à 90
Le script testF() de document à exécuter après validation quelque soit le champ de saisie est donc le suivant:function testF()
{
index=0;
mot=this.event.value;
format=””;
console.println(“Analyse de la saisie du champ “+this.event.target.name)
while(index{
digit=mot.charCodeAt(index);
if(digit>47&digit<58){format=format+"9";}
if(digit>64&digit<91){format=format+"A";}
index=index+1;
}
console.println(“Format de la saisie:”+format);
if(format!=”AA99A”&&format!=”A99A”)
{
app.alert(this.event.target.name+”rSaisie incorrecterFormat attendu AA99A ou A99A.”,1);
this.event.value=””;
}
}14 octobre 2014 à 08:39 en réponse à : Ne pas afficher le petit "+" lorsque le champ est trop petit #57747alexParticipantEn ce qui concerne l’affichage de deux colonnes, je ne vois pas de solution, sauf à séparer le premier caractère du reste par un caractère genre tiret (Exemple: “M-Demande de…”). Dans ce cas le script est inchangé.
A moins que je n’aie pas compris la question…
A.14 octobre 2014 à 08:26 en réponse à : Ne pas afficher le petit "+" lorsque le champ est trop petit #57746alexParticipantJe vous conseille ça, c’est dédié au Web mais tout ce dont on a besoin en dehors de l’environnement pdf y est (fonction mathématiques, traitement des chaînes de caractères, tables, dates, etc…) :
JavaScript: The Definitive Guide, 6th Edition
Activate Your Web Pages
By David Flanagan
Publisher: O’Reilly MediaSinon on trouve tout sur le Web, il suffit de demander.
Site conseillé: developpez.comBonne journée à tous.
14 octobre 2014 à 07:48 en réponse à : Afficher ou masquer un bouton "activé" selon la valeur d’un champ texte #57753alexParticipantBonjour,
Voici le petit script qui gère la visualisation du champ “Bouton” (à placer dans via l’onglet “Validation” du champ “Saisie”)
Dans la maquette jointe les deux lignes supplémentaires du début permettent d’afficher le nom du champ à l’origine de l’action et la valeur saisie. Faire Ctrl J pour afficher la console.//Test sur la valeur saisie après validation (champ numérique)
if(this.event.value>0)
{
//Faire apparaître le bouton
this.getField(“Bouton”).display=display.visible;
}
else
{
//Faire disparaître le bouton
this.getField(“Bouton”).display=display.hidden;
//Déplacer le curseur sur ce bouton (pas obligatoire)
this.getField(“Bouton”).setFocus();
}12 octobre 2014 à 11:10 en réponse à : Ne pas afficher le petit "+" lorsque le champ est trop petit #57742alexParticipantBonjour à tous.
Pour répondre à la question du “+”, je vous propose de ne retenir pour l’affichage que le premier caractère de l’item du menu déroulant comme indiqué ci-dessous.
Par ailleurs, pour que la valeur s’affiche je vous propose de “forcer” le déplacement du curseur sur la saisie suivante de votre formulaire ce qui a pour effet de mettre à jour le champ “Text2”
Voir document de démonstration joint.
Script:
var menu31 =
app.popUpMenu(‘……….’);
this.event.target.value = menu31.substring(0,1);
this.getField(“Saisie suivante”).setFocus();13 septembre 2014 à 07:01 en réponse à : Copier un champ dans un autre champ si case à cocher est activée [résolu] #57569alexParticipantBonjour,
Deux remarques:
Dans les scripts, il faut faire attention à la casse des noms de champ (“Val1” n’est pas “val1”).
Les scripts de calcul sur évènement sont associés aux champs de résultat (ici les champs Val1, Val2, Val3, etc..)
Ci-joint le formulaire avec quelques exemples sur ce sujet.
Bon courage pour la suite.4 septembre 2014 à 15:24 en réponse à : Copier un champ dans un autre champ si case à cocher est activée [résolu] #57567alexParticipantBonjour,
J’ai vu ça :
if(this.getField(“LicenceFFCT”).value == “checked”){(this.getField(“Montant1”).value = “checked”);(this.getField(“val1”).value = “checked”);}Je n’ai pas tous les éléments mais la syntaxe correcte du script de calcul du champ “Montant1” pourrait être:
if(this.getField(“LicenceFFCT”).isBoxChecked(0))
{this.event.value = this.getField(“val1”).value}
Pour le second problème le script de calcul du champ “Montant2” pourrait être:
if(this.getField(“Champ1”).value==0){this.event.value=0;}Avec le formulaire d’origine on pourrait sans doute faire beaucoup mieux…
alexParticipantParfait, mais avec cette manière de nommer le fichier, on ne peut pas en créer plus d’un différent par minute. Ce n’est peut-être pas gênant, tout dépend de l’usage qu’on en fait.
Cette méthode de travail en contexte privilégié est à retenir pour étendre les possibilités d’Adobe Reader.alexParticipantVoici mon exemple:
1-modifier l’extension du fichier EnregistrementDocument.txt en .js et le placer dans le répertoire JavaScript de l’application.
2-Le document DocumentReference.pdf emarque un bouton qui appelle le script d’application après avoir construit le nom du fichier. Un champ visualise ce nom après enregistrement.Nota: on peut aussi ajouter un item de menu spécial à l’application (Acrobat ou Adobe Reader) pour lancer cette action.
alexParticipantBonjour à tous, bonjour Merlin,
On contourner ça à l’aide d’un script d’application (plug in) placé dans le répertoire JavaScript d’Acrobat PRO sous forme fe fonction exécutable en contexte privilégié, il suffit alors de lui passer des paramètres (le nom d’enregistrement du fichier donc, incluant la date au format souhaité) à partir du document à enregistrer. On peut aussi le faire avec Adobe Reader.
Je te rappelle Merlin que nous avons déjà utilisé cette méthode ensemble dans le cadre d’une de tes affaires!
J’ai un petit exemple à vous proposer. Ce sera pour demain, le temps que je vous fasse ça.alexParticipantVoici,
Les boutons radio “OPEN” lancent le script cocheJumping() qui fait le travail.[attachment deleted by admin]
25 mars 2014 à 15:51 en réponse à : Listes déroulants en cascade avec Acrobat pro XI (formulaires) #56947alexParticipantBonjour à tous,
Voici un exemple de base pour 2 niveaux.
Les données de liste sont définies par le script Initialisation() qui s’exécute à chaque ouverture du formulaire et crée deux tables.
La première liste (liste de mère) est renseignée par ce même script.
La liste secondaire est renseignée chaque fois que l’on sollicite la liste mère par le script RemplissageFille(). Champ “ListeNiveau1″>Propriétés>Format>Script de touches personnalisé…[attachment deleted by admin]
12 mars 2014 à 11:35 en réponse à : Envoi automatique d’un email à chaque enregistrement du PDF #56874alexParticipantCi-joint deux exemples basiques, l’un avec bouton d’envoi, l’autre avec envoi lors de l’enregistrement.
[attachment deleted by admin]
12 mars 2014 à 10:25 en réponse à : Envoi automatique d’un email à chaque enregistrement du PDF #56872alexParticipantIl faut créer ce bouton ou associer ce script à l’enregistrement du document (Outils>Javascript>Définir les actions du document>Le document sera enregistré), je vous donne un exemple dans la journée.
12 mars 2014 à 10:19 en réponse à : Bouton d’impression : séquences de pages, et aperçu de la boite de dialogue #56822alexParticipantBonjour,
Comme je l’ai dit plus haut, la sélection de l’imprimante ne fonctionne que sur Windows (c’est mentionné dans la doc, voir propriété printerName). Je suppose que tu es sur Mac ou Linux…
Quant au découpage, il est imposé par l’outil print qui est mis à notre disposition !
On peut envisager de générer automatiquement un fichier .pdf à imprimer, contenant uniquement les feuilles à imprimer mais nous devrons le faire sous Acrobat PRO ou Standard, pas avec Adobe Reader.12 mars 2014 à 09:59 en réponse à : Envoi automatique d’un email à chaque enregistrement du PDF #56870alexParticipantLe bouton de validation du formulaire peut lancer le script suivant à adapter à votre cas:
Msg = “Corps de votre courriern”;
Objet=”Objet du courrier”;
CTO=”destinataire@abracadabra.net”;
CCC=”destinataire2@abracadabra.net”;
//méthode d’envoi
app.mailMsg({
bUI: true,
cTo: CTO,
cCC:CCC,
cSubject: Objet,
cMsg: Msg
} );12 mars 2014 à 09:42 en réponse à : Récupération données BDD dans un formulaire PDF (La suite) #56794alexParticipantOui, c’est normal ! Les menus déroulants sont remis à jour à chaque ouverture puisque le script est conçu comme ça. Seules les données des champs associés (en jaune sur la maquette) sont invariantes et on notera que le premier de ces champs associé contient la valeur de l’item sélectionné dans le menu déroulant.
Pour conserver la sélection du menu déroulant après enregistrement du formulaire, il faut revoir la maquette de la manière suivante:
Lors de l’ouverture le script d’ouverture relit les tables sans toucher aux menus déroulants (voir script ouverture())
Lors de la modification d’une pièce jointe, on doit mettre à jour les menus déroulants (ici grâce au bouton Mise à jour” qui lance le script initialisation(). On peut ensuite masquer ce bouton. Ci-joint maquette pour illustration.[attachment deleted by admin]
11 mars 2014 à 15:59 en réponse à : Bouton d’impression : séquences de pages, et aperçu de la boite de dialogue #56819alexParticipantCi-joint une maquette à ma façon pour illustrer une réponse à l’option 1 avec présélection de l’impression sur Pc uniquement.
Sur Pc:
Le sélecteur capte la liste des imprimantes disponibles à l’ouverture et on peut en sélectionner une avant d’imprimer en aveugle ou non.
Sur Mac:
La liste se remplit aussi mais on ne peut sélectionner l’imprimante que via le menu d’impression. On ne peut donc pas imprimer en aveugle.Je n’ai as cherché de solution via une impression .pdf une voie à explorer sur Mac donc.
[attachment deleted by admin]
10 mars 2014 à 11:22 en réponse à : Récupération données BDD dans un formulaire PDF (La suite) #56792alexParticipantBonjour à tous,
Le formulaire est trop lourd, j’ai donc transféré les champs, les scripts et les pièces jointes sur ma maquette.
Merci à Merlin d’avoir ajouté des commentaires dans mes scripts.
Le but de ces outils est de renseigner des menus déroulants à partir de données embarquées dans des fichiers .csv que l’on trouve en pièces jointes. Dans notre exemple, les menus déroulants sont renseignés dès l’ouverture du document une fois pour toute, mais dans d’autres configurations, ils pourront être renseignés en fonction du contexte de saisie. Attention, toutefois, le temps de chargement n’est pas négligeable.
La sélection d’un item de ces menus déroulants provoque l’affichage des données correspondantes issues des tables, ici pour l’exemple en fond jaune.
Attention au format des données.Bon courage.
[attachment deleted by admin]
6 mars 2014 à 10:04 en réponse à : Récupération données BDD dans un formulaire PDF (La suite) #56788alexParticipantBonjour à tous,
Le script xinitialisation()) qui renseigne les menus déroulants du formulaire une fois pour toutes, doit se faire à l’ouverture du document.
Il ne faut pas le relancer à chaque utilisation des menus déroulants pour lesquels seul le script de format personnalisé doit être conservé.10 janvier 2014 à 17:34 en réponse à : Attribution de script sur bouton via les terminaisons de nom. – RÉSOLU #55981alexParticipantOui, il me suffit d’avoir les 10 premières pages pour localiser le problème.
10 janvier 2014 à 11:46 en réponse à : Attribution de script sur bouton via les terminaisons de nom. – RÉSOLU #55979alexParticipantBonjour,
Si les boutons des pages suivant la page 1 sont des copies des boutons de la page 1, ce script ne fonctionnera pas. Il faut que les noms de champs soient différents, exemple: A.R1, B.R1, C.R1 etc…alexParticipantVoilà, vous pouvez ajouter autant de lignes que nécessaire.
Attention, la manière de procéder a changé !
Deux scripts sont à l’oeuvre, tous deux déclenchés par l’action des menus déroulants (placement du résultat de la ligne dans la bonne colonne puis sommes des deux colonnes).
On pourrait avoir d’autres colonnes en gardant les scripts de base légèrement modifiés.[attachment deleted by admin]
alexParticipantJ’ai mis plus de temps à chercher ce qui devait être fait qu’à faire.
Ici, nous avons certes des magiciens chevronnés, mais aussi un groupe restreint de voyantes extra-lucides dont je fais partie !alexParticipantVoir si cette maquette se rapprocherait de ce qui est souhaité …
Ici, un seul script est à l’oeuvre (travail()). L’action sur l’un des menus déroulants le lance.
J’ai renommé les champs de manière à pouvoir ajouter des lignes si nécessaire (jusqu’à 10).[attachment deleted by admin]
alexParticipantQuelques remarques:
1-L’action déclenchant les scripts associés aux menus déroulants doit se faire via l’onglet Format, puis Script de touche personnalisé.
2-On doit récupérer les valeurs de ces champs par les évent.value ou évent.valueEx.
3-Les scripts font référence à des champs qui n’existent pas.J’ai une vague idée du but à atteindre, apparemment n’y a pas de calculs à faire, juste faire apparaître les champs d’un tableau suivant les choix effectués via les menus déroulants. Quelques précisions seraient les bienvenues…
“Ce qui se conçoit bien s’énonce clairement, et les mots pour le dire arrivent aisément.(Nicolas Boileau)”
alexParticipant1-“Au démarrage, les listes sont vides mais ne fonctionnent toujours pas”
Voilà qui me paraît tout à fait normal puisqu’on ne lance plus le programme à l’ouverture du document (voir demande ci-dessus)!2-“si j’actualise, les listes fonctionnent mais gardes toujours une valeur par défaut”
Là aussi, c’est le comportement normal des listes et menus déroulants , mais, mais, supposons….
faisons l’hypothèse que tu souhaites avoir un item de liste vierge, dans ce cas le formulaire joint ajoute un item de liste en blanc qui deviendra l’item par défaut. La sélection de cet item par l’utilisateur réinitialisera les champs associés.[attachment deleted by admin]
alexParticipantEn fait, on peut ! Mais disons que ça dépasse un peu le cadre de ce forum consacré au PDF:
1-Créer un bouton d’envoi de données (celui proposé par Acrobat ou un script submitForm() ) vers un service Web (un programme pHp associé à une base de données mySQL par exemple)
2-A partir de ces données, on utilisera une classe pHp capable de générer un fichier Excel formaté selon son besoin par extraction via requêtes SQL. On peut aussi gérer ces données directement sur une interface Web.
Pour faire ça, il faut connaître le JavaScript Acrobat, le pHp, le SQL et avoir quelques notions sur la sécurité.
Cela dit,on peut aussi s’intéresser à LiveCycle ES2alexParticipantCi-joint le formulaire dans lequel j’ai supprimé la ligne xinitialisation() comme je le demandais.
De ce fait, le remplissage des menus déroulants ne se fait que sur demande comme prévu.[attachment deleted by admin]
alexParticipantEnvoies ton formulaire…
3 décembre 2013 à 10:26 en réponse à : Faire alterner 2 boutons + probleme d’une police qui ne se charge pas #56319alexParticipantBonjour,
Voici pour répondre à la seule première question. Les deux boutons activent le même script unique de document facile à comprendre et à modifier. J’ai créé les champs de texte gérés par le script d’origine et qui manquaient avec des textes en français et en anglais.
A adapter à votre cas.[attachment deleted by admin]
alexParticipantSous Acrobat Pro
Outils>
Scripts JavaScript>Scripts JavaScript du document>
Sélectionner xInitialisation>Modifier
A la fin de la fonction :
function xinitialisation()
{
….
}
xinitialisation();Supprimer cette dernière ligne !
alexParticipantBonjour et bienvenue,
Voici un premier pas: créer un numéro de fiche à l’aide d’un bouton.
Attention au format des données du champ “date”, ici, c’est le script qui le définit via la méthode util.prind(). Ce script est un script de document baptisé xInit() qui est lancé par l’action sur le bouton.[attachment deleted by admin]
alexParticipantTu as laissé la ligne
xinitialisation();
qui exécute le script à l’ouverture.alexParticipantPlacer
this.resetForm();
à l’ouverture du document, rien de plus.
Mais il ne sera pas possible d’enregistrer le formulaire complété pour le consulter ultérieurement.Pour garder les deux possibilités (conserver les données précédemment saisies ou non), créer un script de document comme suit:
function init()
{
//Ce script sera exécuté à l’ouverture du document.
rp=app.alert(“Effacer les saisies antu00E9rieures?”,2,2)
if(rp==4)
{
//si oui, les saisies et contenus des menus déroulants sont effaces.
this.resetForm();
}
}
init();alexParticipantPour n’utiliser que les boutons il faut supprimer la ligne:
xintialisation();
Ainsi, le préremplissage des menus déroulants ne se fera qu’à la demande et on pourra enregistrer le formulaire avec ses données sous Adobe Reader.alexParticipantEn ajoutant la ligne suivante au tout début du script xinitialisation(), le formulaire sera vierge:
this.resetForm();alexParticipantEt oui, il n’y a pas d’erreur !
Ces deux boutons sont là pour les tests:
“Reset” initialise le formulaire et en effet, les menus déroulants ne “fonctionnent plus” puisqu’ils sont vides.
“Test” recharge ces menus déroulants !
Tu peux donc les supprimer, le chargement se fait à l’ouverture du document.alexParticipantBonsoir,
Il faut bien activer les privilèges d’exécution du JavaScript (capture)
Par ailleurs il ne faut pas autoriser les saisies dans les menus déroulant puisque ce sont les tables qui chargent les données. Ni activer le correcteur orthographique qui mange du temps pour rien (capture)
Fais un test avec le formulaire joint et envoies ce que la console affiche (Ctrl-J)[attachment deleted by admin]
alexParticipantOoops,
Effectivement, la correction n’était pas faite.[attachment deleted by admin]
alexParticipantDans le script xinitialisation(), tu fais référence à une table qui n’existe pas (data02_CAP).
L’exécution du script s’arrête là.
J’ai corrigé.[attachment deleted by admin]
alexParticipantBonjour,
Pour effacer le contenu d’un menu déroulant ou d’une liste, placer ce script en ouverture de document:
this.getField(“Nom du Champ”).clearItems();On peut aussi écrire un script qui efface tous les menus déroulants…
indexField=0;
while(indexField{
fieldName=this.getNthFieldName(indexField);
if(this.getField(fieldName).type==”combobox”)
{
this.getField(fieldName).clearItems();
}
indexField=indexField+1;
}Pour les listes remplacer “combobox” par “listbox”
alexParticipantGeorge, merci à vous pour ce retour et n’hésitez pas à poser vos questions même si vous vous en tirez fort bien seul.
Cordialement,
Alex20 novembre 2013 à 10:47 en réponse à : Récupération données BDD dans un formulaire PDF. – RÉSOLU #55949alexParticipantLa question est:
Quelle relation, (quel lien logique) y-a t-il entre les items de la liste “02_CAP” et ceux des deux autres menus déroulants?
Il faut me donner f !
item”02_CAP” =f(item”02_Installation_de_destination”,item”03_Rubrique”)20 novembre 2013 à 10:22 en réponse à : Récupération données BDD dans un formulaire PDF. – RÉSOLU #55947alexParticipantDésolé mais,
Pour la première question, les items du menu déroulant “02_CAP” devront être renseignés eux aussi dans un menu déroulant qui contiendrait les items selon les données choisies des autres listes.
ne suffit pas pour écrire un script même avec une baguette magique!
20 novembre 2013 à 10:19 en réponse à : Envoyer les données dans un tableau structuré. – RÉPONDU #56201alexParticipantBonjour,
Aujourd’hui, je cite notre ami Merlin:– Pour moi il y a une incompatibilité majeure entre le statut “stagiaire” et l’objectif donné…
– Acrobat et PDF ne peuvent intervenir que pour la première partie (remplissage des formulaire et collecte des données), pour la suite ce n’est pas la peine d’y penser.
Effectivement, l’objectif donné est “hors de portée” pour ce qu’on peut en juger et manque un cahier des charges précisant:
1-le type de solution à mettre en oeuvre*.
2-La nature et les liens entre les données d’entrée par défaut (les tables d’items et valeurs par défaut ).
3-Les contraintes de saisies (formats, cohérences, saisies obligatoires,saisies automatiques, champs conditionnels, etc…)
4-collecte des données suivant choix *.*Ici, on doit dire si on va s’orienter s’orienter vers LiveCycle, un Web service ou une solution rustique de type acrobat.com .
20 novembre 2013 à 09:37 en réponse à : Récupération données BDD dans un formulaire PDF. – RÉSOLU #55945alexParticipantBonjour,
Ci-joint le formulaire avec une correction (le nom du champ “02_CAP” au lieu du nom “02_CAP.csv”) qui ne résoud rien puisque qu’on ne connait toujours pas la logique qui régit la collecte des items de ce menu déroulant !Dans l’état actuel du script, ce champ est vide. Par ailleurs, pour faire des tests il aurait été bon d’avoir des jeux de données un peu plus consistants.
Questions:
1-Comment doit-on renseigner les items du menu déroulant “02_CAP” ? La réponse à cette question permettrait de compléter le script proposé le script ci-dessus du 14.
2-Quelle version d’Adobe Reader utilisera t-on sur le Pc de saisie des données ?[attachment deleted by admin]
18 novembre 2013 à 08:00 en réponse à : Récupération données BDD dans un formulaire PDF. – RÉSOLU #55942alexParticipantBonjour,
Tout d’abord donnes-nous quelques précisions.
Quelle application (Acrobat ou Acrobat Reader) et quelle version ? Système d’exploitation (Windows Xp ?) pour cette recopie de la console ?
Ensuite, vérifies le réglage des préférences d’Adobes Reader et refais un essai. (voir copie d’écran jointe).
A suivre.[attachment deleted by admin]
15 novembre 2013 à 17:01 en réponse à : Enregistrement PDF Reader Extended pas accessible sous Acrobat X. – RÉPONDU #56237alexParticipantBonsoir,
Ne cherchez plus, sous Acrobat X, on trouve ça dans la commande d’enregistrement:
Fichier > Enregistrer sous > Fichier PDF Reader Extended > Activer les fonctions supplémentaires.15 novembre 2013 à 16:48 en réponse à : Récupération données BDD dans un formulaire PDF. – RÉSOLU #55940alexParticipantQuand plus rien ne marche, c’est que le diagnostique est aisé (en général). Ouvrir la console avec un Ctrl-J (sur Pc) ou un cmd-J (sur Mac), mes scripts sont assez bavards, on devrait avoir une piste…
Bon week-end à tous.14 novembre 2013 à 15:33 en réponse à : Envoyer les données dans un tableau structuré. – RÉPONDU #56197alexParticipantOn a déjà abordé le sujet ici.
Les outils d’Adobe (sur adobe.com ou non) génèrent des fichiers csv ou xml qui sont exploitables.
Pour ma part je préfère toujours envoyer les données vers un serveur WEB interne par un this.submitForm( qui permet déjà de faire un choix dans les champs à prendre en compte), serveur où un petit programme pHp récupère ces données (les $_POST[fieldName]) et les envoie dans uns base mySQL. A partir de là, on fait presque ce qu’on veut pour présenter ces données via les requêtes SQL.
On sort un peu du cadre d’un simple coup de pouce !alexParticipantVoilà une variante de la solution qui fonctionne à l’ouverture du document. Je reviendrai sur ce sujet pour faire quelque chose de plus abouti (système de remise à zéro et bordereaux multiples).
[attachment deleted by admin]
14 novembre 2013 à 15:13 en réponse à : Insertion automatique d’un N° code de A-0001 à A-1000 etc – RÉPONDU #56229alexParticipantVoilà une maquette dans laquelle on ne gère pas les A,B,C etc.. Il faudrait aussi prévoir quelque chose pour remettre ale compteur à 0.
A tester, ce que je n’ai pas trop fait…[attachment deleted by admin]
14 novembre 2013 à 11:02 en réponse à : Insertion automatique d’un N° code de A-0001 à A-1000 etc – RÉPONDU #56227alexParticipantBonjour,
Nous avons déjà répondu à un problème très comparable (Voir le post “Numérotation automatique”) que je vous conseille de regarder.
Mais n va se pencher sur votre cas en particulier car la numérotation est différente…
Question: RSA devient RSB puis RSC etc…. ?14 novembre 2013 à 10:26 en réponse à : Récupération données BDD dans un formulaire PDF. – RÉSOLU #55936alexParticipantLe menu déroulant “02_CAP” ne peut plus être renseigné à l’ouverture du document puisqu’il dépend de deux autres sélections. En conséquence, on ne doit pas voir apparaître le script configComBox() dans le script xinitialisation(). Par précaution, on vide le menu déroulant “02_CAP”.d’où, les lignes suivantes:
nomFichier=”02_CAP.csv”;
lectureCSV();
data02_CAP=data;configComboBox();
this.getField(“02_CAP.csv”).clearItems();Par contre, on doit créer deux scripts au niveau des menus déroulants « 02_Installation_de_destination » et « 03_Rubrique ». pour mettre à jour le menu “02_CAP.csv”,
Onglet Format>Personnalisé>Script de touche personnalisé
1-pour « 02_Installation_de_destination », un script de la forme:
//Remplissage du menu déroulant
if(!event.willCommit)
{
table=new Array() ;
choix1=this.event.changeEx;
choix2=this.getField(“03_Rubrique”).value;
//définition de la table à partir des choix1 et choix2 (la table “dépend de”)
//……………script à écrire………………….
//
f2=this.getField(“02_CAP”);
f2.delay=true;
f2.clearItems();
j=0;
while(j{
f2.insertItemAt(table[j],j,j)
j=j+1;
}
f2.currentValueIndices=0;
f2.delay=false;
}2-pour « 02_Installation_de_destination », un script de la forme:
//Remplissage du menu déroulant
if(!event.willCommit)
{
table=new Array() ;
choix1=this.getField(“02_Installation_de_destination”).value;
choix2=this.event.changeEx;
//définition de la table à partir de choix1 et choix2. (la table “dépend de”)
//……………script à écrire………………….
//
f2=this.getField(“02_CAP”);
f2.delay=true;
f2.clearItems();
j=0;
while(j{
f2.insertItemAt(table[j],j,j)
j=j+1;
}
f2.currentValueIndices=0;
f2.delay=false;
}Hélas, je ne peux pas définir les tables des items car je ne suis pas une voyante extra-lucide ni un enchanteur !
alexParticipantMerci Merlin,
Voici donc la méthode que j’utilise pour identifier les formulaires lorsqu’on me demande de numéroter les documents du jour. Ici les numéros sont de la forme aaaammjj-xx. Le compteur repart à 01 chaque jour. Trois scripts sont à l’oeuvre:
initialisation()
enregistrement()
numerotation()
Le dernier numéro est mémorisé par une variable locale lors de l’enregistrement du formulaire:
global.dernNum=this.getField(fNum).value;
global.setPersistent(“dernNum”,true);
Attention, ce script devra être adapté pour fonctionner avec plusieurs formulaires utilisés simultanément. Je proposerai une variante pour ça.
D’autres idées our fare ça ?[attachment deleted by admin]
8 novembre 2013 à 18:12 en réponse à : Récupération données BDD dans un formulaire PDF. – RÉSOLU #55932alexParticipantDans ton formulaire manque le script lié à l’enregistrement du document:
Outils>Définir les actions du document>Le document sera enregistré…
Pour le reste, je n’ai rien compris. le contenu d’un menu déroulant dépend du choix effectué sur un autre ???
Merlin, on pourrait ouvrir un fil sur ce seul thème de la numérotation automatique, je vous proposerai une solution plus raffinée que vous pourrez tester.
Bonsoir à tous et bon week-end.8 novembre 2013 à 11:20 en réponse à : Récupération données BDD dans un formulaire PDF. – RÉSOLU #55927alexParticipantPour poursuivre le débat sur la numérotation automatique d’un document, voici une maquette où deux boutons assurent:
1-la numérotation automatique.
2-la fermeture du formulaire avec, en cas d’enregistrement, la mémorisation du dernier numéro.
Pour raffiner, on pourrait rendre invisible le champ “Attribuer un numéro” et le champ “Valider le bordereau” visible après attribution du numéro.
Attention de bien recopier les scripts de document.En ce qui concerne l’export des données, c’est l’objet d’un fil différend, je suis bien d’accord.
[attachment deleted by admin]
8 novembre 2013 à 09:03 en réponse à : Récupération données BDD dans un formulaire PDF. – RÉSOLU #55923alexParticipantNon, on ne doit pas simuler par un bouton puisque les évènements qui gèrent les scripts sont:
1-l’ouverture du document pour le calcul du nouvel identifiant.
2-la fermeture du document pour l’enregistrement de la variable locale.
Ci-joint un document qui ouvre la console à l’issue de la numérotation, recopier le contenu pour que l’on puisse analyser l’erreur éventuelle.
Pour tester:Ouvrir, enregistrer, réouvrir,enregistrer, etc…[attachment deleted by admin]
7 novembre 2013 à 14:52 en réponse à : Récupération données BDD dans un formulaire PDF. – RÉSOLU #55921alexParticipantPour illustrer la première proposition de Merlin voici un exemple qui exploite la variable globale mémorisée sur la plate-forme où l’on travaille. Il y a donc quelques contraintes d’exploitation à connaître.
Attention: deux scripts sont à l’oeuvre! Le premier est activé par l’ouverture du document, l’autre par l’action d’enregistrement[ (Définir les actions du document>Le document sera enregistré./color][attachment deleted by admin]
7 novembre 2013 à 10:18 en réponse à : Récupération données BDD dans un formulaire PDF. – RÉSOLU #55914alexParticipantBonjour à tous,
Pour concaténer le contenu de deux champs dans un troisième, voir exemples joints.
Pour incrémenter automatiquement un numéro de bordereau genre 20131105-01,20131105-02,20131105-03,20131105-04… c’est une autre affaire.[attachment deleted by admin]
29 octobre 2013 à 11:10 en réponse à : Calculer la différence en année et mois entre deux dates. – RÉSOLU #56132alexParticipantBonjour,
C’est assez complexe, voyez mon exemple où le script de calcul est lancé par le bouton.
[attachment deleted by admin]
alexParticipantBonjour,
On peut bien sûr préciser les variables texte1 et texte2 à l’ouverture du document une fois pour toutes.
//Script d’ouverture de page (page par défaut)
texte1=”Mon texte dans le cas ou le champ contient une saisie”;
texte2=”Mon texte dans le cas où le champ est vide”;
//et bien d’autres paramètres à utiliser ultérieurement.Autre manière de faire (style Merlin, voir maquette jointe):
//Script d’ouverture de document
fonction Ouverture()
{
texte1=”Mon texte dans le cas ou le champ contient une saisie”;
texte2=”Mon texte dans le cas où le champ est vide”;
}
Ouverture()[attachment deleted by admin]
alexParticipantBonjour,
Voir maquette jointe, le script est embarqué par le champ de saisie du nom du chef de projet baptisé “ChefDeProjet”.
Bonne journée à tous.//Script possible
cible=”Nom_5″
texte1=”Mon texte dans le cas ou le champ contient une saisie”;
texte2=”Mon texte dans le cas où le champ est vide”;
if(this.event.value==””)
{
this.getField(cible).value=texte2;
}
else
{
this.getField(cible).value=texte1;
}[attachment deleted by admin]
21 octobre 2013 à 15:07 en réponse à : Interdire valeur si supérieure à la valeur entrée dans autre champ. – RÉSOLU #56095alexParticipantBonjour,
Bienvenue sur le forum.
Voici pour illustrer une solution aux deux premières questions :
Gain> Chiffre d’affaire => Alerte (le champ gain est bordé de rouge) et valeur du gain forçée à 0.
Gain>40% du CA => Alerte simple.Si on saisit de nouveau le CA, le gain passe à 0 et le champ est bordé de rouge pour inciter à une nouvelle saisie du gain.
Onglet Validation>Exécuter le script de validation personnalisé
…Voir la pièce jointe.
Alex
[attachment deleted by admin]
alexParticipantTu remarqueras que l’interface d’Acrobat ne propose pas d’affecter un script à l’ouverture d’un document même s’il est possible de le faire manuellement. Etrange non ?
Pour ma part j’utilise un artifice qui contraint l’exécution du script d’ouverture de page à la seule première ouverture via une propriété personnalisée ré-initialisée à la fermeture du document.alexParticipantC’est un script de document. Encore faut-il qu’un évènement quelconque le lance! L’ouverture de la première page par exemple.
alexParticipantPour que le script Initialisation() soit exécuté lors de l’ouverture du document, il fallait donc le préciser (clic droit sur la vignette de page>Propriétés de la page>Onglet Actions>Exécuter un JavaScript….).
[attachment deleted by admin]
alexParticipantJe ne lis pas dans le marc de café ! Pour que j’aies une chance de trouver l’erreur, il faut m’envoyer le document.
Le script d’ouverture de page a sans doute été oublié….16 octobre 2013 à 11:29 en réponse à : Récupération données BDD dans un formulaire PDF. – RÉSOLU #55899alexParticipantMerlin,
Ce n’est pas vrai dans mon exemple. Les en-têtes sont bien présentes dans le fichier de données BSD.csv mais je ne les utilise pas comme on le ferait avec du fdf ou du xml.
Les champs du formulaire sont nommés Champ.1 à Champ.x dans l’ordre des colonnes, rien de plus.
Cela dit, on pourrait les prendre en compte pour aider notre ami qui pourrait alors nommer ses champs de formulaire à l’identique des têtes de colonne.alexParticipantC’est assez trivial mais ça marche !
alexParticipantVoici l’exemple attendu. Les données sont définies par le script d’ouverture de page Initialisation().
Ici j’ai créé trois tables contenant les dates de début, dates de fin et les lieux. Il faut respecter l’ordre.
Bon courage[attachment deleted by admin]
16 octobre 2013 à 10:07 en réponse à : Comptabiliser le nombre de caractère dans un PDF. – RÉPONDU #55963alexParticipantCi-joint variante à la version précédente. Bonne journée à tous.
[attachment deleted by admin]
16 octobre 2013 à 09:42 en réponse à : Comptabiliser le nombre de caractère dans un PDF. – RÉPONDU #55962alexParticipantCi-joint un petit script à ma façon…
Modifier l’extension du fichier en .js
Placer ce script dans le dossier JavaScript de l’application Adobe Reader ou Acrobat.
Relancer l’application et ouvrir le document. Das le menu “Fichier” d’Adobe Reader ou d’Acrobat apparaît un nouvel item “Outils AbracadabraPDF>Comptage caracteres”.
Faites un petit essai et vérifiez que les résultats sont corrects.
On peut sans doute améliorer…[attachment deleted by admin]
alexParticipantOui, il faut alors définir un tableau contenant ces données. Exemple demain, car je dois m’absenter.
Bonne soirée.15 octobre 2013 à 14:09 en réponse à : Récupération données BDD dans un formulaire PDF. – RÉSOLU #55894alexParticipantJe vais voir ça mais pas ce soir , désolé. J’ai une idée.
alexParticipantVoilà, tout se joue dans l’onglet Format de la liste déroulante (Script de touche personnalisé).
[attachment deleted by admin]
-
AuteurRéponses