none
Error sintaxis creando función RRS feed

  • Pregunta

  • Hola, estoy pasando una función de FoxPro a VB.NET, el problema es que Crystal report no me reconoce algunas funciones de .NET... He podido solucionar algunos errores pero me siguen dando errores que ya no se como solucionar.

    Veis algo mal??

           Function Generar_EAN13(tcstring As String, tlcheckd As Boolean) As String
    
            Dim lcLat, lcMed, lcRet, lcJuego, lcini, lcResto, lcCod As String
            Dim Lni, lnchecksum, lnaux, lnpri As number
            Dim laJuego(9) As String
            
            lcRet = Trim(tcstring)
            If len(lcRet) <> 12 Then
                Exit Function
            End If
    
            'Generamos dígito de control
            lnchecksum = 0
    
            For Lni = 0 To 11
                If (Lni Mod 2) = 0 Then
                    lnchecksum = lnchecksum + tonumber(lcRet.substring(Lni,1)) * 3
                Else
                    lnchecksum = lnchecksum + tonumber(lcRet.substring(Lni,1)) * 1
                End If
            Next
    
            lnaux = (lnchecksum Mod 10)
            lcRet = lcRet + Trim(CInt(IIf(lnaux = 0, 0, 10 - lnaux)))
    
            If tlcheckd = True Then
                'Si solo generamos dígito de control.
                Return lcRet
            End If
    
            'Para imprimir con fuente True Type EAN13
            'Primer dígito (lnPri)
            lnpri = CInt(lcRet.Substring(0, 1))
    
            'Juego de caracteres
            'Segun LnPri
            laJuego(0) = "AAAAAACCCCCC"
            laJuego(1) = "AABABBCCCCCC"
            laJuego(2) = "AABBABCCCCCC"
            laJuego(3) = "AABBBACCCCCC"
            laJuego(4) = "ABAABBCCCCCC"
            laJuego(5) = "ABBAABCCCCCC"
            laJuego(6) = "ABBBAACCCCCC"
            laJuego(7) = "ABABABCCCCCC"
            laJuego(8) = "ABABBACCCCCC"
            laJuego(9) = "ABBABACCCCCC"
    
            'Caracter inicial(fuera del código)
            lcini = AscW(chr(lnpri + 35))
            'Caracter lateral y central
            lcLat = chr(33)
            lcMed = chr(45)
    
            'Resto de caracteres
            lcResto = lcRet.Substring(1, 11)
    
            For Lni = 0 To 11
                lcJuego = laJuego(lnpri + 1).Substring(Lni, 1)
                Dim lcresto2 As String = lcResto
    
                Select Case lcJuego
                    Case "A"
    
                       lcResto = lcResto.Remove(Lni, 1)
                        lcResto = lcResto.Insert(Lni, Chr(Val(lcresto2.Substring(Lni, 1)) + 48))
                    Case "B"
                        lcResto = lcResto.Remove(Lni, 1)
                        lcResto = lcResto.Insert(Lni, Chr(Val(lcresto2.Substring(Lni, 1)) + 65))
    
                    Case "C"
                        lcResto = lcResto.Remove(Lni, 1)
                        lcResto = lcResto.Insert(Lni, Chr(Val(lcresto2.Substring(Lni, 1)) + 97))
    
                End Select
            Next
    
            'Creamos el código
            lcCod = lcini + lcLat + lcResto.Substring(0, 5) + lcMed + lcResto.Substring(6, 5) + lcLat
    
            Return lcCod
        End Function

    Me dice que falta ')'

            For Lni = 0 To 11
                If (Lni Mod 2) = 0 Then
                    lnchecksum = lnchecksum + tonumber(lcRet.substring(Lni,1)) * 3

    En la línea 17.

    martes, 3 de enero de 2017 17:47

Respuestas

  • J.Ramon,

    No entro en el contexto, ¿qué deseas hacer? ¿concatenar? ¿una operación aritmética?

    'Sumar
    lnaux = (lnchecksum Mod 10)
    lcRet = ToText(ToNumber(lcRet) + IIf(lnaux = 0, 0, 10 - lnaux))
    
    'Concatenar
    lnaux = (lnchecksum Mod 10)
    lcRet = lcRet + ToText(IIf(lnaux = 0, 0, 10 - lnaux)))


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta J.Ramon jueves, 5 de enero de 2017 16:12
    martes, 3 de enero de 2017 19:29

Todas las respuestas

  • J.Ramon,

    Intenta realizando los siguientes cambios:

    Dim Lni, lnchecksum, lnaux, lnpri As Integer

    For Lni = 0 To 11
    	lnchecksum += CInt(lcRet.substring(Lni, 1)) * IIf((Lni Mod 2) = 0, 3, 1)
    Next



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    martes, 3 de enero de 2017 18:10
  • Crystal report no me reconoce integer... por eso puse number.

    y parece ser que tampoco me reconoce substring...

    martes, 3 de enero de 2017 18:17
  • J.Ramon,

    De acuerdo, prueba con lo siguiente:

    For Lni = 0 To 11
    	lnchecksum = lnchecksum +
    		(ToNumber(Mid(lcRet, Lni, 1)) * IIf((Lni Mod 2) = 0, 3, 1))
    Next


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    martes, 3 de enero de 2017 18:26
  • Bieeen! de momento ahí ya no me da error... Solo me queda el final.

    siguiente error:

            For Lni = 0 To 11
                lcJuego = mid(laJuego(lnpri + 1),Lni, 1)
                Dim lcresto2 As String = lcResto
    
                Select Case lcJuego
                    Case "A"
    lcResto = lcResto.Remove(Lni, 1) lcResto = lcResto.Insert(Lni, Chr(Val(lcresto2.Substring(Lni, 1)) + 48)) Case "B" lcResto = lcResto.Remove(Lni, 1) lcResto = lcResto.Insert(Lni, Chr(Val(lcresto2.Substring(Lni, 1)) + 65)) Case "C" lcResto = lcResto.Remove(Lni, 1) lcResto = lcResto.Insert(Lni, Chr(Val(lcresto2.Substring(Lni, 1)) + 97)) End Select Next
    Me dice Falta la palabra Next.


    martes, 3 de enero de 2017 18:40
  • Creo que no me reconoce Insert y Remove, lo he cambiado todo y parece que me va bien, pero ahora cuando le doy a Revisar me da error aquí:

            lnaux = (lnchecksum Mod 10)
            lcRet = lcRet + Trim(tonumber(IIf(lnaux = 0, 0, 10 - lnaux)))

    Me dice "Aquí se requiere una cadena."

    Exactamente me marca: tonumber(IIf(lnaux = 0, 0, 10 - lnaux))

    • Editado J.Ramon martes, 3 de enero de 2017 19:00 edito
    martes, 3 de enero de 2017 18:53
  • J.Ramon,

    No entro en el contexto, ¿qué deseas hacer? ¿concatenar? ¿una operación aritmética?

    'Sumar
    lnaux = (lnchecksum Mod 10)
    lcRet = ToText(ToNumber(lcRet) + IIf(lnaux = 0, 0, 10 - lnaux))
    
    'Concatenar
    lnaux = (lnchecksum Mod 10)
    lcRet = lcRet + ToText(IIf(lnaux = 0, 0, 10 - lnaux)))


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta J.Ramon jueves, 5 de enero de 2017 16:12
    martes, 3 de enero de 2017 19:29
  • Tienes toda la razón Williams, el error era la conversión.

    Lo correcto era convertirlo a carácter.

    Parece ser que ya no me da errores pero al pasar el código me he colado en algunos detalles..

    Muchas gracias Williams!

    miércoles, 4 de enero de 2017 9:38