Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Llamar a función desde campo de formulario

Estas en el tema de Llamar a función desde campo de formulario en el foro de Visual Basic clásico en Foros del Web. Hola a tod@s !! Tengo un problema que hasta la fecha no he conseguido resolver. Resulta que encontré una función que te devuelve el tanto ...
  #1 (permalink)  
Antiguo 27/11/2012, 11:56
 
Fecha de Ingreso: noviembre-2012
Ubicación: Badalona
Mensajes: 5
Antigüedad: 11 años, 5 meses
Puntos: 0
Información Llamar a función desde campo de formulario

Hola a tod@s !! Tengo un problema que hasta la fecha no he conseguido resolver. Resulta que encontré una función que te devuelve el tanto en Número de Afiliación como el Código de Cuenta de Cotización. El código es el siguiente:
Código vb:
Ver original
  1. ''' <summary>
  2. ''' Devuelve el dígito de control de un Número de Afiliación como de
  3. ''' un Número de Cuenta de Cotización.
  4. ''' </summary>
  5. ''' <param name="numSegSocial">Número cuyo dígito de control se desea obtener.</param>
  6. ''' <param name="esNumEmpresa">Indica si el Número se corresponde con el de una Empresa.</param>
  7. ''' <returns></returns>
  8. ''' <remarks></remarks>
  9. Public Function GetDCNumSegSocial(ByVal numsegsocial As String, _
  10.                                   ByVal isNumEmpresa As Boolean) As String
  11.  
  12.     ' Si hay más de 10 dígitos en el número se devolverá una excepción de
  13.    ' argumentos no permitidos.
  14.    '
  15.    If (numSegSocial.Length > 10) OrElse (numSegSocial.Length = 0) Then _
  16.         Throw New System.ArgumentException()
  17.  
  18.     ' Si algún carácter no es un número, abandono la función.
  19.    '
  20.    Dim regex As New System.Text.RegularExpressions.Regex("[^0-9]")
  21.     If (regex.IsMatch(numSegSocial)) Then _
  22.         Throw New System.ArgumentException()
  23.  
  24.     Try
  25.         ' Obtengo el número correspondiente a la Provincia
  26.        '
  27.        Dim dcProv As String = numSegSocial.Substring(0, 2)
  28.  
  29.         ' Obtengo el resto del número
  30.        '
  31.        Dim numero As String = numSegSocial.Substring(2, numSegSocial.Length - 2)
  32.  
  33.         Select Case numero.Length
  34.             Case 8
  35.                 If (esNumEmpresa) Then
  36.                     ' Si el número es de una empresa, no puede tener 8 dígitos.
  37.                    Return String.Empty
  38.  
  39.                 Else
  40.                     ' Compruebo si es un NAF nuevo o antiguo.
  41.                    If (numero.Chars(0) = "0"c) Then
  42.                         ' Es un número de afiliación antiguo. Lo formateo
  43.                        ' a siete dígitos, eliminando el primer cero.
  44.                        numero = numero.Remove(0, 1)
  45.  
  46.                     End If
  47.  
  48.                 End If
  49.  
  50.             Case 7
  51.                 ' Puede ser un NAF antiguo o un CCC nuevo o viejo.
  52.                If (esNumEmpresa) Then
  53.                     ' Si el primer dígito es un cero, es un CCC antiguo,
  54.                    ' por lo que lo formateo a seis dígitos, eliminando
  55.                    ' el primer cero.
  56.                    If (numero.Chars(0) = "0"c) Then
  57.                         numero = numero.Remove(0, 1)
  58.                     End If
  59.                 End If
  60.  
  61.             Case 6
  62.                 ' Si se trata del número de una empresa,
  63.                ' es un CCC antiguo.
  64.                If (Not (esNumEmpresa)) Then
  65.                     ' Es un NAF antiguo, por lo que lo debo
  66.                    ' de formatear a 7 dígitos.
  67.                    numero = numero.PadLeft(7, "0"c)
  68.                 End If
  69.  
  70.             Case Else
  71.                 ' Todos los demás casos, serán números antiguos
  72.                If (esNumEmpresa) Then
  73.                     ' Lo formateo a seis dígitos.
  74.                    numero = numero.PadLeft(6, "0"c)
  75.  
  76.                 Else
  77.                     ' Lo formateo a siete dígitos.
  78.                    numero = numero.PadLeft(7, "0"c)
  79.  
  80.                 End If
  81.  
  82.         End Select
  83.  
  84.         ' Completo el número de Seguridad Social
  85.        '
  86.        Dim naf As Int64 = Convert.ToInt64(dcProv & numero)
  87.  
  88.         ' Calculo el Dígito de Control. Tengo que operar con números
  89.        ' Long, para evitar el error de desbordamiento que se puede
  90.        ' producir con los nuevos números de Seguridad Social
  91.        '
  92.        NAf = NAf - (NAf \ 97) * 97
  93.  
  94.         ' Devuelvo el Dígito de Control formateado
  95.        '
  96.        Return String.Format("{0:00}", naf)
  97.  
  98.     Catch
  99.         Return String.Empty
  100.  
  101.     End Try
  102.  
  103. End Function

# Despúes de copiarlo en un módulo (llamado CalculoNAF), procedo a introducir en el campo (NAF) del formulario, en el evento (AfterUpdate), el siguiente código:

Private Sub NAF_AfterUpdate()
Me.NAF= GetDCNumSegSocial(Me.NAF)
End Sub

El problema es que me devuelve un cuadro de mensaje "Error de compilación. El argumento no es opcional".

La cuestión es que tengo otra función para Nif, y haciendo exactamente lo mismo (cambiando evidentemente los nombres del campo), el resultado es el deseado.

Os agradecería muchísiiimo vuestra ayuda. Sólo me falta éste detalle para poder entregar la Base a mi jefe para poder utilizarla en la empresa.
Un saludo, perdonad mi ignorancia y gracias de antemano.

Última edición por gnzsoloyo; 27/11/2012 a las 12:18 Razón: Codigo no etiquetado
  #2 (permalink)  
Antiguo 27/11/2012, 12:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Llamar a función desde campo de formulario

Por empezar: Si esto es código de programación, estás preguntando en el foro equivocado.
En los Foros de Bases de Datos no está permitido tratar asuntos de programación. Sólo SQL y Bases de datos ()nota que no has puesto ni una sola linea relacionada con SQL.

Si me dices exactamente qué usas, te paso el post al foro correspondiente (VB Clasico o .NET). De lo contrario deberé eliminar tu script por no corresponder al tópico de este foro.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 27/11/2012, 12:31
 
Fecha de Ingreso: noviembre-2012
Ubicación: Badalona
Mensajes: 5
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Llamar a función desde campo de formulario

Gracias !! Siento mi torpeza. Estoy utilizando una Base de Datos Access 2007, y creo que el código está en Visual Basic o al menos eso aparece en la página web de donde he copiado dicho código.
Disculpa de nuevo y muchas gracias por la ayuda.
  #4 (permalink)  
Antiguo 27/11/2012, 13:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Llamar a función desde campo de formulario

No problem. Ahora te paso a VB Clásico, que sería lo más aproximado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 27/11/2012, 13:38
 
Fecha de Ingreso: noviembre-2012
Ubicación: Badalona
Mensajes: 5
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Llamar a función desde campo de formulario

Muchas gracias !! A ver si tengo suerte.
  #6 (permalink)  
Antiguo 28/11/2012, 07:24
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: Llamar a función desde campo de formulario

Hola!
Me parece que la forma correcta de llamar la funcion (Public Function GetDCNumSegSocial(ByVal numsegsocial As String, ByVal isNumEmpresa As Boolean) As String) es asi:

Código vb:
Ver original
  1. 'txtDigitoControl=ES UN TEXTBOX
  2. 'NumeroSS=NUMERO SEG SOCIAL
  3.  
  4. 'SI EL NUMERO PERTENECE A UNA EMPRESA
  5.       txtDigitoControl.Text= GetDCNumSegSocial(NumeroSS,True)
  6.  
  7. 'SI EL NUMERO NO PERTENECE A UNA EMPRESA
  8.       txtDigitoControl.Text= GetDCNumSegSocial(NumeroSS,False)

Y el Code es de VB.net...
  #7 (permalink)  
Antiguo 28/11/2012, 14:35
 
Fecha de Ingreso: noviembre-2012
Ubicación: Badalona
Mensajes: 5
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Llamar a función desde campo de formulario

Gracias Lokoman por tu respuesta. Intentaré resolverlo con tu consejo.
  #8 (permalink)  
Antiguo 28/11/2012, 16:22
 
Fecha de Ingreso: noviembre-2012
Ubicación: Badalona
Mensajes: 5
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Llamar a función desde campo de formulario

Lo he probado y me devuelve mensaje de error de compilación.

Etiquetas: der, formulario, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:44.