Crystal Report - Numero en letras(crystal sintax)

 
Vista:
Imágen de perfil de rtb

Numero en letras(crystal sintax)

Publicado por rtb (3 intervenciones) el 07/02/2009 15:44:19
les dejo por si a alquien les interesa...convertir numero a letras...
solo hay que cambiar la variable x por el campo correspondiente que se quiere convertir..
para el código se uso la crystal sintax
//ToWords ({#RTot_exenta})
numberVar x := 5654251354;

stringVar unidad :="" ;
stringVar decena :="" ;
stringVar centena :="" ;

stringVar umil :="" ;
stringVar dmil :="" ;
stringVar cmil :="" ;

stringVar umill :="" ;
stringVar dmill :="" ;
stringVar cmill :="" ;

stringVar umilmil :="" ;
stringVar dmilmil :="" ;
stringVar cmilmil :="" ;

stringVar caracter:="" ;
numberVar i :=0 ;
//numberVar long :=length(totext({#RTot_exenta})) ;
numberVar long :=length(totext(x)) ;
numberVar lugar :=0;

//caracter:=totext(round({#RTot_exenta}));
caracter:=totext(x);

i=long;
lugar:=long;
//000 123 456 789.00
for i :=1 to long step 1 do
(
//123 decimales 456 unidades
if i=4 then
(
unidad:=left(right(caracter,i),1);
)
else if i=5 then
(
decena:=left(right(caracter,i),1);
)

else if i=6 then
(
centena:=left(right(caracter,i),1);
);

//miles

if i=8 then
(
umil:=left(right(caracter,i),1);
)
else if i=9 then
(
dmil:=left(right(caracter,i),1);
)

else if i=10 then
(
cmil:=left(right(caracter,i),1);
);

//millones
if i=12 then
(
umill:=left(right(caracter,i),1);
)
else if i=13 then
(
dmill:=left(right(caracter,i),1);
)

else if i=14 then
(
cmill:=left(right(caracter,i),1);
);

//mil millones
if i=16 then
(
umilmil:=left(right(caracter,i),1);
)
else if i=17 then
(
dmilmil:=left(right(caracter,i),1);
)

else if i=18 then
(
cmilmil:=left(right(caracter,i),1);
)

);

//caracter+ " umil="+umill+ " decena="+ dmill +" centena: "+ cmill;
////123 456 789.00

stringVar array unidades := ["un","dos","tres","cuatro","cinco","seis","siete","ocho","nueve"];
stringVar array dieces := ["once","doce","trece","catorce","quince","diez y seis","diez y siete","diez y ocho","diez y nueve"];
stringVar array decenas := ["diez","veinte","treinta","cuarenta","cincuenta","sesenta","setenta","ochenta","noventa"];
stringVar array centenas := ["ciento","doscientos","trescientos","cuatrocientos","quinientos","seiscientos","setecientos","ochocientos","novecientos"];
stringVar resultado:="";
stringVar procesar:="N";

//mil millones igual a los miles
procesar:="N";
if val(cmilmil)>0 then
resultado:=resultado + centenas[val(cmilmil)] + " ";

if val(dmilmil)>1 then
resultado:=resultado + decenas[val(dmilmil)] + " y "
else if val(dmilmil)=1 then
procesar:="S";

if procesar="S" then //quiere decir que es un numero entre 11 y 20
(
if val(umilmil)>0 then
resultado:=resultado + dieces[val(umilmil)] + " ";
)
else
(
if val(umilmil)>0 then
resultado:=resultado + unidades[val(umilmil)] + " ";
);

if val(cmilmil)+val(dmilmil)+val(umilmil) >1 then
resultado:=resultado + " mil "
else
resultado:=resultado + "";

procesar:="N";
if val(cmill)>0 then
resultado:=resultado + centenas[val(cmill)] + " ";

if val(dmill)>1 then
resultado:=resultado + decenas[val(dmill)] + " y "
else if val(dmill)=1 then
procesar:="S";

if procesar="S" then //quiere decir que es un numero entre 11 y 20
(
if val(umill)>0 then
resultado:=resultado + dieces[val(umill)] + " ";
)
else
(
if val(umill)>0 then
resultado:=resultado + unidades[val(umill)] + " ";
);

//
//Titulo final de millones
//
if val(cmill)+val(dmill)+val(umill) >1 then
resultado:=resultado + " millones "
else
resultado:=resultado + " millon ";

procesar:="N";
if val(cmil)>0 then
resultado:=resultado + centenas[val(cmil)] + " ";

if val(dmil)>1 then
resultado:=resultado + decenas[val(dmil)] + " y "
else if val(dmil)=1 then
procesar:="S";

if procesar="S" then //quiere decir que es un numero entre 11 y 20
(
if val(umil)>0 then
resultado:=resultado + dieces[val(umil)] + " ";
)
else
(
if val(umil)>0 then
resultado:=resultado + unidades[val(umil)] + " ";
);

resultado:=resultado + " mil ";

procesar:="N";
if val(centena)>0 then
resultado:=resultado + centenas[val(centena)] + " ";

if val(decena)>1 then
resultado:=resultado + decenas[val(decena)] + " y "
else if val(decena)=1 then
procesar:="S";

if procesar="S" then //quiere decir que es un numero entre 11 y 20
(
if val(unidad)>0 then
resultado:=resultado + dieces[val(unidad)] + " "
)
else
(
if val(unidad)>0 then
resultado:=resultado + unidades[val(unidad)] + " ";
);

resultado:=resultado + ReplicateString ("-",50 );
resultado;

saludos.-
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Numero en letras(crystal sintax)

Publicado por seven (1 intervención) el 28/04/2009 22:06:57
Muy interesante y efectivo el codigo, aunque presenta error con valores menores de un Millon.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Numero en letras(crystal sintax)

Publicado por César pérez (1 intervención) el 18/09/2009 19:43:10
MUCHAS GRACIAS EXCELENTE PROGRAMA
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Numero en letras(crystal sintax)

Publicado por no es cambiar la x sino el num (1 intervención) el 13/07/2010 17:02:13
no es cambiar la x sino el numero asignado a x
osea 5654251354 en vez de este numero escribe la variable q quieres q convierta.
EXCELENTISIMO APORTE.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar