Newsgroup: it.comp.appl.access
Titolo: Operazioni con ORE...!

Il problema non č cosě banale come da Subject.
Ho una Tabella di Manutenzione con un campo(tipo da stabilire) OreResidue
che dovrebbe contenere un campo ORE(e pensavo di usare DATA/Ora).
Ogni intervento che eseguo devo sottrarre alle ore residue le ORE lavorate
dal macchinario.
Ora devo eseguire la formattazione dell'immissione ORE nel campo TextBox
associato ad OreLavorate(pensavo 90.00).
Il problema č che il mio Macchinario ha come Monteore iniziale (120 ore e 00
minuti)
il chč stride con il campo DATA, di conseguenza non sapendo come aggirare
l'ostacolo
ed i problemi di operazioni matematiche ho utilizzato un campo Testo
Formattato="90.00"
per l'immissione, quindi con una Funzione recupero ore, minuri ed eseguo
l'operazione.
Il problema mi nasce dal fatto che inserendo la maschera Input mi viene
restituito
0200 come 2 ore lavorate, e se il riconoscimento ORE/MIN lo eseguo prendendo
a 2 a 2 i caratteri della STRINGA, ma se dovessiinserire 10000 per indicare
100 ore
lavorate ovviamente non funziona piů.....!
Penso e sono sicuro che si deve essere un sistema piů semplice che mi
sfugge, poichč
gestire con una Funzione le casistiche mi pare odioso.
Grazie.
@Alex.


Ciao @Alex
Togli il formato e  metti nella proprietà maschera di input 00.00;0  e ti
viene reso anche il separatore punto, se devi usare tre cifre per le ore
metterai 000.00;0
Ciao Giorgio

 @Alex.
E' nota l'impossibilità in Access di formattare (hh:mm:ss) un campo di tipo
Data/ora se esso contiene un valore maggiore di 23 ore, 59 minuti e 59
secondi.
Per cui un "monte ore" che risulti dalla somma/differenza di orari io
preferisco trattarlo con un campo/variabile di tipo numerico in doppia
precisione ed imposto a Fisso il suo formato; in esso il dato sarà
rappresentato in ore e frazioni di ore, quindi 45 ore e mezzo sarà espresso
con 45,50.
Se a questo campo/variabile numerico (OreResidue) devi sottrarre il numero
di ore contenute in un campo di tipo Data/ora,  prima della differenza è
sufficiente che moltiplichi quest'ultimo per 24, ovvero:
OreResidue = OreResidue - (Ore*24)
Evidente è la facilità di effettuare operazioni matematiche con un campo che
contiene la sommatoria di ore e che ha una struttura come questa (si pensi
solamente alla moltiplicazione tra il totale delle ore ed il costo orario).
Se poi vuoi proprio visualizzare il campo numerico in doppia precisione
OreResiduo nel formato HH:mm, gioca un po' con la funzione Format, ovvero:
OreResidueHHmm = Int(OreResidue) & ":" _
& Int((OreResidue -Int(OreResidue))*60)
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 Ciao Giorgio
Forse sbaglio qualche cosa, ma era la prima cosa che ho fatto,
ora l'ho riprovata, ma continua a darmi questo comportamento:
Controllo non associato con InputMask come mi hai indicato:
Inserisco 02.50 (per intendere 2 ore e 30Min) ma omettiamo
momentaneamente il riferimento orario, e proviamo a considerarlo
solo un numero.
Bene se eseguo Me.TextBoxNonassociata*2=500 mi aspettavo
5, di conseguenza sono sicuro di commettere un errore di base.
Ciao.
@Alex.

 Roberto
In ogni caso credo che effettivamente la soluzione da te illustrata sia
l'unica
che non mi faccia impazzire e decisamente funzionale.
Grazie.
@Alex.


C'è il punto di mezzo e il contenuto di TextBox è Stringa! devi convertirlo
in numero.
Val(Me.TextBoxNonassociata)*2=5
Ciao Giorgio

 Ciao Giorgio
C........zzo.
Si vero non ho parole, ma come ho spiegato nel post a Roberto
mi hanno forzato l'immissione del formato ORA per non dover
convertire ogni volta i minuti in frazioni di ora....!
Di conseguenza trattare Numeri o Testo a questo punto č =
almeno credo.....!
Il formato Data/Ora era comodo solo perchč presenta i ":"
come separatore, cosa che non mi prende se imposto
a Standard il controllo......!
Sono fisime, ma cosě mi hanno imposto........
@Alex.


Ciao,
io in questi casi faccio cosě
-------------------
Tabella
------------
OraT   (ora in Testo inputata dall'utete 6 caratteri 000.00)
OraN  (numero seriale dell'ora Double)
------------
Form
------------
Una Casella testo che chiamo T_OraT associata al campo OraT con InputMask
000.00;0 in modo da forzare l'utente ad inserire sempre con lo stesso
formato.
Nell'evento Form_BeforeUpdate inserisci nel campo OraN il numero seriale
dell'ora
Private Sub Form_BeforeUpdate(Cancel As Integer)
    Me!OreN = (Left(Me.T_OreT, 3) / 24) + (Right(Me.T_OreT, 2) / 24 / 60)
End Sub
Quando vuoi sommare le ore fa la SUM(OraN) e per formattarlo ....
=Format(Fix(Somma([OreN]))*24+DatePart("h";Somma([oreN]));"000") & "." &
Format(DatePart("n";Somma([oreN]));"00")
Ciao Giorgio

 >
Dimenticavo
se devi moltiplicare le ore per un importo orario basta fare
Sum(OreN)*24*ImportoOra
Ciao Giorgio

 ha scritto nel messaggio
news:bvh49t$dcq$1...@lacerta.tiscalinet.it...

Eccezionale.................!!!!
Funziona alla grande, devo solo riconoscere quando va in negativo poichè
non ci và mai, ma basta confrontare i due Campi OreN e se il secondo è
maggiore
del primo ho esaurito il Monteore......!!!
Grazie moltissime.