Pregunta concreta, respuesta concreta ja ja!
Antes que nada, quiero dejar claro que ésta rutina la tome hace un par de años de este mismo foro... aunque no recuerdo de que experto... pero todos los créditos son para esa persona que adecuó dicha rutina, no es de mi autoría directamente pero es magnifica y sencilla! :) :) :)
Va así:
1 - Crea una rutina .prg llamada 'NToLetra. Prg' (sin comillas). En ella, copia el siguiente código:
*** Regresa numero en letras
Procedure NToLetra
Parameter numero
num_car = Str(numero,15,2)
num_dig = Subs(num_car,14,2)
pos = 1
Store "" To num_car_fin,leyenda
For t=1 To 4
Store 0 To uni,dec,cen
cen = Val(Subs(num_car,pos+0,1))
dec = Val(Subs(num_car,pos+1,1))
uni = Val(Subs(num_car,pos+2,1))
pos = pos + 3
letra3 = centena(uni,dec,cen)
letra2 = decenas(uni,dec,cen)
letra1 = unidads(uni,dec,cen)
Do Case
Case t=1
leyenda = IIf(uni+dec+cen=1,"BILLÓN ",IIf(uni+dec+cen>1,"BILLONES ",""))
Case t=2
leyenda = IIf(uni+dec+cen=1,"MILLÓN ",IIf(uni+dec+cen>1,"MILLONES ",""))
Case t=3
leyenda = IIf(uni+dec+cen=1,"MIL ",IIf(uni+dec+cen>1,"MIL ",""))
Case t=4
leyenda = IIf(uni+dec+cen=1,"",IIf(uni+dec+cen>1,"",""))
EndCase
num_car_fin = num_car_fin + letra3 + letra2 + letra1 + leyenda
EndFor
num_1 = Val(Subs(num_car,1,12))
num_2 = Val(Subs(num_car,4,9))
num_3 = Val(Subs(num_car,7,6))
leyenda = ""
If num_1=1
leyenda = "PESO"
Else
If num_2=0 .Or. num_3=0
leyenda = "DE PESOS"
Else
leyenda = "PESOS"
EndIf
EndIf
If num_1 = 0
num_car_fin = "CERO "
leyenda = "PESOS"
EndIf
num_car_fin = num_car_fin + leyenda + ' CON ' + num_dig + "/100"
Return num_car_fin
** Unidades
Procedure unidads
Parameter uni,dec,cen
Do Case
Case uni = 1 .And. dec#1
ctexto = "UN "
Case uni = 2 .And. dec#1
ctexto = "DOS "
Case uni = 3 .And. dec#1
ctexto = "TRES "
Case uni = 4 .And. dec#1
ctexto = "CUATRO "
Case uni = 5 .And. dec#1
ctexto = "CINCO "
Case uni = 6
ctexto = "SEIS "
Case uni = 7
ctexto = "SIETE "
Case uni = 8
ctexto = "OCHO "
Case uni = 9
ctexto = "NUEVE "
OtherWise
ctexto = ""
EndCase
Return ctexto
** Centenas
Procedure centena
Parameter uni,dec,cen
Do Case
Case cen=1 .And. (dec=0 .And. uni=0)
ctexto = "Cien "
Case cen=1 .And. (dec>0 .Or. uni>0)
ctexto = "CIENTO "
Case cen=2
ctexto = "DOSCIENTOS "
Case cen=3
ctexto = "TRESCIENTOS "
Case cen=4
ctexto = "CUATROCIENTOS "
Case cen=5
ctexto = "QUINIENTOS "
Case cen=6
ctexto = "SEISCIENTOS "
Case cen=7
ctexto = "SETECIENTOS "
Case cen=8
ctexto = "OCHOCIENTOS "
Case cen=9
ctexto = "NOVECIENTOS "
OtherWise
ctexto = ""
EndCase
Return ctexto
** Decenas
Procedure decenas
Parameter uni,dec,cen
Do Case
Case dec=1 .and. uni=0
ctexto = "DIEZ "
Case dec=1 .and. uni=1
ctexto = "ONCE "
Case dec=1 .and. uni=2
ctexto = "DOCE "
Case dec=1 .and. uni=3
ctexto = "TRECE "
Case dec=1 .and. uni=4
ctexto = "CATORCE "
Case dec=1 .and. uni=5
ctexto = "QUINCE "
Case dec=1 .and. (uni>5 .and. uni<10)
ctexto = "DIECI"
Case dec=2 .and. uni=0
ctexto = "VEINTE "
Case dec=2 .and. uni>0
ctexto = "VEINTI"
Case dec=3 .and. uni=0
ctexto = "TREINTA "
Case dec=3 .and. uni>0
ctexto = "TREINTA Y "
Case dec=4 .and. uni=0
ctexto = "CUARENTA "
Case dec=4 .and. uni>0
ctexto = "CUARENTA Y "
Case dec=5 .and. uni=0
ctexto = "CINCUENTA "
Case dec=5 .and. uni>0
ctexto = "CINCUENTA Y "
Case dec=6 .and. uni=0
ctexto = "SESENTA "
Case dec=6 .and. uni>0
ctexto = "SESENTA Y "
Case dec=7 .and. uni=0
ctexto = "SETENTA "
Case dec=7 .and. uni>0
ctexto = "SETENTA Y "
Case dec=8 .and. uni=0
ctexto = "OCHENTA "
Case dec=8 .and. uni>0
ctexto = "OCHENTA Y "
Case dec=9 .and. uni=0
ctexto = "NOVENTA "
Case dec=9 .and. uni>0
ctexto = "NOVENTA Y "
OtherWise
ctexto = ""
EndCase
Return ctexto
**--//
2 - En el formulario donde vas a presentar el resultado, coloca esta linea en el evento INIT() del form. (No se que diablos le pasa a esta maldita pagina pero cuando quieres borrar algo con backspace el cursor de escritura se pierde al final del carajo! Jajajajajaja! )
SET PROCEDURE TO NToLetra.prg ADDITIVE
3 - Para efectos de ejemplo, pruébalo así como te diré, luego vos lo adecuas a algún evento o método espcifico. Inserta en el form 2 textos y 1 botón. Un text1 en donde cargaras la cantidad y un text2 donde aparecerá la cantidad en letras. En el evento click del botón, coloca un código como éste:
**--Monto a letras
THISFORM.Text2.Value = NToLetra(THISFORM.Text1.Value)
**--//
THISFORM.Refresh
**---
Ahora, solo guarda y ejecutá. Ingresa algún numero en el text1 y luego da click en el botón. La cantidad en letras debe aparecer!
Si no te funciona, avisame para ver en que fallé ja ja! Ahora vos adecua el código respecto a lo valores en números y donde vas a presentarlo en letras. La clave esta en la linea ultima, donde pasas como parámetro el valor en cifra y se asigna el resultado devuelto por la función al text2, ya convertido en letras!
Un abrazo!
Desde Managua, Nicaragua!
Ravenn :D :D :D