Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/11/2012, 11:56
frkfay
 
Fecha de Ingreso: noviembre-2012
Ubicación: Badalona
Mensajes: 5
Antigüedad: 12 años, 1 mes
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