Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Números a letras (https://www.clubdelphi.com/foros/showthread.php?t=79003)

metroyd 18-09-2008 19:16:09

Números a letras
 
Hola,espero puedan ayudarme. Estoy haciendo un reporte de cantidades. Al final en la banda Summary tengo los totales, los cuales calculo mediante un QRExpression. Pero me interesa tambien tener estos totales en LETRA. No se como hacer esto. Espero puedan ayudarme. No se como acceder al resultado del QRExpr.

NOTA: He bajado el ATexto, pero no se como usarlo. Tambien habrá cantidades con punto decimal (dos decimales)

Gracias

Caral 18-09-2008 19:42:30

Hola
Pones el componente en el form.
Pon esta funcion:
Código Delphi [-]
function Deletrear(numero: real) : string; var
  letras: TLetras;
begin
  letras := TLetras.Create(nil);
  try
    letras.Numero := numero;
    Result := letras.AsString;
  finally
    letras.Free;
  end;
end;
Luego indicas de donde sacas el dato y donde lo quieres pones.
Código Delphi [-]
var
 n: String;
begin
  n:= Deletrear(StrToFloat(QRExpression1.Text) );
  QRlabel1.Text:= (n);

A ver como va la cosa.
Saludos

ContraVeneno 18-09-2008 20:02:48

http://www.clubdelphi.com/trucos/ind...ll=0&scrollb=0

revisa hasta el final

metroyd 18-09-2008 20:03:19

Error:
 
ME MARCA EL SIGUIENTE ERROR:

Project sistema.exe raised exception Class EConverter error with message "" is not a valid floating point value.

Mi codigo es:

Código Delphi [-]
procedure TForm18.BitBtn1Click(Sender: TObject);
   // AQUI METI LA FUNCION QUE ME DIJISTE
   function Deletrear(numero: real) : string; var
     letras: TLetras;
   begin
     letras := TLetras.Create(nil);
     try
       letras.Numero := numero;
       Result := letras.AsString;
     finally
       letras.Free;
   end;
   end;
 // FIN DE LA FUNCION
var
  npages:integer;
  n:string;
begin
IF DE.Date > A.Date THEN BEGIN
         Application.MessageBox('ERROR EN LAS FECHAS','SISTEMA MULTAS',MB_ICONERROR);
     END
     ELSE BEGIN
         Form17:= TForm17.Create(Application);

        datamodule4.buscar.close;
        datamodule4.buscar.SQL.Clear;
        datamodule4.buscar.SQL.Add('SELECT multas.folio,agentes.clave_agente, agentes.nombre, agentes.rfc, multas.importe_agente, sum(multas.importe_agente) AS total_agente,'
        +'sum(multas.importe_agente) * 2 AS total_cien FROM agentes,multas,'
        +'detalle_multa_age WHERE multas.fecha_pago >= "'+QuotedStr(FormatDateTime('yyyy-mm-dd',de.date))+'" AND multas.fecha_pago <= "'+QuotedStr(FormatDateTime('yyyy-mm-dd',a.date))+'"'
        +' AND detalle_multa_age.nombre = agentes.nombre and detalle_multa_age.folio = multas.folio group by clave_agente');
        datamodule4.buscar.Open;

        form17.qrlabel4.Caption:=FormatDateTime('d mmm yyyy',DE.DATE);
        form17.qrlabel5.Caption:=FormatDateTime('d mmm yyyy',A.DATE);


        form17.QuickRep1.DataSet:=datamodule4.buscar;
        form17.QRDBText1.DataSet:=datamodule4.buscar;
        form17.QRDBText2.DataSet:=datamodule4.buscar;
        form17.QRDBText3.DataSet:=datamodule4.buscar;
        form17.QRDBText4.DataSet:=datamodule4.buscar;
        form17.QRDBText5.DataSet:=datamodule4.buscar;

        form17.QRDBText1.DataField:='clave_agente';
        form17.QRDBText2.DataField:='nombre';
        form17.QRDBText3.DataField:='rfc';
        form17.QRDBText4.DataField:='total_agente';
        form17.QRDBText5.DataField:='total_cien';
      
  // AQUI VIENE EL PROCESO QUE QUIERO HACER
        form17.QRExpr2.Expression:='SUM(total_cien)';
        form17.QRExpr3.Expression:='SUM(total_agente)';

    // ACCEDER AL RESULTADO DEL QREXPRE2:
         N:= Deletrear(StrToFloat(form17.QRExpr2.Value.strResult));
        form17.QRLabel22.Caption:=N;

        form17.QuickRep1.Prepare;

        nPages:=form17.QuickRep1.QRPrinter.PageCount;
        form17.QRLabel6.Caption:=FormatDateTime('d mmmm yyyy',DATE);
        form17.QRLabel20.Caption:=inttostr(npages);
        form17.QuickRep1.PreviewModal;
         form17.Close;

     END;

end;

metroyd 18-09-2008 20:14:17

Cita:

Empezado por ContraVeneno (Mensaje 315006)

Esta funcion (la ultima) que parametros le envio?? La puedo incluir en cualquier form???

metroyd 18-09-2008 20:27:54

Probé esto:
Código Delphi [-]
form17.qrlabel22.caption:= form17.QRExpr2.Value.strResult

Y el resultado son caracteres extraños. O sea, el problema viene desde como asignar el resultado de un QRExpr a una variable o label.

metroyd 18-09-2008 21:47:27

Ya pude resolver el problema
 
Gracias a los que me ayudaron.
El problema lo resolvi mediante el evento OnPrint del QRExpression:

Código Delphi [-]
procedure TForm17.QRExpr2Print(sender: TObject; var Value: String);

// AQUI METI LA FUNCION QUE ME DIJISTE
   function Deletrear(numero: real) : string; var
     letras: TLetras;
   begin
     letras := TLetras.Create(nil);
     try
       letras.Numero := numero;
       Result := letras.AsString;
     finally
       letras.Free;
   end;
   end;
 // FIN DE LA FUNCION

 var
    n:string;
begin
   form17.qrlabel37.Caption:=FOrmatfloat('#,##0.00',strtofloat(value));
   n:= Deletrear(StrToFloat(Value));
   form17.QRLabel39.Caption:=uppercase('( '+n+' PESOS 00/100 M.N.)');
   value:=form17.QRLabel37.Caption;

end;

ContraVeneno 18-09-2008 21:47:52

Cita:

Empezado por metroyd (Mensaje 315013)
Esta funcion (la ultima) que parametros le envio?? La puedo incluir en cualquier form???

La puedes incluir en cualquier formulario, le envías un valor tipo moneda y te regresa un texto

benjineo 25-05-2012 19:14:45

a mi me sale el mismo error, pero solo con cantidades como de 3450.00 pero con las pequenias si funciona bien(250.00)!!!....ya le movi al onprint y nada!..alguein sugiere algo?

Caral 25-05-2012 19:39:58

Hola
Si el dato es obtenido de un campo se necesita ponerlo en el evento before del componente table o query que se use.
NO el evento del reporte, el del query o table, segun sea el caso ya que necesita obtener el dato primero.
Saludos

benjineo 25-05-2012 19:45:05

de hecho me guie en el procedimiento de @metroyd, el dato lo estoy sacando de un QRExpr, lo paso a un QRLabel y despues ese QRlabel lo convierto, y me funciona bien para cantidades pequenias, pero ya a cantidades como de 3540 me arroja el error!

Caral 25-05-2012 19:53:43

Hola
Podrias usar un qrlabel.Caption:=Formatfloat('#,##0.00',strtofloat(value));
Asi le das formato ya que el ATexto funciona con numeros y sacas el dato de un caption.
Saludos

benjineo 25-05-2012 22:19:35

Se supone que asi lo hagio, Este es mi codigo:


procedure TVenta.QRExpr2Print(sender: TObject; var Value: String);

function Deletrear(numero: real) : string; var
letras: TLetras;
begin
letras := TLetras.Create(nil);
try
letras.Numero := Trunc(numero);
Result := Format('%s CON %d/100 .-', [Letras.AsString, Trunc(100*Frac(Numero))]); *no se si el error me de por esta seccion?!
finally
letras.Free;
end;
end;

var
n:string;
begin
Ventas.qrlabel38.Caption:=FOrmatfloat('#,##0.00',strtofloat(value));
n:= Deletrear(StrToFloat(Value));
form17.QRLabel39.Caption:=uppercase('( '+n+')');
value:=Ventas.QRLabel38.Caption;

end;

benjineo 29-05-2012 16:53:21

pues ya lo modifique y nada, me sigue dando el error cuando la cantidad es de 1000.00 para arriba solo me escribe bien cuando llega hasta 999.99...alguna sugerencia?

benjineo 31-05-2012 18:36:57

Números a letras
 
hola que tal a todos, tengo un problemilla, uso este codigo:

function Deletrear(numero: real) : string; var
letras: TLetras;
begin
letras := TLetras.Create(nil);
try
letras.Numero := Trunc(numero);
Result := Format('%s CON %d/100 .-', [Letras.AsString, Trunc(100*Frac(Numero))]); *no se si el error me de por esta seccion?!
finally
letras.Free;
end;
end;

var
n:string;
begin
Ventas.qrlabel38.Caption:=FOrmatfloat('#,##0.00',strtofloat(value));
n:= Deletrear(StrToFloat(Value));
form17.QRLabel39.Caption:=uppercase('( '+n+')');
value:=Ventas.QRLabel38.Caption;

end;

me funciona bien, pero solo para numeros hasta el 999.99, cuando pasa a 1000 me pone el siguiente error: "raised exception Class EConverter error with message "1000.23" is not a valid floating point value....

ya modifique en el on print, en el before print, y nada...alguna recomendacion?!!

benjineo 31-05-2012 20:22:55

#25
Hace 1 Minuto
benjineo
Registrado

Registrado: may 2012
Posts: 5

hola que tal a todos, tengo un problemilla, uso este codigo:

Código Delphi [-]
function Deletrear(numero: real) : string; var
letras: TLetras;
begin
letras := TLetras.Create(nil);
try
letras.Numero := Trunc(numero);
Result := Format('%s CON %d/100 .-', [Letras.AsString, Trunc(100*Frac(Numero))]); *no se si el error me de por esta seccion?!
finally
letras.Free;
end;
end;

var
n:string;
begin
Ventas.qrlabel38.Caption:=FOrmatfloat('#,##0.00',strtofloat(value));
n:= Deletrear(StrToFloat(Value));
form17.QRLabel39.Caption:=uppercase('( '+n+')');
value:=Ventas.QRLabel38.Caption;

end;

me funciona bien, pero solo para numeros hasta el 999.99, cuando pasa a 1000 me pone el siguiente error: "raised exception Class EConverter error with message "1000.23" is not a valid floating point value....

ya modifique en el on print, en el before print, y nada...alguna recomendacion?!!

benjineo 31-05-2012 20:26:59

lo que no eh intentado y voy hacer es lo dela configuracion regional!

Casimiro Notevi 31-05-2012 20:52:46

Hola benjineo, creo que necesitas volver a leer nuestra guía de estilo, gracias por tu colaboración :)

Y recuerda poner los tags al código fuente, ejemplo:



Gracias :)

Resumiendo, pregunta nueva en hilo nuevo.
Este es de hace 4 años y creo que no das ninguna solución al tema tratado, sino que tienes una duda similar, en todo caso.
Saludos.

benjineo 31-05-2012 21:04:12

error de Punto Flotante
 
una diculpa, tengo una duda similar, uso este codigo:

Código Delphi [-]
function Deletrear(numero: real) : string; var
letras: TLetras;
begin
letras := TLetras.Create(nil);
try
letras.Numero := Trunc(numero);
Result := Format('%s CON %d/100 .-', [Letras.AsString, Trunc(100*Frac(Numero))]); *no se si el error me de por esta seccion?!
finally
letras.Free;
end;
end;

var
n:string;
begin
Ventas.qrlabel38.Caption:=FOrmatfloat('#,##0.00',strtofloat(value));
n:= Deletrear(StrToFloat(Value));
form17.QRLabel39.Caption:=uppercase('( '+n+')');
value:=Ventas.QRLabel38.Caption;

end;

me funciona bien, pero solo para numeros hasta el 999.99, cuando pasa a 1000 me pone el siguiente error: "raised exception Class EConverter error with message "1000.23" is not a valid floating point value....

ya modifique en el on print, en el before print, y nada...alguna recomendacion?!!

Casimiro Notevi 31-05-2012 22:00:25

Bien, pero crear un hilo nuevo no es contestar a un hilo existente, tu pregunta no es una respuesta a este hilo en el que estamos.
Debes crear un hilo nuevo. Por ejemplo, en el mismo foro "Varios", botón "crear nuevo hilo", pones un título descriptivo y explicas lo que has puesto aquí.
Son equivocaciones normales en los "novatos" que llegan a clubdelphi, tenlo en cuenta para la siguiente pregunta que quieras hacer, gracias.

Tu error es simple: raised exception Class EConverter error with message "1000.23" is not a valid floating point value....

El problema es que estás usando las comas y los puntos al revés, o lo cambias en tu código o lo cambias en la "configuración regional" de windows. Allí debes decirle que usas las comas para separar millares y los puntos para los decimales... o viceversa.


La franja horaria es GMT +2. Ahora son las 11:08:10.

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