abracadabraPDF › Forums › PDF – Général › Script qui fonctionne de façon isolée
- Ce sujet contient 17 réponses, 3 participants et a été mis à jour pour la dernière fois par Merlin, le il y a 4 mois.
-
CréateurSujet
-
17 août 2024 à 21:53 #74736michel c.Participant
Bonjour, en dehors du boulot je fais un peu de menuiserie (agencement).
Je suis en train de concocter un script qui me permet de dimensionner les différentes pièces qui composent plusieurs tiroirs.
J’aimerais exécuter tous les calculs via le bouton Calculer qui appelle le script Calc mais les lignes de code permettant d’obtenir les dimensions des façades (lignes 141 à 161) ne fonctionnent pas et ceci sans aucune erreur à la console
Lorsque j’exécute ces mêmes lignes via un autre bouton (facades) qui appelle le script du même nom cela fonctionne…
Je n’y comprend rien…
Attachments:
You must be logged in to view attached files. -
CréateurSujet
-
AuteurRéponses
-
17 août 2024 à 22:12 #74738bebarthMaître des clés
bonjour,
Après une première lecture rapide je remarque qu’il y a 2 fois la fonction “Calc()” en lignes 1 et 71.
Je n’ai pas vérifié si elles sont exactement identiques, mais peut-être que la seconde qui annule la première ne permet pas l’exécution de certains calculs…@+
😎18 août 2024 à 08:18 #74739michel c.ParticipantMerci beaucoup, l’erreur venait de là. Erreur de copier/coller qui m’avait échappée
- Cette réponse a été modifiée le il y a 4 mois par michel c..
18 août 2024 à 09:07 #74741michel c.ParticipantDans ce même document, j’aimerais que pour le cas ou les caissons n’ont aucune dimension, aucun calcul ne soit fait.
pour éviter d’avoir des inscriptions du style ×× ou 0××
Merci
- Cette réponse a été modifiée le il y a 4 mois par michel c..
- Cette réponse a été modifiée le il y a 4 mois par michel c..
Attachments:
You must be logged in to view attached files.18 août 2024 à 11:17 #74743MerlinMaître des clésBonjour
Il te faut emballer les calculs dans une condition qui vérifie si les champs à calculer ne sont pas vides. Exemple :
//calculs cotés caisson
if (this.getField(“A.3.”+i).value != “” &&this.getField(“A.2.”+i).value != “” && this.getField(“A.7.”+i).value != “”) {
this.getField(“Caiss.1.”+i).value =
this.getField(“A.3.”+i).value + “×”+
this.getField(“A.2.”+i).value + “×”+
this.getField(“A.7.”+i).value;
}18 août 2024 à 11:41 #74748bebarthMaître des clésbonjour,
Tu pourrais placer en script de format de tous les champs “Caiss” et “Tiroir” :
if (/(××)|(0×)|(NaN)/.test(event.value)) event.value="–";
Pour éviter de modifier tous ces champs manuellement, tu peux lancer ce script :
for (var i=0; i<this.numFields; i++) {
if (/^(Tiroir)|(Caiss)[.]\d[.]\d$/.test(this.getNthFieldName(i))) {
this.getField(this.getNthFieldName(i)).setAction("Format","if (/(××)|(0×)|(NaN)/.test(event.value)) event.value=\"–\";");
}
}
@+
😎- Cette réponse a été modifiée le il y a 4 mois par bebarth.
Attachments:
You must be logged in to view attached files.18 août 2024 à 12:03 #74749michel c.ParticipantMerci, je viens de tout modifier, ça fonctionne. J’ai du mettre un else à la suite de chaque condition pour cela.
J’ai une autre question mais qui est un peu plus ardue… :
j’aimerais que les résultats soient synthétisés dans un tableau (page 3) pour les dimensions des différentes pièces des tiroirs.
Les dimensions inscrites dans les champs Tiroir.a.b sont sous la forme : dimension1×dimension2×épaisseur×quantité
J’aimerais que dans mon tableau de synthèse, les différentes épaisseurs pour chacune des pièces des tiroirs apparaissent par ordre croissant dans les champs Synthese.0.n et que pour chaque épaisseur soient inscrits dimension1×dimension2×quantité.
Dans l’idéal j’aimerais que les dimensions 1 et 2 permutent si la dimension2 est supérieure à la dimension1.
L’autre difficulté est d’ajouter les différentes quantités si plusieurs dimensions sont identiques.
Je l’ai fait manuellement pour les pièces d’épaisseur 5mm
Pour expliquer un peu la raison de ce besoin c’est que je dois saisir les dimensions de chaque pièce dans un logiciel de calepinage pour optimiser mes découpes dans un panneau de dimension donné.
Ce logiciel exige que la 1ère dimension saisie soit la plus grande. De plus la saisie de plusieurs pièces identiques est possible car pour chaque pièce on peut saisir la quantité voulue.
Merci
- Cette réponse a été modifiée le il y a 4 mois par michel c..
Attachments:
You must be logged in to view attached files.18 août 2024 à 12:44 #74755MerlinMaître des clésJe ne sais pas ce qu’est un logiciel de calepinage mais j’image qu’en entrée il prend un fichier de type tableur (CSV ou Excel).
Donc cette manip me paraitrait plus simple à effectuer dans un tableur, après avoir exporté les données.
18 août 2024 à 13:38 #74756michel c.ParticipantUn logiciel de calepinage est un programme dans lequel tu indique les dimensions de tes panneaux de bois (des planches dont tu disposes) et dans lequel tu indiques ensuite les dimensions et quantité des pièces que tu désires.
Tu spécifie si le sens du fil (des fibres de bois) est vertical, horizontal ou sans importance, l’épaisseur de ta lame de scie (trait de coupe) ainsi que la marge voulue au bord du panneau (les bords ont parfois des défauts).
Le logiciel va ensuite arranger tes différentes pièces sur tes panneaux bruts afin de minimiser les pertes et pour avoir comme chutes des morceaux de dimensions intéressantes. (voir document joint)
Il y a effectivement un bouton pour importer les fiches de débit. Je vais me pencher dessus pour tester la forme voulue.
Par contre je ne sais pas du tout comment m’y prendre pour générer un csv à partir de mon formulaire
- Cette réponse a été modifiée le il y a 4 mois par michel c..
- Cette réponse a été modifiée le il y a 4 mois par michel c..
- Cette réponse a été modifiée le il y a 4 mois par michel c..
Attachments:
You must be logged in to view attached files.18 août 2024 à 14:52 #74761MerlinMaître des clés- Je n’imaginais même pas que de tels logiciels existaient, impressionnant !
- Avec Acrobat c’est facile mais avec PDF XChange je ne sais pas non plus…
Ce qui devrait fonctionner avec n’importe quel logiciel c’est d’aplatir la page et de copier-coller les données dans un tableur.
18 août 2024 à 16:51 #74762michel c.ParticipantJ’arrive à exporter avec PdfX-Change, j’ai préparé le tableau qu’il faut, il me reste le plus difficile : après avoir choisi l’essence dans la liste déroulante, j’aimerais qu’en cliquant sur générer le débit chaque pièce de cette essence puisse s’inscrire dans le tableau.
Dans la colonne 1 sont spécifiées des références a ; b ; c …..aa ; ab….
Dans la colonne 2 : Piece 1 ; Piece2….
Colonne 3 la quantité (pour les pièces dont les longueurs et largeurs sont identiques)
Colonne 4 : La plus grande des 2 premières données des champs Tiroir.a.b
Colonne 5 : La plus petite des 2 premières données des champs Tiroir.a.b
Colonne 6 : L’épaisseur : l’avant dernière donnée des champs Tiroir.a.b
Colonne 7 : L’essence sélectionnée
Colonne 8 : Le sens du fil (je l’inscrirais manuellement)
Je vais chercher mais je crains que cela dépasse un peu mes compétences…
Attachments:
You must be logged in to view attached files.18 août 2024 à 18:09 #74764MerlinMaître des clésEn tout cas ça dépasse les miennes.
Moi en matière d’essence j’utilise surtout du SP98 😉
18 août 2024 à 22:33 #74765bebarthMaître des clésbonsoir,
Je ne comprends pas bien ce qu’il faut indiquer dans les colonnes 1 et 2…
Ce qui va compliquer c’est qu’il n’y a pas de logique de numérotation pour les champs “essence” et “Ep” ! Il aurait été plus simple qu’il y en ait une en fonction de l’indice des champs…@+
😎19 août 2024 à 09:53 #74766michel c.ParticipantJe pensais à un script de ce type :
function debit() {
var ess = this.getField("ChoixEss").value;
var essenceFond = this.getField("essence.17").value;
var essenceCote = this.getField("essence.19").value;
var essenceAvant = this.getField("essence.20").value;
var essenceArrier = this.getField("essence.21").value;
var essenceFacades = this.getField("essence.24").value;
var numPiece = 0;
if (ChoixEss = essenceFond) {
if (this.getField("Tiroir.1.1").value != "") {
var D1=this.getField("Tiroir.1.1").value.split("×");
var P1 = (D1[0]);
var P2 = (D1[1]);
var P3 = (D1[2]);
var P4 = (D1[3]);
this.getField("Reference.1").value = "a";
this.getField("Designation.1").value = "Fond Caisson1";
this.getField("Nombre.1").value = P4;
this.getField("Longueur.1").value = P1;
this.getField("Largeur.1").value = P2;
this.getField("Epaisseur.1").value = P3;
this.getField("Essence.1").value = ChoixEss;
}
if (this.getField("Tiroir.1.2").value != "") {
var D1=this.getField("Tiroir.1.2").value.split("×");
var P1 = (D1[0]);
var P2 = (D1[1]);
var P3 = (D1[2]);
var P4 = (D1[3]);
this.getField("Reference.2").value = "b";
this.getField("Designation.2").value = "Fond Caisson2";
this.getField("Nombre.2").value = P4;
this.getField("Longueur.2").value = P1;
this.getField("Largeur.2").value = P2;
this.getField("Epaisseur.2").value = P3;
this.getField("Essence.2").value = ChoixEss;
}
}
}
Il faudrait juste que j’apporte une modif pour que dans le champ Longueur.a soit inscrite la plus grande valeur entre P1 et P2 et que dans le champ Largeur.a soit inscrite la plus petite valeur entre P1 et P2
Je l’ai testé pour les 2 premières colonnes de la 1ère ligne des tiroirs. Compléter ce script pour toutes les pièces des tiroirs risque d’être long.
Je vais avoir un script à rallonge et je pense que je vais rencontrer des problèmes si j’ai un nombre de caisson <10…
Qu’en pensez vous ?
Attachments:
You must be logged in to view attached files.19 août 2024 à 14:45 #74768michel c.ParticipantJe pense avoir réussi. Il y avait sûrement plus simple avec une autre numérotation des champs mais je ne voulais pas me refaire tous les calculs…
Le script est long mais ça a l’air de marcher.
Enfin ça fonctionne si il y a 10 caissons….Il va falloir que je trouve un truc s’il y a moins de 10 caissons…
- Cette réponse a été modifiée le il y a 4 mois par michel c..
- Cette réponse a été modifiée le il y a 4 mois par michel c..
Attachments:
You must be logged in to view attached files.20 août 2024 à 22:17 #74773bebarthMaître des clésbonjour,
Je pense avoir réussi. Il y avait sûrement plus simple avec une autre numérotation des champs mais je ne voulais pas me refaire tous les calculs… Le script est long mais ça a l’air de marcher. Enfin ça fonctionne si il y a 10 caissons….Il va falloir que je trouve un truc s’il y a moins de 10 caissons…
Si je peux me permettre, j’aurais quelques recommandations à te donner avant de te lancer dans des calculs, surtout lorsqu’il y a autant de champs… et malheureusement, lorsqu’on “commence” à programmer (durant quelques années), on doit souvent recommencer la nomination des champs, même si c’est un travail fastidieux…
Je croyais avoir compris que les quantités de formats identiques s’ajoutaient ! Ça n’a pas l’air d’être le cas dans ton tableau.
@+
😎21 août 2024 à 22:39 #74776michel c.ParticipantTu as parfaitement raison, pour les quantités identiques, ce n’est plus un problème depuis que Merlin m’a suggéré d’exporter les données, je n’ai pour le coup aucune saisie à faire.
Par contre il y a plus grave, je me suis un peu embrouillé je pense avec toutes ces données et je crois avoir relevé quelques erreurs. Je suis en train de réfléchir à une autre façon de nommer les champs.
22 août 2024 à 17:26 #74779MerlinMaître des clésPour info la version d’essai de Qoppa PDF Studio permet de renommer plusieurs champs de formulaire à la fois, des centaines si besoin.
Comme cette version d’essai ajoute des filigranes l’astuce c’est de faire ça dans une copie du document PDF et ensuite de ramener les champs renommés dans le document original par copier-coller en ouvrant les 2 PDF avec Acrobat, ou avec PDF Expert.
Je n’ai pas testé avec ce dernier mais il n’y a aucune raison que ça ne fonctionne pas.
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.