Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-05-2016
Avatar de Arsenio
Arsenio Arsenio is offline
Miembro
 
Registrado: oct 2006
Posts: 13
Poder: 0
Arsenio Va por buen camino
Cálculo de variables y acumuladores en FastReport 4

Hola gente, estuve bastante investigando sobre el tema y como al final logré hacer lo que necesitaba se los traigo para todos...
si ustedes deciden despues lo pueden poner como truco, pero me parece que la parte de reportes es donde uno buscará antes.

Básicamente necesitaba en un reporte mostrar la diferencia entre dos fechas (en un formato leíble por el cliente) y al final
mostrar el promedio de esas duraciones.

En el FastReport, si sobre una variable vamos a los eventos y damos doble click nos genera el cuerpo del evento en la solapa del código.
Los cuatro eventos que uso son OnBeforePrint y son sobre TfrxMemoView. RestaFechas y TiempoEstimado (este va en el Sumario) son
los únicos que se muestran, los otros estan solo para usar sus eventos.

Código Delphi [-]
const
  MascaraDias = '%d días %2.2d horas %2.2d minutos';
  MascaraHoras = '%2.2d horas %2.2d minutos';
  MascaraMinutos = '%d minutos';

//Variables globales usadas para obtener el promedio
var
  Acumulador:Extended;
  Contador: Integer;

//Función que separa el tiempo en días, horas, y minutos y lo devuelve en un string formateado
function TiempoLeible(valor: Extended): String;
var
  d, h, m, s, ms: Word;
  tiempo: String;    
begin    
 d := Trunc(valor);      
 DecodeTime(valor, h, m, s, ms); 
 Result := '';  

 //Si hay días
 if d > 0 then        
   Result := Format(MascaraDias, [d, h, m])
 else
 //Si hay horas       
 if h > 0 then        
   Result := Format(MascaraHoras, [h, m])
 else
   //Muestra minutos como lo más pequeño             
   Result := Format(MascaraMinutos, [m]);             
end;          

procedure RestaFechasOnBeforePrint(Sender: TfrxComponent);      
var
  valor: Extended;
  tiempo: String;            
begin
  //Obtiene la diferencia entre los dos campos fecha                    
  valor := DetalleRecepciones."HORA_TOMA" - DetalleRecepciones."HORA_LLEGA";
  tiempo := TiempoLeible(valor);      
  RestaFechas.Text := tiempo;         
end;

procedure RestaTiempoFloatOnBeforePrint(Sender: TfrxComponent);
var
  valor: Extended;    
begin
 //Obtiene la diferencia entre los dos campos fecha       
 valor := DetalleRecepciones."HORA_TOMA" - DetalleRecepciones."HORA_LLEGA";
 //Acumula para el promedio      
 Acumulador := Acumulador + valor;
 //Cuenta para despues obtener el promedio            
 Contador := Contador + 1;
 //Esta variable no se muestra, solo para las pruebas...                    
 RestaTiempoFloat.Text := Format('%d: %s', [Contador, FloatToStr(Acumulador)]);     
end;

procedure PromedioOnBeforePrint(Sender: TfrxComponent);
var
  valor: Extended;
  tiempo: String;        
begin
  valor := 0;
  tiempo := '0';             
  //Cálculo del promedio
  if Contador > 0 then
  begin
    valor := Acumulador / Contador;
    tiempo := TiempoLeible(valor);            
  end;

  Promedio.Text := tiempo;      
end;

procedure TiempoEstimadoOnBeforePrint(Sender: TfrxComponent);
begin
  //Muestra el entero como x minutos               
  TiempoEstimado.Text := VarToStr() + ' minutos';         
end;

begin

end.

Donde dice:
Código:
  valor := DetalleRecepciones."HORA_TOMA" - DetalleRecepciones."HORA_LLEGA";
reemplazar con:
Código:
  valor := <DetalleRecepciones."HORA_TOMA">-<DetalleRecepciones."HORA_LLEGA">;
Ya que el editor de estilos si lo dejaba con "<" y ">" se mostraba mal.

Espero les sirva.
__________________
Arsenio Lupín - howtoarsenio.blogspot.com
Responder Con Cita
  #2  
Antiguo 22-05-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Arsenio.

Muchas gracias por tu aporte

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 23-05-2016
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.234
Poder: 20
ElKurgan Va camino a la fama
Thumbs up

Gracias por el aporte

Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Paso de parámetros en FastReport o acceder a un label de un fastreport desde asp.net mamen Impresión 1 22-03-2012 15:29:23
Uso de variables desde el mismo fastreport jzginez Impresión 1 16-12-2008 22:48:27
FastReport: imprimir listados de campos variables Lepe Impresión 9 11-02-2008 00:47:36
Para pasar variables de Delphi a FastReport David Impresión 3 11-05-2007 20:14:22
variables variables (manual php) salvica PHP 0 25-09-2005 16:44:52


La franja horaria es GMT +2. Ahora son las 12:55:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi