[RESUELTO] Seleccionar para imprimir informe

Discute sobre las herramientas de la base de datos
Responder
Jgonper
Mensajes: 21
Registrado: Lun Nov 30, 2015 11:01 am

[RESUELTO] Seleccionar para imprimir informe

Mensaje por Jgonper »

Buenas a todos de nuevo:
Me acerco de nuevo a este foro, para buscar solucion a duda surgida, trataré de ser breve y claro.
Buscando en este foro he cogido la BD DeustcheBank, ya que venia bien para la idea que tenía.
He copiado la macro que tiene, y me surge el problema que al lanzar el informe me pide el de esta base
"infMovimientosPorFecha", no editandome el informe que yo tengo "infTextos".
Si a mi informe le cambio el nombre por el de arriba referenciado, me abre este pero sin filtrar
Podría alguien ayudarme, acompaño base de datos y modelo de informe
Adjuntos
PRUEBAS BASE.zip
(80.53 KiB) Descargado 151 veces
Última edición por mauricio el Lun Oct 09, 2017 4:52 pm, editado 2 veces en total.
Razón: Marcar icono de resuelto
OpenOffice 4.1.2 en Windows 2010
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Seleccionar para imprimir informe

Mensaje por RMG »

Hola,

El problema es que en el tag del bóton (la propiedad Información adicional) pone el nombre del informe que mencionas, cuando debes poner el tuyo (infTextos). En la macro también haces referencia a una consulta que no existe. No se si es que en tu ejemplo no la has puesto o es un error.

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)
Jgonper
Mensajes: 21
Registrado: Lun Nov 30, 2015 11:01 am

Re: Seleccionar para imprimir informe

Mensaje por Jgonper »

Gracias por la pronta respuesta RMG,
He corregido la propiedad Información adicional, pero aún así no realiza el filtro, me abre directamente el informe
OpenOffice 4.1.2 en Windows 2010
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Seleccionar para imprimir informe

Mensaje por RMG »

Hola,

No te abre el informe filtrado, por que en la macro no se lo has indicado bien. Este ejemplo te puede servir.

Saludos
Adjuntos
prueba informe.zip
(36.63 KiB) Descargado 206 veces
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)
Jgonper
Mensajes: 21
Registrado: Lun Nov 30, 2015 11:01 am

Re: Seleccionar para imprimir informe

Mensaje por Jgonper »

Gracias RMG, ya entendí el proceso.
Siguiendo con el mismo tema, como puedo hacer para que al visualizar o imprimir el informe
se vea el texto completo, ya que el espacio donde va el texto no sale todo completo.
Gracias de antemano
OpenOffice 4.1.2 en Windows 2010
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Seleccionar para imprimir informe

Mensaje por RMG »

Hola

Tal cual esta, solo lo puedes hacer agrandando el campo en el informe. Otras posibilidades es estudiar como lo ha hecho el usuario del foro longi. Mira el enlace, ademas mira en los mensajes de ejemplos de él, te pueden ayudar.

https://forum.openoffice.org/es/forum/v ... 70&t=11605

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)
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: [RESUELTO]Seleccionar para imprimir informe

Mensaje por Longi »

Buenas!

Perdona, pero he estado liado en otras cosas, y aunque ya se le ha puesto la etiqueta de 'RESUELTO', te cuelgo la solución que he hecho:
He modificado la macro, añadiendo algunos elementos:
-He puesto autoaltura a las celdas de la tabla principal
-He localizado las celdas de la columna C
-He justificado el texto de dichas columnas.
 Editado: El código puesto aquí es para el caso de un informe hecho con ORB. En otro caso la cosa es algo más sencilla 
Y nada más.

Código: Seleccionar todo

Option Explicit

Sub InformeTextos( Evento )
'On Error Resume Next
Dim sNombre As String
Dim oInforme As Object	
Dim oConsulta As Object
Dim sPrueba As String
Dim sObjeto As String
Dim sSeleccion As String
Dim oForm As Object
Dim ocontroller, oTexttable, NTexttable, z, Fila, Filas, Columnas, orow, i, oCursor, oCell, oText, oCurs
	'El nombre del informe
	sNombre = Evento.Source.Model.Tag()
	'El formulario activo
	oForm = Evento.Source.Model.Parent
	sPrueba = oForm.GetByName("Prueba").Text
	sObjeto = oForm.GetByName("Objeto").Text
	sSeleccion = oForm.GetByName("Seleccion").Text
	If sPrueba = "" Or sObjeto = "" Or sSeleccion = "" Then
		MsgBox "Faltan datos de selección"
		Exit Sub
	End If
	'La consulta en la que se basa el reporte
	oConsulta = ThisDatabaseDocument.DataSource.QueryDefinitions.getByName ("conFiltro")	
	'Modificamos la consulta de modo que tome el registro actual				
	oConsulta.Command = "SELECT Tabla2.Selecion, Tabla3.Objeto, Tabla4.Prueba FROM Tabla2, Tabla3, Tabla4 WHERE Tabla2.Selecion = '"& sSeleccion &"'"&_
	" AND Tabla3.Objeto = '"& sObjeto &"' AND Tabla4.Prueba = '"& sPrueba &"'"
	'oInforme = ThisDatabaseDocument.ReportDocuments.getByName (sNombre)	
    ocontroller = Thisdatabasedocument.currentController
    if not ocontroller.isconnected then ocontroller.connect                                              ' Mantenemos la conexión
    oInforme = Thisdatabasedocument.reportdocuments.getbyname(sNombre).open                            ' Abrimos el informe
    NTexttable = oInforme.Texttables().GetCount()                                                      ' Número de tablas 
    For z=0 to NTexttable-1                                                                              ' Revisamos todas las tablas
    oTexttable = oInforme.Texttables(z)                                                                ' La tabla que toca en cada paso del ciclo
    If oTexttable.Name= "Detail" Then                                                                    ' Nombre de la tabla que nos interesa
    Fila = oTexttable.rows                                                                               ' Objeto fila
    Filas = Fila.Count-1                                                                                 ' Número de filas que tiene la tabla
    Columnas= oTexttable.Columns.Count-1                                                                 ' Número de columnas de la tabla
    '------------------------------------------------------------------------
    ' 2º Ponemos autoaltura en cada una de las filas
    
    for i = 1 to Filas                                                                                   ' Ciclo que recorre todas las filas
    orow = Fila(i)                                                                                       ' La fila que le toca en ese momento
    orow.IsAutoheight=True                                                                               ' Autoaltura
    next i                                                                                               ' Cierra el ciclo de las filas
    '--------------------------------------------------------------------
    ' 3º Paseamos por las celdas de la tabla
    
    oCursor = oTexttable.createCursorByCellName("A1")                                                    ' Cursor de tabla en la primera celda
    Do                                                                                                   ' Iniciamos un ciclo que recorre cada celda
    oCursor.getRangeName                                                                                 ' Nombre de la celda
    if left(oCursor.getRangeName,1)="C" Then                                                             ' Seleccionamos las celdas de la columna "C"
    oCell = oTextTable.getCellByName(oCursor.getRangeName)                                               ' Nos ponemos en la celda que cumple las condiciones
    oText = oCell.Text                                                                                   ' Texto en el interior de la celda
    oCurs = oText.createTextCursor()                                                                     ' Generamos un cursor de texto
    oCurs.gotoEND(True)                                                                                  ' Vamos hasta el final del texto, indicando que las acciones se aplican a todo el texto de la celda
    oCurs.ParaAdjust = com.sun.star.style.ParagraphAdjust.BLOCK                                          ' Justificamos el texto
    End if                                                                                               ' Acabamos la condición de que sea de la columna "C"
    Loop While oCursor.goRight(1,False)                                                                  ' Reiniciamos el ciclo hasta la siguiente celda 
    End if                                                                                               ' Acabamos la condición de que sea la tabla "Detail"
    next z                                                                                               ' Cierra el ciclo de las tablas

End Sub


Un saludo!
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Responder