[RESUELTO] Seleccionar para imprimir informe

Discute sobre las herramientas de la base de datos

[RESUELTO] Seleccionar para imprimir informe

Notapor Jgonper » Mié Oct 04, 2017 1:35 pm

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

Re: Seleccionar para imprimir informe

Notapor RMG » Mié Oct 04, 2017 5:49 pm

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.4 y LibreOffice 5.3.6 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
RMG
 
Mensajes: 3091
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Seleccionar para imprimir informe

Notapor Jgonper » Jue Oct 05, 2017 7:44 am

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

Re: Seleccionar para imprimir informe

Notapor RMG » Jue Oct 05, 2017 4:17 pm

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) 31 veces
OpenOffice 4.1.4 y LibreOffice 5.3.6 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
RMG
 
Mensajes: 3091
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Seleccionar para imprimir informe

Notapor Jgonper » Vie Oct 06, 2017 8:13 am

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

Re: Seleccionar para imprimir informe

Notapor RMG » Vie Oct 06, 2017 2:12 pm

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.4 y LibreOffice 5.3.6 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
RMG
 
Mensajes: 3091
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: [RESUELTO]Seleccionar para imprimir informe

Notapor Longi » Lun Oct 09, 2017 11:44 am

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   Expandir vistaContraer vista
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.3, en Windows
Libreoffice 5.3, en Windows
Longi
 
Mensajes: 208
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España


Volver a Base

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados