Zeittabelle II

Die Möglichkeiten und Tücken von Formularen
Antworten
Benutzeravatar
Matze
Beiträge: 10
Registriert: 03.10.2014, 16:25

Zeittabelle II

Beitrag von Matze » 19.11.2014, 15:11

Hallo an alle Acronauten,

Ich beschäftige mich mit dynamischen Formularen erst seit kurzem.

Dieses Forum ist mir bislang eine sehr große Hilfe bei meinem Lernprozess gewesen.

!! Vielen Dank, dass es euch gibt !!!

Momentan stehe ich jedoch vor einem Problem und komme nicht weiter. Bevor ich weitere kostbare Zeit vergeude möchte ich euch um eure Hilfe bitten.

Ich versuche das Skript einer Vorlage von "Walde" zur Berechnung einer Zeitdifferenz an meine Bedürfnisse anzufassen.

Es will jedoch nicht funktionieren. Irgendwo ist der Wurm drin.

Vielleicht könnt Ihr mir helfen?

Die Berechnung der Arbeitszeit (Worktime=Departure-Arrival) funktioniert.

Die Berechnung der Reisezeit (Traveltime=Arrival-Start+End-Departure) läuft nicht.

Meine Zweite Frage ist: kann man die Berechnung automatisch ausführen lassen ohne die Buttons?

Würde mich über eure Hilfe freuen.


Hier das Skript:

Code: Alles auswählen

if(StartT.rawValue != null & ArrivalT.rawValue != null & DepartureT.rawValue != null & ArrivalT.rawValue != null){
var sTimeStart = StartT.formattedValue.split(":");
var sTimeEnde = EndT.formattedValue.split(":");
var sTimeArrival = ArrivalT.formattedValue.split(":");
var sTimeDeparture = DepartureT.formattedValue.split(":");
var nTimeStart = (sTimeStart[0] * 3600) + (sTimeStart[1] * 60);
var nTimeEnde = (sTimeEnde[0] * 3600) + (sTimeEnde[1] * 60);
var nTimeDeparture = (sTimeDeparture[0] * 3600) + (sTimeDeparture[1] * 60);
var nTimeArrival = (sTimeArrival[0] * 3600) + (sTimeArrival[1] * 60);	var nPausen = 0;
var nTimeDifferenz = 0;

if(Break.rawValue != null){
nPausen = Break.rawValue * 60;
}

if(nTimeEnde > nTimeStart){
if((nTimeEnde - nTimeStart - nPausen) > 0 ){
nTimeDifferenz = nTimeArrival - nTimeStart + nTimeEnd - nTimeDeparture;
var nStd = Math.floor(nTimeDifferenz / 3600);
var nStdRest = nTimeDifferenz - (nStd * 3600);
var nMinuten = Math.floor(nStdRest / 60);
var nMinutenHunderter = Math.round(nMinuten / 60 * 100);
var nViertelTeiler = Math.floor(nStdRest / 60 / 15);
var nViertel = nViertelTeiler * 25;

TravelT.rawValue = nStd + "," + nMinutenHunderter + " h";
}
else if((nTimeEnde - nTimeStart - nPausen) == 0 ){
app.alert("Abzüglich Ihrer Pause beträgt Ihre Arbeitsleistung 0 Minuten!");
}
else{
app.alert("Sie haben länger pausiert als gearbeitet!");
}
}
else{
app.alert("Ende muss grösser sein als Anfang!");
}
}
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

simse179
Beiträge: 45
Registriert: 30.07.2014, 11:29

Zeittabelle II

Beitrag von simse179 » 26.11.2014, 15:11

Hallo Matze,

Du hast nen Rechtschreibfehler in folgender Zeile:

Code: Alles auswählen

nTimeDifferenz = nTimeArrival - nTimeStart + nTimeEnd - nTimeDeparture;
-> nTimeEnd ist nicht bekannt, Du hattest es nTimeEnde genannt ;)

Bei solchen Problemen hilft es immer, die Fehlerkonsole anzuschalten, dann sagt er einem, wenn er ein Problem mit einer Variablen hat.
Erklärung siehe hier: http://help.adobe.com/en_US/livecycle/10.0/DesignerScriptingBasics/WS92d06802c76abadb-a35fd97129f6917690-7ff9.html

Automatisch berechnen lassen:
Zum einen könnte man die Funktion bei jedem dafür auszufüllenden Feld aufs exit-Event legen, was aber eine sehr dreckige Lösung ist, die nicht leicht zu warten ist (dann musst Du Änderungen ja immer an allen Stellen machen).
Daher würde ich vorschlagen, ein Skriptobjekt einzufügen (Rechtsklick auf Seite in der Hierarchie-Palette, dann "Skriptobjekt einzufügen"), dort eine Funktion mit Deinem bisherigen Code zu schreiben, und diese Funktion aus jedem exit-Event heraus aufzurufen.

LG, Simone

Benutzeravatar
Matze
Beiträge: 10
Registriert: 03.10.2014, 16:25

Zeittabelle II

Beitrag von Matze » 08.12.2014, 11:43

Tja, manchmal kommt es auf die kleinen Dinge an.

Danke dir, du hast mir geholfen.
Ich dachte schon mir antwortet keiner.


Es funktioniert alles.

Antworten