[Lazarus-es] trabajando con horas

Paola Bruccoleri pbruccoleri en adinet.com.uy
Dom Oct 17 22:27:34 CEST 2010


  El 17/10/2010 03:04 p.m., Paola Bruccoleri escribió:
>  Hola a todos..
> necesito la ayuda experta de Uds..
>
> Tengo una tabla en Firebird con campos de este tipo, donde se guardan 
> las hs trabajadas diariamente.
> HS_OPERARIO TIME
> ......
>
> Necesito hacer un reporte donde obtener obviamente la suma de horas 
> por vehiculo, y a la vez una suma total.
>
> Lo más lógico sería hacer un select sum(hs_operario) from tabla.... 
> pero en firebird esto no funciona tan así.
> He logrado obtener con sql la suma extrayendo horas, minutos, 
> segundos, haciendo cuentas y obteniendo el resultado en formato 
> hhh:mm:ss, pero como string.
> No puedo usar un cast a tipo time porque obviamente obtendré valores 
> de mas de 24hs. Y se me cpmplica obtener la suma total de los renglones..
>
> Encontré otra forma de sumar horas pero me devuelve el resultado en 
> segundos.
> Entonces, pensé que lazreport me hiciera las cuentas y obtener el 
> formato que yo deseo, haciendo algo de este tipo:
>
> [ [qry."HS_TRABAJO"] / 3600 + ":"+ MOD([qry."HS_TRABAJO"], 3600)/60 + 
> ":"+ MOD( MOD([qry."HS_TRABAJO"], 3600), 60)
>
> pero esto no funciona así.. además, necesitaría obtener las partes 
> enteras de las divisiones...
> Quizás haya que usar algo en OnUserFunction, pero no me doy cuenta de 
> cómo resolverlo.

Bueno.... siguiendo con esto, he logrado casi casi todo...

este sql
SELECT SUM(hs_trabajo - cast('0:0' as time)) FROM tabla

me devuelve la suma en segundos.

En el lazreport hago esto:
[STR(INT([qry."HS_TRABAJO"] / 3600))]:[STR(INT([qry."HS_TRABAJO"] mod 
3600) / 60))]:[STR((([qry."HS_TRABAJO"] mod 3600) mod 60))]

y obtengo en formato de horas..

estuve mirando la función FORMATTEXT para que cuando es una hora, min o 
seg de 1 dígito me agregue el 0 a la izquierda, haciendo esto: 
FORMATTEXT('00', .....) o FORMATTEXT ('##',...) pero me salta error 
invariant type.... No he encontrado info con sintaxis de las máscaras a 
aplicar allí.

Ahora, esto lo debo hacer con varios campos de este tipo.. y encima, al 
final del reporte, obtener la suma de las columnas.
¿habrá alguna forma de poner en una función en lazarus toda esta conversión?

muchas gracias
chauuuuuuuuu







More information about the Lazarus-es mailing list