¿En qué podemos ayudarte?
< Todos los temas
Imprimir

Convertir importes a letras en Crystal Report

En Crystal Report podemos realizar una función para convertir los número a letras, para ello crearemos una función personalizada mediante los siguientes pasos:

1. En el taller de fórmulas de Crystal Report se deben crear dos funciones personalizadas (NumeroALetras y NumerosALetras):


3. Posteriormente crearemos una fórmula (por ejemplo ImporteALetras) que haga referencia a la función creada, donde le pasaremos como parámetro un campo, fórmula o un número que contenga el importe y dicha fórmula devolverá una expresión con el importe en letras. En el siguiente ejemplo se convierte un importe monetario en letras incluyendo la moneda. 

' número a convertir
dim numero as number
numero = 0

formula = ""
if numero < 0 then
    numero = abs(numero)
    formula = "MENOS "
end if

' parte entera
dim entero as number
entero = truncate(numero)
formula = formula & NumerosALetras(entero)
formula = formula & " EUROS"

' parte decimal
dim decimales as number
decimales = Round((numero - entero) * 100, 2)

if decimales > 0 then
    formula = formula & " CON " &  NumerosALetras(decimales)
    formula = formula & " CENTIMOS"
end if


4. Por último, diseñaremos el informe insertando la fórmula en la posición que deseemos.  

 


Funciones personalizadas de Crystal Report

Function NumeroALetras(numero As number) As String

	Dim text As String
	Dim value As number
	value = Truncate(numero)

	If value = 0 Then
		text = "CERO"
	ElseIf value = 1 Then
		text = "UN"
	ElseIf value = 2 Then
		text = "DOS"
	ElseIf value = 3 Then
		text = "TRES"
	ElseIf value = 4 Then
		text = "CUATRO"
	ElseIf value = 5 Then
		text = "CINCO"
	ElseIf value = 6 Then
		text = "SEIS"
	ElseIf value = 7 Then
		text = "SIETE"
	ElseIf value = 8 Then
		text = "OCHO"
	ElseIf value = 9 Then
		text = "NUEVE"
	ElseIf value = 10 Then
		text = "DIEZ"
	ElseIf value = 11 Then
		text = "ONCE"
	ElseIf value = 12 Then
		text = "DOCE"
	ElseIf value = 13 Then
		text = "TRECE"
	ElseIf value = 14 Then
		text = "CATORCE"
	ElseIf value = 15 Then
		text = "QUINCE"
	ElseIf value < 20 Then
		text = "DIECI" & "#" & ToText(value - 10,0) & "#"
	ElseIf value = 20 Then
		text = "VEINTE"
	ElseIf value < 30 Then
		text = "VEINTI" & "#" & ToText(value - 20,0) & "#"
	ElseIf value = 30 Then
		text = "TREINTA"
	ElseIf value < 40 Then
		text = "TREINTA Y " & "#" & ToText(value - 30,0) & "#"
	ElseIf value = 40 Then
		text = "CUARENTA"
	ElseIf value < 50 Then
		text = "CUARENTA Y " & "#" & ToText(value - 40,0) & "#"
	ElseIf value = 50 Then
		text = "CINCUENTA"
	ElseIf value < 60 Then
		text = "CINCUENTA Y " & "#" & ToText(value - 50,0) & "#"
	ElseIf value = 60 Then
		text = "SESENTA"
	ElseIf value < 70 Then
		text = "SESENTA Y " & "#" & ToText(value - 60,0) & "#"
	ElseIf value = 70 Then
		text = "SETENTA"
	ElseIf value < 80 Then
		text = "SETENTA Y " & "#" & ToText(value - 70,0) & "#"
	ElseIf value = 80 Then
		text = "OCHENTA"
	ElseIf value < 90 Then
		text = "OCHENTA Y " & "#" & ToText(value - 80,0) & "#"
	ElseIf value = 90 Then
		text = "NOVENTA"
	ElseIf value < 100 Then
		text = "NOVENTA Y " & "#" & ToText(value - 90,0) & "#"
	ElseIf value = 100 Then
		text = "CIEN"
	ElseIf value < 200 Then
		text = "CIENTO " & "#" & ToText(value - 100,0) & "#" 
	ElseIf value = 200 Then
		text = "DOSCIENTOS"
	ElseIf value = 300 Then
		text = "TRESCIENTOS"
	ElseIf value = 400 Then
		text = "CUATROCIENTOS"
	ElseIf value = 500 Then
		text = "QUINIENTOS"
	ElseIf value = 600 Then
		text = "SEISCIENTOS"
	ElseIf value = 700 Then
		text = "SETECIENTOS"
	ElseIf value = 800 Then
		text = "OCHOCIENTOS"
	ElseIf value = 900 Then
		text = "NOVECIENTOS"
	ElseIf value < 1000 Then
		text =  "#" & ToText(Truncate(value / 100) * 100,0) & "# #" & ToText(value Mod 100,0) & "#" 
	ElseIf value = 1000 Then
		text = "MIL"
	ElseIf value < 2000 Then
		text = "MIL #" & ToText(value Mod 1000,0) & "#" 
	ElseIf value < 1000000 Then
		text = "#" & ToText(Truncate(value / 1000),0) & "# MIL"
		If (value Mod 1000) > 0 Then text = text & " #" & ToText(value Mod 1000,0) & "#" 
	ElseIf value = 1000000 Then
		text = "UN MILLÓN"
	ElseIf value < 2000000 Then
		text = "UN MILLÓN #" & ToText(value Mod 1000000,0) & "#" 
	Else
		text = "#" & ToText(Truncate(value / 1000000),0) & "# MILLONES"
		If (value Mod 1000000) > 0 Then text = text & " #" & ToText(value Mod 1000000,0) & "#" 
	End If

	NumeroALetras = text
End Function

Function NumerosALetras (numero As number) As String
      
    Dim texto As String
    Dim numTexto As String
    Dim numLetras As String
    Dim posInicial As Number
    Dim posFinal As Number

    texto = "#" & ToText(Truncate(numero),0) & "#"

    Do While InStr(texto, "#") > 0
        posInicial = InStr(texto, "#")+1
        posFinal = InStr(posInicial, texto, "#")
    
        If posFinal > 0 Then
            numTexto = Mid(texto, posInicial, posFinal - posInicial)
            numLetras = NumeroALetras(ToNumber(numTexto))
            texto = Replace(texto, "#" & numTexto & "#", numLetras)
        Else
            Exit Do
        End If
    Loop

    NumerosALetras = texto

End Function

Nota: si se utiliza otro nombre de función entonces es necesario cambiarlo en todo el código fuente.

Tabla de contenidos