Correlativo

Hola Experto... Ojala puedas ayudarme.
Te cuento que tengo una tabla Asegurados en la cual uno de los campos se llama correlativo y otro declaración,
El campo correlativo de la tabla asegurados no siempre esta llena ya que todos no cuentan con una declaración...
Lo que quiero hacer es que este campo declaración genere su propio correlativo dependiendo la compañía al que el asegurado pertenezca.. Al mismo tiempo el campo declaración me debe aparecer en si..
Como es mi proceso...
1.- Selecciono la compañía a la que pertenece el asegurado.
2.-Dependiendo de la compañía le doy su correlativo.
3.- El campo declaración me aparece en si.
Ojala puedas ayudarme
Gracias

1 Respuesta

Respuesta
1
La verdad que no acabo de captar la idea de lo que quieres hacer, pero si los tres campos que mencionas están en la misma tabla, tienes un problema de diseño en la estructura de los datos. Deberías plantearte tener una tabla con los datos de los Asegurados y otra tabla con los datos de las Compañías.
Me gustaría que me matizarás un poco más lo que quieres hacer, si se trata de un formulario, una consulta, etc. Si no te molesta ampliarme un poco la información, estaré encantado de ver que se puede hacer.
Yo tengo una tabla que se llama compañías, otra que se llama asegurados
estas tablas están relacionadas... la tabla de asegurado uno de sus campos es correlativo y otro declaración
Mi problema en que yo cree un formulario para actualizar los datos del asegurados ... cada asegurado tiene un documento llamado declaración... este documento tiene que tener un numero que sea consecutivo es por eso que yo quiero que en ese control se genere automáticamente un numero para ese documento dependiendo de la cia a la que pertenece el asegurado... no se si me puedo dejar entender...
El ejemplo que te propongo esta sacado de Checks2000.mdb disponible en http://www.databasecreations.com/ . El funcionamiento de su formulario Check Writter es simple, en su parte Cheques, y dependiendo del Banco que seleccionemos, nos marcará un nº nuevo y correlativo para ese cheque. Otra cosa va a ser como te de lo detallo yo, pero vamos a ver.
1º Vas a necesitar marcar Microsoft DAO 23/35 Compatibility Library en Referencias a Bibliotecas de tipo (el archivo en cuestión es DAO2535. TLB). No es compatible con Microsoft DAO 3.6 Object Library, así que tendrás que desmarcar esta Referencia para evitar problemas de tipo "El nombre entra en conflicto con un módulo, proyecto o biblioteca de objetos existente".
2º Tienes que Relacionar las dos tablas, de forma que el lado Uno sea un campo de Compañías, y el lado Varios sea un campo de Asegurados. Ten en cuenta que para este tipo de relaciones el tipo de datos tiene que ser igual en los campos de las dos tablas (p.e.:Texto), y a ser posible el lado Uno que sea Clave principal.
3º En la tabla Compañías vas a necesitar un campo Numérico Doble, que se llame Starting Check Number. En la tabla Asegurados necesitas un campo Numérico Entero llamado Check Number
4º Crea una consulta basada en la tabla Asegurados, en la celda Criterios del campo Nombre_Asegurado añade: [Forms]![MiFormulario]![MiCuadroCombinado]
5º Crea un formulario basado en esta consulta, añade lo que necesites en la sección Detalle, incluido el campo Check Number, en el evento Antes de actualizar de este control tienes que poner el siguiente Procedimiento de evento:
Private Sub Check_Number_BeforeUpdate(Cancel As Integer)
Dim YICDB As Database, YICTB As Recordset, Temp1, Temp2
Set YICDB = DBEngine.Workspaces(0).Databases(0)
Set YICTB = YICDB.OpenRecordset("Asegurados", DB_OPEN_TABLE)
'On Error GoTo Errout
If IsNull(Forms![MiFormulario]![Check Number]) Or Forms![MiFormulario]![Check Number] = 0 Then
Response = MsgBox("Check Number Cannot Be 0 or Null!" & Chr$(10) & Chr$(13) & "Do You Want to Cancel the Entry?", 32, "Missing Check Number")
SendKeys "{ESC}{ESC}"
Cancel = True
Exit Sub
Else
If (Forms![MiFormulario]![Check Number] <> Forms![MiFormulario]![Check Number].OldValue) Or IsNull(Forms![MiFormulario]![Check Number].OldValue) Then
Set YICDB = DBEngine.Workspaces(0).Databases(0)
Set YICTB = YICDB.OpenRecordset("Asegurados", DB_OPEN_TABLE)
Temp1 = Forms![MiFormulario]![Check Number]
Temp2 = Forms![MiFormulario]![Campo del lado Uno de la Relación]
Do Until YICTB.EOF
If YICTB![Check Number] = Temp1 And YICTB![Campo del lado Varios de la Relación] = Temp2 Then
Response = MsgBox("Duplicate Check Number!" & Chr$(10) & Chr$(13) & "Do You Want to Cancel the Entry?", 32, "Duplicate Check Number")
Cancel = True
SendKeys "{ESC}{ESC}"
YICTB.Close
Exit Sub
End If
YICTB.MoveNext
Loop
YICTB.Close
Exit Sub
End If
End If
Exit Sub
Errout:
MsgBox ("Error is " & Error(Err))
Exit Sub
End Sub
En la sección Encabezado del formulario pon un Cuadro combinado independiente que tenga su Origen de la fila en la tabla Compañías, y que se llame p.e.: MiCuadroCombinado (te sugiero que uses el asistente de la caja de herramientas para crear este control). En el evento Después de actualizar pon el nombre de la macro que creamos a continuación.
6º Crea una macro llamada "MiMacro", que tenga como Acción: Nueva consulta Acción: IrARegistro.
7º Añade la siguiente función a un Módulo estandar:
Function CheckNum() As String
Dim YICDB As Database, ssMaxCheck As Snapshot
Set YICDB = DBEngine.Workspaces(0).Databases(0)
Set ssMaxCheck = YICDB.CreateSnapshot("SELECT Max([Check Number]) AS [Max Check Num] FROM [Asegurados] WHERE [campo del lado Varios de la Relación] = '" & Forms![MiFormulario]![MiCuadroCombinado] & "'")
If Not IsNull(ssMaxCheck.Fields(0).Value) Then
CheckNum = CStr(ssMaxCheck("Max Check Num") + 1)
Else
Dim CurDB As Database, BA As Recordset, SQLStmt As String
Set CurDB = DBEngine.Workspaces(0).Databases(0)
SQLStmt = "SELECT [Starting Check Number] FROM [Compañias] WHERE [campo del lado Uno de la relación] = '" & Forms![MiFormulario]![MiCuadroCombinado] & "'"
Set BA = CurDB.OpenRecordset(SQLStmt, DB_OPEN_DYNASET)
If Not IsNull(BA.Fields(0).Value) And BA![Starting Check Number] > 0 Then
CheckNum = CStr(BA![Starting Check Number])
Else
CheckNum = "0100" 'el valor del contador
End If
BA.Close
CurDB.Close
End If
ssMaxCheck.Close
End Function
Creo que el tema es algo espeso, y salvo error debería funcionar. Para cada Compañía que selecciones del cuadro combinado te hará una consulta nueva en el formulario, y antes de actualizar, el campo Check Number tiene que recoger el valor nuevo o mostrar el que existe en la tabla.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas