Incrementar hora


([N1] santiprat) #1

Hola amigos de Velneo, aquí con una consulta!!!

Resulta que estoy haciendo una aplicación que tiene como una agenda, cuando llega el dìa y la hora en que programe la tarea se abre un formulario emergente (formulario de modificacion) y ahi quiero poner un combobox que sirva para postergar la misma. Las opciones para postergar son: 5 min, 10 , 15 , 20, 30, 45, 1 hora, 2, 3, 4, 6.

Hay alguna forma de poder incrementarle al campo del tipo Hora, los minutos-horas que tengo en el combobox? he probado con modificar campo, pero no encuentro ninguna funcion que sea para añadir minutos - horas.

agradezco su ayuda.

 

a las órdenes

Santiprat


([N1] ebarbeito) #2

Hola,

Podrías utilizar la señal de combobox “Item: cambio de seleccionado” y un manejador de evento que utilice la función addSecondsToDateTime(tiempo, segundos) para sumar los segundos al valor de tiempo indicado.

Si la fecha y la hora las tienes en campos separados, puedes componer el tiempo con la función setDateTime(fecha, hora). Y los segundos los calculas en función al valor del combobox seleccionado. Si el combobox es de una tabla estática te puedes crear una función que pasándole un posible valor de la tabla estática se encargue de calcular el número de segundos equivalentes y lo devuelva como dato de retorno.

Saludos


([N1] Pepeto) #3

Tienes la función “addSecondsToHour(hora, segundos)” si el campo o variable es de tipo hora.

También tienes “addSecondsToDateTime(tiempo, segundos)” si el campo o variable es de tipo Time

Si lo que deseas es sumar Minutos/horas, solo tienes que realizar el cálculo en segundos.

 

un saludo

José Luis


([N1] santiprat) #4

Muchas gracias, les comento que lo pude solucionar con la funcion addSecondsToHour, solo hice el calculo en segundos y ya.

Ahora, encontre otro problema que no me habia dado cuenta y es que, tarea que tiene como hora 23:00 y decido postergarla por 2 horas, ademas de cambiar la hora por 1:00 deberia de cambiar al dia, esto ultimo no logro controlarlo.


([N1] Pepeto) #5

Precisamente, la función “addSecondsToDateTime(tiempo, segundos)” hace eso mismom ya que se trata de añadir segundos a campos o variables de tipo TIEMPO, es decir, Fecha+Hora

un saludo

José Luis


([N1] santiprat) #6

Gracias por la informacion. Veo que con un campo del tipo TIEMPO se puede solucionar.

hay alguna forma de que se pueda editar el campo TIEMPO por separado? es decir, en un formulario tener dos controles, uno de edición de fecha y otro de edición de hora. He probado pero cuando cambio la hora se cambia la fecha y cuando cambio la fecha se cambia la hora


([N4] eic) #7

Hola.

Creo que no es factible hacer eso. Tendrías que tener un tercer campo tiempo, que tendrás que componer con los campos de fecha y hora.

 


([N1] ebarbeito) #8

Hola,

Sí que podrías hacerlo utilizando máscaras. En el formulario utiliza dos controles de edición fecha/hora, asígnales el campo tiempo a ambos y en la propiedad de máscara para la fecha utilizas dd/MM/yyyy. En el campo para la hora la máscara sería HH:mm:ss o sin los segundos.

Pruébalo a ver qué tal. Saludos


([N1] santiprat) #9

Muchas gracias a todos por compartir sus experiencias. Les cuento que pude solucionar el problema con el método de ebarbeito, es muy eficiente y recomendable.

Saludos

A las ordenes

santiprat


([N1] elultimo) #10

Hola amigos. deseo de su ayuda. tengo una aplicación de parqueadero. tengo ya los campos y las funciones de hora de inicio y hora fin al igual el resultado en minutos, pero lo que no he podido es realizar la función de un pago de consumo de tiempo. O sea, que si ponemos un costo de 20.00 por cada 30 minutos, si marca una hora= total a 40.00, hora y 30 minutos total a 60.00 ¿como hago yo para que el resultado sea a intervalos cada 30 minutos? si inicia un cliente a las 10:00 am y finaliza a las 10.30 am el pago es 20.00 o si finaliza a las 11.00 el pago será de 40.00 como realizo este resultado del pago por intervalo de cada 30 minutos? Espero de u gran ayuda.
Saludos desde México


([N4] Infortic) #11

Hola.

¿Divide los minutos totales entre 30 redondeando a 0 decimales y ya está no?, ¿ o se me escapa algo ?


([N1] vgegeo) #12

Si solo paga por tramos de 30 minutos enteros, lo que dice @infortic
Si paga por tramos de 30 minutos iniciado, realiza la misma operacion:
-Si no tiene decimales, te quedas con el entero.
-Si tiene decimales, te quedas con el entero superior.

Ejemplo:
-Inicio 10:00 - Fin 11:00 - Resultado: 2 - Importe: 2 por el valor que quieras
-Inicio 10:00 - Fin 11:10 - Resultado: 2,33 - Importe: 3 por el valor que quieras

Saludos


([N1] elultimo) #13

hola gracias por responder. Pero no es así, así no da el resultado. Por ejemplo el costo de 30 minutos es de 20.00 si entra a las 10.00 y sale a las 10.30 total de pagar 20.00 pero si se pasa de los 30 minutos y sale a las 10.45 tiene que pagar las 2 horas 40.00 a partir de los 30 minutos en adelante ya se cobra por hora extra. si por ejemplo entra a las 10.00 y sale a las 11.30 debe de pagar 1 hora 30 minutos consumido que sera un total de 60.00 y aquí es el detalle de como hacer el total de cobro que sea por fracción. Yo lo que hice es correr los minutos y va dando el costo de cobro. 20.00=30 minutos .66=1 minuto. Cuando empieza a correr el tiempo va marcando el costo por minuto y si entra a las 10.00 y sale a las 10.50 marcaría total de minutos multiplicado por .66 y aquí es por fracción el cobro si sale a las 10.50 ya es cobro 2 horas, espero me haya dado a entender amigos y eso es lo que no puedo y necesito la ayuda de ustedes genios. Saludos


([N4] Infortic) #14

Ufff me he liado jejejejejeje.

A ver… me parece entender que las medias horas se cobran enteras a 20 y los minutos restantes a 0.66 el minuto

¿ Es así ?

Si es así y suponiendo que tienes un campo #MINUTOS que indica la cantidad de minutos.

Declara dos variables numericas sin decimales (COMPLETO,RESTO)

Set ( COMPLETO, cut(#MINUTOS/30, 0) )
Set ( RESTO, #MINUTOS-(COMPLETO*30) )
Set ( IMPORTE , (COMPLETO*20)  + (RESTO*0.66) )

([N1] elultimo) #15

si, se cobra 30 minutos a 20.00 y si se pasa a 45 minutos sin llegar a la hora se cobra como hora. Estoy trabajando con 6x. La tabla se llama TIEMPO con submaestro ENTRADA Y SALIDA y en este submaestro se da el minuto y el costo que en el campo “pagar” esta asi: %MINUTOS%*%PRECIO-MINUTO%…y en la tabla Maestra se da el total del ticket e imprimir en ese total le puedo agregar descuento pero da el cobro como va corriendo los minutos y necesito saber por fraccion sin que llegue a los otros 30 minutos


([N4] Infortic) #16

Hola.

Sigo sin entenderlo, cuando se cobra cada cosa.

Rellena la tabla:

30 minutos = 20
45 minutos = ???
46 minutos = ???
59 minutos = ???
60 minutos = ???
61 minutos = ???
70 minutos = ???
89 minutos = ???
90 minutos = ???
104 minutos = ???
105 minutos = ???

Para que nos hagamos una idea porque no se sabe si hasta esos 15 minutos se cobra o no, si solo son fracciones completas, … , no está claro.


([N1] elultimo) #17

Essta asi…
30 minutos = 20
45 minutos = 40
46 minutos = 40
59 minutos = 40
60 minutos = 40
61 minutos = 40
70 minutos = 40
89 minutos = 40
90 minutos = 60
104 minutos = 60
105 minutos = 60

110 minutos =80
120 minutos =80

Si es 30 minutos cobro 20.00 pero aunque no llegue a una hora, que sean 45 minutos como sea se cobra como si fuera ya la otra hora. LLegando a los 45 minutos se cobra otra hora. el total de pagar es lo que no le encuentro como seria la funcion para que antes de llegar a la hora ya cobre como si fuera una hora


([N4] Infortic) #18

Hola.

Primero créate una funcion CALC_IMPORTE que reciba 3 parámetros, CANT_MINUTOS y MINUTOS_FRACCION y PRECIO_FRACCION y se la pones como contenido inicial al importe.

Se puede hacer con una fórmula normal y corriente, pero así lo tendrás más fácil si cambia la forma de calcularlo, simplemente cambias la función y puedes hacer varias instrucciones en lugar de una sola, te será más fácil.

No he probado este código, es de cabeza, es v7, para 6 cambia el choose por fDecidirDato, el cut por la función que sea e 6 (no la recuerdo) y debería funcionar

Set ( COMPLETO, cut(CANT_MINUTOS/MINUTOS_FRACCION, 0) )
Set ( RESTO, CANT_MINUTOS-(COMPLETO*MINUTOS_FRACCION) )
Set ( IMPORTE , (COMPLETO*PRECIO_FRACCION)  + choose(RESTO>14,PRECIO_FRACCION,0) )

Con 89 minutos no sería 60?