[Lazarus-es] Formatos númericos en Lazreport

Francisco Javier Solis Palma fsolispa en gmail.com
Lun Jul 4 20:23:38 CEST 2011


Disculpa la molestia mi nombre es Francisco, tengo un problema algo similar al tuyo, bueno tu ya lo resolviste, tengo la siguiente rutina:

procedure TModuloDatosFrm.frReport1UserFunction(const AName: String; p1, p2,
   p3: Variant; var Val: Variant);
var
   sdato: double;
   Entero: Double;
   Fraccion: Double;
begin
   If AName = 'FORMATO' Then
   Begin
     sdato:=frParser.Calc(P1);
     if sdato = 10 then
     Begin
        sdato := Int(sdato);
        Val:=Format('%n', [sdato]);
     End
     else
     Begin
       Entero := Int(sdato);
       Val:=format('%n', [Entero]);
       Fraccion := Frac(sdato);
       If Fraccion<>  0 Then
         Val := Val + Format('%d', [Fraccion])
       Else
         Val := Val + Format('%.1d', [Fraccion]);
     end;
   end;
end;


El punto es que si el valor es = "10", me debe de mostrar el "10" solo sin decimales, esa parte ya esta puesto que así
lo muestra el sistema, ahora si el valor es menor pero no tiene decimales por ejemplo "9", me debe de mostrar "9.0", el
codigo lo realice como esta en el ejemplo, pero me da un error de

Paola perfecto. Quedó como sigue:

EConvertErrorConvertError con el mensaje invalid argument index format, me podrías ayudar gracias

procedure Tdm.rptUserFunction(const AName: String; p1, p2, p3: Variant;
   var Val: Variant);
var
   sdato: double;
begin
   sdato:=frParser.Calc(P1);
   if lowercase(AName) = 'noceros' then begin
     if sdato = 0 then
    Val:='-'
     else
       Val:=format('%n', [sdato]);
   end;
end;

***
Una pregunta: que hace la función  frParser.Calc


Saludos Cordiales
=========
||/  ISMAEL ||
/=========
   ----- Original Message -----
   From: Paola Bruccoleri
   To: Spanish version of Lazarus List
   Sent: Tuesday, April 26, 2011 10:07 AM
   Subject: Re: [Lazarus-es] Formatos númericos en Lazreport


   El 26/04/2011 09:52 a.m., Ismael L. Donis García escribió:
     Como podría formatear un campo numérico para cuando tenga valor 0 me salga -, ósea un signo de menos.

     Ejemplo:

     Num       Fecha        Valor CUC     Valor CUP
     ===       =======    =========    ========
     1           1/4/2011                   -              120.59
     2           1/4/2011             10.85                    -



   Hola Ismael..
   te puedes definir una función propia, por ejemplo llamada FORMATO

   en el reporte, pones donde va el valor, en vez de [qry."CAMPO"]
   esto:
   [FORMATO([qry."CAMPO"])]

   ¿dónde la defines? en el evento OnUserFunction del componente frreport.
   Acá te pego un ejemplo que uso (obtengo segundos de la consulta,  que quiero mostrarlos con el formato d hh:mm:ss


   procedure THorasOperario.rptInformeUserFunction(const AName: String; p1, p2,
     p3: Variant; var Val: Variant);
   var
     Secs: integer;
   begin
     if AName='SEG2TIME' then begin
       Secs := frParser.Calc(P1);

       Val :=  format('%dd ',[Secs div SecsPerDay]);
       Secs := Secs mod SecsPerDay;
       Val := Val + format('%.2d:', [Secs div 3600]);
       Secs := Secs mod 3600;
       Val := Val + format('%.2d:',[Secs div 60]);
       Secs := Secs mod 60;
       Val := Val + format('%.2d',[Secs]);
     end;
   end;

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20110704/ec659b47/attachment-0002.html>


More information about the Lazarus-es mailing list