Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Διαχείριση αδειών (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/2028-diaxeirisi-adeion.html)

passarella 03-09-12 12:03

Διαχείριση αδειών
 
2 Συνημμένο(α)
Γειά σας και πάλι.

Παραθέτω μια απορια ως προς ενα πόνημα που βρηκα στο forum το οποίο βοηθάει παρα πολύ.

http://www.ms-office.gr/forum/access...ma-access.html



Η απορία που έχω ειναι η εξης:

Οταν δίνω για κάποιο υπάλληλο
Ημερομηνια Από π.χ. 17-07-2012 και
Ημερομηνία Έως π.χ. 20-07-2012 και
επιλέγω ως Τύπο άδειας π.χ. Τιμητική (δεν εχει σημασία)

θελω να γίνεται το εξής:
Οταν δίνω για τον ίδιο υπάλληλο
Ημερομηνια Από π.χ. 18-07-2012 και
Ημερομηνία Έως π.χ. 20-07-2012 και
επιλέγω ως Τύπο άδειας π.χ. Τιμητική (δεν εχει σημασία)

να μην γίνεται αποδεκτο το διαστημα Απο - Εως!!!!
Γίνεται αυτό;...:wall:


Σας επισυναπτω την εικονα με την οποια δειχνω τι εννοω καθώς επίσης κι ενα πόνημα
με το οποίο φαινονται και οι σχεσεις των πινακων Προσωπικου - Αδειων.

Ελπίζω να εγινα κατανοητη.

Ευχαριστω εκ των προτερων για την απαντηση σας.:thanks:

ασχετος 03-09-12 15:11

Χριστίνα καλό σου απόγευμα,

Στην φόρμα 'Δευτερεύουσα φόρμα QRY_adeies' στο πεδίο 'StartDate' στο συμβάν 'Before Update' βάλε αυτόν τον κώδικα

Κώδικας:

    Dim db As Database
    Dim rs As DAO.Recordset
    Dim sql As String
    Dim msg As String
    Dim rscnt As Integer
    Dim idpa As Integer
   
    idpa = Me.Parent.ID
    sql = "SELECT [Adeies].[ID], Min([Adeies].[StartDate]) AS minStartD," & _
          "      Max([Adeies].[EndDate]) AS MaxEndD, Year([EndDate]) AS etos" & _
          "  FROM Adeies" & _
          " GROUP BY [Adeies].[ID], Year([EndDate])" & _
          "HAVING [Adeies].[ID] = " & idpa & _
          "  AND Year([StartDate]) = " & Year(Me.StartDate)

   
    Set db = CurrentDb
    Set rs = db.OpenRecordset(sql, dbOpenDynaset)
    rscnt = rs.RecordCount
   
    If rscnt = 0 Then
        rs.close
        Set db = Nothing
        Set rs = Nothing
        Exit Sub
    ElseIf Me.StartDate >= rs!minStartD And Me.StartDate <= rs!MaxEndD Then
        msg = MsgBox("Ο Συνεργάτης σας 'ΒΑΛΕ ΟΤΙ ΘΕΛΕΙΣ'", _
                      vbInformation, "Η εφαρμογή σας ενημερώνει ότι..")
        Me.Undo
    End If
   
    rs.close
    Set db = Nothing
    Set rs = Nothing

Στην φόρμα 'Δευτερεύουσα φόρμα QRY_adeies' στο πεδίο 'EndDate' στο συμβάν 'Before Update' βάλε αυτόν τον κώδικα

Κώδικας:

    Dim db As Database
    Dim rs As DAO.Recordset
    Dim sql As String
    Dim msg As String
    Dim rscnt As Integer
    Dim idpa As Integer
   
    idpa = Me.Parent.ID
    sql = "SELECT [Adeies].[ID], Min([Adeies].[StartDate]) AS minStartD," & _
          "      Max([Adeies].[EndDate]) AS MaxEndD, Year([EndDate]) AS etos" & _
          "  FROM Adeies" & _
          " GROUP BY [Adeies].[ID], Year([EndDate])" & _
          "HAVING [Adeies].[ID] = " & idpa & _
          "  AND Year([EndDate]) = " & Year(Me.EndDate)

   
    Set db = CurrentDb
    Set rs = db.OpenRecordset(sql, dbOpenDynaset)
    rscnt = rs.RecordCount
   
    If rscnt = 0 Then
        rs.Close
        Set db = Nothing
        Set rs = Nothing
        Exit Sub
    ElseIf Me.EndDate >= rs!minStartD And Me.EndDate <= rs!MaxEndD Then
        msg = MsgBox("Ο Συνεργάτης σας 'ΒΑΛΕ ΟΤΙ ΘΕΛΕΙΣ'", _
                      vbInformation, "Η εφαρμογή σας ενημερώνει ότι...")
        Me.Undo
    End If

    rs.close
    Set db = Nothing
    Set rs = Nothing

Ελπίζω να σου κάνει.

ασχετος 04-09-12 10:04

Χριστίνα καλή σου μέρα,

Στον κώδικα που έγραψα, σβήσε τα σημασμένα με πράσινο

Thanosp 05-09-12 08:00

1 Συνημμένο(α)
Καλημέρα σε όλους
Κοίτα και μια άλλη λύση, σε περίπτωση εισαγωγής ημερομηνία "εντός" πρέπει να ακυρώσεις την εγγραφή με ESC
Θανάσης

Tasos 05-09-12 14:57

Καλησπέρα σε όλους!

Θα μπορούσε να τροποποιηθεί η μακροεντολή CountDatesPeriod() για να αναιρεί την τελευταία καταχώρηση αν συμπίπτουν οι ημερομηνίες:

Κώδικας:

Private Sub CountDatesPeriod()
    Dim Date1 As Long, Date2 As Long
    If IsDate(Me.StartDate) And IsDate(Me.EndDate) Then
        If Me.StartDate <= Me.EndDate And Me.StartDate <> 0 Then
            Date1 = CLng(Me.StartDate): Date2 = CLng(Me.EndDate)
            If DCount("ID", "Adeies", "ID =" & Me.ID & _
                      " AND (StartDate Between " & Date1 & " And " _
                      & Date2 & ") Or (" & "EndDate Between " & _
                      Date1 & " And " & Date2 & ")") Then
                MsgBox "Dating in conflict..."
                Me.Undo
            Else
                Me.AbsenceDays = Me.EndDate - Me.StartDate + 1
            End If
        End If
    End If
End Sub

Φιλικά

Τάσος
Τάσος

passarella 07-09-12 11:46

Παράθεση:

Αρχική Δημοσίευση από ασχετος (Μήνυμα 11906)
Χριστίνα καλό σου απόγευμα,

Στην φόρμα 'Δευτερεύουσα φόρμα QRY_adeies' στο πεδίο 'StartDate' στο συμβάν 'Before Update' βάλε αυτόν τον κώδικα

Κώδικας:

    Dim db As Database
    Dim rs As DAO.Recordset
    Dim sql As String
    Dim msg As String
    Dim rscnt As Integer
    Dim idpa As Integer
   
    idpa = Me.Parent.ID
    sql = "SELECT [Adeies].[ID], Min([Adeies].[StartDate]) AS minStartD," & _
          "      Max([Adeies].[EndDate]) AS MaxEndD, Year([EndDate]) AS etos" & _
          "  FROM Adeies" & _
          " GROUP BY [Adeies].[ID], Year([EndDate])" & _
          "HAVING [Adeies].[ID] = " & idpa & _
          "  AND Year([StartDate]) = " & Year(Me.StartDate)

   
    Set db = CurrentDb
    Set rs = db.OpenRecordset(sql, dbOpenDynaset)
    rscnt = rs.RecordCount
   
    If rscnt = 0 Then
        rs.close
        Set db = Nothing
        Set rs = Nothing
        Exit Sub
    ElseIf Me.StartDate >= rs!minStartD And Me.StartDate <= rs!MaxEndD Then
        msg = MsgBox("Ο Συνεργάτης σας 'ΒΑΛΕ ΟΤΙ ΘΕΛΕΙΣ'", _
                      vbInformation, "Η εφαρμογή σας ενημερώνει ότι..")
        Me.Undo
    End If
   
    rs.close
    Set db = Nothing
    Set rs = Nothing

Στην φόρμα 'Δευτερεύουσα φόρμα QRY_adeies' στο πεδίο 'EndDate' στο συμβάν 'Before Update' βάλε αυτόν τον κώδικα

Κώδικας:

    Dim db As Database
    Dim rs As DAO.Recordset
    Dim sql As String
    Dim msg As String
    Dim rscnt As Integer
    Dim idpa As Integer
   
    idpa = Me.Parent.ID
    sql = "SELECT [Adeies].[ID], Min([Adeies].[StartDate]) AS minStartD," & _
          "      Max([Adeies].[EndDate]) AS MaxEndD, Year([EndDate]) AS etos" & _
          "  FROM Adeies" & _
          " GROUP BY [Adeies].[ID], Year([EndDate])" & _
          "HAVING [Adeies].[ID] = " & idpa & _
          "  AND Year([EndDate]) = " & Year(Me.EndDate)

   
    Set db = CurrentDb
    Set rs = db.OpenRecordset(sql, dbOpenDynaset)
    rscnt = rs.RecordCount
   
    If rscnt = 0 Then
        rs.Close
        Set db = Nothing
        Set rs = Nothing
        Exit Sub
    ElseIf Me.EndDate >= rs!minStartD And Me.EndDate <= rs!MaxEndD Then
        msg = MsgBox("Ο Συνεργάτης σας 'ΒΑΛΕ ΟΤΙ ΘΕΛΕΙΣ'", _
                      vbInformation, "Η εφαρμογή σας ενημερώνει ότι...")
        Me.Undo
    End If

    rs.close
    Set db = Nothing
    Set rs = Nothing

Ελπίζω να σου κάνει.


Συγνώμη για την καθυστέρηση της απάντησης.
Ακριβώς αυτό ήθελα.
Ευχαριστω πολύ!!!!!!!!:icon_hihi::thanks:


Υ.Γ. Ευχαριστώ όλους όσους μπηκαν στον κόπο να απαντησουν στο ερώτημα μου.:respect::thanks::worthy:


Η ώρα είναι 14:33.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2