Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   QuickReport, Resultado en letras (https://www.clubdelphi.com/foros/showthread.php?t=69853)

Lenny 13-09-2010 22:47:39

QuickReport, Resultado en letras
 
Holas a todos y gracias de antemano, tengo un reporte en QuickReport, en el cual utilizo un QRExpr el cual esta con esta "Expression":

Cita:

SUM(TOTFACTURACION.MAYOR * TOTFACTURACION.Cantidad * 1.19)
Lo que hace es irse a una tabla y busca el valor de (de los) producto (Productos), luego lo multipplica por la cantidad y le agrega el 19% correspondiente al IVA en Chile.

Todo bien, hace lo que le pido, pero... como puedo pasar este resultado a Letras??? Ejemplo, si el resultado fuera:

1583 = Mil Quinientos Ochenta y Tres.

Eso es lo que necesito, espero puedan orientarme, tambien...

Se puede hacer lo mismo con la fecha??? pero solo con el mes???

Utilizo Delphi 2010, Zeos, MySQL

De antemano, muchisimas gracias.

Caral 13-09-2010 23:06:35

Hola
Lo veo complicado tal como lo tienes, lo que yo hago es hacerlo antes de llamar al QReport, pero tambien se podria hacer usando un query en el reporte y el el evento before print hacer el cambio de numeros a letras usando el componente ATexto.
Saludos

Lenny 13-09-2010 23:11:16

Gracias por la pronta respuesta, se ve complicado, pero intentare verlo desde otro enfoque y como tu me dices, si encuentro alguna solucion la comparto con ustedes, gracias nuevamente y si a alguien se le ocurre alguna solucion, BIENVENIDA SEA!!!

PD: Como instalo / utilizo el compoenten ATEXTO en Delphi 2010???

EDIT: Ya lo instale, estare probando se ve muy interesante, GRACIAS CARAL!!!

Lenny 14-09-2010 19:59:11

Resuelto!!!
 
Bueno, despues de tanto buscar y gracias a la sugerencia de CARAL y el componente ATEXTO encontre la solucion:
Código Delphi [-]
procedure TFCLIENTE.QRExpr3Print(sender: TObject; var Value: string);
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;
var
n:string;
begin
n:= Deletrear(StrToFloat(Value));
QRExpr3.Caption:=uppercase(''+n+'');
value:=QRExpr3.Caption;
end;

Coloque esto en el evento "OnPrint" y funciona a la perfeccion.

No quiero llevarme el credito de esta solucion, solo hice pequeños cambios a una solucion anterior. Curiosamente lo saque de otro post de un usuario con un problema similar y CARAL lo estuvo ayudando y esta era una de las sugerencias, nuevamente gracias!!!

Caral 14-09-2010 20:02:45

Hola
Viendo este codigo que me parece muy interesante pregunto:
No sera lo mismo independizando la 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;


procedure TFCLIENTE.QRExpr3Print(sender: TObject; var Value: string);
var n:string;
begin
n:= Deletrear(StrToFloat(Value));
QRExpr3.Caption:=uppercase(''+n+'');
value:=QRExpr3.Caption;
end;

Saludos

Lenny 14-09-2010 20:05:50

Jajajajajaja, Tienes toda la razon, casi siempre suelo REINVENTAR la rueda mil veces y buscar soluciones "chasquillas" cometiendo el error de no corregirlas u optimizarlas una vez funcionan, lo hare como dices, gracias nuevamente Caral!!!

Caral 14-09-2010 20:10:25

Hola
Pues la verdad es que lo dije como pregunta por que no se si funcionara o no.
Da la impresion de que tendria que, pero no lo se.
Si funciona, dilo, sera bueno aprender algo mas.
Saludos

Lenny 14-09-2010 20:43:58

CARAL!!! FUNCIONA A LA PERFECCION!!!

Código Delphi [-]
implementation

{$R *.dfm}

uses BD;

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;

procedure TFCLIENTE.QRExpr3Print(sender: TObject; var Value: string);
var
n:string;
begin
n:= Deletrear(StrToFloat(Value));
QRExpr3.Caption:=uppercase(''+n+'');
value:=QRExpr3.Caption;
end;

end.

Asi tal cual funciona de maravillas, lo unico a tener en cuenta, es que en Chile no trabajamos con decimales, por lo cual hay que cambiar la propiedad "MASK" de los QRExpr a ###,###,##0, pero OJO!!! al que quieras convertir en Letras deve quedar asi ########0 o si no nos genera error, al menos de esta manera me funciona a mi, gracias nuevamente Caral por las sugerencias, un abrazo!!!

Caral 14-09-2010 20:47:21

Hola
Con gusto.
Me alegra poder ayudar y aprender a la vez.
Saludos


La franja horaria es GMT +2. Ahora son las 13:36:30.

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