0% encontró este documento útil (0 votos)
375 vistas6 páginas

Función Números A Letras en Visual Foxpro

Función que convierte de números a letras. No es mía, pero es buenísima Allí aparece el nombre del autor
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
375 vistas6 páginas

Función Números A Letras en Visual Foxpro

Función que convierte de números a letras. No es mía, pero es buenísima Allí aparece el nombre del autor
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd

*ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»

*º Conversion de Numeros a Letras º


*º Funcion...: Num_let º
*º Parametros: N,C(1)='DQ' º
* USO: thisform.pg.pg1.letras.value = "Son"+num_let(thisform.total.value,"Q")
* Autor: Jorge Luis Villanueva *
*ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ

FUNCTION Num_let
*---------------
parameter _valor,_moneda
DO CASE
CASE _moneda = '$'
_mon01 = 'DOLAR'
_mon02 = 'DOLARES'
CASE _moneda = 'Q'
_mon01 = 'QUETZAL'
_mon02 = 'QUETZALES'
CASE _moneda = 'œ'
ENDCASE
_letras = space(0)
IF _VALOR < 0
RETURN
ENDIF
_valor = trans(_valor,'@l 999999999.99')
DO CASE
CASE val(_valor) = 0
_letras = 'CERO '+_mon02+' CON 00/100'
CASE val(_valor) < 2
if val(_valor) < 1
_letras = 'CERO '+_mon02+' CON '+SUBS(_valor,11,2)+'/100'
else
_letras = 'UN '+_mon01+' CON '+SUBS(_valor,11,2)+'/100'
endif
ENDCASE
IF VAL(_valor) < 2
RETURN _letras
ENDIF
DIMENSION _DATOS(5,10)
_DATOS(1,01)='UNO'
_DATOS(1,02)='DOS'
_DATOS(1,03)='TRES'
_DATOS(1,04)='CUATRO'
_DATOS(1,05)='CINCO'
_DATOS(1,06)='SEIS'
_DATOS(1,07)='SIETE'
_DATOS(1,08)='OCHO'
_DATOS(1,09)='NUEVE'

_DATOS(2,01)='ONCE'
_DATOS(2,02)='DOCE'
_DATOS(2,03)='TRECE'
_DATOS(2,04)='CATORCE'
_DATOS(2,05)='QUINCE'

_DATOS(3,01)='DIEZ'
_DATOS(3,02)='VEINTE'
_DATOS(3,03)='TREINTA'
_DATOS(3,04)='CUARENTA'
_DATOS(3,05)='CINCUENTA'
_DATOS(3,06)='SESENTA'
_DATOS(3,07)='SETENTA'
_DATOS(3,08)='OCHENTA'
_DATOS(3,09)='NOVENTA'

_DATOS(4,01)='DIECI'
_DATOS(4,02)='VEINTI'
_DATOS(4,03)='TREINTI'
_DATOS(4,04)='CUARENTI'
_DATOS(4,05)='CINCUENTI'
_DATOS(4,06)='SESENTI'
_DATOS(4,07)='SETENTI'
_DATOS(4,08)='OCHENTI'
_DATOS(4,09)='NOVENTI'

_DATOS(5,01)='CIEN'
_DATOS(5,02)='DOSCIENTOS'
_DATOS(5,03)='TRESCIENTOS'
_DATOS(5,04)='CUATROCIENTOS'
_DATOS(5,05)='QUINIENTOS'
_DATOS(5,06)='SEISCIENTOS'
_DATOS(5,07)='SETECIENTOS'
_DATOS(5,08)='OCHOCIENTOS'
_DATOS(5,09)='NOVECIENTOS'
FOR _I = 1 TO 3
DO _dist
ENDFOR
_letras = ALLTRIM(_letras)
DO WHILE SPACE(2) $ _letras
_pos = at(space(2),_letras)
_letras = SUBS(_letras,1,_pos) + subs(_letras,_pos+2)
if .not. space(2) $ _letras
exit
endif
ENDDO
RETURN _letras+' '+_mon02+' CON '+SUBS(_VALOR,11,2)+'/100'

PROCEDURE _DIST
*--------------
DO CASE
CASE _I = 1 .AND. VAL(SUBS(_VALOR,1,3)) > 0
DO _CHANGE WITH SUBS(_VALOR,1,3)
IF val(SUBS(_valor,1,3)) > 0
IF val(subs(_valor,1,3)) = 1
_Letras = _letras +' MILLÓN '
ELSE
_letras = _letras +' MILLONES '
ENDIF
ENDIF
CASE _I = 2 .AND. VAL(SUBS(_valor,4,3)) > 0
DO _CHANGE WITH SUBS(_VALOR,4,3)
_letras = _letras + ' MIL '
CASE _I = 3 .AND. VAL(SUBS(_valor,7,3)) > 0
DO _CHANGE WITH SUBS(_VALOR,7,3)
ENDCASE
RETURN
PROCEDURE _CHANGE
parameter _data
************************************
* * c e n t e n a s
* * ----------------
_cente = space(0)
IF VAL(SUBS(_data,1,1)) <> 0
IF _data = '100'
_cente = "CIEN"
ELSE
IF VAL(_data)<200
_cente ="CIENTO "
ELSE
_cente = _datos(5,VAL(SUBSTR(_DATA,1,1)))+" "
ENDIF
ENDIF
ENDIF
* * d e c e n a s
* * -----------------
_dece = space(0)
IF VAL(SUBS(_data,2,2)) >= 10
IF VAL(SUBS(_data,2,2)) >10.AND.VAL(SUBS(_data,2,2)) < 16
_dece = _datos(2,VAL(SUBSTR(_data,3,1)))
ELSE
IF subs(_data,3,1) = '0'
_dece = _datos(3,val(SUBSTR(_data,2,1)))
ELSE
_dece = _datos(4,val(SUBSTR(_data,2,1)))
ENDIF
ENDIF
ENDIF
* * U n i d a d e s
* * -----------------
IF subs(_data,3,1) = '0' .OR. VAL(SUBS(_data,2,2)) >10.AND.VAL(SUBS(_data,2,2)) <
16
_uni = space(0)
ELSE
IF subs(_data,3,1) = '1'
_uni = "UN "
ELSE
_uni = _datos(1,val(subst(_data,3,1)))
ENDIF
ENDIF
_letras = _letras + _cente+_dece+_uni
RETURN

*-----------------
FUNCTION cambio
*-----------------
PARAMETER _dato
DIMENSION x(10)
for i = 1 to 10
x(i) = chr(asc(substr(_dato,i,1))+i*2)
endfor
Return x(1)+x(2)+x(3)+x(4)+x(5)+x(6)+x(7)+x(8)+x(9)+x(10)
PROCEDURE selmes
*---------------
m.mes = VAL(SUBS(prompt(),1,2))
DEACTIVATE POPUP popmes
RETURN

****FUNCTION Num_let
FUNCTION numeros

*---------------
parameter _valor,_moneda
DO CASE
CASE _moneda = '$'
_mon01 = 'DOLAR'
_mon02 = 'DOLARES'
CASE _moneda = 'Q'
_mon01 = 'QUETZAL'
_mon02 = 'QUETZALES'
CASE _moneda = "1"
_mon01 = "1"
_mon02 = "1"
*CASE _moneda = "1"
CASE _moneda = 'œ'
ENDCASE
_letras = space(0)
IF _VALOR < 0
RETURN
ENDIF
_valor = trans(_valor,'@l 999999999.99')
DO CASE
CASE val(_valor) = 0
_letras = 'CERO '+_mon02+' CON 00/100'
CASE val(_valor) < 2
if val(_valor) < 1
_letras = 'CERO '+_mon02+' CON '+SUBS(_valor,11,2)+'/100'
else
_letras = 'UN '+_mon01+' CON '+SUBS(_valor,11,2)+'/100'
endif
ENDCASE
IF VAL(_valor) < 2
RETURN _letras
ENDIF
DIMENSION _DATOS(5,10)
_DATOS(1,01)='UNO'
_DATOS(1,02)='DOS'
_DATOS(1,03)='TRES'
_DATOS(1,04)='CUATRO'
_DATOS(1,05)='CINCO'
_DATOS(1,06)='SEIS'
_DATOS(1,07)='SIETE'
_DATOS(1,08)='OCHO'
_DATOS(1,09)='NUEVE'

_DATOS(2,01)='ONCE'
_DATOS(2,02)='DOCE'
_DATOS(2,03)='TRECE'
_DATOS(2,04)='CATORCE'
_DATOS(2,05)='QUINCE'
_DATOS(3,01)='DIEZ'
_DATOS(3,02)='VEINTE'
_DATOS(3,03)='TREINTA'
_DATOS(3,04)='CUARENTA'
_DATOS(3,05)='CINCUENTA'
_DATOS(3,06)='SESENTA'
_DATOS(3,07)='SETENTA'
_DATOS(3,08)='OCHENTA'
_DATOS(3,09)='NOVENTA'

_DATOS(4,01)='DIECI'
_DATOS(4,02)='VEINTI'
_DATOS(4,03)='TREINTI'
_DATOS(4,04)='CUARENTI'
_DATOS(4,05)='CINCUENTI'
_DATOS(4,06)='SESENTA Y '
_DATOS(4,07)='SETENTA Y '
_DATOS(4,08)='OCHENTA Y '
_DATOS(4,09)='NOVENTA Y '

_DATOS(5,01)='CIEN'
_DATOS(5,02)='DOSCIENTOS'
_DATOS(5,03)='TRESCIENTOS'
_DATOS(5,04)='CUATROCIENTOS'
_DATOS(5,05)='QUINIENTOS'
_DATOS(5,06)='SEISCIENTOS'
_DATOS(5,07)='SETECIENTOS'
_DATOS(5,08)='OCHOCIENTOS'
_DATOS(5,09)='NOVECIENTOS'
FOR _I = 1 TO 3
DO _dist
ENDFOR
_letras = ALLTRIM(_letras)
DO WHILE SPACE(2) $ _letras
_pos = at(space(2),_letras)
_letras = SUBS(_letras,1,_pos) + subs(_letras,_pos+2)
if .not. space(2) $ _letras
exit
endif
ENDDO
RETURN _letras+' '+_mon02+' CON '+SUBS(_VALOR,11,2)+'/100'

PROCEDURE _DIST
*--------------
DO CASE
CASE _I = 1 .AND. VAL(SUBS(_VALOR,1,3)) > 0
DO _CHANGE WITH SUBS(_VALOR,1,3)
IF val(SUBS(_valor,1,3)) > 0
IF val(subs(_valor,1,3)) = 1
_Letras = _letras +' MILLON '
ELSE
_letras = _letras +' MILLONES '
ENDIF
ENDIF
CASE _I = 2 .AND. VAL(SUBS(_valor,4,3)) > 0
DO _CHANGE WITH SUBS(_VALOR,4,3)
_letras = _letras + ' MIL '
CASE _I = 3 .AND. VAL(SUBS(_valor,7,3)) > 0
DO _CHANGE WITH SUBS(_VALOR,7,3)
ENDCASE
RETURN

PROCEDURE _CHANGE
parameter _data
************************************
* * c e n t e n a s
* * ----------------
_cente = space(0)
IF VAL(SUBS(_data,1,1)) <> 0
IF _data = '100'
_cente = "CIEN"
ELSE
IF VAL(_data)<200
_cente ="CIENTO "
ELSE
_cente = _datos(5,VAL(SUBSTR(_DATA,1,1)))+" "
ENDIF
ENDIF
ENDIF
* * d e c e n a s
* * -----------------
_dece = space(0)
IF VAL(SUBS(_data,2,2)) >= 10
IF VAL(SUBS(_data,2,2)) >10.AND.VAL(SUBS(_data,2,2)) < 16
_dece = _datos(2,VAL(SUBSTR(_data,3,1)))
ELSE
IF subs(_data,3,1) = '0'
_dece = _datos(3,val(SUBSTR(_data,2,1)))
ELSE
_dece = _datos(4,val(SUBSTR(_data,2,1)))
ENDIF
ENDIF
ENDIF
* * U n i d a d e s
* * -----------------
IF subs(_data,3,1) = '0' .OR. VAL(SUBS(_data,2,2)) >10.AND.VAL(SUBS(_data,2,2)) <
16
_uni = space(0)
ELSE
IF subs(_data,3,1) = '1'
_uni = "UNO " &&&&&&&&&&& ACUERDATE DE CORREGIRLO, AQUI ERA "UN"
ELSE
_uni = _datos(1,val(subst(_data,3,1)))
ENDIF
ENDIF
_letras = _letras + _cente+_dece+_uni
RETURN

También podría gustarte