Newsgroup: it.comp.appl.access
Titolo: Cartellini-orologio

Salve e scusate il disturbo!
Sto costruendo un database con Access '97
sulla registrazione dati dei
cartellini-orologio.
Ho una tabella con i
seguenti campi:
Data - Tipo dati: data/ora; Formato: data in cifre
E1 -
Tipo dati: data/ora; Formato: ora breve 24h
U1 - Tipo dati: data/ora;
Formato: ora breve 24h
E2 - Tipo dati: data/ora; Formato: ora breve 24h
U2 - Tipo dati: data/ora; Formato: ora breve 24h
Ord - Tipo dati:
numerico; Dimensione campo: precisione doppia
      Formato: standard;
posizioni decimali: 2
Strd - Tipo dati: numerico; Dimensione campo:
precisione doppia
       Formato: standard; posizioni decimali: 2
Il
campo Data è il giorno della timbratura del cartellino
I campi E1...U2
servono per registrare le entrate e le uscite
Il campo Ord contiene le ore
di lavoro ordinario
Il campo Strd contiene le ore di lavoro straordinario
Ho creato la maschera associata alla tabella.
Ora le domande:
-
Esiste una funzione che esegue un calcolo per i campi E1...U2?
- È
possibile dopo avere immesso i dati nei campi "ora", immettere
automaticamente i valori nei campi Ord e Strd dopo avere eseguito il
calcolo
sui campi? Ad esempio se faccio 9 ore, 8 vanno nel campo Ord e 1
va nel
campo Strd.
- È possibile determinare il giorno di lavoro e se
questo è un sabato, far
capire al programma che sono ore di straordinario?
Grazie anticipatamente a tutti coloro che desiderano darmi una mano.
--------------------------------
Inviato via 
http://usenet.iol.it

 ha scritto nel messaggio
news:151Z20Z48Z92Y9...@usenet.iol.it...

Hai già controllato nel sito comune (
www.sitocomune.com
) le soluzioni
proposte?
Ciao.

Ciao.
Sono riuscito ad eseguire i calcoli sui campi
"ora", mi manca ancora da capire come devo fare per controllare il giorno
(lunedì, martedì...) in base alla data!!!
Questa è la soluzione che ho
trovato...
 
1) Ho creato sulla maschera 3 caselle di testo di supporto
che poi ho reso invisibili.
2) Nella casella TotMinuti ho impostato la
seguente formula:
=DateDiff("n";[E1];[U1])+DateDiff("n";[E2];[U2])
che,
come recita la guida in linea, "restituisce un valore Variant (Long)
corrispondente al numero di intervalli di tempo tra due date specificate" e
poi le somma. L'intervallo che ho utilizzato è il "minuto=n".
3) Nelle
caselle TotOrd e TotStrd viene calcolato il totale dei minuti.
4) Poi
nell'evento "Prima di aggiornare" della maschera ho inserito il seguente
codice:
 
Private Sub Form_BeforeUpdate(Cancel As Integer)
' controlla se ci sono straordinari
        ' in minuti, 8 ore sono
composte da 480 minuti.
 
        If Me.TotMinuti >= 480 Then '
più di 8 ore
            If Me.TotMinuti < 480 Then ' meno di 8 ore
' assegna al campo "Ord" il valore della casella TotOrd
Me.Ord = Me.TotOrd
                ' assegna al campo "Strd" il valore 0
(zero)
                Me.Strd = 0
            End If ' chiude la "IF
meno di 8 ore"
 
            ' inserisce i valori nei campi
dei risultati.
            ' ricava i minuti di straordinario
Me.TotStrd = Me.TotMinuti - 480
            ' imposta le 8 ore
Me.TotOrd = 480
            ' inserisce i risultati nei campi della
tabella
            ' dividendoli per 60 minuti
            Me.Ord =
Me.TotOrd / 60
            Me.Strd = Me.TotStrd / 60
        Else
' nessuna ora di straordinario
            Me.TotStrd = 0
Me.TotOrd = Me.TotMinuti
            ' inserisce i risultati nei campi
della tabella
            Me.Ord = Me.TotMinuti / 60
        End If
End Sub



Con la funzione format (vedi help):
es.
'------------
msgbox "Oggi č il giorno della settimama: " & format(date(),"dddd")
'------------
Ciao.

 ha scritto nel messaggio
news:9blvdm$4rf$1...@canarie.caspur.it...

Scusa, non mi sono spiegato.
Quando la data č "Sabato", il programma deve capire che sono ore di
"straordinario" e non ore "ordinarie" come ora succede nel codice che ho
impostato
Private Sub Form_BeforeUpdate(Cancel As Integer)
        ' controlla se ci sono straordinari
        ' in minuti, 8 ore sono composte da 480 minuti.
        If Me.TotMinuti >= 480 Then ' piů di 8 ore
            If Me.TotMinuti < 480 Then ' meno di 8 ore
                ' assegna al campo "Ord" il valore della casella TotOrd
                Me.Ord = Me.TotOrd
                ' assegna al campo "Strd" il valore 0 (zero)
                Me.Strd = 0
            End If ' chiude la "IF meno di 8 ore"
'......
in poche parole, devo eseguire un controllo sul campo "Data" della seconda
IF...Then... e verificare se č Sabato, perché sono meno di 8 ore, allora il
programma deve immettere le ore lavorate nel campo "Strd".
Come posso fare??
Grazie dell'aiuto


Ti avevo dato il "LA" ma se vuoi tutta la canzone:
'----------
If Me.TotMinuti < 480 or format(date(),"dddd") = "sabato" Then ' meno di 8
ore
'----------
Sempre se ho capito bene...
Ciao.

Ciao.
1) Ho
creato sulla maschera una quarta casella di testo di supporto chiamata
"txtGiorno" che poi ho reso invisibile.
2) Nell'evento "Dopo
Aggiornamento" della casella di testo "DataGiorno" ho impostato la seguente
formula:
Me.txtGiorno=DatePart("w", DataGiorno)
3) Poi nell'evento
"Prima di aggiornare" della maschera ho inserito il seguente codice
modificato:
 
Private Sub Form_BeforeUpdate(Cancel As Integer)
' controlla se ci sono straordinari
        ' in minuti, 8 ore sono
composte da 480 minuti.
 
        If Me.TotMinuti >= 480 Then '
piů di 8 ore
 
            If Me.TotMinuti < 480 Then  ' meno
di 8 ore dal Lunedě al Venerdě
                ' assegna al campo "Ord" il
valore della casella TotOrd
                Me.Ord = Me.TotOrd
' assegna al campo "Strd" il valore 0 (zero)
                Me.Strd = 0
End If ' chiude la "IF meno di 8 ore"
 
            '
inserisce i valori nei campi dei risultati.
            ' ricava i minuti
di straordinario
            Me.TotStrd = Me.TotMinuti - 480
' imposta le 8 ore
            Me.TotOrd = 480
            ' inserisce i
risultati nei campi della tabella
            ' dividendoli per 60 minuti
Me.Ord = Me.TotOrd / 60
            Me.Strd = Me.TotStrd / 60
------- inizio parte nuova
        ElseIf Me.txtGiorno = 7 Then '
controlla se il giorno timbrato č un sabato
            Me.Strd =
Me.TotMinuti / 60
            Me.Ord = 0
------- fine parte nuova
Else
        ' nessuna ora di straordinario
            Me.TotStrd = 0
Me.TotOrd = Me.TotMinuti
            ' inserisce i risultati nei campi
della tabella
            Me.Ord = Me.TotMinuti / 60
        End If
End Sub
Scusa ancora per il disturbo e alla prossima...


 di 8 ore dal Lunedė al Venerdė

E la conclusione? Non vorrai tenermi sulle spine...
Ciao.

Ciao.
La conclusione č che ho risolto il problema da solo!
Perň speravo in un
aiuto piů approfondito e tecnico, magari potresti valutare il codice e
dirmi cosa ne pensi?
Ciao


 dirmi cosa ne pensi?
Secondo me non ti conviene memorizzare dei dati che sono il risultato di un
calcolo; mi riferisco a "TotOrd" e "Strd". Utilizzerei due caselle di testo
con origine dati il risultato del calcolo effettuato da una funzione
passandogli i dati: DataGiorno, E1,U1,E2,U2 e Flag per indicare se = -1
(True) di calcolare lo straordinario.
Che ne dici?
Ciao.

 ha scritto nel messaggio
news:9c1hc9$llr$1...@canarie.caspur.it...

Ho testato il programma e funziona bene, riesco anche a determinare se il
giorno che viene timbrato č un "Sabato", quindi riesco ad immettere
automaticamente i valori ricavati nelle rispettive caselle.
Comunque, potresti farmi un esempio?
Ciao

 Ciao
Un esempio di casella di testo con origine dati la formula per il calcolo?
Es. per casella di testo che calcola lo straordinario
'------------
((DateDiff("n";[e1];[u1])+DateDiff("n";[e2];[u2]))-IIf(Weekday([giorno])=7;0
;480))/60
'------------
Ah! Ho usato la funzione WeekDay() invece di DatePart(), perché ritorna il
numero del giorno della settimana senza nessun parametro aggiuntivo altre
alla data.
Ciao.

 ha scritto nel messaggio
news:9c3rlb$p4m$1...@canarie.caspur.it...

Grazie!