Récupération données BDD dans un formulaire PDF. - RÉSOLU  (Lu 23807 fois) Partager ce sujet Imprimer

1 2 B


DeyDey  20 novembre 2013 : 11:51

Ce doit être des listes liées, selon les données qui sont dans 02_Installation_de_destination et 03_Rubrique, la liste 02_CAP est modifié automatiquement, selon le fichier .csv en pièces jointes.

Je ne sais pas comment expliquer autrement, au pire je laisse tomber ce point la, c'est pas le plus important, contrairement à l'exportation.

IP archivée


alex  20 novembre 2013 : 11:47

La 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")

IP archivée


DeyDey  20 novembre 2013 : 11:36

Désolé mais je ne comprends pas ta question alors.
Ce programme commence à me sortir par les yeux, j'en verrais jamais le bout, je comprends plus rien.

Il n'y a pas de moyen d'avoir un script qui exporte les données des champs? Comme pour l'importation mais à l'inverse?
Je n'ai quasiment aucune connaissances dans ce domaine; je serai probablement plus avancé sinon..

IP archivée


alex  20 novembre 2013 : 11:22

Dé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!

IP archivée


DeyDey  20 novembre 2013 : 10:45

Salut,

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.

La version d'Adobe Reader qui sera utiliser et, à mon avis, une vieille version puisque le PC est sous XP (je ne peux, pour le moment pas renseigner la version exact).

IP archivée


alex  20 novembre 2013 : 10:37

Bonjour,
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 ?



IP archivée


DeyDey  20 novembre 2013 : 08:07

UP

IP archivée


DeyDey  18 novembre 2013 : 09:10

J'utilise Acrobat Pro XI sur Windows 8.
Le logiciel sera sur windows XP lu avec un vieux Adobe Reader.

J'ai fais la modification que tu m'as donné, ça fonctionne pour le numéro du bordereau.
Par contre, le remplissage des champs ne fonctionne toujours pas.

Je joint le fichier en date.

IP archivée


alex  18 novembre 2013 : 09:00

Bonjour,
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.



IP archivée


DeyDey  18 novembre 2013 : 08:08

Salut,
Pour les erreurs, voici ce qu'indique la console:
NotAllowedError: Les paramètres de protection interdisent l'accès à cette propriété ou à cette méthode.
Global.dernNum:7:Field Num:Mouse Up

TypeError: table[event.changeEx] is undefined
20:Field:Keystroke
Rien de plus..

Quand à l'exportation des données, je ne tire pas beaucoup de solution avec d'autres logiciels..

IP archivée


alex  15 novembre 2013 : 17:48

Quand 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.

IP archivée


Merlin  15 novembre 2013 : 13:58

Pas de panique, au pire des cas il suffit de repartir d'une version antérieure.
 :Smiley01:

IP archivée


DeyDey  15 novembre 2013 : 13:35

J'ai des erreurs qui viennent d’apparaître comme par magie.
Des erreurs de protection, plus aucun champs ne marche, la numérotation auto ne marche plus.
Je ne vois pas ce que j'ai modifier pour que cela arrive.
Je commence vraiment à désespérer :( .. 

IP archivée


DeyDey  14 novembre 2013 : 13:10

Merci de me consacrer du temps Alex :D.

Je ne suis pas tout-à-fait sur de la structure du script a rajouter ? (Désolé je suis un vrai plot en Js :/)

IP archivée


alex  14 novembre 2013 : 11:26

Le 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<table.length)
   {
   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<table.length)
   {
   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  !

IP archivée


DeyDey  14 novembre 2013 : 09:46

En fait c'est des listes déroulantes liées mais avec des données extérieures (pièces jointes) et non encrées directement dans le code.

IP archivée


DeyDey  12 novembre 2013 : 11:11

Merci, le numéro automatique fonctionne.
Pour le numéro de CAP je vais essayer d'être plus clair:

Le « 02_CAP » doit dépendre de « 02_Installation_de_destination » et « 03_Rubrique ». C’est-à-dire que si je sélectionne tel «Nom » et tel « Déchet », la liste des numéros de CAP doit me proposer que les numéros qui sont associés au nom et au déchet.
J’ai fait un .csv exemple (02_CAP.csv) des possibilités.

Ci-joint le dernier document a jour.

IP archivée


Merlin  09 novembre 2013 : 22:33

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.

C'est fait : http://abracadabrapdf.net/forum/index.php/topic,2270.new.html
 :Smiley03:

IP archivée


alex  08 novembre 2013 : 19:12

Dans 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.

IP archivée


DeyDey  08 novembre 2013 : 15:08

Edit du message précédent (je ne voulais pas flooder)  :oh:

IP archivée



DeyDey  08 novembre 2013 : 13:28

Désolé pour le mauvais post.
Merci Merlin de l'avoir déplacé au bon endroit, et merci Alex pour ton aide :) !

J'ai recopié tous les script au bon endroit et dans mon champ, il s'affiche "xxxxx", je n'ai aucune idée pourquoi.

Ouaaa et je viens d'avoir un gros souci la.. (Je suis désolé  :Ooops:)
Pour le numéro de CAP, en fait je doit choisir un "Nom (case2)", la "rubrique déchet (case3)" et qu'il me propose une liste déroulante pour le numéro de CAP (case2) qui correspond au "Nom" et à la "Rubrique déchet".

Je joint le BSD avec un .csv type comme exemple qui pourrait être donné (02_CAP.csv)

IP archivée


Merlin  08 novembre 2013 : 12:52

Un moment donné, quand on aborde un autre point : il faut savoir créer un nouveau sujet (avec un titre adéquat).

C'est fait : http://abracadabrapdf.net/forum/index.php/topic,2268.0.html
 :bonjour:

IP archivée


alex  08 novembre 2013 : 12:20

Pour 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.

IP archivée


LionelMacBruSoft  08 novembre 2013 : 12:06

BONJOUR,

Merci,

Et par hasard, s'il existe un script qui envoi les données du formulaire, dans un tableau structuré (Excel, access ou autre) ?

Et est-il possible que ce bouton demande d'enregistrer, d'imprimer et d'exporter ?
Un moment donné, quand on abord un autre point : il faut savoir créer un nouveau sujet (avec un titre adéquat).  :Smiley01:

Merci à vous.

Lionel :alien2:

IP archivée


Merlin  08 novembre 2013 : 10:48

A placer en action souris enfoncée dans le bouton concerné :
this.closeDoc();

 :Smiley01:

IP archivée


DeyDey  08 novembre 2013 : 10:19

Merci,

Mon maître de stage vient de m'apprendre qu'il peut être amené, par exemple, à faire 7 ou 8 bordereaux d'affilés et recommencer l'après-midi, par exemple.

Peut-être que l'on ajouter une fonction qui, quand on valide le formulaire pour exporter/imprimer, automatise uniquement la fermeture du bordereau (pas du logiciel).

Est-ce possible ?

Ci joint, le dernier document à jour.

IP archivée


alex  08 novembre 2013 : 10:03

Non, 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...

IP archivée


DeyDey  08 novembre 2013 : 08:50

Y a t-il un moyen de mettre la fonction sur un bouton ? (pour tester)
Et j'ai bien recopié les 2 scripts, mais rien ne s'affiche dans mon champ.  :mur:

IP archivée


alex  07 novembre 2013 : 15:52

Pour 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]

IP archivée


DeyDey  07 novembre 2013 : 14:46

Euuuh Whaaat ?!
Je crois que je vais laisser tomber, j'ai beaucoup d'autres choses à avancer (notamment l'exportation dans une base structurée --') et mon maître de stage va s'impatienter..

 :mur:

IP archivée


Merlin  07 novembre 2013 : 14:11

Si c'est possible, il y a 2 méthodes :

- utiliser une variable globale (qui persiste entre documents et entre sessions du logiciel), mais depuis les versions X il y a beaucoup plus de restrictions dans leur fonctionnement.
- stocker la valeur dans un champ placé dans un autre PDF (qui ne sert qu'à ça), donc assez facile à lire et à modifier javascriptement.

 :Smiley01:

IP archivée


DeyDey  07 novembre 2013 : 13:54

Je voulais que pour chaque nouveau bordereau de la journée le numéro soit la date + 01, 02, ou 03 etc selon si on fait un ou plusieurs bordereaux par jour.

Mais à chaque fermeture, le numéro est réinitialisé puisque il est stocké en local. Donc à moins de laisser le bordereau constamment ouvert ou d'enregistrer le numéro sur un serveur, ce n'est pas possible..

IP archivée


Merlin  07 novembre 2013 : 13:48

Le problème c'est que le numéro ne s'incrémente pas puisque le compteur est réinitialiser; il faudrait un moyen pour stocker la date.

???
 :Euuuh: :doute:

IP archivée


DeyDey  07 novembre 2013 : 13:34

 :bravo:

Pour la date, j'ai ça si ça peut intéresser quelqu'un :


var compteur = 1;
var ancienJour = new Date().getDate()
 
if (this.getField("01_Num_Bordereau").value == "")
{
    if(ancienJour != new Date().getDate())
        compteur = 1;
 
    ancienJour = new Date().getDate();
 
    this.getField("01_Num_Bordereau").value = util.printd("yyyymmdd", new Date()) + " " + compteur ;
    compteur++;
}

Le problème c'est que le numéro ne s'incrémente pas puisque le compteur est réinitialiser; il faudrait un moyen pour stocker la date.

IP archivée


Merlin  07 novembre 2013 : 12:59

 :bravo:

IP archivée


alex  07 novembre 2013 : 11:18

Bonjour à 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.


IP archivée


DeyDey  07 novembre 2013 : 10:57

Et bien le numéro de CAP doit être unique suivant le nom et le déchet.
Les numéros de CAP doivent être renseignés quelques part (ou générés selon un modèle) mais pas calculés.
C'est assez difficile à expliquer, désolé.

IP archivée


Merlin  07 novembre 2013 : 10:17

Là c'est moi qui suis largué.
Je ne comprend pas la question…
 :Euuuh:

IP archivée


DeyDey  07 novembre 2013 : 08:26

Alors la il m'affiche le rang "CAP_NOM" puis le rang "CAP_NUMERO" à la suite et toujours quand j'active le champ.

Il faudrait que le "CAP_FINAL" soit stocké et relatif à "CAP_NOM" et "CAP_NUMERO".

IP archivée


Merlin  06 novembre 2013 : 19:43

Alors essaye plutôt ça :

a = this.getField("CAP-NOM").valueAsString;
b = this.getField("CAP-NUMERO").valueAsString;
event.target.value  = a + b;


A placer en script de calcul (dans l'onglet Calcul)

 :Smiley03:

IP archivée


DeyDey  06 novembre 2013 : 15:41

Oh ça marche.  :extra:

Part contre, il me sort l'addition des rangs (un moyen les renseigner les numéros de CAP quelque part ?)

Et pour le script du champ, pas moyen de le mettre ailleurs que "champ activé" ou autre ?

Merci.  :priere:

IP archivée


Merlin  06 novembre 2013 : 14:55

1- les champs sont remplis via le menu déroulant.
2- le script placé en script de calcul dans le champ CAP-final va récupérer les valeurs dans les 2 champs concernés et concaténer leurs valeurs pour les afficher.

IP archivée


DeyDey  06 novembre 2013 : 13:20

Citer
a = this.getField("CAP-NOM").value;
b = this.getField("CAP-NUMERO").value;
event.target.value = a + b;

Il y a un moyen pour faire correspondre avec mes fichiers .csv et mes champs ?  :Ooops: (J'suis un peu paumé  :oh:)

IP archivée


Merlin  06 novembre 2013 : 13:09

Pour le numéro de CAP, une personne peut avoir plusieurs numéro de CAP et un déchets peut aussi avoir plusieurs numéros de CAP.
Ce dernier doit être unique pour un déchet et une personne.

a = this.getField("CAP-NOM").value;
b = this.getField("CAP-NUMERO").value;
event.target.value = a + b;


 :Smiley01:

IP archivée


DeyDey  06 novembre 2013 : 10:34

Pour le numéro de CAP, une personne peut avoir plusieurs numéro de CAP et un déchets peut aussi avoir plusieurs numéros de CAP.
Ce dernier doit être unique pour un déchet et une personne.

Pour ce qui est du numéro du bordereau, la première partie du numéro est la date (ddmmyyyy) suivie de 01, 02 ou 03 etc.. selon le nombre de bordereau par jour; par exemple:

Si on envoi 3 documents le 05 Novembre, les numéros des documents seront:  20131105 01 // 20131105 02 // 20131105 03
Si on envoi d'autres documents le lendemain, les numéros des documents reprendrons à "01" mais avec la date du jour: 20131106 01 // 20131106 02 // 20131106 03 etc.

J'ai déjà le script pour la date:
if (this.getField("01_Num_Bordereau").value == "")
    {
      this.getField("01_Num_Bordereau").value = util.printd("yyyymmdd", new Date()) ;
    }

En fait il faut: Tant que la date n'a pas changé, faire Valeur++


J'espère avoir été clair  :Ooops:


IP archivée


Merlin  05 novembre 2013 : 11:54

J'aimerai faire correspondre le N°CAP selon le Nom (du bloc 2) et la rubrique déchet (du bloc 3). Par exemple il peut y avoir la même personne pour plusieurs rubrique déchet et inversement. Le numéro de CAP reste unique et je souhaite qu'il se génère automatiquement selon ces 2 données.

Oui, mais il faudrait savoir sur quel critère ce numéro devrait être créé.


Citer
J'aimerai aussi pouvoir générer automatiquement le numéro de bordereau unique (s'il n'est pas référencé dans la base exportée que je vais créer plus tard).

Le script contenu dans cet utilitaire pourrait il faire l'affaire ?
==> http://abracadabrapdf.net/utilitaires/acrobat-plugins/abracadabra-docid/

 :Smiley01:

IP archivée


DeyDey  04 novembre 2013 : 14:11

UP

IP archivée


V1n6ane  30 octobre 2013 : 11:44

Bonjour à tous,

Merci et surtout bravo :bravo: pour ces supers exemples ! C'est exactement cela qu'il me faut.

Malheureusement pour moi j'utilise LiveCycle Designer (tableaux dynamiques oblige) et je dois donc transposer ce code et pour le moment je n'ai pas trouvé/réussi. Auriez-vous des pistes ?

Si j'y arrive (ce que j'espère), je le posterai, cela aidera peut-être d'autres personnes.

Merci d'avance
V1n6ane

IP archivée


DeyDey  30 octobre 2013 : 10:22

Salut à tous !

J'ai bien avancé depuis la dernière fois (je remercie Alex!).
Cependant, je bute sur un problème assez conséquent:
   
   J'aimerai faire correspondre le N°CAP selon le Nom (du bloc 2) et la rubrique déchet (du bloc 3). Par exemple il peut y avoir la même personne pour plusieurs rubrique déchet et inversement. Le numéro de CAP reste unique et je souhaite qu'il se génère automatiquement selon ces 2 données.

   J'aimerai aussi pouvoir générer automatiquement le numéro de bordereau unique (s'il n'est pas référencé dans la base exportée que je vais créer plus tard).

Voilà j'espère que vous m'aurez compris et que l'on puisse aboutir à une solution.

Merci d'avance,
Cdlt,
DeyDey.


P.S: Ci joint le formulaire.

IP archivée


Merlin  16 octobre 2013 : 14:05

OK.
 :Ooops:

IP archivée


alex  16 octobre 2013 : 13:29

Merlin,
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.

IP archivée


DeyDey  16 octobre 2013 : 13:06

Je ne comprends toujours pas  :Euuuh:

IP archivée


Merlin  16 octobre 2013 : 12:51

Sinon je fais tout propre sur une seule feuille mais vu que je ne sais pas comment se configure l'appel des cellules en Js je ne peux rien faire

Je l'ai déjà dit dans un message précédent : l'en-tête de colonnes doit correspondre au nom du champ hôte.
Ouvre les exemples fournis pour t'en convaincre.

 :bonjour:

IP archivée


DeyDey  16 octobre 2013 : 11:31

Ok, je viens de voir que les fichiers .csv ne prennent pas en charge plusieurs feuilles --' ..

Je peux utiliser un autre format ou je me pend tout de suite ? :oh:

Sinon je fais tout propre sur une seule feuille mais vu que je ne sais pas comment se configure l'appel des cellules en Js je ne peux rien faire :'(..

IP archivée