FoxPro/Visual FoxPro - Montos GRANDES a letras!!!

   
Vista:

Montos GRANDES a letras!!!

Publicado por Juan Martinez (35 intervenciones) el 13/07/2009 03:24:58
Que tal amigos..yo tengo una funcion que convierte casi perfecto de numero a letras pero tiene un defecto..cuando el monto es muy alto (27.000.000.000,50) de guaranies ya me da error y no retorna nada.. Alguien tendra una funcion hecha que no tenga limites de digitos y que gestione decimales? serian tan amables de enviarme a mi correo por favor!!! juan_mzga@hotmail.com
desde ya..mil gracias!...
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:Montos GRANDES a letras!!!

Publicado por Pablo (Argentina) (433 intervenciones) el 13/07/2009 16:03:24
Hola Amigo, como va, mira probastes bajar de este mismo foro del link de Codigo Fuente, hay un proyecto para convertir de numeros a letras, yo no lo probe pero por ahi tiene lo que buscas, entra y fijate que esta segurisimo.
Y sino en PortalFox.com hay ejemplos pero sino te sirve ese, te busco alguno y te paso el link.

Avisame

Pablo - Argentina
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:Montos GRANDES a letras!!!

Publicado por Pablo (Argentina) (433 intervenciones) el 13/07/2009 16:11:13
Hola Amigo, yo de nuevo, en este mismo foro en la opcion de BUSCAR pone Convertir Numeros a Letras y hay muchos Ejemplos con el codigo fuente publicado, es mas hasta vi uno con decimales lo que no se es si maneja numeros grandes, pero hace la prueba, buscalo y miralos y compara con el tuyo por ahi te sirven o hasta modificandolos un poquito te solucionan tu problema

Suerte!!!!!!!!!!!!

Pablo - Argentina
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:Montos GRANDES a letras!!!

Publicado por Juan Martinez (35 intervenciones) el 13/07/2009 16:44:45
grande pablo! gracias amigo....
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:Montos GRANDES a letras!!!

Publicado por Juan Martinez (35 intervenciones) el 13/07/2009 17:05:21
Esta es la funcion que utilizo amigos... que problema tendria para los numeros grandes????? por favor ayundenme,,,lo necesito urgenteeee
ejemplo: para 27.000.000.000,50 da error!!!!!

pvalor = thisform.t_total.value

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 = ROUND((CENTAV*100),0)
CENTAV = INT(CENTAV)
CENTAV = STR(CENTAV,2)
CENTAV = STRTRAN(CENTAV," ","0")
NUMP = + NUMP + " CON " + CENTAV + " CENTAVOS"



letras=nump
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:Montos GRANDES a letras!!!

Publicado por alberto (399 intervenciones) el 13/07/2009 20:35:55
proba este codigo amigo a ver como va ......

*---------------
procedure numpal
*--------------
parameter total
Dimension aUnidades(9), aDecenas(14), aCentenas(10)
aUnidades(1) = 'UN'
aUnidades(2) = 'DOS'
aUnidades(3) = 'TRES'
aUnidades(4) = 'CUATRO'
aUnidades(5) = 'CINCO'
aUnidades(6) = 'SEIS'
aUnidades(7) = 'SIETE'
aUnidades(8) = 'OCHO'
aUnidades(9) = 'NUEVE'
aDecenas(1) = 'DIEZ'
aDecenas(2) = 'ONCE'
aDecenas(3) = 'DOCE'
aDecenas(4) = 'TRECE'
aDecenas(5) = 'CATORCE'
aDecenas(6) = 'QUINCE'
aDecenas(7) = 'VEINTE'
aDecenas(8) = 'TREINTA'
aDecenas(9) = 'CUARENTA'
aDecenas(10) = 'CINCUENTA'
aDecenas(11) = 'SESENTA'
aDecenas(12) = 'SETENTA'
aDecenas(13) = 'OCHENTA'
aDecenas(14) = 'NOVENTA'
aCentenas(1) = 'CIEN'
aCentenas(2) = 'DOSCIENTOS'
aCentenas(3) = 'TRESCIENTOS'
aCentenas(4) = 'CUATROCIENTOS'
aCentenas(5) = 'QUINIENTOS'
aCentenas(6) = 'SEISCIENTOS'
aCentenas(7) = 'SETECIENTOS'
aCentenas(8) = 'OCHOCIENTOS'
aCentenas(9) = 'NOVECIENTOS'

vTotal = str(int(Total), 12)

Do case
Case empty(val(vTotal))
Texto = 'CERO PESOS'

Case val(vTotal) = 1
Texto = 'UN PESO'

Otherwise
tCientos = obt_cant(substr(vTotal,10,3))
tMiles = obt_cant(substr(vTotal,7,3))
tMillones = obt_cant(substr(vTotal,4,3))
tMilMillones = obt_cant(substr(vTotal,1,3))

tCientos = tCientos
tMiles = iif(empty(tMiles), '', ;
iif(tMiles='UN', '', tMiles + ' ') + 'MIL ')
tMillones = iif(empty(tMillones), '', ;
tMillones + ' MILLON' + iif(tMillones='UN', ' ', 'ES ') +;
iif(empty(tMiles + tCientos), 'DE', ''))
tMilMillones = iif(empty(tMilMillones), '', ;
iif(tMilMillones='UN', '', tMilMillones + ' ') + 'MIL ' +;
iif(empty(tMillones), 'MILLONES ', ' ') +;
iif(empty(tMillones + tMiles + tCientos), 'DE', ''))

Texto = strtran(tMilMillones + tMillones + tMiles + tCientos, ' ', ' ') + ' PESOS'
Endcase
frase=Texto + iif(!empty(Total), ' CON ' + strtran(transform(int((total - int(total)) * 100), '**'), '*', '0') + '/100 Ctvos.', '')
*Return Texto + iif(!empty(Total), ' CON ' + strtran(transform(int((total - int(total)) * 100), '**'), '*', '0') + '/100 M.N.', '')
return frase
Function obt_cant(valor)
Public Unidades, Decenas, Centenas

If empty(val(valor))
Return ''
Endif

Store '' to tUnidades, tDecenas, tCentenas
Unidades = int(val(substr(valor,3,1))) && 123
Decenas = int(val(substr(valor,2,1))) && vTotal = 999
Centenas = int(val(substr(valor,1,1))) && ^^^
valor = int(val(valor))

tUnidades = iif(!empty(unidades), aUnidades(Unidades), '')

If !empty(decenas)
If decenas = 1
tDecenas = iif(val(right(str(valor,3),2)) >= 10 .and. val(right(str(valor,3),2)) <= 15, aDecenas(val(right(str(valor,3),2)) - 9) ,'DIECI' + tUnidades)
tUnidades = ''
Else
tDecenas = aDecenas(decenas + 5)
if !empty(unidades)
* QUITAR LOS ASTERISCOS SI NO NOS GUSTA QUE CONVIERTA
* 35 COMO TREINTICINCO SINO COMO TREINTA Y CINCO...
If Decenas <= 2
tDecenas = left(tDecenas, len(tDecenas) - 1) + 'I'
Else
tDecenas = tDecenas + ' Y '
Endif

Endif
Endif
Endif

If !empty(centenas)
tCentenas = aCentenas(centenas)
If valor > 100
If centenas = 1
tCentenas = tCentenas + 'TO '
Else
tCentenas = tCentenas + ' '
Endif
Endif
Endif

Return tCentenas + tDecenas + tUnidades
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:Montos GRANDES a letras!!!

Publicado por Juan Martinez (35 intervenciones) el 13/07/2009 23:03:14
esta funcion funciona perfecto,,solo habria q modificar peso por guaranies y listo... tambien solo cuando es moneda extranjera(dolares,pesos) me aparezca el 00/100...
lo modifique y quedo perfecto!..mil gracias amigo...
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
Imágen de perfil de Mauricio

Montos GRANDES a letras!!!

Publicado por Mauricio (1368 intervenciones) el 14/07/2009 01:41:34
Puedes probar este codigo tuyo modificado, solo hay que revisar los MILES una pequeña pregunta y quedara listo.....
*---
*--- Prueba de conversion de Numeros a Letras 07/2009
*--- Mauricio Gonzalez
*---
*ejemplo: para 27.000.000.000,50 da error!!!!!
*---
*pvalor = thisform.t_total.value
*---
pvalor = 27000000000.50

IF pvalor <= 0
Return
Endif
* Le devuelvo la parte entera 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,12) &&STR(ENTEROV,9)
NUMP = " "
DO WHILE CONTADOR < 5 &&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
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
*---
IF ENTEROV > 999999999 AND CONTADOR = 1
NUMP = NUMP + ' BILLONES '
ENDIF
IF NUMP = ' UNO BILLONES '
NUMP = NUMP + 'UN BILLON '
ENDIF
IF NUMP = 'CIENTO MIL '
NUMP = 'CIEN MIL '
ENDIF
*---
IF VAL(SUBCADENA) = 0 AND VAL(CENTENA) = 0 AND VAL(DECENA) = 0 AND VAL(UNIDAD) = 0
ELSE
IF ENTEROV > 999999 .AND. CONTADOR = 2 &&1
NUMP = NUMP + " MILLONES "
ENDIF
IF NUMP = " UNO MILLONES "
NUMP = " UN MILLON "
ENDIF
IF NUMP = " CIENTO MIL "
NUMP = " CIEN MIL "
ENDIF
ENDIF
*---
*--- ACA DEBE IR LA PREGUNTA PARA LOS MILES PARECIDA A LA DE LOS MILLONES.....
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 = ROUND((CENTAV*100),0)
CENTAV = INT(CENTAV)
CENTAV = STR(CENTAV,2)
CENTAV = STRTRAN(CENTAV," ","0")
NUMP = + NUMP + " CON " + CENTAV + " CENTAVOS"
wait wind nump time 10
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:Montos GRANDES a letras!!!

Publicado por alberto (399 intervenciones) el 14/07/2009 03:27:39
DE NADA AMIGO ME ALEGRO PODER HABER SOLUCIONADO TU PROBLEMA

ALBERTO
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