Autor Thema: Zeitberechnung mit Feldern  (Gelesen 7253 mal)

Offline Akunin

  • Junior Mitglied
  • **
  • Beiträge: 82
Zeitberechnung mit Feldern
« am: 16.12.08 - 09:05:05 »
guten Morgen, ich hab da mal ne kleine Frage, hierbei gehts um eine Zeitberechnung.

Hintergrund der ganzen Sache ist ein mobiles Auftragsbuch, wo jeder seine pausen Zeiten usw. eintragen kann.

So, zum Schluss (abschluss des Auftrages soll dann die Zeit berechnet werden - die Pausenzeiten)

Nun kommt mein kleines Problem, die Gesamtzeit zuberechnen stellt kein Problem da, bei den Pausenzeiten wird das schon schwieriger, weil man ja mehrere Pausen machen könnte.

Nun hab ich mir überlegt das ich die Pausenzeit über Feld berechne. Allerdings brauch ich dafür mehr als nur ein Feld,

also im ersten Feld schau ich nach den Zeiten um so die Pausenzeit zu ermitteln (funktioniert)
im zweiten Feld will jetzt die Pausenzeiten addieren, dazu benutz ich folgende Formel

StopZ := @GetField("Rechnung1");                      'Hier wird die Zeit der Pause ausgelesen
@If(StopZ > 0; @Do(                                            'Wenn Pause war dann soll...
ErgZ := @GetField("Ergebnis");                            'Hier will ich die bisherige Gesamtzeit auslesen
EndZ := ErgZ + StopZ;                                         'nun addiere ich die neue + alte Zeit
@SetField("Ergebnis";EndZ)                                 'Hier soll die Gesamtzeit wieder gespeichert werden
);0)                                                                       'Wenn keine Pause war, bleibt das Feld 0

das Problem an der Sache ist aber nun, dass mein Feld "Ergebnis" nicht gesetzt wird.

Falls jemand ne Idee hat warum das so ist, wär ich für nenn Tipp dankbar.


Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Zeitberechnung mit Feldern
« Antwort #1 am: 16.12.08 - 09:22:51 »
Es gibt meiner Meinung nach einfachere Möglichkeiten, das was du erreichen willst zu tun, wenn du deinen Blickwinkel änderst.

Variante 1: Pausenzeiten werden nicht erfasst. Du erfasst deine Arbeitszeiten. Alles andere sind Pausen. Dann hast du zwei Multivalue Felder StartZeit und Endezeit und kannst einfach über die Differenz dieser beiden Felder deine Arbeitzeit ermitteln.

Summe(Endezeit - Startzeit)

Vorteil: Die einfachste Variante
Nachteil: klassische Personaler werden aufschreien

Variante 2: Du erfasst Start und Endezeit und deine Pausen mit Start und Ende in zwei Multivalue Feldern. Damit bist du dann Zeiterfassungs "konformer" in der herkömmlichen Denkweise. Kannst aber ebenfalls relativ einfach die Arbeitszeit in Minuten ermitteln indem du die Startzeit von der Endezeit abziehst und von der da ermittelten Differenz die Summe deiner Pausenzeiten abziehst.

((Endezeit - Startzeit)- Summe(Pauseende - Pausestart))

Vorteil: herkömmliche Art der Erfassung wie bei Zeiterfassungssystemen üblich.
Nachteil: etwas komplexer zu realisieren, da bei der Erfassung speziell der Pausen auch Prüfungen durchgeführt werden sollten, ob die Pausen noch im Bereich der Start und Endzeiten liegen.

Unter der Voraussetzung das das alles vom Typ Date/Time ist geht das ganz einfach.

Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Zeitberechnung mit Feldern
« Antwort #2 am: 16.12.08 - 09:37:55 »
Und hier ein Beispiel für die einfache Variante:
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Akunin

  • Junior Mitglied
  • **
  • Beiträge: 82
Re: Zeitberechnung mit Feldern
« Antwort #3 am: 16.12.08 - 09:38:26 »
jo, so wie du es in Variante 2 beschrieben hast soll es auch ablaufen.

Aber an der Bildung der Summe der Pausenzeit scheiterts gerade bei mir, ich hab zwar die Zeit pro Pause ermittelt, aber wenn ich das Ergebniss zwischenspeichern will spielt das ganze nicht mehr mit.

Ich will ja quasi, mit der oben geschriebenen Formel ein Zwischenergebniss in einem Feld speichern, wenn der Auftrag nun abgeschlossen ist, soll es, wie du schon geschrieben hast wie folgt berechnet werden
((Endezeit - Startzeit)- Summe(Pauseende - Pausestart))

nur führt er das oben genannte SetField nur nicht aus

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Zeitberechnung mit Feldern
« Antwort #4 am: 16.12.08 - 09:51:28 »
Schau dir deine Formel an. Die ist für das was du erreichen willst viel zu kompliziert.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Akunin

  • Junior Mitglied
  • **
  • Beiträge: 82
Re: Zeitberechnung mit Feldern
« Antwort #5 am: 16.12.08 - 09:58:20 »
jo, genau so hab ich mir das vorgestellt :)

danke dir für den Tip !

aber kleine Frage hab ich noch, ich habe eben mal probiert das nach zumachen, also ich hab ähnlich wie du 2 Datums-Felder mit Mehrfachwerten erstellt, wenn ich nun über die Zeit ermitteln funktion geh, berechnet er bei mir nur oberen beiden Werte, in den Feldern, miteinander, kannst du mir sagen warum ?

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Zeitberechnung mit Feldern
« Antwort #6 am: 16.12.08 - 10:36:03 »
Ohne deinen Code und die Felder die du da eingebaut hast zu sehen? Nein ich kann dir nicht sagen warum das bei dir nicht klappt.

Grundsätzlich hat die Formelsprache eine angenehme Eigenschaft, von der man aber wissen muss. Sie führt jede Operation auf alle Elemente von Multivalue Feldern aus. Das kann man wunderbar benutzen um zum Beispiel mit
FIELD Ergebnis := (@sum(Pausenendezeiten - Pausenanfangzeiten)/3600)
folgendes zu erreichen, wenn in jedem Feld drei Elemente vorhanden sind:
Ergebnis = ( (Pausenendezeiten[1] - Pausenanfangszeiten[1]) +
(Pausenendezeiten[2] - Pausenanfangszeiten[2]) +
(Pausenendezeiten[3] - Pausenanfangszeiten[3]) ) / 3600

Alles in der Formelsprache. Wenn man das produktiv nutzen will muss man noch einiges im Umfeld aufbauen. So muss zum Beispiel für jedes Anfangselement auch ein Endelement vorhanden sein. Außerdem darf die Berechnung nicht erfolgen wenn kein Element vorhanden ist.

Das hier wäre zum Beispiel eine Möglichkeit den Anforderungen gerecht zu werden:
Code
FIELD fldGesamtzeit := (fldDatEndzeit - fldDatStartzeit)/(3600);
FIELD fldPausenzeit := @If((fldDatPauseStartzeit != "" & fldDatPauseEndzeit != "") & (@Elements(fldDatPauseStartzeit) = @Elements(fldDatPauseEndzeitzeit)) ;@Sum(fldDatPauseEndzeit - fldDatPauseStartzeit)/(3600);0);
FIELD fldZeitdifferenz := @If((fldDatPauseStartzeit != "" & fldDatPauseEndzeit != "") & (@Elements(fldDatPauseStartzeit) = @Elements(fldDatPauseEndzeitzeit)) ;
((fldDatEndzeit - fldDatStartzeit) - @Sum(fldDatPauseEndzeit - fldDatPauseStartzeit))/(3600);
(fldDatEndzeit - fldDatStartzeit)/(3600));
@True
Bezogen auf das letzte Beispiel wäre  das die Formel die hinter der Aktion Zeit ermitteln stehen müsste.
« Letzte Änderung: 16.12.08 - 11:16:06 von Thomas Schulte »
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Akunin

  • Junior Mitglied
  • **
  • Beiträge: 82
Re: Zeitberechnung mit Feldern
« Antwort #7 am: 16.12.08 - 11:12:24 »
alles klar, danke dir vielmals,

aber ich hab da mal noch ne andere Frage,

und zwar lese ich die Zeiten über einen Agent welche in LS geschrieben ist aus, aber gibt es einen Befehl um Datumswerte in ein
Multivalue Datum/Zeit Feld zuschreiben, ich hab mir zwar die ganzen Append Befehle in der Hilfe angeschaut aber keinen für Date Values gefunden.
Gibs dafür überhaupt nenn Befehl?

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Zeitberechnung mit Feldern
« Antwort #8 am: 16.12.08 - 11:18:18 »
dim Datearray() as Notesdatetime

Redim Preserve Datearray(Counter) as Notesdatetime
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Akunin

  • Junior Mitglied
  • **
  • Beiträge: 82
Re: Zeitberechnung mit Feldern
« Antwort #9 am: 16.12.08 - 11:40:55 »
doch noch nenn kleines Problem, ich habe mal die von dir gepostet Formel ausprobiert

FIELD Ergebnis := (@sum(Pausenendezeiten - Pausenanfangzeiten)/3600)

aber selbst bei der berechnet er bei mir nur die ersten Werte der beiden Felder mit einander :(

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Zeitberechnung mit Feldern
« Antwort #10 am: 16.12.08 - 11:58:07 »
Sind das Mehrfachfelder und ist die entsprechende Option in den Feldeigenschaften gesetzt?

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Akunin

  • Junior Mitglied
  • **
  • Beiträge: 82
Re: Zeitberechnung mit Feldern
« Antwort #11 am: 16.12.08 - 12:04:23 »
jo, siehe Screenshot

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Zeitberechnung mit Feldern
« Antwort #12 am: 16.12.08 - 12:23:55 »
und die Werte sind auch als Mehrfachwerte eingegeben worden?

Wenn die entweder programmatisch eingelesen werden, oder bei der Eingabe von Hand das Trennzeichen nicht korrekt drin steht, ist es trotzdem ein 'einfachwert'

Was sagen die Dokumenteigenschaften zu den Eigenschaften der eingetragenen Werte?

grüsse

Dau-in
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline Akunin

  • Junior Mitglied
  • **
  • Beiträge: 82
Re: Zeitberechnung mit Feldern
« Antwort #13 am: 16.12.08 - 12:33:58 »
ahh, du hattest Recht :)

es lag wirklich am Trennzeichen, ich habe wohl vergessen gehabt das Trennzeichen auf "Neue Zeile" zu stellen und hab nur bei Mehrfachwerte anzeigen auf "Neue Zeile" gestellt :)

danke für den Hinweis

Offline Akunin

  • Junior Mitglied
  • **
  • Beiträge: 82
Re: Zeitberechnung mit Feldern
« Antwort #14 am: 16.12.08 - 13:13:24 »
um nochmal zu der Sache mit dem Agent , der die Datevalues auslesen soll, zukommen.

Einfacher als mit
dim Datearray() as Notesdatetime

Redim Preserve Datearray(Counter) as Notesdatetime

gehts nicht? dann hab ich dazu mal ne Frage

Code
dim Datearray() as Notesdatetime
dim value as Variant
dim i as Integer

value = doc.getItemValue("Pausenanfang")
i = Ubound(value) + 1
Datearray(i) = CDat(Datum)                                         *Fehler*
Redim Preserve Datearray(i) as Notesdatetime  

funktioniert das so oder muss ich da noch irgendwas beachten, kann es gerade nicht testen, da ich zur Zeit an einem anderen PC sitz und der kein Notes hat

EDIT: ich bekomm in der Zeile oben immer den Fehler, Type missmatch, kann mir jemand sage warum?

EDIT: problem gelöst
« Letzte Änderung: 16.12.08 - 14:31:09 von Akunin »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz