Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

Arbeitszeit

Bloody Beginner (Anonym) / 14 Antworten / Baumansicht Nickles

Hallo, ich versuche gerade mir ein Arbeitszeitberechnungsprogramm zusammenzuzimmern.Dabei hab ich folgendes Problem: Wie schaffe ich es, daß VB mir "negative" Stunden berechnet? Z.B. Kommen um 7:00, Gehen um 13:00 wäre -1:00 bei Sieben Stunden Sollarbeitszeit.

Für Hilfestellungen wäre ich überaus dankbar, ich weiss keinen Rat.

bei Antwort benachrichtigen
T-Rex Bloody Beginner (Anonym) „Arbeitszeit“
Optionen

Hi,

das ist very simple:

Arbeitszeit = (Gehen - Kommen) - SollArbeitszeit

entspricht hier

Arbeitszeit = (13:00 - 7:00) - 7

schon kommst Du auf eine miese Stunde.

Willst Du die Pausen auch noch mitberechnen, mußt Du diese zur
SollArbeitszeit addieren:

Arbeitszeit = (Gehen - Kommen) - (SollArbeitszeit + GesamtePausenZeit)

Viel Spaß noch

 GrüßeT-Rex 
bei Antwort benachrichtigen
Bloody Beginner (Anonym) Nachtrag zu: „Arbeitszeit“
Optionen

Danke T-Rex, aber das funktioniert nur bei Kommen

bei Antwort benachrichtigen
(Anonym) Bloody Beginner (Anonym) „Arbeitszeit“
Optionen

Hi, schicke mir doch einfach Deine E-Mail-Addy.
Ich habe bereits so ein fertiges Programm.
Greetings
Intruder
cometohell@gmx.de

bei Antwort benachrichtigen
T-Rex Bloody Beginner (Anonym) „Arbeitszeit“
Optionen

Hi, Bloody Beginner

Wie, das funzt nur bei Kommen?

Wenn Du eine Tabelle hast, wo die Zeiten gespeichert werden, mußt Du die Kommen-Zeit auch bei Gehen eintragen.
Dann hast Du, sobald Du gekommen bist, ein Minus in Höhe Deiner Soll-Arbeitszeit. Kommst Du um 7:00, dann hast Du eben (7:00 - 7:00) - (7 + Pause) = -(7 + Pause).

Wenn Du dann gehst, trägst Du diese Zeit bei Gehen ein. Gehst Du um 13:00, steht in der Tabelle (oder wo auch immer das eingetragen wird)


Kommen Gehen Soll Ist
7:00 13:00 7:00 -1

Was funzt denn dann nur bei Kommen?

T-Rex

 GrüßeT-Rex 
bei Antwort benachrichtigen
Bloody Beginner (Anonym) Nachtrag zu: „Arbeitszeit“
Optionen

... da hat sich wohl der Fehlerteufel eingeschlichen, und mein Posting
verstümmelt!
Also nochmal, dein Vorschlag funktioniert nur bei Kommen

bei Antwort benachrichtigen
T-Rex Bloody Beginner (Anonym) „Arbeitszeit“
Optionen

Hi,

Dann prüfe zuerst, ob die Gehen-Zeit früher ist als die Kommen-Zeit. Ist dies der Fall,
dann ist

Arbeitszeit =((24 - Kommen) +(Gehen - 0)) - (SollArbeitsZeit + PausenZeit)

Schon stimmt die Zeit wieder.

Greets

T-Rex

 GrüßeT-Rex 
bei Antwort benachrichtigen
Bloody Beginner (Anonym) Nachtrag zu: „Arbeitszeit“
Optionen

Thanks nochmal, jetzt hats funktioniert!!
Hast Du noch 'nen Tip das ganze auch mit Minutenberechnung (im "Date" Format") hinzubekommen?

bei Antwort benachrichtigen
T-Rex Bloody Beginner (Anonym) „Thanks nochmal, jetzt hats funktioniert!!Hast Du noch nen Tip das ganze auch mit...“
Optionen

Moin,

im Date-Format ist das so'n Problem mit negativen Zeiten.

Deshalb mal folgenden Code:

Private Function LeadingZero(lngZahl As Long) As String
  Dim Result As String
  If (Abs(lngZahl) > 10) Then
    Result = Abs(lngZahl) ' Zahl ist zweistellig
  Else
    Result = "0" & Abs(lngZahl) ' Zahl ist einstellig
  End If
  If (lngZahl     Result = "-" & Result ' Zahl ist negativ
  End If
  LeadingZero = Result
End Function

Private Function Arbeitszeit(ByVal datKommen As Date, ByVal datGehen As Date) As String
  Dim lngKommen As Long ' Sekunden von Mitternacht bis zum Kommen
  Dim lngGehen As Long ' Sekunden von Mitternacht bis zum Gehen
  Dim lngSollZeit As Long ' Sekunden, die gearbeitet werden müssen
  Dim lngPausen As Long ' Sekunden, die die Länge der Pausen entsprechen
  Dim lngGearbeitet As Long ' Sekunden vom Kommen bis Gehen mit Pausen
  Dim lngMitternach As Long ' Sekunden um 24Uhr
  Dim strResult As String ' Gearbeitete Zeit

  ' Die Zeiten in Sekunden umrechnen
  lngKommen = Second(datKommen) + Minute(datKommen) * 60 + Hour(datKommen) * 3600
  lngGehen = Second(datGehen) + Minute(datGehen) * 60 + Hour(datGehen) * 3600

  ' Sollzeit beträt sieben Stunden, also 07:00,00
  lngSollZeit = 7 * 3600 ' Achtung!! bei mehr als neun Stunden muß hier von Hand
  ' ausgerechnet werden! (Scheiß MicroSoft und VB)
  ' Pausenzeit beträgt 45 Minuten also 00:45,00
  lngPausen = 45 * 60
  ' Mitternach berechnen
  lngMitternach = 86400

  ' Die Brutto-Zeit berechnen
  If (lngKommen > lngGehen) Then
    ' Über Mitternacht hinaus
    lngGearbeitet = ((lngMitternach - lngKommen) + lngGehen)
  Else
    ' Am selben Tag
    lngGearbeitet = (lngGehen - lngKommen)
  End If

  ' Pausen und SollZeit abziehen
  lngGearbeitet = lngGearbeitet - (lngSollZeit + lngPausen)

  ' Zeit in einen String umwandeln
  strResult = LeadingZero(lngGearbeitet \ 3600) & ":" & LeadingZero(Abs(lngGearbeitet Mod 3600) \ 60) & ":" & LeadingZero(Abs((lngGearbeitet Mod 3600) Mod 60))

  ' Zeit zurückgeben
  Arbeitszeit = strResult
End Function

Hoffe, Dir damit geholfen zu haben.

 GrüßeT-Rex 
bei Antwort benachrichtigen
Bloody Beginner (Anonym) Nachtrag zu: „Arbeitszeit“
Optionen

Vielen Dank für Deine Zeit und Hilfe, ich werde Deinen Vorschlag gleich ausprobieren

CU

bei Antwort benachrichtigen
Bloody Beginner (Anonym) Nachtrag zu: „Arbeitszeit“
Optionen

Servus,wie findest Du meins? (Is noch nicht schön, aber funzt jetzt glaub ich)






Private Sub CommandButton1_Click()

Dim kommen As Date, gehen As Date, pause As Date, wegezeit As Date, sollarbzeit As Date

Dim anw2 As Date, effektivanw As Date, Zeitgutschrift As Date

Dim anw1 As Double



kommen = InputBox("Bitte Kommenzeit eingeben:" & vbCrLf _

& "Form: hh:mm(:ss)", "Kommen")

gehen = InputBox("Bitte Gehenzeit eingeben:" & vbCrLf _

& "Form: hh:mm(:ss)", "Gehen")

pause = InputBox("Bitte Pausenzeit eingeben:" & vbCrLf _

& "Form: hh:mm(:ss)", "Pause")

wegezeit = InputBox("Bitte Wegezeit eingeben:" & vbCrLf _

& "Form: hh:mm(:ss)", "Wegezeit")

sollarbzeit = InputBox("Bitte Sollarbeitszeit eingeben:" & vbCrLf _

& "Form: hh:mm(:ss)", "Soll")



If kommen > gehen Then

anw1 = gehen - kommen

anw2 = anw1 + 1

MsgBox "Anwesenheit: " & anw2 & " Stunden"

Else

anw2 = gehen - kommen

MsgBox "Anwesenheit: " & anw2 & " Stunden"

End If



effektivanw = anw2 - pause - wegezeit

MsgBox "Anwesenheit(effektiv): " & effektivanw & " Stunden"



If sollarbzeit > effektivanw Then

Zeitgutschrift = effektivanw - sollarbzeit

MsgBox "Ihre Zeitgutschrift: -" & Zeitgutschrift & " Stunden"

Else

Zeitgutschrift = effektivanw - sollarbzeit

MsgBox "Ihre Zeitgutschrift: " & Zeitgutschrift & " Stunden"

End If





End Sub

bei Antwort benachrichtigen
T-Rex Bloody Beginner (Anonym) „Servus,wie findest Du meins? Is noch nicht schön, aber funzt jetzt glaub ich...“
Optionen

Moin,

sieht ganz gut aus.

Wolltest Du die Zeit einfach nur berechnen und dann auf einem Zettel aufschreiben? Oder willst Du das ganze in eine Datenbank oder INI-Datei schreiben?

 GrüßeT-Rex 
bei Antwort benachrichtigen
Bloody Beginner (Anonym) Nachtrag zu: „Arbeitszeit“
Optionen

Servus,
ich möchte Die Zeit(en) eigentlich auch in eine DB schreiben, z.B. zum Protokollieren und Berechnen von verschiedenen Projekten und deren Startzeit, Endezeit und Zeitverbrauch im Laufe des Tages, -der Woche...

bei Antwort benachrichtigen
T-Rex Bloody Beginner (Anonym) „Servus,ich möchte Die Zeit en eigentlich auch in eine DB schreiben, z.B. zum...“
Optionen

Moin,

Dann solltest Du am besten die Minuten oder Sekunden in der DB speichern. Die können dann auch negativ sein.
Außerdem läßt es sich dann viel besser rechnen.

Für die Ausgabe mußt Du das ganze dann allerdings in ein lesbares Format (sprich: hh:mm(:ss)) bringen.

Bei Problemen einfach melden.

Viel Spaß

 GrüßeT-Rex 
bei Antwort benachrichtigen
Bloody Beginner (Anonym) Nachtrag zu: „Arbeitszeit“
Optionen

Danke, ich komme bei Gelegenheit auf Dein Angebot zurück!
Bis dahin...

bei Antwort benachrichtigen