martes, 4 de junio de 2019

Numero a letras con VFP

Números a letras con VFP

Este programa te permite convertir números a letras hasta 999,999,999.99. Tiene la ventaja que te permite escoger la moneda a convertir en texto.Puedes agregar las monedas de tu preferencia en el rowsource del combo en el evento init

thisform.combo1.RowSourceType = 1

thisform.combo1.RowSource ="Bs,Peso,Dollar,Boliviano,Yen,Euro".

En el evento Load deberas colocar las siguientes instrucciones:


public pvalor,numero,nump,xmoneda

nump=""
numero=0
pvalor = 0
xmoneda=""
SET PROCEDURE TO numeroletras ADDITIVE 




El set procedure to numeroletras ADDITIVE  permite llamar al programa numeroletra.prg y devuelve el valor en letras al formulario.


IF pvalor <= 0
Return
Endif
* Le devuelvo la parte enetra del Valor a la variable EnteroV
ENTEROV=INT(pvalor)
N = ""
N1 = "UN"
N2 = "DOS"
N3 = "TRES"
N4 = "CUATRO"
N5 = "CINCO"
N6 = "SEIS"
N7 = "SIETE"
N8 = "OCHO"
N9 = "NUEVE"
N10 = "DIEZ"
N11 = "ONCE"
N12 = "DOCE"
N13 = "TRECE"
N14 = "CATORCE"
N15 = "QUINCE"
N16 = "DIECISEIS"
N17 = "DIECISIETE"
N18 = "DIECIOCHO"
N19 = "DIECINUEVE"
N20 = "VEINTE"
N30 = "TREINTA"
N40 = "CUARENTA"
N50 = "CINCUENTA"
N60 = "SESENTA"
N70 = "SETENTA"
N80 = "OCHENTA"
N90 = "NOVENTA"
IF ENTEROV <> 100
N100 = "CIENTO"
ENDIF
IF ENTEROV = 100
N100="CIEN"
ENDIF
N200 = "DOSCIENTOS"
N300 = "TRESCIENTOS"
N400 = "CUATROCIENTOS"
N500 = "QUINIENTOS"
N600 = "SEISCIENTOS"
N700 = "SETECIENTOS"
N800 = "OCHOCIENTOS"
N900 = "NOVECIENTOS"
CONTADOR = 1
INICIO = 1
CADENA = STR(ENTEROV,9)
NUMP = " "
DO WHILE CONTADOR < 4
SUBCADENA = SUBSTR(CADENA,INICIO, 3) 
CENTENA = SUBSTR(SUBCADENA,1,1)+"00" 
DECENA = SUBSTR(SUBCADENA,2,2)
UNIDAD = SUBSTR(SUBCADENA,3,1)
IF VAL(SUBCADENA) > 99
NUMP = NUMP + N&CENTENA + " "
ENDIF (SUBCADENA > 99)
T = VAL(DECENA)
IF T > 0
DO CASE
CASE (INT(T/10.0) = T/10.0) .OR. (T > 9 .AND. T < 20) 
NUMP = NUMP + N&DECENA 
CASE T > 9 .AND. (INT(T/10.0) # T/10.0)
DECENA = SUBSTR(DECENA,1,1) + "0"
IF DECENA # "20"
NUMP = NUMP + N&DECENA + " Y " + N&UNIDAD
ELSE
NUMP = NUMP + "VENTI" + N&UNIDAD
ENDIF
CASE T < 10
NUMP = NUMP + N&UNIDAD
ENDCASE 
ENDIF (T > 0)

IF ENTEROV > 999999 .AND. CONTADOR = 1
NUMP = NUMP + " MILLONES "
ENDIF
IF NUMP = " UNO MILLONES "
NUMP = " UN MILLON "
ENDIF
IF NUMP = " CIENTO  MIL "
NUMP = " CIEN MIL "
ENDIF
IF ENTEROV > 999 .AND. CONTADOR = 2 .AND. VAL(SUBCADENA) > 0
NUMP = NUMP + " MIL "
ENDIF
IF NUMP = " UNO MIL "
NUMP = " MIL "
ENDIF
INICIO = CONTADOR * 3 + 1
CONTADOR = CONTADOR + 1
ENDDO
CENTAV = pvalor-INT(pvalor)
* CENTAV = THISFORM.VABO.VALUE - INT(THISFORM.VABO.VALUE)
CENTAV = ROUND((CENTAV*100),0)
CENTAV = INT(CENTAV)
CENTAV = STR(CENTAV,2)
CENTAV = STRTRAN(CENTAV," ","0")
*NUMP =  + NUMP + " PESOS" + " CON " + CENTAV + " CENTAVOS"
NUMP =  + NUMP +" "+ xmoneda + " CON " + CENTAV + " CENTAVOS"
m=nump
* Al Final en Nump Esta el Valor en Letras
*? nump
return



0 comentarios:

Publicar un comentario