Donnez vie à vos documents numériques !
 

Soustraction horaire Acrobat Pro 9 (JavaScript)

abracadabraPDF Forums PDF – Général Soustraction horaire Acrobat Pro 9 (JavaScript)

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45498
    joy209
    Membre

    Bonjour à tous.

    Je recherche un script de calcul pour soustraire des heures afin de trouver la durée,
    Je suis tombé sur un script sur le forum (http://abracadabrapdf.net/forum/index.php/topic,1956.0.html),
    mais la console de script m’indique une erreur:

    this.getField(“TimeIn.8”) has no properties
    3:Field:Calculate
    this.getField(“TimeIn.8”) has no properties
    3:Field:Calculate

    Voici le formulaire, je voudrais pourvoir soustraire par exemple le champ 8 au champ 9 et avoir le résultat dans le champ 10

    6bce.png

    Un grand merci d’avance pour votre aide.
    Joffrey

Affichage de 14 réponses de 1 à 14 (sur un total de 14)
  • Auteur
    Réponses
  • #61409
    Merlin
    Maître des clés

    Bonjour et bienvenue.

    Il faut soit modifier les noms des champs de ton formulaire en accord avec ceux utilisés dans le script, soit faire l’inverse, c’est-à-dire modifier les noms des champs dans le script en accord avec ceux du formulaire.

    L’as-tu fait ?

    #61410
    joy209
    Membre

    Bonjour Merlin et merci de ta réponse.

    Pour le script j’ai simplement changé le numéro “0” par celui de la case en question.

    Voici l’exemple toujours en fonction du tableau que j’ai posté dans mon premier message:



    event.value = ”;                                                                                         

    var sStart = this.getField(‘TimeIn.0‘).value;                devient ->            var sStart = this.getField(‘TimeIn.8‘).value;

    var sEnd = this.getField(‘TimeOut.0‘).value;                devient ->              var sEnd = this.getField(‘TimeOut.9‘).value;



    Pourrais tu me montrer l’exemple des noms que je dois remplacer dans le script par rapport à mon tableau ci-dessous ?

    Merci 

    #61411
    Merlin
    Maître des clés

    Pourrais tu nous montrer un exemple, en PDF, de ce que tu as fait ?
    :joker:

    #61412
    joy209
    Membre

    Voici  :Smiley08:

    #61413
    bebarth
    Maître des clés

    bonjour,
    Il y a plusieurs choses à faire :

    1. remplacer “TimeIn.0” par “Texte1” et “TimeOut.0” par “Texte2”
    2. indiquer le format des champs en “Heure”
    3. ajouter le script de document “Time2Num”
    4. [/list]

      et ça devrait fonctionner !!!
      @+
      :bonjour:

    #61414
    Merlin
    Maître des clés

    J’ai choisi la stratégie inverse de Bebarth : j’ai modifié les noms des champs de texte dans le formulaire, pas dans le script.
    (En fait j’ai supprimé les champs existants et j’en ai créé de nouveaux, voir : http://abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/duplication-rapide-de-champs-de-formulaire/ ).

    J’ai placé les champs dans le premier bloc et le script dans les deux premiers champs.
    Ci-joint.

    #61415
    joy209
    Membre

    Bonjour,

    Merci pour votre aide ! les deux méthode marche à merveille et j’ai compris se qu”il n’allais pas dans ma façon de faire.
    Merci encore.  :bravo:

    Maintenant je vais essayer de trouver le script pour additionner tout les résultats.  :geek:

    #61416
    joy209
    Membre

    Bon je sais je suis définitivement nul, mais même pour additionner les heures je ne trouve pas le bon script. Je voudrais à présent additionner tout les résultats pour faire apparaitre le résultat total dans la case “Total journée” entouré en bas à gauche. Dans la plupart des cas les cases ne seront pas toutes complétés, cela pose t il un problème pour l’addition ? 

    J’ai une autre question, est il possible de noter une heure supérieure à 23:59 dans un champ en format HH:MM ?

    Pouvez vous m’aider ? et je vous apporte les petits pain demain matin  :jerisjaune:
    Merci

    #61417
    bebarth
    Maître des clés

    bonjour,
    Voici dans le principe une adaptation du script existant pour additionner les temps. Il y aurait certainement possibilité de “simplifier” les calculs dans ton formulaire mais je n’en ai pas trop (de temps) en ce moment…

    event.value = ”;

    // Récupération les temps
    var temps1 = this.getField(‘Texte3’).value;
    var temps2 = this.getField(‘Texte7’).value;
    var temps3 = this.getField(‘Texte86’).value;
    var temps4 = this.getField(‘Texte88’).value;
    // …

    // Conversion des temps de chaînes en nombres (secondes)
    var secondes1 = Time2Num(‘hh:mm’, temps1);
    var secondes2 = Time2Num(‘hh:mm’, temps2);
    var secondes3 = Time2Num(‘hh:mm’, temps3);
    var secondes4 = Time2Num(‘hh:mm’, temps4);
    // …

    // Somme
    var somme = secondes1+ secondes2+ secondes3+ secondes4; //…
    // Conversion arrondie en minutes
    var enminutes = Math.round(somme/60);

    // Heures
    var heures = Math.floor(enminutes/60);
    // Minutes
    var minutes = ((enminutes/60) – heures) * 60;

    // Format des Minutes avec zéro
    var min = util.printf(“%,302.0f”, minutes);

    // Construction de la chaîne d’affichage
    event.value = heures + ‘:’ + min;

    est il possible de noter une heure supérieure à 23:59 dans un champ en format HH:MM ?

    Il faut créer un masque arbitraire pour le format du champs.
    Avec HHHH tu peux aller jusqu’à 9999 heures… HH suffit peut-être !!!
    @+
    :bonjour:

    #61418
    joy209
    Membre

    Merci pour ta réponse tu es un champion  :extra:

    Ton script fonctionne parfaitement, en revanche le masque arbitraire ne fonctionne pas, mais ce n’est pas très grave, il est rare que je cumul plus de 24h d’affilée, si cela devait arriver une nouvelle fois, je ferais une saisie manuelle.

    J’ai remarqué que ce système d’automatisation fonctionne à merveille lorsque je démarre une journée apres 00h et que je la termine avant 24h, mais lorsque par exemple je travail de nuit je commence à 17h et termine à 3h l’automatisation ne sert plus a rien car la soustraction est impossible.

    Pour être plus précis:

    La journée le script calcul -> l’heure de départ du chantier (09:00)(08:00) l’heure d’arrivée sur le chantier, se qui nous donne 01:00

    La nuit le script calcul -> l’heure de départ du chantier (03:00) (17:00) l’heure d’arrivée sur le chantier, se qui nous donne (-14:00)  :Smiley01:

    Il existe peut être une solution mais je n’en suis pas certain ! au pire j’ai qu’a changer de métier …  :Smiley08:

    #61419
    Merlin
    Maître des clés

    C’est un formulaire par jour et par date, et puis c’est tout !  :Smiley08: :Smiley08:

    #61420
    joy209
    Membre

    Salut Merlin,

    J’ai trouvé la parade pour utiliser un formulaire sur deux jours  :Smiley08:
    Il suffit de tricher un peu, j’ai mis une capture d’écran, cela pourrait servir aux personnes qui rencontrent le même problème.

    #61421
    bebarth
    Maître des clés

    bonjour,
    Désolé, j’étais absent 2 jours…
    Il faudrait ajouter une ligne pour chaque champ de calcul d’heures chantier :
    ?…
    // compute difference in seconds
    var fDiff = fEnd – fStart;
    if (fDiff<0) fDiff=(24*3600)+(fEnd - fStart);
    // convert to rounded minutes
    fDiff = Math.round(fDiff / 60);

    Pour info, deux lignes sont répétées, on peut les supprimer une fois :
    // convert sEnd string to seconds
    var fEnd = Time2Num(‘hh:mm’, sEnd);

    @+
    :bonjour:

    #61422
    bebarth
    Maître des clés

    bonjour,
    J’ai oublié de joindre le fichier (seuls les 4 premiers champs ont été modifiés).

    … en revanche le masque arbitraire ne fonctionne pas…

    En fin de compte il n’y a pas besoin de masque puisque la valeur est renvoyée par le script, il suffit de mettre “Aucun format”.
    @+
    :bonjour:

Affichage de 14 réponses de 1 à 14 (sur un total de 14)
  • Vous devez être connecté pour répondre à ce sujet.