web analytics

Informe con registros ordenables

La gracia de esta plantilla es conocer alguna manera de ordenar los registros desde un informe o subinforme (también serviría desde un formulario) haciéndolo de un modo mucho más visual. El uso típico sería como subinforme en un formulario de manera que podemos ordenar los registros del informe final de manera mucho más intuitiva

Cambio de posición de los elementos en el formulario
Cambio de posición de los elementos en el formulario

¿Qué necesitamos?

Para ello partimos de lo siguiente:

Relación entre las tablas madre e hija
Relación entre las tablas madre e hija
Datos contenidos en la tabla madre
Datos contenidos en la tabla madre

Datos contenidos en la tabla hija
Datos contenidos en la tabla hija

Tengo 2 tablas (Madre e hija) que mantienen una relación entre ellas, para el ejemplo que nos ocupa hemos puesto nombre de estancias de una casa en la tabla madre, y en la tabla hija las tareas a realizar en cada una de estas estancias, hay un identificador único (Id) para cada estancia y otro identificador único (Id) para cada tarea, así mismo hay un campo en cada una de las tablas para indicar la posición o orden de cada elemento dentro del informe.

Informe de ejemplo - Estancias y tareas
Informe de ejemplo – Estancias y tareas

Supongamos que queremos que las tareas se realicen en un orden concreto dentro del informe, podemos variar con las flechas tanto la posición de las estancias (hay que hacer las tareas antes de la cocina que de la habitación de los niños, por ejemplo) como de las tareas (hacer la cama y después pasar el aspirador)

Formulario en modo diseño
Formulario en modo diseño

En el informe pondremos las flechas y hay que tener cuidado al elegir la agrupación de registros y sobretodo el campo que ajustará su posición (TM_Posicion y TH_Posicion en nuestro ejemplo)

Agrupación y orden del informe
Agrupación y orden del informe

En las flechas dispararemos los eventos  Click():

  • Las flechas bBajar1 y bSubir1 (color azul) suben y bajan la posición de las estancias.
  • Las flechas bBajar2 y bSubir2 (color verde) suben y bajan la posición de las tareas.
 Private Sub bBajar1_Click()
 sMoverPosiciones CurrentDb, "TablaMadre", "", "", "TM_Id", TM_Id, "TM_Posicion", TM_Posicion, "bajar"
 Report_Informe.Requery
 End Sub

Private Sub bSubir1_Click()
 sMoverPosiciones CurrentDb, "TablaMadre", "", "", "TM_Id", TM_Id, "TM_Posicion", TM_Posicion, "subir"
 Report_Informe.Requery
 End Sub

Private Sub bBajar2_Click()
 sMoverPosiciones CurrentDb, "TablaHija", "TH_TM_Id", TH_TM_Id, "TH_Id", TH_Id, "TH_Posicion", TH_Posicion, "bajar"
 Report_Informe.Requery
 End Sub

Private Sub bSubir2_Click()
 sMoverPosiciones CurrentDb, "TablaHija", "TH_TM_Id", TH_TM_Id, "TH_Id", TH_Id, "TH_Posicion", TH_Posicion, "subir"
 Report_Informe.Requery
 End Sub
Y aquí la función para transponer las posiciones:
'**************************************************************************************
 ' www.manteniendo.com
 '**************************************************************************************
 ' SUB: sMoverPosiciones(dbBBDD, sTabla, sCampoIdMadre, sValorIdMadre, sCampoIdHija, sValorIdHija, sCampoPosicion, sValorPosicion, sSentido)
 ' DESCRIPCIÓN: Ordenar valores en 2 tablas relacionadas con un campo de orden propio en cada una.
 ' ARGUMENTOS:
 ' dbBBDD: objeto Database que contiene la base de datos
 ' sTabla: nombre de la tabla en la que realizaremos el posicionamiento
 ' sCampoIdMadre: nombre del campo clave de la tabla madre
 ' sValorIdMadre: valor de Id del campo a ordenar en la tabla madre
 ' sCampoIdHija: nombre del campo Id de la tabla hija
 ' sValorIdHija: valor de Id del registro a ordenar en la tabla hija
 ' sCampoPosicion: nombre del campo de la tabla que contiene el valor de posicion
 ' sValorPosicion: valor de la posicion actual
 ' sSentido: sentido del posicionamiento > "subir" o "bajar"
 ' REQUISITOS:
 ' Los valores deben estar correctamente en la tabla original,
 ' correlativos y empezando de 0 o 1. Cuidado especial al crear
 ' las filas de la tabla.
 '**************************************************************************************
 ' Realizado y testeado con Access 2013 32bit sobre Windows 7
 '**************************************************************************************
 Sub sMoverPosiciones(dbBBDD As Variant, sTabla As String, sCampoIdMadre As String, sValorIdMadre As String, sCampoIdHija As String, sValorIdHija As String, sCampoPosicion As String, sValorPosicion As String, sSentido As String)
 Dim sqlQuery, sqlQueryWhere, sqlQuery1, sqlQuery2 As String
 Dim sSigno1, sSigno2 As String

Select Case sSentido 'Elegimos las operaciones para hacer la conmutación de posición
 Case "subir"
 sValorPosicion = sValorPosicion - 1
 sSigno1 = "+"
 sSigno2 = "-"
 Case "bajar"
 sValorPosicion = sValorPosicion + 1
 sSigno1 = "-"
 sSigno2 = "+"
 End Select

sqlQuery = "UPDATE " & sTabla & " SET [" & sCampoPosicion & "]=([" & sCampoPosicion & "]"
 With dbBBDD
 If sCampoIdMadre <> "" Then
 sqlQueryWhere = "[" & sCampoIdMadre & "]= " & sValorIdMadre & " AND "
 Else
 sqlQueryWhere = ""
 End If
 sqlQuery1 = sqlQuery & sSigno1 & "1) WHERE " & sqlQueryWhere & " [" & sCampoPosicion & "]=" & sValorPosicion
 .Execute sqlQuery1
 If .RecordsAffected >= 1 Then
 sqlQuery2 = sqlQuery & sSigno2 & "1) WHERE [" & sCampoIdHija & "]=" & sValorIdHija
 .Execute sqlQuery2
 Else
 MsgBox "No se puede " & sSentido & " más", vbCritical
 End If
 End With
 Set dbBBDD = Nothing
 End Sub
Icono
Ejemplo de informe con registros ordenables

El .zip contiene:

  • Archivo .accdb  creado con Access 2013 32bits
  • Imágenes.

Puedes modificarlo, copiarlo, distribuirlo como quieras pero siempre mencionando la fuente.

Condiciones de descarga
Manteniendo.com declina cualquier responsabilidad en caso de que existan interrupciones o un mal funcionamiento en el software descargado, de los servicios o contenidos ofrecidos en Internet, cualquiera que sea su causa. Asimismo, el Titular no se hace responsable por caídas de la red, pérdidas de negocio a consecuencia de dichas caídas, suspensiones temporales de fluido eléctrico o cualquier otro tipo de daño indirecto que te pueda ser causado por causas ajenas a el Titular. El titular no ofrece ninguna garantía por el software del web. Tanto el software como cualquier documentación es entregada tal cual, sin ningún tipo de garantía ni información añadida. La responsabilidad del uso que se haga del software descargado, así como de las consecuencias de dicho uso, es exclusivamente del usuario.
Suscribir
Notificar de

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

4 Comentarios
Inline Feedbacks
Ver todos los comentarios
Eduardo Tobar
Eduardo Tobar
7 años atrás

Buenos Noches. Existe versión 64 bit para acces 2013 del archivo de ejemplo de informes con registros ordenables.
Muchas gracias.

planningfutbol
7 años atrás

Buenos días. Por favor, necesitaría la contraseña del archivo de ejemplo de informes con registros ordenables. Muchas gracias.

4
0
Me encantaría conocer tú opinión sobre esta entrada, por favor comentax