En esta ocasión quise hacerlo poniendo el código dentro del mismo reporte.
Antes de comenzar, debo decirles que el código para convertir a letras debe estar escrito en Visual Basic.
Lo primero que hacemos es abrir la vista de código de nuestro reporte, esto lo hacemos dando clic en la parte gris, como se muestra en la imagen:

Luego, seleccionamos la pestaña Código:

El código es el siguiente:
Dim sUnidades() As String =
{"", "un", "dos", "tres", "cuatro", "cinco",
"seis", "siete", "ocho", "nueve", "diez",
"once", "doce", "trece", "catorce",
"quince", "dieciseis",
"diecisiete", "dieciocho", "diecinueve", "veinte",
"veintiún", "veintidos", "veintitres", "veinticuatro",
"veinticinco", "veintiseis", "veintisiete",
"veintiocho", "veintinueve"}
Dim sDecenas() As String =
{"", "diez", "veinte", "treinta", "cuarenta", "cincuenta",
"sesenta", "setenta", "ochenta", "noventa"}
Dim sCentenas() As String =
{"", "ciento", "doscientos", "trescientos",
"cuatrocientos",
"quinientos", "seiscientos", "setecientos",
"ochocientos", "novecientos"}
Dim sResultado As String = ""
Public Function ConvertirCadena(ByVal sNumero As String) As String
Dim dNumero As Double
Dim dNumAux As Double = 0
Dim x As Char
Dim sAux As String
sResultado = " "
Try
dNumero = Convert.ToDouble(sNumero)
Catch
Return ""
End Try
If (dNumero > 999999999999) Then
Return ""
End If
If (dNumero > 999999999) Then
dNumAux = dNumero Mod 1000000000000
sResultado += Numeros(dNumAux, 1000000000) + " mil "
End If
If (dNumero > 999999) Then
dNumAux = dNumero Mod 1000000000
sResultado += Numeros(dNumAux, 1000000) + " millones "
End If
If (dNumero > 999) Then
dNumAux = dNumero Mod 1000000
sResultado += Numeros(dNumAux, 1000) + " mil "
End If
dNumAux = dNumero Mod 1000
sResultado += Numeros(dNumAux, 1)
''Enseguida verificamos si contiene punto,
''si es así, los convertimos a texto.
sAux = dNumero.ToString()
If (sAux.IndexOf(".") >= 0) Then
sResultado += ObtenerDecimales(sAux)
End If
''Las siguientes líneas convierten
''el primer caracter a mayúscula.
sAux = sResultado
x = Char.ToUpper(sResultado(1))
sResultado = x.ToString()
For i As Integer = 2 To sAux.Length - 1 Step 1
sResultado += sAux(i).ToString()
Next
Return sResultado
End Function
Public Function ConvertirNumero(ByVal dNumero As Double) As String
Dim dNumAux As Double = 0
Dim x As Char
Dim sAux As String
sResultado = " "
If (dNumero > 999999999999) Then
Return ""
End If
If (dNumero > 999999999) Then
dNumAux = dNumero Mod 1000000000000
sResultado += Numeros(dNumAux, 1000000000) + " mil "
End If
If (dNumero > 999999) Then
dNumAux = dNumero Mod 1000000000
sResultado += Numeros(dNumAux, 1000000) + " millones "
End If
If (dNumero > 999) Then
dNumAux = dNumero Mod 1000000
sResultado += Numeros(dNumAux, 1000) + " mil "
End If
dNumAux = dNumero Mod 1000
sResultado += Numeros(dNumAux, 1)
''Enseguida verificamos si contiene punto,
''si es así, los convertimos a texto.
sAux = dNumero.ToString()
Dim varDecimales As String = ""
If (sAux.IndexOf(".") >= 0) Then
varDecimales = ObtenerDecimales(sAux)
Else
varDecimales = ""
End If
sResultado += varDecimales
''Las siguientes líneas convierten
''el primer caracter a mayúscula.
sAux = sResultado
x = Char.ToUpper(sResultado(1))
sResultado = x.ToString()
For i As Integer = 2 To sAux.Length - 1 Step 1
sResultado += sAux(i).ToString()
Next
Return sResultado
End Function
Private Function Numeros(ByVal dNumAux As Double, _
ByVal dFactor As Double) As String
Dim dCociente As Double = dNumAux / dFactor
Dim dNumero As Double = 0
Dim iNumero As Integer = 0
Dim sNumero As String = ""
Dim sTexto As String = ""
If (dCociente >= 100) Then
dNumero = dCociente / 100
sNumero = dNumero.ToString()
iNumero = Integer.Parse(sNumero(0).ToString())
sTexto += Me.sCentenas(iNumero) + " "
End If
dCociente = dCociente Mod 100
If (dCociente >= 30) Then
dNumero = dCociente / 10
sNumero = dNumero.ToString()
iNumero = Integer.Parse(sNumero(0).ToString())
If (iNumero > 0) Then
sTexto += Me.sDecenas(iNumero) + " "
End If
dNumero = dCociente Mod 10
sNumero = dNumero.ToString()
iNumero = Integer.Parse(sNumero(0).ToString())
If (iNumero > 0) Then
sTexto += "y " + Me.sUnidades(iNumero) + " "
End If
Else
dNumero = dCociente
sNumero = dNumero.ToString()
If (sNumero.Length > 1) Then
If (sNumero(1) <> ".") Then
iNumero = Integer.Parse(sNumero(0).ToString() +
sNumero(1).ToString())
Else
iNumero = Integer.Parse(sNumero(0).ToString())
End If
Else
iNumero = Integer.Parse(sNumero(0).ToString())
sTexto += Me.sUnidades(iNumero) + " "
End If
End If
Return sTexto
End Function
Private Function ObtenerDecimales(ByVal sNumero As String) As String
Dim sNumPuntos() As String
Dim sTexto As String = ""
Dim dNumero As Double = 0
sNumPuntos = sNumero.Split(".")
dNumero = Convert.ToDouble(sNumPuntos(1))
sTexto = "punto " + Numeros(dNumero, 1)
Return sTexto
End Function
Luego, vayamos al lugar en donde ubicaremos los valores:

Escribimos algo así:

Así se ve, maso menos:

Nota: La vista previa corresponde al diseño de mi cliente, en portugués.
Listo!!!
me han salvado la vida, gracias...
ResponderEliminarHola, me podrías ayudar soy nuevo. He probado y no me acepta el code.NumeroLetra
EliminarHola necesito saber por que el código me marca error en code.NumeroLetra :/ necesito ayuda, mi proyecto se entrega mañana
EliminarHola necesito saber por que el código me marca error en code.NumeroLetra :/ necesito ayuda, mi proyecto se entrega mañana.....Por favor!
ResponderEliminary al final no despejo nuestras dudas el editor...
EliminarNo sean tan vagos, si se analiza un poco el código, es fácil darse cuenta del error, es un simple llamado a la función, no la manda llamar con el nombre correcto.
ResponderEliminarlo hice, y el error persiste
ResponderEliminarPor favor tendras el codigo para c# te lo agradecere mucho por favor lo necesito urgente gracias
ResponderEliminaral parecer el creador del post, se fue
EliminarY porsiacso no sabras tu por favor para que me puedas ayudar te lo agradecere mucho
ResponderEliminarESTE CODIGO NO ES AUDITORIA MIA, NO RECUERDO QUIEN LO PROGRAMO PERO ME HA RESULTADO MUY UTIL JUNTO CON LA INFORMACION DE ESTE POST.
ResponderEliminarLES COMPARTO EL CODIGO
https://drive.google.com/open?id=1bwGK6iBSkTGFDHKJlv4dQKCEzT82HeAK
Solo en las expresiones me tira error cual sera la correcta
ResponderEliminarMe puedes ayudar
Solo en la expresion me tira error en visual studio 2017
ResponderEliminarMe puedes ayudar te agradezco bastante