Crear informe personalizado con campos independientes
Publicado por Roberto (26 intervenciones) el 06/02/2020 20:33:18
Hola a tod@s
No sé si me he liado y lo que trato de hacer se puede realizar de otra forma más simple, pero solo se me ha ocurrido de esta forma.
Tengo una base de datos de un club, en la que cada socio va pagando una mensualidad y voy metiendo el mes y el año en la tabla contabilidad además de fecha, cantidad y concepto,
Deseo hacer un informe, ya lo tengo creado. En ese informe he metido de la consulta CS_Estado_Cotabilidad, que a su vez coge los datos de la tabla socios y de la tabla contabilidad, los campos de:
socio(contabilidad), ape1(socios), ape2(socios), nombre(socios),
Como campos independientes:
ene, feb, mar, abr, may, jun, jul, ago, sep, oct, nov, dic
Lo que deseo es que si en un formulario anterior selecciono el año 2019, en el informe que se crea a continuación, me salgan todos los socios, y que dependiendo de si han pagado cada mes del año 2019, aparezca la letra "X" si ha pagado el mes correspondiente, y los caracteres "---" si no lo ha pagado.
He probado con varias opciones dentro del foro y buscando también por fuera, pero no lo consigo. En el informe me salen los socios repetidos tantas veces como meses han pagado.
Lo que si consigo es poner la "X" o los caracteres "---", pero me salen en todos los campos del mes y no solo en el socio que haya o no haya pagado.
Por ahora tengo varais cosas que voy probando sin éxito:
Dim vvalor1, vvalor2, vvalorA, vvalorB As Variant
vvalor1 = "Enero"
vvalor2 = 2019
If IsNull(vvalor) Then Exit Sub
vvalorA = DLookup("[Mes_Apunte]", "CS_Estado_Contabilidad", "[Mes_Apunte]='" & vvalor1 & "'")
vvalorB = DLookup("[Año_Apunte]", "CS_Estado_Contabilidad", "[Año_Apunte]=" & vvalor2)
If vvalor1 = vvalorA And vvalor2 = vvalorB Then
MsgBox "vPagado", vbInformation, "aviso"
Me.E_Mes_Ene.Caption = "X"
'Me.Id.Value = Null
'Me.Campo anterior a ID.SetFocus
'Me.Documento.SetFocus
Else
Me.E_Mes_Ene.Caption = "---"
End If
'Dim dbTemporal As DAO.Database
' Dim rsREGISTROS As DAO.Recordset
' Set dbTemporal = CurrentDb
' 'Seleccionamos toda la tabla, aunque también podrías seleccionar sólo una parte con una
' 'consulta, etc..
' Set rsREGISTROS = dbTemporal.OpenRecordset("NOMBRETABLA", dbOpenDynaset)
' 'Por si acaso
' rsREGISTROS.MoveLast
' rsREGISTROS.MoveFirst
' 'Ahora empezamos a recorrer el conjunto de registros
' Do While Not rsREGISTROS.EOF
' 'Ahora estamos en el primer registro
' '....aqui iría todo tu código, teniendo en cuenta que para referirte a cada campo de tu tabla debes
' 'hacerlo así:
' rsREGISTROS!Fuente=.....lo que sea...
' rsREGISTROS!elLink
' 'y para asegurarte guardar cambios en el registro poner al final de la modificación
' rsREGISTROS.Update
' rsREGISTROS.MoveNext 'siguiente registro
' DoEvents
' Loop
' 'limpiamos y liberamos
' rsREGISTROS.Close
' dbTemporal.Close
' Set rsREGISTROS = Nothing
' Set dbTemporal = Nothing
'
'
' Sub RecorrerTabla()
'------------------------------------------------------
'Dim Rs As DAO.Recordset
'Set Rs = CurrentDb.OpenRecordset("CS_Estado_de_Pagos")
'If Rs.RecordCount > 0 Then
'Do While Not Rs.EOF
'MsgBox Rs!Campo1
'MsgBox Rs("Campo2")
'MsgBox Rs.Fields(3)
'Rs.MoveNext
'Loop
'End If
'Rs.Close
No sé si me he liado y lo que trato de hacer se puede realizar de otra forma más simple, pero solo se me ha ocurrido de esta forma.
Tengo una base de datos de un club, en la que cada socio va pagando una mensualidad y voy metiendo el mes y el año en la tabla contabilidad además de fecha, cantidad y concepto,
Deseo hacer un informe, ya lo tengo creado. En ese informe he metido de la consulta CS_Estado_Cotabilidad, que a su vez coge los datos de la tabla socios y de la tabla contabilidad, los campos de:
socio(contabilidad), ape1(socios), ape2(socios), nombre(socios),
Como campos independientes:
ene, feb, mar, abr, may, jun, jul, ago, sep, oct, nov, dic
Lo que deseo es que si en un formulario anterior selecciono el año 2019, en el informe que se crea a continuación, me salgan todos los socios, y que dependiendo de si han pagado cada mes del año 2019, aparezca la letra "X" si ha pagado el mes correspondiente, y los caracteres "---" si no lo ha pagado.
He probado con varias opciones dentro del foro y buscando también por fuera, pero no lo consigo. En el informe me salen los socios repetidos tantas veces como meses han pagado.
Lo que si consigo es poner la "X" o los caracteres "---", pero me salen en todos los campos del mes y no solo en el socio que haya o no haya pagado.
Por ahora tengo varais cosas que voy probando sin éxito:
Dim vvalor1, vvalor2, vvalorA, vvalorB As Variant
vvalor1 = "Enero"
vvalor2 = 2019
If IsNull(vvalor) Then Exit Sub
vvalorA = DLookup("[Mes_Apunte]", "CS_Estado_Contabilidad", "[Mes_Apunte]='" & vvalor1 & "'")
vvalorB = DLookup("[Año_Apunte]", "CS_Estado_Contabilidad", "[Año_Apunte]=" & vvalor2)
If vvalor1 = vvalorA And vvalor2 = vvalorB Then
MsgBox "vPagado", vbInformation, "aviso"
Me.E_Mes_Ene.Caption = "X"
'Me.Id.Value = Null
'Me.Campo anterior a ID.SetFocus
'Me.Documento.SetFocus
Else
Me.E_Mes_Ene.Caption = "---"
End If
'Dim dbTemporal As DAO.Database
' Dim rsREGISTROS As DAO.Recordset
' Set dbTemporal = CurrentDb
' 'Seleccionamos toda la tabla, aunque también podrías seleccionar sólo una parte con una
' 'consulta, etc..
' Set rsREGISTROS = dbTemporal.OpenRecordset("NOMBRETABLA", dbOpenDynaset)
' 'Por si acaso
' rsREGISTROS.MoveLast
' rsREGISTROS.MoveFirst
' 'Ahora empezamos a recorrer el conjunto de registros
' Do While Not rsREGISTROS.EOF
' 'Ahora estamos en el primer registro
' '....aqui iría todo tu código, teniendo en cuenta que para referirte a cada campo de tu tabla debes
' 'hacerlo así:
' rsREGISTROS!Fuente=.....lo que sea...
' rsREGISTROS!elLink
' 'y para asegurarte guardar cambios en el registro poner al final de la modificación
' rsREGISTROS.Update
' rsREGISTROS.MoveNext 'siguiente registro
' DoEvents
' Loop
' 'limpiamos y liberamos
' rsREGISTROS.Close
' dbTemporal.Close
' Set rsREGISTROS = Nothing
' Set dbTemporal = Nothing
'
'
' Sub RecorrerTabla()
'------------------------------------------------------
'Dim Rs As DAO.Recordset
'Set Rs = CurrentDb.OpenRecordset("CS_Estado_de_Pagos")
'If Rs.RecordCount > 0 Then
'Do While Not Rs.EOF
'MsgBox Rs!Campo1
'MsgBox Rs("Campo2")
'MsgBox Rs.Fields(3)
'Rs.MoveNext
'Loop
'End If
'Rs.Close
Valora esta pregunta
0