Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Pagina 1 di 3 123 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24

Calcolo compenso con orari a cavallo di giorni

  1. #1
    Sergio Mazza non è in linea Novello
    Post
    18
    Like Inviati  
    1
    Like Ricevuti  
    0
    Ciao Tutti

    Ho due campi [entrata] [uscita] formato data ora.
    Ho una tabella di compensi per fasce orarie.

    Il calcolo compenso per fascie orarie, se [entrata] e [uscita] sono effettuate nello stesso giorno l'ho risolto.

    Il problema è se l'uscita avviene nel giorno (o nei giorni) successivi; non riesco a trovare il "ragionamento" per sviluppare la ruotine di calcolo.

    Avete già affrontato e risolto il problema?

    Grazie.
    ℹ️ Leggi di più su Sergio Mazza ...

  2. #2
    Post
    1,868
    Blogs
    21
    Like Inviati  
    13
    Like Ricevuti  
    11
    Quote Originariamente inviato da Sergio Mazza Visualizza il messaggio
    Ciao Tutti

    Ho due campi [entrata] [uscita] formato data ora.
    ...
    Il problema è se l'uscita avviene nel giorno (o nei giorni) successivi; non riesco a trovare il "ragionamento" per sviluppare la ruotine di calcolo.
    ...
    Ciao,
    non dovrebbe cambiare nulla nel 'ragionamento;
    mostra quello che hai fatto
    ℹ️ Leggi di più su sspintux ...

  3. #3
    Sergio Mazza non è in linea Novello
    Post
    18
    Like Inviati  
    1
    Like Ricevuti  
    0
    è il tuo "dovrebbe" che mi preoccupa

    Comunque ecco il codice:


    With objRstFiltrato
    
        Do While Not .EOF
            entrataTmp = entrata
            uscitaTmp = uscita
                    
    '--> calcolo compenso
            If entrataTmp >= CDate(Format(entrataTmp, "dd/mm/yyyy") & " " & !fasciaOrariaDalle) And entrataTmp <= CDate(Format(entrataTmp, "dd/mm/yyyy") & " " & !fasciaOrariaAlle) Then
    
    calcoloCompenso_ricercaUscita:
                '--> se entrata e uscita sono nella stessa fascia oraria
                If uscitaTmp <= CDate(Format(uscitaTmp, "dd/mm/yyyy") & " " & !fasciaOrariaAlle) Then
                    oreLavorate = ElapsedTime(uscitaTmp - entrataTmp, "ore:minuti:secondi")
                    compensoOrario = compensoOrario + ((Hour(oreLavorate) + Minute(oreLavorate) / 60) * !tariffaOraria)
                    chkProseguiRicerca = False
                Else
                    oreLavorateTmp = ElapsedTime(CDate(uscitaTmp & " " & !fasciaOrariaAlle) - entrataTmp, "ore:minuti:secondi")
                    compensoOrario = compensoOrario + ((Hour(oreLavorateTmp) + Minute(oreLavorateTmp) / 60) * !tariffaOraria)
                    entrataTmp = DateAdd("s", 1, uscitaTmp & " " & !fasciaOrariaAlle)
                    chkProseguiRicerca = True
                End If
                
                If chkProseguiRicerca = True Then
                    .MoveNext
                    GoTo calcoloCompenso_ricercaUscita
                End If
            End If
    '<-- / calcolo compenso
    
            .MoveNext
        Loop
    End With
    
    per completezza la ElapsedTime l'ho presa qui:
    https://docs.microsoft.com/it-it/off...-datetime-data
    ℹ️ Leggi di più su Sergio Mazza ...

  4. #4
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,745
    Like Inviati  
    0
    Like Ricevuti  
    20
    Se la prestazione si estende su più gg, diciamo 2, devi tenere conto che, nel cambio gg va sottratto il tempo non lavorativo.
    Se la fascia oraria è fissa 8÷18, quando rilevi il cambio gg puoi sottrarre sempre 14ore per ogni gg che corrispondono alle ore dalle 18÷8 del mattino... ovviamente n giorni n×14
    Ho semplificato ma era solo per capire se la logica può reggere, ma dipende dalla reale casistica.
    ℹ️ Leggi di più su @Alex ...

  5. #5
    Sergio Mazza non è in linea Novello
    Post
    18
    Like Inviati  
    1
    Like Ricevuti  
    0
    Ok; completo il problema.

    L'orario di lavoro, come principio del mio problema, non ha interruzione se non quando viene terminato il servizio.

    Come fasce orarie ho (es.):
    entrata: 16:00 uscita: 21:00 tariffa oraria: 10€
    entrata: 21:00 uscita: 00:00 tariffa oraria: 20€
    entrata: 00:00 uscita: 03:00 tariffa oraria: 30€

    Ipotizzando una (timbratura) entrata: 16:30 e uscita: 01:30 (ovviamente nel campo c'è anche il giorno);

    il ragionamento (su carta) era che avrei verificato prima di tutto se c'è una differenza (giorni) tra l'entrata e l'uscita; questa differenza avrebbe fatto da "contatore" per il loop che avrebbe aggiornato il giorno dell'entrata e dell'uscita mentre calcolo il compenso nelle fasce orarie del giorno.
    ℹ️ Leggi di più su Sergio Mazza ...

  6. #6
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,745
    Like Inviati  
    0
    Like Ricevuti  
    20
    Non fai prima ad incrementare per confronto... mi spiego.
    Fai un ciclo che finisce quando la l'ora di fine è minore dell'ora di inizio della fascia successiva.
    Il ciclo include una variabile che aggiorni con la fascia corrente... poi affini la fascia successiva... e riconfronti.
    Ad ogni iterazione se la fascia è inclusa sommi il compenso pieno altrimenti calcoli il deltacompenso ed esci.
    Nella sostanza invece di calcolare il differenziale parti dall'ora inizio per sommare sempre le fasce orarie... la dove sei fuori fascia... ovvero le ore non lavorative ti sposti alla 1°fascia... e riparti.
    Credo di essermi spiegato malissimo...
    ℹ️ Leggi di più su @Alex ...

  7. #7
    Sergio Mazza non è in linea Novello
    Post
    18
    Like Inviati  
    1
    Like Ricevuti  
    0
    ...(forse) ti sarai spiegato malissimo, e probabilmente anche io ho capito malissimo, ma... mi sembra che sia lo stesso mio approccio, che va bene per timbrature nello stesso giorno.
    ℹ️ Leggi di più su Sergio Mazza ...

  8. #8
    L'avatar di TheTruster
    TheTruster non è in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    Post
    7,214
    Blogs
    3
    Like Inviati  
    17
    Like Ricevuti  
    9
    Quello che penso intenda @Alex, e che in passato ho usato anche io per calcolare le indennità sul servizio, è che potresti calcolare intanto le ore totali del servizio.
    Poi imposti un ciclo, aggiungendo un'ora alla volta, verificando se il risultato ricada o meno nella stessa fascia o in quella successiva. Nel frattempo sommi in modo incrementale le indennità relative alla fascia rilevata.
    Il tutto termina quando raggiungi la data-ora di fine del servizio, quando nella variabile incrementale delle indennità dovresti avere il totale delle indennità percepite per tutto il servizio.

    TheTruster
    ℹ️ Leggi di più su TheTruster ...

  9. #9
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,745
    Like Inviati  
    0
    Like Ricevuti  
    20
    Non proprio...
    Intendo di partire con un riferimento data/ora della prima fascia oraria inclusa, da Libero poi ciclo aggiungendo al riferimento data/ora il dTempo della fascia successiva e confronto se la fine intervento è inclusa, tengo conto ed aggiungo il successivo.ecc...

    Ipotizzando di crare un'array con una variabile type OraIni/Orafine per salvare le n fasce il loop continua nell'array... se passo la giornata è già previsto dal momento che sommo ore.
    Sibdeve solo fare attenzione quando riparto dall'indice 0 dell'area che deve far spostare il riferimento senza sommare ma solo assegnando l'ora iniziale.
    In questo modo conto non il tempo ma quante e quali fasce orarie sono incluse nell'intervallo rendendo più veloce e forse semplice la valorizzazione.

    Ora sono fuori casa e capisco che non sia semplice capire il mio ragionamento... ma questa sera magari scrivo 2 righe...
    ℹ️ Leggi di più su @Alex ...

  10. #10
    Post
    1,868
    Blogs
    21
    Like Inviati  
    13
    Like Ricevuti  
    11
    personalmente opterei per suddividere l'intervallo entrata-uscita in pezzi dipendneti dalle fasce orarie;

    una cosa del genere

    1) leggo entrata e successiva uscita ( lasciamo perdere che l'entrata in realtà potrebbe essere anche un'uscita notte)
    2) determino fascia oraria entrata
    3.1) se uscita rientra nella fascia oraria entrata proseguo con la prossima entrata ( punto 1)
    3.2 altrimenti uscita = fine fascia oraria attuale e proseguo con una entrata fittizia pari alla fine della fascia oraria attuale
    ... e così via ;

    ed arrivati alla fine della timbratura di uscita di cui al punto 1) ricomincio il giro con la prossima entrata

    HTH
    Ultima modifica di sspintux; 30-12-2020 16:06 
    ℹ️ Leggi di più su sspintux ...

+ Rispondi al messaggio
Pagina 1 di 3 123 ultimoultimo

Potrebbero interessarti anche ...

  1. calcolo su orari
    Da cesco69 nel forum Microsoft Access
    Risposte: 9
    Ultimo Post: 24-03-2015, 00:51
  2. Calcolo giorni lavortivi e giorni detrazione
    Da luis6326 nel forum Microsoft Word
    Risposte: 3
    Ultimo Post: 20-07-2011, 23:43
  3. Articolo: Calcolo Giorni Lavorativi
    Da @Alex nel forum Microsoft Access
    Risposte: 2
    Ultimo Post: 24-04-2010, 23:39
  4. [SQL]Query di calcolo su date - giorni
    Da sanfra nel forum Altri Database Server
    Risposte: 13
    Ultimo Post: 14-04-2008, 16:55
  5. Calcolo Giorni Lavorativi
    Da Davidoff nel forum Microsoft Word
    Risposte: 9
    Ultimo Post: 04-02-2005, 11:42