Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Oldschool am April 15, 2016, 13:01:57

Titel: Rechnen mit Uhrzeiten und Runden
Beitrag von: Oldschool am April 15, 2016, 13:01:57
Hallo Forum,

bin noch ein Frischling was Access betrifft und google konnte mir bisher dabei auch nicht wirklich weiterhelfen.

Ich habe viele viele Exceltabellen. Pro Mitarbeiter jeweils eine für jeden Monat und das immer wieder für jedes Jahr.
Diese müssen gepflegt und entsprechend angelegt werden. Es liegt also nichts näher das nach vielen Jahren über eine Datenbank zu machen. Leider stosse ich bei der Formel schon an meine Grenzen

Datum                     von           bis     Wegezeit          Überstd.min = 100
01.12.2016 / Do             6:00   14:00                     8,00
02.12.2016 / Fr             6:24   10:08                          3,75
03.12.2016 / Sa             22:36   2:10                     3,50
04.12.2016 / So          11:10   12:20                     1,25
05.12.2016 / Mo            18:15   20:30   2 Std          4,25
06.12.2016 / Di             19:30   21:58      1 Std          3,50

In der Spalte "Überstd.min = 100" befindet sich folgende Formel:

=STUNDE(WENN(C6=B6;0;WENN(C6>B6;C6-B6;(C6+24)-B6)))+D6+VRUNDEN((MINUTE(WENN(C6=B6;0;WENN(C6>B6;C6-B6;(C6+24)-B6))));15)/60

In Access habe ich ein Feld VUZ (von Uhrzeit) und BUZ (Bis Uhrzeit) sowie WZ (Wegezeit) definiert.

Was kann ich machen um auf das Ergebnis zu kommen wie das in Excel passiert, da ich das in Access genauso bräuchte.

Vielen Dank für die Hilfe
Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: Beaker s.a. am April 15, 2016, 17:59:29
Hallo Oldschool,
ZitatWas kann ich machen um auf das Ergebnis zu kommen wie das in Excel passiert, da ich das in Access genauso bräuchte.
Schreibe dir eine öffentliche Funktion in einem allgemeinen Modul,
die die Berechnung durchführt (Zellen = Tabellenfelder). Diese Funktion
kannst Du dann in Abfragen aufrufen, um das Ergebnis anzuzeigen.
gruss ekkehard
Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: Oldschool am April 18, 2016, 21:22:17
Danke für die schnelle Antwort, leider komme ich jetzt erst wieder zum Schreiben.

Vielleicht könntest du mir das etwas näher erläutern, denn von dem was du da geschrieben hast verstehe ich so gut wie nichts.

Access-Meister vs Newbie (das Newbie darf gerne wörtlich genommen werden)

Ich habe jetzt zwei Access-Kurse gemacht. Einsteiger und Aufbau. Wir haben sogar versucht dieses Problem im Aufbau-Kurs zu lösen aber auf die schnelle haben wir das auch nicht hinbekommen zumal Access scheinbar ohnehin Probleme mit dem Runden hat.

Das Ergebnis wird als Uhrzeit ausgewiesen. Um es in einen Dezimalwert zu bekommen habe ich das gefunden:

ZitatDie Idee mit dem Format "Standardzahl" ist goldrichtig: Ein Datum (samt Uhrzeit) wird intern als Anzahl von Tagen, die Uhrzeit hinterm Komma als Bruchteil eines Tages gespeichert. Eine Stunde ist also 1/24 Tag. Das Ergebnis der Summe im Bericht muß daher nur mit 24 malgenommen werden."

Habe ich aber auch noch nicht so umsetzen können.

Zur Zeit habe ich 2 Felder mit folgenden Formeln in der Tabelle:

Runden([bUZ]-[VUZ]+[WZ];2)

Das war der Versuch die Excel-Formel nachzubauen:

Stunde(Wenn([BUZ]=[VUZ];0;Wenn([BUZ]>[VUZ];[BUZ]-[VUZ];([BUZ]+24)-[VUZ])))+[WZ]+Runden((Minute(Wenn([BUZ]=[VUZ];0;Wenn([BUZ]>[VUZ];[BUZ]-[VUZ];([BUZ]+24)-[BUZ]))));15/60)
Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: DF6GL am April 19, 2016, 09:56:27
Hallo,

erstelle in einem Standard-Modul diese Funktion:

Public Function fktRound25Min(StartTime , EndTime , Optional DriveTime = 0#) As Double
Dim lngDifMin As Long
On Error GoTo MyErr

If EndTime < StartTime Then EndTime = EndTime + 1#

lngDifMin = DateDiff("n", StartTime, EndTime) / 60 * 100 + DriveTime * 100
fktRound25Min = (((lngDifMin + 12) \ 25) * 25) / 100

Exit_F:
Exit Function
MyErr:
'Errorhandler
Resume Exit_F
End Function


und verfahre damit, wie Ekkehard es beschrieben hat
Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: Beaker s.a. am April 19, 2016, 16:35:18
Moin,
@Franz
Kannst Du mir bitte diesen Terminus erklären: 1#
Danke.

@oldschool
Zitatund verfahre damit, wie Ekkehard es beschrieben hat
Heisst, dass Du im Abfrageentwurf in die Zeile Feld Folgendes einträgst:
Ergebnis:  fktRound25Min([VUZ],[BUZ],[WZ])
Die Felder müssen natürlich in der Abfrage-Quelle vorhanden sein.

gruss ekkehard
Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: DF6GL am April 19, 2016, 17:08:11
Hallo,

1#  ist eine (Literal-)Zahl vom Datentyp Double
Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: Beaker s.a. am April 19, 2016, 17:32:35
Hallo Franz,
O.K., danke.
Dient das # also nur dazu um explizit 1 als Double zu addieren?

gruss ekkehard
Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: DF6GL am April 19, 2016, 19:05:23
Hallo,

ja,

es ist lediglich meiner Gewohnheit geschuldet, die Datentypen möglichst genau selber zu beachten und sich nicht nur  auf die interne Typkonvertierung zu verlassen..   8)
Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: Beaker s.a. am April 19, 2016, 19:57:34
Verstanden, - danke.
Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: Oldschool am April 19, 2016, 22:46:28
Vielen, vielen Dank für die Antworten  :)

Ich habe den Code kopiert und ihn in ein öffentliches Modul gepackt. Das Modul habe ich gespeichert und finde es ab jetzt in meiner Tabelle unter "Module" unter dem Namen Uhrzeit_STW.

Ich habe eine Abfrage gemacht mit den Feldern: Datum, VUZ, BUZ und WZ. In das Feld daneben habe ich dann die Formel kopiert "Ergebnis: fktRound25Min([VUZ],[BUZ],[WZ])"
bekomme jetzt aber eine Meldung die da heißt: Der von Ihnen eingebene Ausdruck ist syntaktisch falsch.

Gedacht ist es so, das später verschiedene Mitarbeiter, die diese Daten erfassen sollen, ja nicht unbedingt eine Abfrage machen, um das Ergebnis ihrer Eingabe zu sehen. Ich habe mir das eher so vorgestellt, das die Mitarbeiter die Daten in einem Formular erfassen und der Wert dann in die Tabelle geschrieben wird, der Mitarbeiter vorab das Ergebnis im Formular sieht, also sobald er die Daten erfasst hat.

Aktuell habe ich es in zwei Tabellen normalisiert. Eine mit den Mitarbeitern und die Tabelle mit den Daten aus der Exceltabelle.

Habe mal ein Screenshot davon gemacht.

Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: DF6GL am April 20, 2016, 08:46:58
Hallo,

schreib so:

Ergebnis: fktRound25Min([VUZ];[BUZ];[WZ])


Die Funktion muss nicht in einer Abfrage verwendet werden.  Überall da, wo sie gebraucht wird, steht sie zur Verfügung. Demzufolge kann sie auch in einem Formular während der Eingabe eingesetzt sein.  Allerdings wäre vom Speichern des Funktionsergebnisses (aus Gründen von Aktualität und Integrität) in ein Tabellenfeld abzuraten. 
Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: Beaker s.a. am April 20, 2016, 11:40:28
Da hat wohl meine Shift-Taste geklemmt ;)
Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: DF6GL am April 20, 2016, 12:46:14
kann ja mal vorkommen...    ;D
Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: Oldschool am April 20, 2016, 21:38:06
Langsam wird es  :) Vielen Dank euch beiden.

Habe jetzt mal etwas rumgebastelt und das Ganze in ein Formular gepackt. Die Wegezeit scheint er beim Berechnen aber gar nicht zu beachten, wenn ich es richtig verstehe, muss die Wegezeit auch mindestens mit 00:00:00 befüllt werden das er überhaupt rechnet.

Es sei denn ich sehe das Ergebnis grundsätzlich erst dann wenn ich einen Datensatz zurück gehe. Kann man das so machen, das man die Wegezeit mit einer simplen 1 oder 2 erfasst und er das dann einfach mitrechnet?

Habe noch mal einen Screenshot gemacht.
Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: DF6GL am April 20, 2016, 22:04:48
Hallo,

behandle NULL-Werte mit der nz()-Funktion:

fktRound25Min([VUZ];[BUZ];nz([WZ],0))

Zitat
oder ändere die Funktion so ab:

.
.
.
On Error GoTo MyErr
DriveTime = Nz(DriveTime, 0)
If EndTime < StartTime Then EndTime = EndTime + 1#
.
.
Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: Oldschool am April 22, 2016, 13:31:35
Das Funktinieert alles soweit prima. Wie kriegen wir jetzt noch die Wegezeit in die Summe mit rein? In dem Code steht etwas dazu aber mit berechnet wird sie nicht.
Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: DF6GL am April 22, 2016, 14:47:19
Hallo,

die Wegezeit geht in die Berechnung mit ein, sofern sie im 3. Parameter (Datentyp Double, Einheit Stunden) übergeben wird.
Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: Oldschool am April 22, 2016, 22:34:24
Oh je...wenn ich sehe was ihr da schreibt habe ich das Gefühl ich habe in den zwei Kursen geschlafen.

Das heißt, bzw. ich verstehe es so, das ich in meiner Tabelle den Felddatentyp der Wegezeit auf Zahl stellen soll, die Feldgröße auf Double und auf Stunden kann ich irgendwie nichts einstellen.

Ich nehme an ich mache das gerade völlig falsch oder?
Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: DF6GL am April 23, 2016, 08:25:49
Hallo,

ich hatte anhand des Beispiels (1 Std, 2 Std)  angenommen, dass es sich bei der Wegezeit um Datentyp Long (bzw. Double) handelt und nicht um eine Uhrzeit....


Wie ist jetzt diese Wegezeit in der Tabelle hinterlegt?


Zitatauf Stunden kann ich irgendwie nichts einstellen.


Die Einheit ist ja nur ein Hinweis darauf, wie die Wegezeit zu interpretieren, also in der Tabelle gespeichert ist.  In Dezimal-Stunden  (1,75)    oder (Industrie) -Minuten (175).  (Eine Stunde  wird mit 100 "Industrie"-Minuten berechnet, nicht mit 60  "normalen" Minuten...)



 
Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: Oldschool am April 23, 2016, 13:20:28
Das Feld "WZ" hatte ich als Datum/Uhrzeit definiert, da ich es auf einem anderen Wege gar nicht hinbekommen habe.

Richtig ist jedoch, wie du es beschrieben hast, ein Wert von 1,00 Std. oder 2,00 Std. Was anderes ausser diesen beiden Werten darf da auch nicht drinstehen.
Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: DF6GL am April 23, 2016, 14:10:48
Hallo,

dann definiere dieses Feld (trotzdem) als Double....  Man kann ja nie wissen, ob nicht auch mal  anderthalb Stunden (1,5 h) relevant werden können...


Zitat
da ich es auf einem anderen Wege gar nicht hinbekommen habe.

Was ist der Grund hierfür?
Titel: Re: Rechnen mit Uhrzeiten und Runden
Beitrag von: Oldschool am April 23, 2016, 22:47:34
Der Grund dafür ist, das ich sonst immer alles in Excel gemacht habe und auch den Stundennachweis zunächst mittels VBA neu machen wollte. Durch meine zwei Kurse an der VHS habe ich erst mal erkannt, das es völlig sinnfrei ist sowas mit Excel zu machen.

Ok...der Plan war das alles in einer Excel-Tabelle zu machen statt in einer Tabelle für jeden Mitarbeiter für jeden Monat. Aber die Datenmenge bläht ja sowas total auf. Also habe ich mich dann für eine Datenbank entschieden, was ja auch der richtige Weg sein dürfte. Jedoch bestreite ich jetzt erst meine ersten Gehversuche damit. Das letzte mal als ich was mit einer Datenbank gemacht habe hieß das Teil Paradox und war auf Dos-Ebene...seitdem hat sich doch ein wenig geändert^^

Da es als Uhrzeit-Feld gerechnet hat, habe ich als Anfänger auch Uhrzeit eingestellt.

Habe rausgefunden warum es nicht gerechnet hat. Ich habe ja noch die Uhrzeit-Werte in meiner Tabelle, deswegen wurden auch ganz komische Dinge angezeigt. Nachdem ich jetzt 1 oder 2 eingesetzt habe, rechnet das ganze auch so wie es rechnen soll...super...Daumen hoch