Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

HELP-calcolo del numero di ore notturne

239 views
Skip to first unread message

Eugenio Gotti

unread,
Apr 6, 2001, 8:10:11 AM4/6/01
to
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


Sib dal portatile

unread,
Apr 6, 2001, 8:50:41 AM4/6/01
to
"Eugenio Gotti" <eugeni...@mediacom.it> 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


Roberto dal portatile

unread,
Apr 6, 2001, 11:36:20 AM4/6/01
to

"Eugenio Gotti" <eugeni...@mediacom.it> 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
---------------------------------------------

Roberto dal portatile

unread,
Apr 6, 2001, 11:59:12 AM4/6/01
to

"Sib dal portatile" <sibN...@iol.it> ha scritto nel messaggio
news:9ake3i$gih$1...@serv1.iunet.it...

> "Eugenio Gotti" <eugeni...@mediacom.it> ha scritto nel messaggio
> news:9akb3d$1ik$1...@fe2.cs.interbusiness.it...
[CUT]

> 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
>

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

Ciao, Roberto.

Eugenio Gotti

unread,
Apr 6, 2001, 6:49:01 PM4/6/01
to
>
> hehehe, caro eugenio,
> ti sei impelagato in un problema (mi riferisco alla gestione degli orari)
> 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

Sib dal portatile

unread,
Apr 7, 2001, 8:24:22 AM4/7/01
to
"Roberto dal portatile" <r.ma...@libero.it> 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

Roberto da casa

unread,
Apr 7, 2001, 9:45:59 AM4/7/01
to

"Sib dal portatile" <sibN...@iol.it> ha scritto nel messaggio
news:WFDz6.16271$wG3.1...@news.infostrada.it...

> "Roberto dal portatile" <r.ma...@libero.it> ha scritto nel messaggio
> news:kJlz6.9781$wG3.8...@news.infostrada.it...
> >
> > "Sib dal portatile" <sibN...@iol.it> ha scritto nel messaggio
> > news:9ake3i$gih$1...@serv1.iunet.it...
> > > "Eugenio Gotti" <eugeni...@mediacom.it> ha scritto nel messaggio
> > > news:9akb3d$1ik$1...@fe2.cs.interbusiness.it...
> > [CUT]
> > > 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
> > >
> >
> > Si può, si può. Con una query si può!! ;-))

> >
> > Ciao, Roberto.
>
> 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
>

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


Sib dal portatile

unread,
Apr 8, 2001, 10:02:02 AM4/8/01
to
"Roberto da casa" <r.ma...@libero.it> ha scritto nel messaggio

> "Sib dal portatile" <sibN...@iol.it> ha scritto nel messaggio
> > "Roberto dal portatile" <r.ma...@libero.it> ha scritto nel messaggio
> > > "Sib dal portatile" <sibN...@iol.it> ha scritto nel messaggio
> > > > "Eugenio Gotti" <eugeni...@mediacom.it> ha scritto nel messaggio
> > > [CUT]
> > > > 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.
> > >
> > > Si può, si può. Con una query si può!! ;-))
> >
> > 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.
>
> 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.

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

Roberto da casa

unread,
Apr 8, 2001, 12:24:26 PM4/8/01
to

"Sib dal portatile" <sibN...@iol.it> ha scritto nel messaggio
news:ub_z6.24125$wG3.1...@news.infostrada.it...
[CUT]

> Premesso che e' sempre piacevole "battagliare" con te, ;-)

Anche per me č molto stimolante confrontarmi con te. ;-)
Devo ammettere che quella query l'ho fatta quasi come una piccola "sfida",
quando mi sembrava di aver capito che tu dicessi che con una query non si
potesse fare.

> 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.

Ammetto che sarebbe stato molto piů facile scrivere del codice VBA; ma un pň
la richiesta di Eugenio e un pň che ormai era diventato un punto di
impegno....

> Inoltre, come dicevi tu, dipende molto dai calcoli che devi fare.

Certo che si.

> 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.

Certo una procedura di paghe e stipendi non si esaurisce con la
determinazione delle ore lavorate e delle ore lavorate in un determinato
turno. Inoltre le rilevazioni statistiche postcedolino consigliano la
memorizione di calcoli intermedi. Certo le decisioni di come organizzare il
processo possono scaturire solo da una valutazione complessiva di tutte le
informazioni che devono essere fornite dalla procedura nel suo insieme.

> Non sono convinto che sia sufficiente una frazione di sencondo.

Le mie affermazioni riguardano solo i tempi di esecuzione di quella quella
query,

> 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.
>

Onestamente il computo della mia query tiene conto di questo aspetto: il
turno notturno puň cominciare alle 21:00 di un giorno e finire alle 7:00 del
giorno successivo. Nel mondo dei quotidiani, questa č una norma; molti degli
addetti ai centri stampa ed alle tipografie iniziano a lavorare un giorno e
finiscono di lavorare il giorno successivo; quanto alla coloritura del turno
ordinario, le variabili sono molte e complesse, specie se c'č anche del
lavoro straordinario che puň essere effettuato in testa, in coda o staccato
dall'orario ordinario.

> Ciao, Sib
>

Ciao ed alla prossima interessante discussione.
Roberto


Sib dal portatile

unread,
Apr 8, 2001, 6:32:23 PM4/8/01
to
"Roberto da casa" <r.ma...@libero.it> ha scritto nel messaggio
cut

> Ciao ed alla prossima interessante discussione.
> 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)


0 new messages