Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: itwebmaster am Oktober 19, 2020, 09:56:50

Titel: Monatliche Arbeitszeit ermitteln
Beitrag von: itwebmaster am Oktober 19, 2020, 09:56:50
ich stelle mich ein wenig ungeschickt an, seit Tagen versuche ich eine Funktion zu schreiben, die mir die monatliche Arbeitszeit via Schleife ermittelt. Die Idee, ich übergebe an eine Funktion Monat, Jahr und die Wochenarbeitszeit in der Form (mo,di,mi,do,fr,sa,so) also (8,8,8,6,5,7,0). Rückgabe soll die monatliche Arbeitszeit sein. Hat jemand eine Idee?
Titel: Re: Monatliche Arbeitszeit ermitteln
Beitrag von: MzKlMu am Oktober 19, 2020, 10:35:25
Hallo,
das wird wohl nicht ganz so einfach wie Du Dir das denkst.
Die Monate gehen ja nicht mit den Wochen auf.
Und was ist mit der Person, nicht jede Person hat ja die gleiche Zeit?
Ein weiteres Problem dürfte auch sein, dass die Zeiten ja wahrscheinlich nicht gleich bleiben und wenn sich die Zeiten ändern, dürfen sich die alten Zeiten nicht änden.
Wie ist denn die Arbeitszeit gespeichert. Also die Stunden je Tag abhängig von der Person ?

Am geschicktesten löst man sowas mit einer Kalendertabelle. Das lässt sich dann über die Beziehungen regeln. Die Monatszeit ist dann eine einfache Summierung.
Titel: Re: Monatliche Arbeitszeit ermitteln
Beitrag von: itwebmaster am Oktober 19, 2020, 12:35:49
Ich will keine Arbeitzeitverwaltung, sondern nur die monatliche Arbeitszeit ermitteln. Meine Idee

Function mtlAZ(Startdatum as date, Enddatum as date, moAZ as long, diAZ as long, miAZ as long, doAZ as long ...)

Dann Soll die Funktion eine Schleife von startdatum bis Enddatum durchlaufen und für die täglichen AZ mo-so die Stunden aufsummieren und als Wert zurückgeben. Das mir die Tage aufgelistet werden habe ich schon geschafft. Leider erzeugt meine Funktion von donkarl erzeugt immer wieder Fehler.
Titel: Re: Monatliche Arbeitszeit ermitteln
Beitrag von: ebs17 am Oktober 19, 2020, 12:46:14
ZitatDas mir die Tage aufgelistet werden habe ich schon geschafft.
Dann braucht man keine Funktion mehr, sondern nur noch eine Abfrage, die die Tage über den Monat gruppiert und die zugehörigen Werte summiert.
Schleife und Funktion hört sich aber wichtig an, ist umfangreicher und langsamer und fehleranfälliger.

Zitatmeine Funktion ... erzeugt immer wieder Fehler
Alles klar bei dieser gigantischen Informationsdichte. Tipp: Mach es anders.
Titel: Re: Monatliche Arbeitszeit ermitteln
Beitrag von: MzKlMu am Oktober 19, 2020, 14:07:32
Hallo,
im Anhang ein einfaches Beispiel für Dein Vorhaben mit einer Kalendertabelle.
Geht ohne einen Buchstaben VBA.
Die Abfrage zeigt die monatliche Arbeitszeit und kann noch auf einen bestimmten Monat gefiltert werden.
Und das auch noch rasend schnell für alle Monate.
Oder man kann in einem Formularfeld die mon. Arbeitszeit mit DomSumme ermitteln. Auch ohne VBA.
DomSumme verwendet dann die Abfrage und wird mit Monat und Jahr gefiltert.
Titel: Re: Monatliche Arbeitszeit ermitteln
Beitrag von: itwebmaster am Oktober 21, 2020, 15:08:35
Wo habe ich da einen Denkfehler

Public Function mtlArbeitszeitErm(ByVal dStart As Date, ByVal dEnde As Date, SMo As Double, SDi As Double, SMi As Double, SDo As Double, SFr As Double, SSa As Double, SSo As Double) As Double
    Dim i As Date
    Dim StdZ As Double  'Stundenzähler
    Dim woTa As Integer 'Wochentag 1 = Sonntag 7 = Samstag
   
    StdZ = 0 'Initialisierung Stundenzähler
   
    For i = dStart To dEnde
        FktCntDate = i
       
        Select Case woTa
            Case Is = 1
              StdZ = StdZ + SSo
            Case Is = 2
              StdZ = StdZ + SMo
            Case Is = 3
              StdZ = StdZ + SDi
            Case Is = 4
              StdZ = StdZ + SMi
            Case Is = 5
              StdZ = StdZ + SDo
            Case Is = 6
              StdZ = StdZ + SFr
            Case Is = 7
              StdZ = StdZ + SSa
          End Select
       
        'Debug.Print StdZ
        'Kontrollausgabe im Direktfenser
        'Debug.Print Format(FktCntDate, "ddd dd.mm.yyyy") & " Tag: " & Weekday(FktCntDate)
    Next i
    mtlArbeitszeitErm = StdZ
End Function
Titel: Re: Monatliche Arbeitszeit ermitteln
Beitrag von: itwebmaster am Oktober 21, 2020, 15:31:45
Er sollte die als Parameter übergebene Stundenzahl in der Variablen StdZ addieren. Macht er aber nicht. Ich habe keine Ahnung wieso nicht.
Titel: Re: Monatliche Arbeitszeit ermitteln
Beitrag von: Beaker s.a. am Oktober 21, 2020, 16:12:02
Na ja, "woTa" bleibt ja nach der Deklarierung immer 0.
Titel: Re: Monatliche Arbeitszeit ermitteln
Beitrag von: itwebmaster am Oktober 21, 2020, 17:07:58
Danke für den Denkansatz, so funktioniert es
For i = dStart To dEnde
        mtlArbeitszeitErm = i
        woTa = Weekday(i)
        Select Case woTa '= Weekday(i)
            Case Is = 1
              StdZ = StdZ + SSo
            Case Is = 2
              StdZ = StdZ + SMo
            Case Is = 3
              StdZ = StdZ + SDi
            Case Is = 4
              StdZ = StdZ + SMi
            Case Is = 5
              StdZ = StdZ + SDo
            Case Is = 6
              StdZ = StdZ + SFr
            Case Is = 7
              StdZ = StdZ + SSa
          End Select
Titel: Re: Monatliche Arbeitszeit ermitteln
Beitrag von: itwebmaster am Oktober 21, 2020, 17:11:53
Und gibt die exakten Soll-Stunden bzw. die zu bezahlenden Stunden pro Monat zurück.
Titel: Re: Monatliche Arbeitszeit ermitteln
Beitrag von: MzKlMu am Oktober 21, 2020, 18:50:10
Hallo,
hast Du Dir eigentlich mal mein Beispeil in #4 angesehen ?
Titel: Re: Monatliche Arbeitszeit ermitteln
Beitrag von: itwebmaster am Oktober 22, 2020, 16:16:30
Hallo Klaus, habe ich gerade gemacht ... Könnte man ja eine komplette Arbeitzeitverwaltung darum herum bauen. Allerdings benötige ich nur ein Formular, das mir bei einem bestimmten Eintrittsdatum die monatliche Sollarbeitszeit und die Sollarbeitstage ausgibt. Multipliziert mit dem Stundensatz den Bruttolohn, oder per Division den "virtuellen" Stundensatz bei Gehalt. Unter Umständen ist es ein Unterschied, ob ich 8888800 oder 0888880 arbeite. Kommt eben drauf an wieviele Mo, Di usw. im Monat anfallen. Wenn ich jetzt noch wüsste, wie man hier eine Access-Datei hochladen könnte, würde ich das mal glatt tun, falls jemand mal das gleiche oder ein ähnliches Problem hat.
Gefunden: Arbeitstage im Monat.zip