Office: [Access 2007] Sollstundenberechnung

Helfe beim Thema [Access 2007] Sollstundenberechnung in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen. Wie ich es mir schon gedacht hatte, habe ich nun Schwierigkeiten bei der Erstellung der Funktion für die Sollstundenberechnung des... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von ellinho, 9. Mai 2009.

  1. ellinho Erfahrener User

    [Access 2007] Sollstundenberechnung


    Hallo zusammen.

    Wie ich es mir schon gedacht hatte, habe ich nun Schwierigkeiten bei der Erstellung der Funktion für die Sollstundenberechnung des aktuellen Vormonats.

    Hier die 1.Funktion :
    Code:
    Public Function SollStdGesVM(datDatum As Date, strMAID As String) As Double
    Dim rst As DAO.Recordset
        Set rst = CurrentDb.OpenRecordset("select * from Mitarbeiter where Personalnummer='" & strMAID & "'", dbOpenSnapshot)
    If Not Feiertag(datDatum) Then
        Select Case Weekday(datDatum)
        Case 1
        SollStdGesVM = Nz(rst!SollstdSo, 0)
        Case 2
        SollStdGesVM = Nz(rst!SollstdMo, 0)
        Case 3
        SollStdGesVM = Nz(rst!SollstdDi, 0)
        Case 4
        SollStdGesVM = Nz(rst!SollstdMi, 0)
        Case 5
        SollStdGesVM = Nz(rst!SollstdDo, 0)
        Case 6
        SollStdGesVM = Nz(rst!SollstdFr, 0)
        Case 7
        SollStdGesVM = Nz(rst!SollstdSa, 0)
        Case Else
        SollStdGesVM = 0
        End Select
    End If
    rst.Close
    Set rst = Nothing
    End Function
    Eigentlich genauso aufgebaut, wie die Berechnung der Abwesenheitsstunden.
    In der zugehörigen Schleifen-Funktion liegt aber mein eigentliches Problem.
    Die funktionierende Schleife für die Berechnung der Abwesenheitsstunden sieht so aus :

    Code:
    Public Function AnzArbStdMA(VMDatumvon As Date, VMDatumbis As Date, strMAID As String) As Double
    Dim aktTag As Date
    For aktTag = VMDatumvon To VMDatumbis
     AnzArbStdMA = AnzArbStdMA + MASollStunden(aktTag, strMAID)
    Next
    End Function
    Diese wollte ich jetzt für die Berechnung der Sollstunden anpassen, aber :
    Bei der Berechnung der Abwesenheitsstunden sind die Variablen VMDatumvon und VMDatumbis durch Einträge in einer Tabelle bereits festgelegt. Ich brauche jedoch eine Funktion, die automatisch die Sollstunden für den aktuellen Vormonat errechnet, sprich : im Mai sollen die Sollstunden für April berechnet werden und somit müsste heute für die Variablen VMDatumvon automatisch der 01.04.2009 und VMDatumbis automatisch der 30.04.2009 mitgegeben werden. Wie könnte dies allgemeingültig bewerkstelligt werden ??? Hat jemand eine Idee ???

    Gruß
    Karsten
     
    ellinho, 9. Mai 2009
    #1
  2. freaky
    freaky Erfahrener User
    Hi,

    soll das immer vom aktuellen Tag gerechnet werden? Dann mach es so:

    Code:
    Public Function AnzArbStdMA(strMAID As String) As Double
       Dim aktTag As Date
       Dim Beginn As Date, Ende As Date
    
       Beginn = DateAdd("d", -(DatePart("d", DateAdd("m", -1, Date)) - 1), DateAdd("m", -1, Date))
       Ende = DateAdd("m", 1, Beginn) - 1
       
       For aktTag = Beginn To Ende
          AnzArbStdMA = AnzArbStdMA + MASollStunden(aktTag, strMAID)
       Next
    End Function
     
    freaky, 10. Mai 2009
    #2
  3. ellinho Erfahrener User
    @freaky

    Danke für die Antwort.
    Habe jetzt die folgenden Funktionen :

    1.)Funktion zur Berechnung der Abwesenheitsstunden

    Code:
    Public Function MASollStunden(datDatum As Date, strMAID As String) As Double
    Dim rst As DAO.Recordset
        Set rst = CurrentDb.OpenRecordset("select * from Mitarbeiter where Personalnummer='" & strMAID & "'", dbOpenSnapshot)
    If Not Feiertag(datDatum) Then
        Select Case Weekday(datDatum)
        Case 1
        MASollStunden = Nz(rst!SollstdSo, 0)
        Case 2
        MASollStunden = Nz(rst!SollstdMo, 0)
        Case 3
        MASollStunden = Nz(rst!SollstdDi, 0)
        Case 4
        MASollStunden = Nz(rst!SollstdMi, 0)
        Case 5
        MASollStunden = Nz(rst!SollstdDo, 0)
        Case 6
        MASollStunden = Nz(rst!SollstdFr, 0)
        Case 7
        MASollStunden = Nz(rst!SollstdSa, 0)
        Case Else
        MASollStunden = 0
        End Select
    End If
    rst.Close
    Set rst = Nothing
    End Function
    2.) Schleifenfunktion für die exakte Berechnung der Abwesenheitsstunden im Abwesenheitszeitraum VMDatumvon bis zu VMDatumbis

    Code:
    Public Function AnzArbStdMA(VMDatumvon As Date, VMDatumbis As Date, strMAID As String) As Double
    Dim aktTag As Date
    For aktTag = VMDatumvon To VMDatumbis
     AnzArbStdMA = AnzArbStdMA + MASollStunden(aktTag, strMAID)
    Next
    End Function
    3.)Funktion zur Berechnung der zu leistenden Sollstunden

    Code:
    Public Function SollStdGesVM(datDatum As Date, strMAID As String) As Double
    Dim rst As DAO.Recordset
        Set rst = CurrentDb.OpenRecordset("select * from Mitarbeiter where Personalnummer='" & strMAID & "'", dbOpenSnapshot)
    If Not Feiertag(datDatum) Then
        Select Case Weekday(datDatum)
        Case 1
        SollStdGesVM = Nz(rst!SollstdSo, 0)
        Case 2
        SollStdGesVM = Nz(rst!SollstdMo, 0)
        Case 3
        SollStdGesVM = Nz(rst!SollstdDi, 0)
        Case 4
        SollStdGesVM = Nz(rst!SollstdMi, 0)
        Case 5
        SollStdGesVM = Nz(rst!SollstdDo, 0)
        Case 6
        SollStdGesVM = Nz(rst!SollstdFr, 0)
        Case 7
        SollStdGesVM = Nz(rst!SollstdSa, 0)
        Case Else
        SollStdGesVM = 0
        End Select
    End If
    rst.Close
    Set rst = Nothing
    End Function
    (angepasst an die Funktion MASollStunden)

    4.) Schleifenfunktion zur Berechnung der exakten Sollstunden für den Vormonat inklusive Berücksichtigung der Abwesenheitsstunden

    Code:
    Public Function AnzSollStdVM(strMAID As String) As Double
    Dim aktTag As Date
    Dim Beginn As Date, Ende As Date
    Beginn = DateAdd("d", -(DatePart("d", DateAdd("m", -1, Date)) - 1), DateAdd("m", -1, Date))
    Ende = DateAdd("m", 1, Beginn) - 1
        For aktTag = Beginn To Ende
          AnzSollStdVM = AnzSollStdVM + SollStdGesVM(aktTag, strMAID) - AnzArbStdMA(aktTag, strMAID)
    Next
    End Function

    Weiß aber noch nicht, ob es funktioniert, weil die SQL-Abfrage wohl noch nicht richtig lautet.

    Müsste aber eigentlich so klappen, oder ?
    Hast Du vielleicht noch eine Idee für die SQL-Abfrage ? Z.Zt. lautet die so :
    Code:
    SELECT Abwesenheit.Personalnummer, Mitarbeiter.Vorname, Mitarbeiter.Nachname, Abwesenheit.Abwesenheitsgrund, AnzSollStdVM([Beginn],[Ende],[Personalnummer]) AS AnzahlSollstundenGesamtMAVM
    FROM Mitarbeiter INNER JOIN Abwesenheit ON Mitarbeiter.Personalnummer = Abwesenheit.Personalnummer;
    
    Gruß
    Karsten
     
    ellinho, 10. Mai 2009
    #3
  4. freaky
    freaky Erfahrener User

    [Access 2007] Sollstundenberechnung

    Hi,

    wo steht denn diese Abfrage und was willst Du damit überhaupt machen? So richtig verstehe ich das nicht ......
     
    freaky, 10. Mai 2009
    #4
  5. ellinho Erfahrener User
    Ich habe eine Abfrage Sollstunden erstellt. In der Abfragespalte sollen die tatsächlichen Sollstunden (abzüglich Abwesenheitszeiten) für den aktuellen Vormonat pro Personalnummer errechnet werden. Die geleisteten Stunden werden aus einem anderen Programm importiert werden und sollen in der gleichen Abfrage in der Nebenspalte mit den tatsächlichen Sollstunden verglichen werden, um Über-/bzw. Minusstunden zu errechnen.
     
    ellinho, 10. Mai 2009
    #5
  6. ellinho Erfahrener User
    @freaky

    Hi.
    Es hat geklappt. Manchmal denke ich einfach zu umständlich.
    Ich hatte ja bereits die Summe der Abwesenheitsstd vom jeweiligen Vormonat gruppiert nach Personalnummer. In diese Abfrage habe ich dann die Sollstunden mit eingebaut. Die SQL-Abfrage sieht nun folgendermaßen aus und funktioniert :

    SELECT AbwesenheitAbfrage.Personalnummer AS Ausdr1, Sum(AbwesenheitAbfrage.AnzAbwesenheitstageMA) AS GesAbwesTg, Sum(AbwesenheitAbfrage.AnzAbwesenheitsstundenMA) AS GesAbwesStd, AnzSollStdVM([Personalnummer])-[GesAbwesStd] AS AnzahlSollstundentatsGesamtMAVM
    FROM AbwesenheitAbfrage
    WHERE (((Month([VMDatumvon]))=((Month(Now())+10) Mod 12+1)))
    GROUP BY AbwesenheitAbfrage.Personalnummer
    ORDER BY AbwesenheitAbfrage.Personalnummer;


    Danke für Deine Mithilfe.

    Gruß
    Karsten
     
    ellinho, 10. Mai 2009
    #6
Thema:

[Access 2007] Sollstundenberechnung

Die Seite wird geladen...
  1. [Access 2007] Sollstundenberechnung - Similar Threads - Access 2007 Sollstundenberechnung

  2. Access 2007 Datenbanken lassen sich nicht mehr öffnen

    in Microsoft Access Hilfe
    Access 2007 Datenbanken lassen sich nicht mehr öffnen: Hallo zuammen, das kumulative Update von Windows 10 jetzt im November hat auf meinen PC einen Fehler bei den Farben verursacht, der in verschiedenen Programmen auftrat. So auch bei meinen...
  3. PDF Datei aus ACCESS 2007 öffnen

    in Microsoft Access Hilfe
    PDF Datei aus ACCESS 2007 öffnen: Hallochen zusammen Möchte aus einem ACCESS Formular heraus eine PDF Datei öffnen. Reader ist auf jeden in Frage kommenden PC installiert. Wie gehe ich das am einfachsten an? Vielen Dank! 298456
  4. Grundlegende Informationen zu Makros in Access 2007

    in Microsoft Access Tutorials
    Grundlegende Informationen zu Makros in Access 2007: Grundlegende Informationen zu Makros in Access 2007 Access für Microsoft 365 Access 2019 Access 2016 Access 2013 Access 2010 Access 2007...
  5. Access-2007-Datenbank in Access2013 weiterbenutzen???

    in Microsoft Access Hilfe
    Access-2007-Datenbank in Access2013 weiterbenutzen???: Wie kann ich eine replizierte Datenbank, die mit Access2007 erstellt wurde in Access2013 weiter benutzen oder vorher so konvertieren, dass genau dies möglich ist. Danke für die Unterstützung!
  6. Access 2007 Auswahl unter mehreren Tabellen

    in Microsoft Access Hilfe
    Access 2007 Auswahl unter mehreren Tabellen: Hi ich möchte bei meiner Datenbank eine Auswahl von mehreren Tabellen (Preislisten) erstellen und diese dann einer Person zuordnen. Leider bin ich in Access nicht so fit um dies umzusetzen. Am...
  7. Datan von Timeline aufsplitten - Access 2007/10

    in Microsoft Access Hilfe
    Datan von Timeline aufsplitten - Access 2007/10: Hallo zusammen, ich habe einige tausend records - deren Daten ich regelmäßig aufsplitten muss. Das heißt - ich habe ein Event XY das Startet am 01.10.2012 - endet am 21.10.2012 - und verbraucht...
  8. [Access 2007] zwei Tabellen - eine Abfrage dazu - wie?

    in Microsoft Access Hilfe
    [Access 2007] zwei Tabellen - eine Abfrage dazu - wie?: Hallo, seit langem mal wieder eine Frage von mir... Ich bekomme von freien Mitarbeitern Excel-Tabellen, die zwar gleich aufgebaut sind, aber unterschiedliche Datensätze enthalten. Da ich diese...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden