[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