[RESUELTO]Conocer si un informe está hecho con ORB o no

Discute sobre las herramientas de la base de datos
Responder
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

[RESUELTO]Conocer si un informe está hecho con ORB o no

Mensaje por Longi »

Buenas!

Nada, que estoy con mis cosas de informes, y quisiera poder abrir un informe discerniendo si está hecho con ORB o no.
Me explico: Estoy haciendo un procedimiento para poner membrete en cualquier informe, y quería que fuese estándar independientemente de cómo se generó. De tal manera que si está hecho con ORB tengo que eliminar la primera tabla (que se encuentra en la zona del membrete). Si no está hecho con ORB entonces me tengo que estar quietecito.
Esto supondría una sentencia 'If' al principio de la macro.
No he encontrado nada sobre ORB (supongo que es código interno, todo en Java), y, aunque el sistema detecta enseguida si no tienes el ORB instalado cuando intentas abrir un informe hecho con ORB, y no te dice nada si abres uno hecho con el sistema antiguo y tienes instalado el ORB.
He llegado a la conclusión, seguramente del todo peregrina, que si el sistema sabe cuando se aplica uno u otro, tendría que haber algo de código para poder saberlo yo también.
Gracias por aguantarme una vez más.

Un saludo! ;)
Última edición por Longi el Mié Dic 26, 2018 8:09 am, editado 1 vez en total.
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Conocer si un informe está hecho con ORB o no

Mensaje por mauricio »

En general, todas las extensiones, se tienen que "inicializar", si esta inicialización no tiene exito, lo común es que no este instalado. Por ejemplo, si intentas:

Código: Seleccionar todo

util = createUnoService("org.universolibre.EasyDev")
y no esta instalado EasyDev util será NULL

solo hay que ver como "instanciar" el ORB y hacer esta prueba.
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Conocer si un informe está hecho con ORB o no

Mensaje por Longi »

Buenas!

Miraré si esto puede servir, pero lo que pretendo es, teniendo el ORB instalado (así que siempre me daría como resultado verdadero), que se pueda distinguir entre informes generados por ORB o informes generados por el sistema antiguo.
Los informes generados con ORB meten una tabla en el espacio dedicado a cabecera de página, mientras que los antiguos, basados en writer no, así, en los ORB tengo que cargarme la tabla para poder escribir en el hueco (no quiero hacerlo en celdas de la tabla), y si está generado en el otro sistema, si elimino la primera tabla, ya he eliminado parte o el total de los datos del informe.
Intentaré alguna 'opción alternativa' que se me está ocurriendo ahora. Si funciona ya os lo comento.

Gracias por el apunte.

Un saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Conocer si un informe está hecho con ORB o no

Mensaje por Longi »

He hecho un parche que pudiera valer, aunque necesitaba parchearlo algo más:
He conseguido manipular la tabla primera del informe (la del membrete en ORB, pero la tabla con datos en el que no es ORB):
Esto sería una parte de una función que se llama una vez que se abre el informe (función que 'dibuja' el membrete):
1- He cambiado las características de la tabla (oTexttable.PageDescName="False")
2- Recorro todas las filas de la tabla, y dentro de cada fila, todas las columnas (es decir, recorro todas las celdas posibles)
3- En cada celda miro si hay texto
4- Si hay texto, me echa de la función, y si no, continúa hasta la última celda
5- Si no nos ha echado, pongo la altura de la fila de la tabla a 0.2, haciéndola tan pequeña, no estorba
6- Gracias al paso 1 le pongo un párrafo antes de la tabla, con lo que ya puedo insertar texto o elementos de texto (cuadros de texto, con imágenes, por ejemplo)

Los dos ciclos los hice definidos (con origen conocido y final conocido), y aunque en el ciclo de las filas no hay problema, en el de las columnas, enfrentándonos a ORB es un problema, ya que cada fila sería un número de columnas variable. Por lo tanto tendría que hacer un ciclo indefinido (While....), pero ahora mismo estoy atascado, aunque sé que es posible, no termino de ver cómo implementarlo.

Os pongo el código de la función, y ya me direis si os parece una burrada o no (seguro que hay formas más sencillas, rápidas y elegantes, pero qué le vamos a hacer!, no doy para más!)
Se admiten sugerencias, especialmente en el tema del ciclo indefinido, ya que si no los avisos de error están garantizados.

Código: Seleccionar todo

    '--------------------------------------------------------------
    ' Manejamos la tabla del encabezamiento para poder poner el membrete
    
    ExisteTexto=0                                                                                        ' Iniciamos la variable a 0
    oTexttable=oreportdoc.Texttables(0)                                                                  ' Tabla con la que trabajamos (la primera)
    oreportdoc.GetCurrentController().Select(oTexttable )                                                ' Seleccionamos la primera tabla del informe
    oTexttable.PageDescName="False"                                                                      ' Hace que podamos insertar el párrafo y texto
    Columnas= oTexttable.Columns.Count-1                                                                 ' Número de columnas de la tabla
    Filas=oTexttable.Rows.count-1                                                                        ' Número de filas de la tabla
    for i=0 to Columnas                                                                                  ' Ciclo que recorre todas las columnas
    for z=0 to Filas                                                                                     ' Ciclo que recorre todas las filas
    oCell= oTexttable.getCellByPosition(i,z)                                                             ' Celda inspeccionada
    oText = oCell.Text                                                                                   ' Texto en la celda
    oCurs = oText.createTextCursor()                                                                     ' Cursor
    oCurs.gotoEND(True)                                                                                  ' Selecciona todo el texto
    oCurs.string                                                                                         ' Texto
    if oCurs.string<>"" Then                                                                             ' Si hay texto
    ExisteTexto=1                                                                                        ' La variable la ponemos con valor 1
    exit for                                                                                             ' Nos echa del segundo ciclo
    exit for                                                                                             ' Nos echa del primer ciclo
    End if                                                                                               ' Acaba la condición de texto
    Next z                                                                                               ' Va a la siguiente fila
    Next i                                                                                               ' Va a la siguiente columna
    If ExisteTexto=1 Then Exit Function                                                                  ' Si la variable está en 1, nos echa de la macro

    oTexttable.getRows().getByIndex(0).Height = 0.2                                                      ' Ponemos altura mínima, así no ocupa espacio
    oViewCursor = oreportdoc.CurrentController.getViewCursor()                                           ' Cursor
    v = oViewCursor.getPosition()                                                                        ' Posición del cursor
    s = oViewCursor.PageStyleName                                                                        ' Estilo de página allí donde está el cursor
 
    oStyle = oreportdoc.StyleFamilies.getByName("PageStyles").getByName(s)                               ' Nos hacemos con el control del estilo de página'
    oPar = oreportdoc.createInstance("com.sun.star.text.Paragraph")                                      ' Estructura de párrafo
    oStyle.HeaderText.insertTextContentBefore ( oPar, oTexttable )                                       ' Insertamos un párrafo antes de la tabla
Gracias y un saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Conocer si un informe está hecho con ORB o no

Mensaje por Longi »

Buenas!

Lo marco como resuelto para que no queden cosas perdidas, pero no he encontrado solución 'genérica', ni siquiera lo que pregunté serviría para mis propósitos, ya que, después de hacer múltiples pruebas he caído en un error que tengo desde hace mucho: ORB no hace siempre una tabla en el encabezamiento, sino solo cuando la opción de encabezamiento de página está activa en el diseño del informe, luego ya la puedes rellenar con algún campo o no, según cómo diseñes, pero si esa opción no está activa, no rellena el encabezamiento con una tabla, así que estaba partiendo de una posición errónea.

Perdón por la metedura de pata, pero es como suelo aprender: sistema ensayo-error.

Felices días!

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