PDA

Ver la Versión Completa : QuickReport, Resultado en letras


Lenny
13-09-2010, 23:47:39
Holas a todos y gracias de antemano, tengo un reporte en QuickReport, en el cual utilizo un QRExpr el cual esta con esta "Expression":

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
14-09-2010, 00: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
14-09-2010, 00: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, 20:59:11
Bueno, despues de tanto buscar y gracias a la sugerencia de CARAL y el componente ATEXTO encontre la solucion:

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, 21:02:45
Hola
Viendo este codigo que me parece muy interesante pregunto:
No sera lo mismo independizando la funcion?.

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, 21: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, 21: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, 21:43:58
CARAL!!! FUNCIONA A LA PERFECCION!!!

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, 21:47:21
Hola
Con gusto.
Me alegra poder ayudar y aprender a la vez.
Saludos