Ahora si esta más claro. Pregunta clara... respuesta clara: Te daré una posible respuesta a modo que probes. Luego vos adecua el código a tu conveniencia.
1 - Crea un formulario y agregale: 2 textboxs. En el text1 cargaras un valor DATETIME() de la hora de entrada del vehículo. En el Text2 el valor DATETIME() de la salida. De modo que el formato sera la fecha/hora (15/10/2014 12:45:56). Agrega dos botones. Uno sera para darle click cuando el vehículo entre y así grabar la hora en el text1 y el otro para dar click cuando el vehículo salga y grabar la fechahora en el text2.
Agrega un tercer botón y aquí programaremos el código para recuperar cuantas medias horas han transcurrido entre las 2 horas.
2 - En el evento click del botón 1 (que servirá para agregar la hora de entrada al text1) coloca esto:
THISFORM.Text1.Value = DATETIME()
THISFORM.Text1.REFRESH
**--//
3 - En el evento click del botón 2 (que servirá para agregar la hora de salida en el text2) coloca esto:
THISFORM.Text2.Value = DATETIME()
THISFORM.Text2.REFRESH
**--//
4 - En el evento INIT() del formulario, coloca esto:
**--Apagamos conversacion eco de foxpro
SET TALK OFF
**--Cambiamos la forma de ver horas a tipo 24
SET HOURS TO 24
**--Tipo de fecha inglesa/hispana
SET DATE BRITISH
**--
THISFORM.AutoCenter = .T.
5 - En el evento click del botón 3 que es donde generaras el calculo, coloca este código:
LOCAL ldEntrada, lnDate, lnTiempoC, lnHoraEntrada, lnHoraSalida, ln1, ln2
LOCAL ldAño, ldMes, ldDia, lnHoras, lnMins, lnSec
**--
LOCAL lnMinutosDif, lnHorasDif
**====================================
**--FECHA INICIAL - MOMENTO DE ENTRADA
**====================================
**--Cargamos la fecha (como ejemplo)
**ldEntrada = CTOD('15/10/2014')
ldEntrada = DTOC(THISFORM.Text1.Value)
ldEntrada = CTOD(ldEntrada)
**--Extraemos los datos de la fecha
ldAño = YEAR(ldEntrada)
ldMes = MONTH(ldEntrada)
ldDia = DAY(ldEntrada)
**--//
**--CArgamos el tiempo (tipo caracter)
**lnTiempoC = "8:00"
lnTiempoC = SUBSTR(TTOC(THISFORM.Text1.Value), 10, 5)
**--Extraemos los datos del tiempo
lnHoras = SUBSTR(lnTiempoC, 1, 2)
lnMins = SUBSTR(lnTiempoC, 4, 2)
lnSec = 0
**--Pasamos a numerico
lnHoras = VAL(lnHoras)
lnMins = VAL(lnMins)
**--//
**--Transformamos a datetime
**--la entrada
lnHoraEntrada = DATETIME(ldAño, ldMes, ldDia, lnHoras, lnMins, lnSec)
**=================================
**--FECHA FINAL - MOMENTO DE SALIDA
**=================================
**--Cargamos la fecha (usamos DATE como ejemplo)
*lnDate = DATE()
lnDate = DTOC(THISFORM.Text2.Value)
lnDate = CTOD(lnDate)
**--Extraemos los datos de la fecha
ldAño = YEAR(lnDate)
ldMes = MONTH(lnDate)
ldDia = DAY(lnDate)
**--//
**--CArgamos el tiempo (tipo caracter)
*lnTiempoC = "23:00"
lnTiempoC = SUBSTR(TTOC(THISFORM.Text2.Value), 10, 5)
**--Extraemos los datos del tiempo
lnHoras = SUBSTR(lnTiempoC, 1, 2)
lnMins = SUBSTR(lnTiempoC, 4, 2)
lnSec = 0
**--Pasamos a numerico
lnHoras = VAL(lnHoras)
lnMins = VAL(lnMins)
**--//
**--Transformamos a datetime
**--la salida.
lnHoraSalida = DATETIME(ldAño, ldMes, ldDia, lnHoras, lnMins, lnSec)
**--Obtenemos las diferencias en segundos
**--entre las expresiones DATETIME() del momento
**--de entrada y salida.
**--Diferencia en Horas
lnHorasDif = lnHoraSalida - lnHoraEntrada
**
lnHorasDif = (lnHorasDif/60)/60
**--
MESSAGEBOX("Las horas de diferencia son: " + ALLTRIM(STR(lnHorasDif)))
**--Diferencia en minutos
lnMinutosDif = lnHoraSalida - lnHoraEntrada
lnMinutosDif = lnMinutosDif/60
MESSAGEBOX("Los minutos de diferencia son: " + ALLTRIM(STR(lnMinutosDif)))
**--Diferencias en medias horas
lnMediasHoras = lnHorasDif * 2
MESSAGEBOX("Las medias horas completas transcurridas han sido: " + ALLTRIM(STR(lnMediasHoras)))
Luego guarda los cambios y ejecuta. Marca el primer botón con click y veras el DATETIME en el text1. Esa es tu hora de entrada. Anda al reloj de tu pc (para no tener que esperar) y adelanta unas horas el reloj. Guarda la hora y regresa al form y marca el click del botón 2 y veras la hora de salida.
Luego da click en el 3 botón y te enviara unos mensajes con la diferencia en horas, minutos y cuantas medias horas han transcurrido. En el código del botón 3 esta todo el cerebro. Ahí esta el calculo del tiempo y las variables que almacenan los resultados. A vos te debería interesar la variable lnMediasHoras que es la que almacena cuantas medias horas han transcurrido.
Ahora solo adecua el código a tus necesidades respetando los datos.
Cualquier cosa, avisame para ayudarte. No olvides puntuar la pregunta. Estoy a la orden para ayudarte en lo que sea.
Un abrazo!
Desde Managua, Nicaragua!
Ravenn :D :D :D
Hola. Un placer. A esas funciones DATETIME les faltan parametros. De igual forma, se tendría que descomponer al momento de la entrada para poder alimentar todos los parámetros y así hacer la resta. Si se toma un dato generado con DATETIME() para grabar las entradas y salidas (tal y como establece el requerimiento), aplicarle directamente la resta no surtiría efecto, dado se necesita siempre obtener por separado cada parámetro: DATETIME([nYear, nMonth, nDay [, nHours [, nMinutes [, nSeconds]]]])Saludos. - ravenn