<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body text="#000000" bgcolor="#ffffff">
<pre>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
=========
||<i> ISMAEL ||
</i>=========
----- 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; </pre>
</body>
</html>