GENERAR INFORME DE UNA SELECCION

Discute sobre las herramientas de la base de datos
Responder
James07
Mensajes: 78
Registrado: Sab Jul 04, 2020 12:15 pm

GENERAR INFORME DE UNA SELECCION

Mensaje por James07 »

Hola. sigo con mas problemas.
En un formulario, con la función de buscar de libreoffice (la lupa) me selecciona un registro concreto que cumple los términos de la búsqueda. Yo solo quiero un informe con ese solo registro seleccionado pero cuando le doy a la función
Sub ImprimirDocumento( Evento )
Dim oReporte As Object
Dim oForm As Object

'El formulario activo
oForm = Evento.Source.Model.Parent
oReporte = ThisDatabaseDocument.ReportDocuments.getByName ("DocumentoFinal" )
'Mostramos el reporte
oReporte.Open
End Sub
me hace un informe con TODOS los registros de la tabla. He intentado hacer un filtro y solo dejo un solo registro (el que cumple las condiciones) y aún así me imprime todos los registros de la tabla en el informe.
¿me podéis ayudar?
Gracias!
Libre Office 6.4 en Windows 10
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: GENERAR INFORME DE UNA SELECCION

Mensaje por Longi »

Buenas!
Hay muchos ejemplos en el foro
Puedes usar el evento del botón para recoger la clave principal del formulario.
Con ello haces un command de la consulta origen de los datos. En ese momento sólo tendrás los datos del registro del formulario con los que se genera el informe que quieres

Un saludo! ;)
Echa un vistazo a esto :
https://forum.openoffice.org/es/forum/v ... Formulario
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
James07
Mensajes: 78
Registrado: Sab Jul 04, 2020 12:15 pm

Re: GENERAR INFORME DE UNA SELECCION

Mensaje por James07 »

Gracias Longi por tu rápida respuesta pero he estado echando un vistazo al ejemplo y creo que no puedo ajustarlo a mi aplicación o al menos no tengo conocimientos para ello. Mi necesidad es mas simple. Dada una selección por la propia utilidad de Base ( la lupa) que me devuelve un resultado en mi formulario, generar un informe solo con esa selección.
Muchas gracias.
Libre Office 6.4 en Windows 10
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: GENERAR INFORME DE UNA SELECCION

Mensaje por RMG »

Hola,

Esta macro imprime el formulario activo con los datos que se visualizan. No es un informe, es el formulario de trabajo.

Código: Seleccionar todo

Sub BotonImprimeFormulario(Evento As Object)
   Dim oForm As Object
   Dim oFrame As Object
   Dim oDisp As Object
   oForm = Evento.Source.Model.Parent
   oFrame = oForm.Parent.Parent.CurrentController.Frame
   oDisp = CreateUnoService("com.sun.star.frame.DispatchHelper")
   oDisp.ExecuteDispatch(oFrame,".uno:Print","",0,Array())
End Sub
Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
James07
Mensajes: 78
Registrado: Sab Jul 04, 2020 12:15 pm

Re: GENERAR INFORME DE UNA SELECCION

Mensaje por James07 »

Muchas gracias por tu respuesta RMG pero lo he aplicado y lo que hace es imprimir efectivamente el formulario que hay visible tal y como me adelantabas. Yo lo que quería es que me imprimiera un informe del registro activo ( el que estoy viendo ) y no toda la base de datos que era lo que la siguiente macro me hace en la actualidad
Sub ImprimirDocumento( Evento )
Dim oReporte As Object
Dim oForm As Object

'El formulario activo
oForm = Evento.Source.Model.Parent
oReporte = ThisDatabaseDocument.ReportDocuments.getByName ("informe" )
'Mostramos el reporte
oReporte.Open
End Sub.

Muchas gracias nuevamente.
Libre Office 6.4 en Windows 10
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: GENERAR INFORME DE UNA SELECCION

Mensaje por RMG »

Hola,

Me parece que donde te indica longi tienes la respuesta. De todas formas mira si esto te ayuda, aunque siempre decimos que para ayudaros con más acierto, lo mejor es adjuntar un ejemplo de como lo tenemos montado, cada uno trabaja de distinta forma.

En primer lugar tu informe tiene que tener como origen de datos una consulta y no una tabla, ya que esta es la que se modifica según la selección del formulario. Por supuesto debes tener un campo único para cada registro, en este caso un ID.

Código: Seleccionar todo

Sub FiltroID ( Evento )
	Dim oConsulta As Object
	Dim oCampoID
	Dim oForm As Object
	'El formulario activo
	oForm = Evento.Source.Model.Parent
	'El campo con el ID, pon el nombre que tengas
	oCampoID = oForm.getByName("ID").Text
	'Debe contener datos
	If oCampoID = "" Then Exit Sub
	'La consulta a filtrar
	oConsulta = ThisDatabaseDocument.DataSource.QueryDefinitions.getByName ("NombreConultaDelInforme")	
	'Modificamos la consulta	
	oConsulta.Command = "SELECT * FROM TablaDatosInforme WHERE ID = " & oCampoID & ""
	 ThisDatabaseDocument.ReportDocuments.GetByName("NombreInforme").Open
End Sub
Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Responder