Gestione Timbrature

di il
19 risposte

19 Risposte - Pagina 2

  • Re: Gestione Timbrature

    Non generalizzare con "in tutte le aziende" perché non è proprio uguale ovunque... c'è chi arrotonda per difetto chi invece conteggia il minuto, per operai ed impiegati mentre i quadri dirigenti altro... quindi le casistiche possono variare e tu giustamente guardi la tua realtà.

    Che i permessi vengano contabilizzati a parte può essere a seconda del gestionale HR che usate, ma le timbrate sono 6 se prende il permesso... a meno che qualcuno non ti ripulisce sempre tutto, ma allora è expost e non realtime perché finché non viene inserito il giustificativo del pernesso non può essere determinata la causale.

    In ogni caso passo e chiudo saprai sicuramente bene tu come funziona il tuo sistema.
  • Re: Gestione Timbrature

    willy55 ha scritto:


    Dovrai ciclare il recordset (per la query/tabella, in base al giornaliero della matricola nominativo) in modo da procedere dalla prima all'ultima timbratura, identificando se in ingresso o uscita ed effettuare il calcolo dell'orario.
    Vedi queti link per partire:
    https://docs.microsoft.com/en-us/office/vba/access/concepts/data-access-objects/move-through-a-dao-recordset
    https://www.accessallinone.com/looping-through-a-recordset/
    https://www.youtube.com/watch?v=KNYcxvWOgd
    Ciao sono sempre io ma non riuscivo a loggare e ho creato un altro account

    Ho creato il seguente codice
    Private Sub Comando7_Click()
    
    Dim rs1 As DAO.Recordset
    Dim rs2 As DAO.Recordset
    Set rs1 = CurrentDb.OpenRecordset("TIMBRATURE", dbOpenTable)
    Set rs2 = CurrentDb.OpenRecordset("prova", dbOpenTable)
    
    rs1.MoveFirst
    Do While Not rs1.EOF
    If rs1.Fields("Matricola") > 0 Then
    rs2.AddNew
    rs2.Fields("Matricola") = rs1.Fields("Matricola")
    rs2.Fields("data") = rs1.Fields("data")
    rs2.Fields("timbrata 1") = rs1.Fields("ora")
    rs1.MoveNext
    If rs1.Fields("Matricola") = rs2.Fields("Matricola") Then
    rs2.Fields("timbrata 2") = rs1.Fields("ora")
    Else
    rs1.MoveNext
    End If
    rs2.Update
    End If
    rs1.MoveNext
    Loop
    rs1.Close
    Set rs1 = Nothing
    End Sub
    
    Ora vorrei proseguire con la terza timbrata e così via..ma non ne vengo a capo (sono agli inizi e mi psfugge sicuramente qualcosa)..consigli?
    Grazie mille
  • Re: Gestione Timbrature

    Consiglio di rivedere il codice in modo da avere, sul recordset/tabella di partenza, due cicli annidati.
    Il primo, esterno, per determinare i vari nominativi, mentre quello interno (a parità di nominativo) al fine di assegnare i vari campi delle timbrature (in base all'incremento di un contatore progressivo) e all'uscita (del ciclo) provvedere alla scrittura dei dati sul recordset di arrivo.
    Da tenere in attenta considerazione l'eventualità di implementare un controllo sulle erronee timbrature.
  • Re: Gestione Timbrature

    Potresti portare un esempio per favore?
    Le timbrate doppie le eliminino dalla tabella in questo modo:
    durante l'importazione arrotondo tutte le ore es: 7:40 diventa 8:00 cosi come 7:42 quindi se ho due timbrate consecutive identiche una verrà eliminata
  • Re: Gestione Timbrature

    Il pippi99 ha scritto:


    ...arrotondo tutte le ore es: 7:40 diventa 8:00 cosi come 7:42 quindi se ho due timbrate consecutive identiche una verrà eliminata
    Volendo questi arrotondamenti potresti farli in un campo calcolato, così ti rimane l'effettiva ora di timbratura e l'ora da te arrotondata.
    E se li arrotondi, potresti creare una query di raggruppamento sulle ore (nel formato completo "dd/mm/yyyy hh:mm:ss").
    In questo modo le ore doppie o tripple te le raggruppa in una sola dopo che le avrai raggruppate e non devi preoccuparti di eliminare nulla.
Devi accedere o registrarti per scrivere nel forum
19 risposte