Estoy haciendo una aplicación en access 2010

Mi aplicación es para llevar un control de expedientes turnados a diferentes abogados. Mi duda es debido a que cada que llega un expediente hay que registrarlo mediante un formulario, sin embargo, la idea es que se le asigne un abogado en automático, mismos que deberán estar registrados de un total de 6 abogados en un campo de la tabla. Es decir, cada que se registre un expediente, en automático se le asigne un abogado de un listado de 6 de forma consecutiva, y cuando se llegue al sexto abogado, regrese otra vez al primero y así siga la secuencia, pero no tengo la menor idea de cómo hacerlo.

4 Respuestas

Respuesta
2

Supongamos que la tabla Abogados tiene como campos Idabogado y abogado. Crea otra igual y llámala por ejemplo Otra. Y supongamos que el formulario tiene un cuadro de texto Abogado. En el evento Al activar registro del formulario escribe

If DCount("abogado", "otra") = 0 Then
DoCmd.RunSQL "insert into otra select * from abogados"
Form.Refresh
End If

En el evento Al recibir el enfoque del cuadro de texto Abogado del formulario escribe

Abogado = DLast("abogado", "otra")

También puedes poner Dfirst, como quieras

Y en el evento Al perder el enfoque del mismo cuadro de texto

DoCmd.RunSQL "delete * from otra where abogado=forms!clientes!abogado"

Te aconsejaría que en las propiedades del cuadro de texto Abogado lo pusieras como Bloqueado Sí

Supongamos que la tabla Clientes tiene los campos Idcliente, NombreCliente,..., Abogado. Hay un dato que no va a cambiar en un registro, que será el nombre del cliente. Por tanto lo de:

Abogado = DLast("abogado", "otra")

Lo puedes poner en el evento Después de actualizar del cuadro de texto NombreCliente. Pero acuérdate de poner en las propiedades del cuadro de texto Abogado, en la solapa Datos

Habilitado Si

Bloqueado Si

Si hicieras clic sobre ese cuadro de texto, como está bloqueado no te cambia nada.

Respuesta

Abel: Si tienes un Identificador correlativo en la Tabla de Abogados, no debe entrañar una dificultada grande.

Miras el Ultimo Registro de la Tabla en la que asignas, si vas adjudicando del 1 al 6 por ejemplo, si el último es N el siguiente será N+1, y cuando el último se 6 el siguiente será 1. Saludos >> Jacinto

Abel: Con el fin de cerrar temas, y dado que ésta pregunta me sale pendiente te ruego la valores o en su caso me comentes si necesitas información adicional. Saludos >> Jacinto

Respuesta

Yo lo haría así:

1º/ Supongo que tendrás una tabla con tus 2 abogados. Añádele un campo de tipo Sí/No, por ejemplo Asignado, y marcas la del primero.

2º/ En tu formulario, en el evento "Despues de actualizar" de tu campo expediente, programaría un código que haga lo siguiente:

a) Mire si hay un abogado asignado o no. En caso negativo:

b) Busque en la tabla Abogados cuál es el que tiene la casilla Asignado en verdadero.

c) Le desmarque la casilla, busque el siguiente registro (o el primero si llegas al final), le marque la casilla y lo asigne

La idea es parecida a la que se explica aquí: http://siliconproject.com.ar/neckkito/index.php/component/content/article/97-ejemplos-explicados/ejemplos-especiales/272-asignar-tareas-equitativamente 

Para darte un código que te funcione, necesitaría saber: los nombres y estructura de tus tablas, y los nombres de los controles de tu formulario, si no son los mismos que los de las tablas.

Respuesta

Se me ocurre que crees una tabla temporal con la misma estructura y datos de la lista de abogados. Algo así:

 Sub Rellenar_BaseTemporal()

Dim MiBase As Database, TemAbogados As Recordset, Mis_Abogados As Recordset, Registros As Integer

Set MiBase = CurrentDb

Set TemAbogados = dbsCooperativa.OpenRecordset("Tbl_AbogadosTEM", dbOpenDynaset)

Set Mis_Abogados = dbsCooperativa.OpenRecordset("Tbl_Abogados", dbOpenDynaset)

For Registros = 1 To DCount("*", "Tbl_Abogados")

 TemAbogados.MoveFirst

 Mis_Abogados.MoveFirst

    With TemAbogados

            .AddNew

            !Id_AbogadoTem = Mis_Abogados!Id_Abogado

                 'aqui el resto de los campos

            .Update

            .Bookmark = .LastModified

    End With

    End If

        Mis_Abogados.MoveNext

Next

    Set MiBase = Nothing

    Set TemAbogados = Nothing

    Set Mis_Abogados = Nothing

End Sub

En el evento Private Sub Form_Load(), verificar si la tabla temporal aún tiene registros

Private Sub Form_Load()

Dim Registro As Integer

Registro = DCount("*", " Tbl_AbogadosTEM ")

IF Then Registro= 0  Then

Rellenar_BaseTemporal

Else

End If

End Sub()

Antes asignas al control del formulario enlazado con el Id del Abogado el primer registro de la tabla temporal en la propiedad del control Ficha: Datos, Propiedad: Valor predeterminado: =DFirst(Id_Abogado, Tbl_Abogados). Después de llenar un expediente eliminar ese registro con el evento: Private Sub cmb_Id_Abogado _AfterUpdate(), claro suponiendo que el nombre del combo sea cmb_Id_Abogado

Private Sub cmb_Id_Abogado _AfterUpdate()

    Dim MiBase As Database, TemAbogados As Recordset

    Set MiBase = CurrentDb

    Set TemAbogados = dbsCooperativa.OpenRecordset("Tbl_Abogados", dbOpenDynaset)

    TemAbogados.MoveFirst

    With TemAbogados

            .Delete

    End With

    Set MiBase = Nothing

    Set TemAbogados = Nothing

End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas