Newsgroup: it.comp.appl.access
Titolo: HELP-calcolo del numero di ore notturne

Chissà che sul newsgroup non ci sia un piccolo Gauss che semplifica un
calcolo che io riesco solo a complicare...
Ho una tabella che contiene le giornate di lavoro di dipendenti molto
flessibili (sono camionisti) e ho un orario di inizio lavoro e uno di fine
lavoro (l'orario di fine lavoro può essere il giorno successivo a quello di
inizio lavoro).
    Devo calcolare un importo orario maggiore per le ore notturne (dalle 21
alle 7). Devo contare quindi il numero di ore notturne in una query.
    La mia soluzione era un'insieme complicatissimo di IIF nidificati: SE
orario partenza prima delle 21 ALLORA SE orario arrivo dopo le 7 del giorno
dopo ALLORA numero ore = 24-21+7, ALTRIMENTI SE ecc...
    Il problema è che la formula che ottengo così è eccessivamente lunga per
una query e mi viene troncata.
    C'è qualche suggerimento che semplifica il tutto?
    Grazie, e pensate ai poveri camionisti.
    Eugenio Gotti

 ha scritto nel messaggio
news:9akb3d$1ik$1...@fe2.cs.interbusiness.it...

hehehe, caro eugenio,
ti sei impelagato in un problema (mi riferisco alla gestione degli orari)
che ti creera' non pochi grattacapi.
Ad ogni modo, in questo momento non ho il tempo di dedicarmi a darti una
risposta completa, ma sicuramente non puoi gestire questi calcoli in una
query. Devi aggiungere dei campi dove inserire i risultati dei calcoli che
farai da codice.
Sib

 ha scritto nel messaggio
news:9akb3d$1ik$1...@fe2.cs.interbusiness.it...

Ipotizziamo che che nella tua tabella (chiamata Tabella1) ci sia un campo
Data/ora che contenga sia la data che l'orario di inizio del trasporto (
ovvero con formato gg/mm/aaa hh:mm) che si chiama Inizio.
Ipotizziamo che che nella tua tabella ci sia un campo Data/ora che contenga
sia la data che l'orario di fine del trasporto ( ovvero con formato
gg/mm/aaa hh:mm) che si chiama Fine.
Diamo per scontato che tu ti sia già calcolato le ore complessive di lavoro.
La query che ti restituisce in un campo chiamato OreNotturne le sole ore da
retribuire con la maggiorazione notturna nella forma ore e centesimi di ora
(ovvero 10 ore e mezza = 10,5), ha il seguente codice SQL:
SELECT Tabella1.*,
IIf(([Inizio]-Int([Inizio]))>=7/24,0,IIf([Fine]<(Int([Inizio])+7/24),[Fine]-
[Inizio],(Int([Inizio])+7/24)-[Inizio])) AS MP,
IIf(Int([Inizio])=Int([Fine]),IIf(([Fine]-Int([Fine]))<21/24,0,([Fine]-Int([
Fine]))-21/24),IIf(([Inizio]-Int([Inizio]))<21/24,3/24,1-([Inizio]-Int([Iniz
io])))) AS SP,
IIf(Int([Inizio])=Int([Fine]),0,IIf(([Fine]-Int([Fine]))>7/24,7/24,[Fine]-In
t([Fine]))) AS MA,
IIf(Int([Inizio])=Int([Fine]),0,IIf(([Fine]-Int([Fine]))<21/24,0,([Fine]-Int
([Fine]))-21/24)) AS SA,
([MP]+[SP]+[MA]+[SA]+IIf((Int([Fine])-Int([Inizio]))<=1,0,((Int([Fine])-Int(
[Inizio]))-1)*(10/24)))*24 AS OreNotturne
FROM Tabella1;
Il calcolo prevede che il viaggio possa durare più di 24 ore.
Se funziona non lo dire a Gauss. ;-)
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------


Si puņ, si puņ. Con una query si puņ!! ;-))
Ciao, Roberto.

 che ti creera' non pochi grattacapi.
Sì, devo dire che se posso cerco di evitare tali problemi, ma non è il primo
e purtroppo non sarà l'ultimo caso...
Grazie comunque per l'incoraggiamento.
Eugenio

 ha scritto nel messaggio
news:kJlz6.9781$wG3.8...@news.infostrada.it...

Non ho detto che non si puo', ma non si puo' chiedere a un responsabile del
personale di aspettare da 30 a 60 minuti le totalizzazioni ogni volta che
vuole visualizzare le ore lavorate dai dipendenti.
Tempo fa ho installato un sistema di rilevazione presenze in una azienda di
Palermo con 2 sedi (a Palermo) con 270 dipendenti con orari impossibili.
Ti posso assicurare che proporgli una query li avrebbe resi molto nervosi.
Ciao, Sib
--
----------------------------------------------------
la mia home:
http://digilander.iol.it/syb
----------------------------------------------------
il sito comune di it.comp.database.access:
http://www.sitocomune.com
----------------------------------------------------
4000 anni fa', il saggio egizio Ptahhotep scrisse:
"... perche' non esistono saggi per nascita."
------------------------------------------------------
Saturiamo ECHELON:
bomba saddam attentato medio oriente


Sei sicuro che un computo fatto solamente con le 4 operazioni matematiche
(+ - * /) sia meno performante in una query anzichè in un codice VBA; si
insomma, che a+b scritto con codice SQL sia meno veloce di a+b scritto con
codice VBA?
Io ho i miei dubbi. ;-)
Ho aperto la query che ho consigliato ad Eugenio su una tabella che
conteneva 9000 record (che sono l'equivalente delle timbrature per un mese
di 346 dipendenti), ed Access ha impiegato una frazione di secondo e non 60
minuti. Provare per credere. ;-)
Non conosco la complessità della query cui hai dovuto rinunciare, ma per
quella di cui stiamo discutendo sono strasicuro che i tempi di calcolo sono
trascurabilissimi, quindi il problema non sussiste.
Ciao, Roberto

 trascurabilissimi, quindi il problema non sussiste.
Premesso che e' sempre piacevole "battagliare" con te, ;-)
Prima di tutto non intendevo dire che da codice si fa prima, intendevo dire
che il calcolo va fatto una volta e memorizzato in una tabella. Che poi si
possa studiare il modo di farlo con una query di accodamento e' un altro
discorso, ma ho i miei dubbi che possa venire piu' facile fare questa query
che non gestire le condizioni via codice.
Inoltre, come dicevi tu, dipende molto dai calcoli che devi fare.
Infatti un ufficio del personale, per prima cosa, totalizza ogni mese, il
che moltiplica almeno per 20 il numero dei calcoli da fare. Poi bisogna
confrontare l'orario effettivamente svolto con quello che il dipendente
avrebbe dovuto svolgere calcolando:
Ritardi
Straordinari diurni cin le varie percentuali
Straordinari notturni
Straordinari festivi
Permessi
Malattie
ecc, ecc...
Il tutto suddiviso, causale per causale, giorno per giorno.
Non sono convinto che sia sufficiente una frazione di sencondo. Fermo
restando che la query faccia tutti questy calcoli suddivisi causale per
causale.
Ancora non abbiamo parlato della gestione dei turni che iniziano un giorno e
finiscono il successivo, ma questo e' un altro discorso.
Ciao, Sib


Ciao ed alla prossima interessante discussione.
Roberto

 Roberto
E' evidente che questo e' un argomento su cui entrambi ci siamo scornati ;-)
Ciao, Sib
PS (Nel senso che ce ne siamo occupati con un certo impegno)