Antworten auf deine Fragen:
Neues Thema erstellen

Zeiten addieren PDF Formular

schmalen

Noch nicht viel geschrieben

Hallo, ich habe mir ein PDF Formular erstellt um Stunden/Zeiterfassung zu registrieren.

Leider komme ich aber nicht mehr weiter, da mir auch ausgereifte Kenntnisse im Java Bereich fehlen.
Aber evtl. bekomme ich hier Unterstützung meines Projekts?

Ich habe hier eine Script und ein Demo PDF beigefügt.

var Minuten = [0,0,0] ;
for (i = 1; i <6; i++) {
if (this.getField("VonFeld" + i).value && this.getField("BisFeld" + i).value) {
Minuten = (1440 + inMinuten(this.getField("BisFeld" + i).value) - inMinuten(this.getField("VonFeld" + i).value)) % 1440 ;
this.getField("StundenFeld" + i).value = MinutenZuZeitstring(Minuten)
} else {
this.getField("StundenFeld" + i).value = ""
}
}
event.value = MinutenZuZeitstring(Minuten[1] + Minuten[2]) ;


function inMinuten(Zeitstring) {
var arr = (Zeitstring + ":0").split(":").map(Number) ;
return arr[0] * 60 + arr[1]
}

function MinutenZuZeitstring(Minuten) {
return Math.floor(Minuten / 60) + (100 + Minuten % 60).toString().replace(/^1/,":") ;
}

Es geht darum, das anstatt 5 nur2 Felder in der Gesamtsumme addiert werden, und ich weiss nicht wie und wo ich da noch genau was ändern soll obwohl die Schleifenroutine <6
eingetragen ist

Danke schon mal im Voraus für die weitere Hilfe

Gruss Andreas

DemoStundenNachweis.pdf
 

Design & Layout

schmalen

Noch nicht viel geschrieben

Ich vermute, ein paar schnelle Hinweise zu Deinem Projekt werden keine ausreichende Hilfe bieten können.
Das würde ich so gar nicht sagen, es würde mir schon reichen, wenn ich wüsste ob der Bereich " event.value = MinutenZuZeitstring(Minuten[1] + Minuten[2" der "addier bereich" für die Zellen sind. Es werden leider immer nur die ersten beiden Zellen addiert der Rest nicht:
 

helge07

Aktives Mitglied

Das nachfolgende Code im Berechnungsskript liefert das gewünschte Verhalten:
----------------------------------
var Minuten = [0,0,0] ;
this.getField("GesamtStunden").value ="0";
for (i = 1; i <=5; i++) {
if (this.getField("VonFeld" + i).value && this.getField("BisFeld" + i).value) {
Minuten = (1440 + inMinuten(this.getField("BisFeld" + i).value) - inMinuten(this.getField("VonFeld" + i).value)) % 1440 ;
this.getField("GesamtStunden").value = parseInt(this.getField("GesamtStunden").value) + parseInt(Minuten);
this.getField("StundenFeld" + i).value = MinutenZuZeitstring(Minuten);
} else {
this.getField("StundenFeld" + i).value = "";
}
}
this.getField("GesamtStunden").value = MinutenZuZeitstring(this.getField("GesamtStunden").value);

function inMinuten(Zeitstring) {
var arr = (Zeitstring + ":0").split(":").map(Number) ;
return arr[0] * 60 + arr[1]
}

function MinutenZuZeitstring(Minuten) {
return Math.floor(Minuten / 60) + (100 + Minuten % 60).toString().replace(/^1/,":") ;
}
-----------------------------------
 

schmalen

Noch nicht viel geschrieben

Das nachfolgende Code im Berechnungsskript liefert das gewünschte Verhalten:
Danke Danke Danke, so haut's perfekt hin und könnte mein PDF Formular mit deiner Hilfe. Aber einen kleinen Wermutstropfen habe ich noch, ich weis nicht ob du die PDF Datei dir angesehen hattest? Ich hatte dort noch zwei Felder einmal Zuschlag und Pause. Wenn ich in dem Feld Zuschlag ein Wert eingebe z.b. 1 Std. also im Format Minuten 00:60 müssten die mit dem Feld GesamtStunden addiert werden. So auch bei dem Feld Pause gebe ich dort einen Wert ein 00:30 oder 00:45 müsste dieser Wert abgezogen werden im Feld GesamtStunden. Evtl könntest du nochmal rüber schauen ? Und auf jeden Fall ein ganz grosse Dankeschön! Gruss Andreas
 

schmalen

Noch nicht viel geschrieben

Danke nochmals Helge07, das mit dem Script hat mir sehr geholfen. Leider war ich der Meinung das ich das Script/Block so für den nächsten Block 1 zu 1 übernehmen konnte. Das heisst, der 1. Block wäre z.B. für einen Wochentag z.B. Montag und ich hätte dieses Script kopieren können für den 2. Block also Dienstag usw.. Natürlich weis ich das ich die Felder jeweils dann anders benennen muss, da es sonst Komplikationen gibt, mit den Berechnungen.. habe ich soweit gemacht, leider ist das Ergebnis nicht so wie ich es bräuchte. Evtl. nur wenn du Lust und Laune hättest nochmals über das PDF Formular zu schauen welches ich angehängt habe? Und nochmals Danke im voraus. Gruss Andreas


DemoStundenNachweis_1.pdf
 

helge07

Aktives Mitglied

Danke nochmals Helge07, das mit dem Script hat mir sehr geholfen. Leider war ich der Meinung das ich das Script/Block so für den nächsten Block 1 zu 1 übernehmen konnte.......
Du hast richtig gedacht, nur bei der Umsetzung ist ein kleiner Fehler passiert:
Die neuen Feldnamen wurden statt von 1 bis 5 von 6 bis 10 nummeriert. Dann muss aber auch die Schleife darüber entsprechend abgeändert werden.

So funktionert es wie geplant:
// Schleife über die Formularzeilen
for (i = 6; i <=10; i++) {
...........................
}
 

schmalen

Noch nicht viel geschrieben

Sodele Dank Helge07 habe ich das Formular soweit fertiggestellt. Ein kleines Problem hatte ich noch, evtl. ein Denkfehler meinerseits.
Die Gesamtsummen aus den Wochentagen von Montag bis Sonntag sollten dann als GesamtSumme angezeigt werden. Hier habe ich ein Feld angelegt "GesamtSumme" Format keine... zur Berechnung habe ich diesen Wert eingetragen

var a = this.getField("GesamtStunden1").value;
var b = this.getField("GesamtStunden2").value;
var c = this.getField("GesamtStunden3").value;
var d = this.getField("GesamtStunden4").value;
var e = this.getField("GesamtStunden5").value;
var f = this.getField("GesamtStunden6").value;
var g = this.getField("GesamtStunden7").value;

event.value = a + b + c + d + e+ f + g;

zwar werden mir die Zeiten angezeigt allerdings nicht als Gesamtsumme sondern so 5:1515:005:001:155:003:001:30

Die Felder GesamtStunden1 - GesamtStunden7 haben auch das Format keine. Würde es aber auch gerne die Gesamtsumme mit : getrennt angezeigt haben.
 

helge07

Aktives Mitglied

..........................
event.value = a + b + c + d + e+ f + g;
zwar werden mir die Zeiten angezeigt allerdings nicht als Gesamtsumme sondern so 5:1515:005:001:155:003:001:30
Die Felder sind Text-Felder und daher wirkt der "+"-Operator als Konkatenation von Textstrings. Mit der im Berechnungsskript schon vorhandenen Funktion "inMinuten(Zeitstring)" kannst Du daraus aber Zahlen machen, damit rechnen und danach mit "MinutenZuZeitstring(Minuten)" daraus wieder einen Textstring machen.
 

schmalen

Noch nicht viel geschrieben

Habe jetzt das Script dahin verändert, so das mir die Gesamtsumme samt Formatierung angezeigt wird:danke: Helge07.

Das Script welches ich zusammengestellt habe sieht zwar etwas unorthodox aus aber es läuft......

var Minuten = [0,0,0] ;
this.getField("GesamtSumme").value ="0";

// Schleife über die Formularzeilen


// "GesamtStunden"-Minuten auf "GesamtSumme" aufaddieren
this.getField("GesamtSumme").value = this.getField("GesamtSumme").value + inMinuten(this.getField("GesamtStunden1").value) + inMinuten(this.getField("GesamtStunden2").value) + inMinuten(this.getField("GesamtStunden3").value) + inMinuten(this.getField("GesamtStunden4").value) + inMinuten(this.getField("GesamtStunden5").value) + inMinuten(this.getField("GesamtStunden6").value) + inMinuten(this.getField("GesamtStunden7").value)

this.getField("GesamtSumme").value = MinutenZuZeitstring(this.getField("GesamtSumme").value);
function inMinuten(Zeitstring) {
var arr = (Zeitstring + ":0").split(":").map(Number) ;
return arr[0] * 60 + arr[1]
}

function MinutenZuZeitstring(Minuten) {
return Math.floor(Minuten / 60) + (100 + Minuten % 60).toString().replace(/^1/,":") ;
}
 
Zuletzt bearbeitet:

cgarchitekt

Grafikpionier

aber ich möchte eigentlich überhaupt nicht so ein kompliziertes Formular. Es ist viel einfacher was ich gerne hätte und ich habe leider keine große Kenntnis von Java und müsste da wohl Wochen herumexperimentieren um das zu realisieren.
Also nur den "Ende" Wert vom "Start" Wert abziehen und wenn (was nicht zwingend wäre) noch eine zusätzliche Pause abziehen und dann als "Summe" die am besten auch gleich die digitale Zeit ist anzeigen. Und das natürlich für die gesamte Woche und ganz unten als Gesamtsumme für die Woche anzeigen. Das würde ich brauchen.

Beispiel.jpg
 
Zuletzt bearbeitet:

helge07

Aktives Mitglied

1. Java ist nicht JavaScript und das ist noch einmal etwas anderes als Acrobat JavaScript.
2. Unter den gegebenen Umständen würde ich vorschlagen, eine Lösung auf Excel-Basis zu verwenden, denn die gibt es gebrauchsfertg zum Download, z.B. hier https://www.clockodo.com/de/vorlagen/zeiterfassung-excel/ .
Am Ende des Erfassungszeitraums kann man die Excel-Tabelle ja dann immer noch als PDF archivieren.
 

cgarchitekt

Grafikpionier

1. Java ist nicht JavaScript und das ist noch einmal etwas anderes als Acrobat JavaScript.
2. Unter den gegebenen Umständen würde ich vorschlagen, eine Lösung auf Excel-Basis zu verwenden, denn die gibt es gebrauchsfertg zum Download, z.B. hier https://www.clockodo.com/de/vorlagen/zeiterfassung-excel/ .
Am Ende des Erfassungszeitraums kann man die Excel-Tabelle ja dann immer noch als PDF archivieren.
tja, das gibt es ja alles schon und das habe ich auch selbst gemacht. Brauche sowas nicht runter zu laden. Aber das Problem ist ganz einfach, dass nicht alle meiner 15 Mitarbeite Excel haben. Sie nutzen derzeit eben ein interaktives PDF welches ich ihnen zur Verfügung gestellt habe und tragen die Zeiten am PC ein. Aber es gibt halt Rechenfehler und ich muss jeden Monat alle 15 Zeiterfassungsblätter mit allen eingetragen Zeiten überprüfen und auch nachrechnen. Diese Arbeit wollte ich mir eben ersparen. Und es gibt welche, die tragen die Zeiten in Stunden und Minuten ein und andere rechnen sie schon direkt um. Das ist manchmal eben schon ganz schönes Verwirrspiel.
Aber ich sehe, dass hier nicht jeder geholfen bekommt und dann muss ich wohl oder über mal ein paar Wochen dahinein investieren. Ich werde es dann schon irgendwann hinbekommen. Aber vielleicht finde ich ja auch noch in einem anderen Forum jemanden der mir etwas Unterstützung gibt.
Hatte gehofft die gibt hier - leider ist das ein Fail.
Schönes WE
 

Horst F

Noch nicht viel geschrieben

Hallo Leute, ich habe im Adobe eine Forlage gemacht. Dort werden täglich meine Stunden zusammen gezählt. Pro Tag. Das habe ich hinbekommen. Jetzt will ich aber die Stunden und Minuten des Monats zusammenzählen. Dass ich eine Gesammt Zeit habe.
Bei mir heißen die Tage Zeit01 bis Zeit31
Das ist pro Tag
// Startzeit aus Feld "UhrzeitA01" (Format "Zeit HH:MM"):
UhrzeitA01=this.getField("UhrzeitA01").value;

// Endezeit aus Feld "UhrzeitE01" (Format "Zeit HH:MM"):
UhrzeitE01=this.getField("UhrzeitE01").value;

// Startzeit in Minuten seit 00:00h umrechnen:
var StartZeit = UhrzeitA01.substr(0,2) * 60 + UhrzeitA01.substr(3,2) * 1;

// Endezeit in Minuten seit 00:00h umrechnen:
var EndeZeit = UhrzeitE01.substr(0,2) * 60 + UhrzeitE01.substr(3,2) * 1;

// Zeitdifferenz in Minuten (auch tagesübergreifend):
var DiffZeit = ((EndeZeit + 24*60) - StartZeit) % (24*60);

// ganze Stunden der Dauer:
var DauerH = Math.floor(DiffZeit/60);

// Minutenanteil der Dauer:
var DauerM = DiffZeit - (DauerH * 60);

DauerH = "00" + DauerH;
DauerH = DauerH.substr(-2);

DauerM = "00" + DauerM;
DauerM = DauerM.substr(-2);

// Ergebnis im Format "hh:mm" zusammensetzen:
event.value = DauerH + ":" + DauerM;
 

cgarchitekt

Grafikpionier

Hallo Leute, ich habe im Adobe eine Forlage gemacht. Dort werden täglich meine Stunden zusammen gezählt. Pro Tag. Das habe ich hinbekommen. Jetzt will ich aber die Stunden und Minuten des Monats zusammenzählen. Dass ich eine Gesammt Zeit habe.
Bei mir heißen die Tage Zeit01 bis Zeit31
Das ist pro Tag
// Startzeit aus Feld "UhrzeitA01" (Format "Zeit HH:MM"):
UhrzeitA01=this.getField("UhrzeitA01").value;

// Endezeit aus Feld "UhrzeitE01" (Format "Zeit HH:MM"):
UhrzeitE01=this.getField("UhrzeitE01").value;

// Startzeit in Minuten seit 00:00h umrechnen:
var StartZeit = UhrzeitA01.substr(0,2) * 60 + UhrzeitA01.substr(3,2) * 1;

// Endezeit in Minuten seit 00:00h umrechnen:
var EndeZeit = UhrzeitE01.substr(0,2) * 60 + UhrzeitE01.substr(3,2) * 1;

// Zeitdifferenz in Minuten (auch tagesübergreifend):
var DiffZeit = ((EndeZeit + 24*60) - StartZeit) % (24*60);

// ganze Stunden der Dauer:
var DauerH = Math.floor(DiffZeit/60);

// Minutenanteil der Dauer:
var DauerM = DiffZeit - (DauerH * 60);

DauerH = "00" + DauerH;
DauerH = DauerH.substr(-2);

DauerM = "00" + DauerM;
DauerM = DauerM.substr(-2);

// Ergebnis im Format "hh:mm" zusammensetzen:
event.value = DauerH + ":" + DauerM;
lade mal die Vorlage mit hoch - oder einen Link dazu wo man sie runter laden kann.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.633
Beiträge
1.538.446
Mitglieder
67.555
Neuestes Mitglied
scheflo
Oben