--- El lun 18-oct-10, Paola Bruccoleri <pbruccoleri en adinet.com.uy> escribi�:
Show quoted text 36 lines
De: Paola Bruccoleri <pbruccoleri en adinet.com.uy>
Asunto: Re: [Lazarus-es] trabajando con horas
A: "Spanish version of Lazarus List" <lazarus-es en lists.lazarus.freepascal.org>
Fecha: lunes, 18 de octubre de 2010, 16:17
El 18/10/2010 02:26 p.m., Jos�
Mejuto escribi�:
> Hello Paola,
>
> Monday, October 18, 2010, 6:21:22 PM, you wrote:
>
> PB>� la cosa que no lo pude hacer
funcionar!!..
> PB>� coloqu� la dll en la carpeta UDF de
firebird, reinici� el server, pero
> PB>� cuando voy a probarla desde el ibexpert
me dice que la funci�n no
> PB>� existe. Quiz�s me est� faltando hacer
algo..
> PB>� chauuuuuuuu
>
> Las UDF tienes que registrarlas en la base de datos,
para cada base de
> datos:
http://www.firebirdfaq.org/faq169/
ok.. ya est� registrada!!.. qu� complicado (m�s bien
laaargoo de hacer) si se me ocurre tener registradas todas
las que trae la dll!!
Bueno, esto:
SELECT SECONDS2PERIOD(SUM(hs_trabajo - cast('0:0' as
time))) FROM form_03
me devuelve correctamente, pero en formato string la suma
de las horas: dd:hh:mm:ss..
pero .. se complica la suma final desde el lazreport.
Exacto, no creo que sea el mejor m�todo en este caso, ver adelante...
Show quoted text 6 lines
Me gustar�a que si Jes�s puede, vea c�mo optimizar
esto:
[STR(INT([qry."HS_TRABAJO"] /
3600))]:[STR(INT([qry."HS_TRABAJO"] mod 3600) /
60))]:[STR((([qry."HS_TRABAJO"] mod 3600) mod 60))]
no creo eso sea buena idea, a ver, si [qry."HS_TRABAJO"] regresa la cantidad de segundos acumulada por operario, en mi opini�n seria mejor dejarle el trabajo de formatear el resultado a una funci�n de usuario, digamos [MiFormato([qry."HS_TRABAJO"])].
La funci�n MIFORMATO (LazReport lo pone autom�ticamente en may�sculas) se procesa en el evento OnUserFunction del componente TfrReport. En el ejemplo "Editor" se ilustra como procesar posteriormente el par�metro [qry."HS_TRABAJO"] mediante Secs := frParser.Calc(P1), como resultado obtendr�s el valor de segundos, el cual puedes procesar de la siguiente manera:
Val := format('%d Dias ',[Secs div SecsPerDay]);
Secs := Secs mod SecsPerDay;
Val := Val + format('%d:', [Secs div 3600]);
Secs := Secs mod 3600;
Val := Val + format('%d:',[Secs div 60]);
Secs := Secs mod 60;
Val := Val + format('%d',[Secs]);
o usando las formulas que ya han comentado. De esta manera puedes reusar la funci�n MIFORMATO en cuantos campos necesites.
Tambi�n, esto te permitir� usar la funci�n de LazReport SUM combinandola asi [MiFormato(SUM(Campo))] para calcular el total y mostrarlo formateado.
Show quoted text 6 lines
en cada campo del lazreport.. o sea, si se puede poner
alguna funci�n en alg�n lado.. no s�.. se me ocurre..
otra cosa.. �c�mo es la sintaxis del FORMATTEXT para que
un n�mero de 1 d�gito quede de 2?... 8 -> 08
La funci�n FORMATTEXT esta ligada a la funci�n FormatMaskText la cual no se si este funcionando correctamente, se supone que en Delphi lo haga, mas tarde tratare de ver como funciona.
Si planeas usar el m�todo que te comento, no es necesario hacer nada extra ya que la funci�n de usuario regresa el valor ya formateado. Si necesitas formatear otros valores te sugiero usar la funcionalidad del bot�n "Formato" (hacer doble clic sobre el campo en el dise�ador de reportes), tiene editor de formato muy f�cil de usar.
Jesus Reyes A.