Clarion - Cantidad en letras ...

 
Vista:
sin imagen de perfil
Val: 20
Ha mantenido su posición en Clarion (en relación al último mes)
Gráfica de Clarion

Cantidad en letras ...

Publicado por Ramón F. Legazpy (68 intervenciones) el 22/11/2006 21:11:16
Compañeros Clarioneros,

Alguien tiene algún procedimiento o rutina para convertir cantidades de número a su equivalente en letra, podrían ayudarme al respecto... estoy utilizando Clarion 6 con bases de datos TPS.

Gracias por su apoyo, saludos a todos.

Ramón F Legazpy
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:Cantidad en letras ...

Publicado por moisés (32 intervenciones) el 23/11/2006 16:28:58
Puedes emplear el siguiente prosedimiento

El prototipo del Source es: NumeroaLetras(REAL),STRING

Procedimiento:
NumeroaLetras PROCEDURE (Numero)

!Esto va en Local Data
Centavos REAL
Unidades REAL
Decenas REAL
Centenas REAL
Valor REAL
SinCientos REAL
Respuesta STRING(300)
Modulo STRING(34)
Parcial STRING(34)
D_Unidades_G STRING(210)
D_Unidades STRING(10),DIM(21),OVER(D_Unidades_G)
D_Decenas_G STRING(72)
D_Decenas STRING(9),DIM(8),OVER(D_Decenas_G)
D_Centenas_G STRING(117)
D_Centenas STRING(13),DIM(9),OVER(D_Centenas_G)

!Codigo
CODE
D_Unidades_G = 'CERO ' | !Carga de Unidades
& 'UNO ' |
& 'DOS ' |
& 'TRES ' |
& 'CUATRO ' |
& 'CINCO ' |
& 'SEIS ' |
& 'SIETE ' |
& 'OCHO ' |
& 'NUEVE ' |
& 'DIEZ ' |
& 'ONCE ' | ! Y de primera decena
& 'DOCE ' |
& 'TRECE ' |
& 'CATORCE ' |
& 'QUINCE ' |
& 'DIECISEIS ' |
& 'DIECISIETE' |
& 'DIECIOCHO ' |
& 'DIECINUEVE' |
& 'VEINTE '
D_Decenas_G = 'VEINTI ' | !Carga de Decenas
& 'TREINTA ' |
& 'CUARENTA ' |
& 'CINCUENTA' |
& 'SESENTA ' |
& 'SETENTA ' |
& 'OCHENTA ' |
& 'NOVENTA '
D_Centenas_G = 'CIENTO ' | !Carga de Centenas
& 'DOSCIENTOS ' |
& 'TRESCIENTOS ' |
& 'CUATROCIENTOS' |
& 'QUINIENTOS ' |
& 'SEISCIENTOS ' |
& 'SETECIENTOS ' |
& 'OCHOCIENTOS ' |
& 'NOVECIENTOS '
!--------------------------------------------------------------------------
Clear(Respuesta)

Valor = INT(Numero)
Centavos = (Numero - Valor) * 100 !Centavos
Valor = INT(Centavos + 0.01)
! Activar la l¡nea siguiente si no se quiere la parte de centavos en letras
! Respuesta = 'CON '&FORMAT(Valor,@n02)&'/100 CENTAVOS'
If Valor = 1 Then
Respuesta = 'CON UN CENTAVO'
ElsIf Valor <> 0 Then
Do Calc_Parcial
Respuesta = 'CON '&Clip(Parcial)&' CENTAVOS'
END

Valor = INT (Numero - (INT(Numero / 1000) *1000)) !Unidades
If Valor <> 0 Then
Do Calc_Modulo
Respuesta = Clip (Modulo) &' '&Clip (Respuesta)
END

Valor = INT (Numero / 1000) - (INT(Numero / 1000000) * 1000) !Miles
If Valor = 1 Then
Respuesta = 'UN MIL '&Clip (Respuesta)
ElsIf Valor <> 0 Then
Do Calc_Modulo
Respuesta = Clip (Modulo) &' MIL '&Clip (Respuesta)
END

Valor = INT (Numero / 1000000) !Millones
If Valor = 1 Then
Respuesta = 'UN MILLON '&Clip (Respuesta)
ElsIf Valor <> 0 Then
Do Calc_Modulo
Respuesta = Clip (Modulo) &' MILLONES '&Clip (Respuesta)
END

Return(Respuesta)

!---------------------------------------------------------------------------
Calc_Modulo ROUTINE
If valor = 100 Then
Modulo = 'CIEN'
Else
Do Calc_Parcial
IF Valor > 100 Then
Valor = int(Valor / 100)
If SinCientos = 0 Then
Modulo = Clip(D_Centenas[Valor])
Else
Modulo = Clip(D_Centenas[Valor]) &' '& Clip(Parcial)
END
Else
Modulo = Clip(Parcial)
END
END

!---------------------------------------------------------------------------
Calc_Parcial ROUTINE

Centenas = Int(Valor/100)
Decenas = INT(Valor/10) - Centenas*10
Unidades = Valor - (Decenas*10) - (Centenas*100) +1
SinCientos = (Decenas*10)+ Unidades - 1

Case SinCientos

Of 0 to 20
Parcial = Clip(D_Unidades[SinCientos+1])

Of 21 to 99
If Unidades = 1 Then
Parcial = Clip(D_Decenas[Decenas-1])
ElsIF Decenas > 2 Then
Parcial = Clip(D_Decenas[Decenas-1]) & ' Y '& Clip(D_Unidades[Unidades])
Else
Parcial = Clip(D_Decenas[Decenas-1]) & Clip(D_Unidades[Unidades])
END

END


!!!!! Espero se sirva (Saludos)
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
sin imagen de perfil
Val: 20
Ha mantenido su posición en Clarion (en relación al último mes)
Gráfica de Clarion

RE:Cantidad en letras ...

Publicado por Ramón F Legazpy (68 intervenciones) el 24/11/2006 06:00:08
Gracias por tu apoyo compañero, cuando te estas refiriendo al Procedimiento Source es un nuevo proceso o sobre código embed lo puedo incluir ?

Sorry pero no he utilizado anteriormente un procedimiento como este, cual es la mejor forma de anexarlo a la aplicación ?

Gracias nuevamente, saludos !!!

Ramón F Legazpy
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:Cantidad en letras ...

Publicado por moisés (1 intervención) el 24/11/2006 15:44:57
Lo puedes dar de alta como una rutina

NumeroaLetras Routine
Data
code
! Aqui metes el código
exit
Ya NO DEFINES EL PORTOTIPO Y LA VARIABLE EL LA QUE VAS A TENER EL RESULTADO ES (Respuesta), EL LUGAR DEL RETURN UTIZAS EL EXIT , BUENO EN EL EXIT NO CONCATENAS EL RESULTADO.
DA DE ALTA TODAS TUS VARIABLES COMO LOCALES Y NO EN EL LO QUE AHORA ES LA RUTINA PARA QUE LA PUEDAS USAR EL OTRO PUNTO , SOBRE TODO (Resultado).

Saludos
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