[RESUELTO] Informe: TOTAL DE REGISTROS que hay en cada hoja

Discute sobre las herramientas de la base de datos
Responder
HSEGROD
Mensajes: 53
Registrado: Mié Mar 14, 2018 4:25 pm

[RESUELTO] Informe: TOTAL DE REGISTROS que hay en cada hoja

Mensaje por HSEGROD »

Voy a ser escueto... A mi Informe "Inf_ModQuirofanos_ORB", Agrupado por "SERVICIOS", no le he conseguido poner un TOTAL DE REGISTROS que hay en cada hoja (Servicio) del Informe.

He probado con todo lo que he encontrado en el foro, (COUNTA, ETC..) pero sin resultado... :crazy: :crazy:

Me gustaría ponerlo en SERVICIOS (Encabezado) aunque a último remedio me valdría en el Pie de Página. :roll:

Mi ejemplo, en la base MOD_QUIROFANOS, al entrar en "BUSQUEDAS Y LISTADOS" (Formulario "Form_PROGRAMACION") y elegir de fecha inicial 20/03/2018 y fecha final 20/03/18 (fecha de hoy), En SERVICIOS dejamos "Todos los Servicios (viene por defecto) y darle al botón "BUSQUEDA AVANZADA" me sale un resultado en pantalla de 6 registros, y al lanzar el Informe (Botón "VER INFORME") sale perfecto y agrupado por Servicios... sólo me falta poner un "campo Total" de registros por página y colorear alternativamente las filas (pero esto último lo plantearé en otro Hilo para no mezclar)..

En definitiva...alguien me sugiere algo para conseguir LOS TOTALES de registros por página (Número de quirófanos anulados por SERVICIO en la fecha elegida)...??

enlace a la base... https://drive.google.com/open?id=169DrV ... FdpilAJOUb
Última edición por mauricio el Mié Mar 21, 2018 4:17 pm, editado 2 veces en total.
Razón: Marcar icono de resuelto
Apache OpenOffice 4.1.5 -- Windows 10
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Informe: TOTAL DE REGISTROS que hay en cada hoja

Mensaje por Longi »

Buenas!
Si tienes funcionando el ORB en el que te igualé las alturas de los campos que habías puesto, entonces mira a ver si esto te puede valer.
Posiblemente necesite un parche para cuando los campos sean de más de una fila (acabo de caer en eso), pero de todos modos mira a ver cómo va.
He calculado las filas que tienen texto (la mitad de las que genera ORB en cada tabla de las que nos interesan (que no son todas).
Después escalé una tabla para ponerme en la que está en el inicio de cada hoja, añadí una fila en la parte de encima, le añadí la palabra 'TOTAL' y al lado (segunda celda) el número de filas contadas anteriormente.
Finalmente, le quité el color a esa fila, para que no quede de color carne y que parezca que está en el encabezamiento.
El parche lo debes poner allí donde había colocado yo el tema de la autoaltura (Recuerda '================================)

¡Crucemos los dedos!

Código: Seleccionar todo

'===================================================================
    '----------------------------------------
    ' Iniciamos parche para autoaltura
    
    NTexttable = oreportdoc.Texttables().GetCount()                                                      ' Número de tablas 
    For z=2 to NTexttable-1                                                                              ' Revisamos todas las tablas
    oTexttable = oreportdoc.Texttables(z)                                                                ' La tabla que toca en cada paso del ciclo
    Filas = oTexttable.rows.count-1                                                                      ' Filas que tiene la tabla
    Columnas = oTexttable.Columns.count-1                                                                ' Columnas que tiene la tabla 
    Fila = oTexttable.rows                                                                               ' Objeto Fila

    '------------------------------------------------------------------------
    '  Vamos a inspeccionar cada tabla, para seleccionar las que tienen en la primera celda la expresión entrecomillada

    oCell = oTextTable.getCellByPosition(0, 0)                                                           ' Primera celda de la tabla que toca                                                            
    oText = oCell.Text                                                                                   ' Texto de la celda
    oCurs = oText.createTextCursor()                                                                     ' Cursor en la celda 
    oCurs.gotoEND(True)                                                                                  ' Cursor al final de la celda  
    if oCurs.GetString ="SERVICIO:" Then                                                                 ' Condición para seleccionar la tabla
    oTexttable = oreportdoc.Texttables(z+1)                                                              ' La tabla que toca en cada paso del ciclo sería la siguiente a la que tiene en su primera celda la palabra 'SERVICIO'
    Filas = oTexttable.rows.count-1                                                                      ' Filas que tiene la tabla
    '------------------------------------------------------
    ' Calculamos del total de filas las que tienen texto (hay otras en el medio que no lo tienen y que las genera ORB)
    
    Total= Cint((Filas+1)/2)                                                                             ' Filas en las que hay texto (las que se ven en el informe)
    For i=0 to Filas                                                                                     ' Recorremos todas las filas de la tabla
    Fila = oTexttable.rows(i)                                                                            ' La fila que toca (Tercera en este caso)
    oTexttable.getRows().getByIndex(i).IsAutoHeight = True                                               ' Autoaltura
    Next                                                                                                 ' Siguiente fila
    '---------------------------------------------
    ' Tomamos la tabla previa, para poder escribir como que fuese en el encabezamiento, pero es mentira
     
    oTexttable = oreportdoc.Texttables(z)                                                                ' La tabla previa a la que usamos antes
    '---------------------------------------------------------------------------
    ' 2º Insertamos una fila al principio y damos color blanco a las celdas
    
    oTexttable.Rows.insertByIndex(0,1)                                                                   ' Insertamos fila al principio de la tabla
    oTexttable.getCellByPosition(0,0).setString(Trim("TOTAL"))                                           ' Ponemos TOTAL en la primera celda
    oCell = oTextTable.getCellByPosition(0,0)                                                            ' Seleccionamos la primera celda
    oCell.setPropertyValue("BackColor", RGB(255, 255,255 ))                                              ' El color que ponemos (blanco)
    oCell = oTextTable.getCellByPosition(1,0)                                                            ' Seleccionamos la siguiente celda para poner los resultados
    oCell.setPropertyValue("BackColor", RGB(255, 255,255 ))                                              ' El color que ponemos
    oTexttable.getCellByPosition(1, 0).setString(Total)                                                  ' Ponemos TOTAL en la segunda celda
    End if                                                                                               ' Acabamos la condición para seleccionar la tabla
    Next                                                                                                 ' Vamos a la siguiente tabla
    '------------------------------------------------------------
    ' Acabamos el parche de autoaltura

'==================================================================
Si no resuelve en los multilínea, ya miramos con otro parchecillo, recorriendo todas las filas, y contamos aquellas en las que en su segunda fila tiene texto (que serían las que tienen la fecha). Pero ahora ando con un poco de prisa.
Eso, que a ver si hay suerte!

Un saludo! ;)
 Editado: En prueba rápida parece que funciona 
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
HSEGROD
Mensajes: 53
Registrado: Mié Mar 14, 2018 4:25 pm

Re: Informe: TOTAL DE REGISTROS que hay en cada hoja

Mensaje por HSEGROD »

y tanto que me acuerdooooo.... :bravo: :bravo:

Bueno... otra vez.... solucionado (me falta solo un pequeño detalle que al final comento...

Al final añadí tu código, con pequeñas salvedades (poner el TOTAL casi al final de la línea ya que al principio no me gustaba mucho...)

quedó el código así...

Código: Seleccionar todo

  '----------------------------------------
    ' Iniciamos parche para autoaltura
    
   
    NTexttable = oreportdoc.Texttables().GetCount()                                                      ' Número de tablas 
    For z=2 to NTexttable-1                                                                              ' Revisamos todas las tablas
    oTexttable = oreportdoc.Texttables(z)                                                                ' La tabla que toca en cada paso del ciclo
    Filas = oTexttable.rows.count-1                                                                      ' Filas que tiene la tabla
    Columnas = oTexttable.Columns.count-1                                                                ' Columnas que tiene la tabla 
    Fila = oTexttable.rows                                                                               ' Objeto Fila
 
    '------------------------------------------------------------------------
    '  Vamos a inspeccionar cada tabla, para seleccionar las que tienen en la primera celda la expresión entrecomillada

    oCell = oTextTable.getCellByPosition(0, 0)                                                           ' Primera celda de la tabla que toca                                                            
    oText = oCell.Text                                                                                   ' Texto de la celda
    oCurs = oText.createTextCursor()                                                                     ' Cursor en la celda 
    oCurs.gotoEND(True)                                                                                  ' Cursor al final de la celda  
    if oCurs.GetString ="SERVICIO:" Then                                                                 ' Condición para seleccionar la tabla
    oTexttable = oreportdoc.Texttables(z+1)                                                              ' La tabla que toca en cada paso del ciclo sería la siguiente a la que tiene en su primera celda la palabra 'SERVICIO'
    Filas = oTexttable.rows.count-1  																	   ' Filas que tiene la tabla
    '------------------------------------------------------
    ' Calculamos del total de filas las que tienen texto (hay otras en el medio que no lo tienen y que las genera ORB)
    
    Total= Cint((Filas+1)/2)                                                                             ' Filas en las que hay texto (las que se ven en el informe)
    For i=0 to Filas                                                                                     ' Recorremos todas las filas de la tabla
    Fila = oTexttable.rows(i)                                                                            ' La fila que toca (Tercera en este caso)
    oTexttable.getRows().getByIndex(i).IsAutoHeight = True                                               ' Autoaltura
    Next                                                                                                 ' Siguiente fila
    '---------------------------------------------
    ' Tomamos la tabla previa, para poder escribir como que fuese en el encabezamiento, pero es mentira
     
    oTexttable = oreportdoc.Texttables(z)                                                                ' La tabla previa a la que usamos antes
    '---------------------------------------------------------------------------
    ' 2º Insertamos una fila al principio
    
    oTexttable.Rows.insertByIndex(0,0)                      											 ' Insertamos fila al principio de la tabla  
    oTexttable.getCellByPosition(3,0).setString(Trim("(TOTAL: ") & Total & ")") 										 ' Ponemos Etiqueta "TOTAL"
 
    For i=0 to Columnas
         oCell = oTextTable.getCellByPosition(i,0) 														 ' Seleccionamos la celda  
    oCell.setPropertyValue("BackColor", RGB(255, 255,153 ))	 												'El color que ponemos... amarillo
    next
    											 
    AjustaAnchoColumna                                             
  
  
   ' oCell = oTextTable.getCellByPosition(3,0)                                                           ' Seleccionamos la siguiente celda para poner los resultados
   ' oCell.setPropertyValue("BackColor", RGB(255, 255,153 ))  											 ' El color que ponemos
   ' oTexttable.getCellByPosition(3,0).setString(Total & ")")                                            ' Ponemos TOTAL en la segunda celda
    End if                                                                                               ' Acabamos la condición para seleccionar la tabla
    Next                                                                                                 ' Vamos a la siguiente tabla
 
 
    '------------------------------------------------------------
    ' Acabamos el parche de autoaltura
	'------------------------------------------------------------
   'Coloreamos lineas alternas
	for i=2 to filas step 2											
    Fila = oTexttable.rows(i) 																			 ' Filas en las que hay texto (las que se ven en el informe)
    Fila.BackColor = RGB(233,241,246) 																     ' Color que aplicamos alternando en las filas 
    next
Funciona de lujo... sólo me queda investigar como aumentarle un poco la Fuente (que ya he probado a hacerlo y... no sale.... :knock: :knock:

pero... estoy muy contengo... Gracias...

os dejo la base otra vez (para quien quiera completar el código)...
https://drive.google.com/drive/folders/ ... sp=sharing
Apache OpenOffice 4.1.5 -- Windows 10
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Informe: TOTAL DE REGISTROS que hay en cada hoja

Mensaje por Longi »

Para el formato del texto que hay en el interior de una celda de una tabla de texto (que es el caso) puedes añadir alguna línea más al final del parche, que te tiene situado en la celda en la que te estás manejando (la (3,0)):

Código: Seleccionar todo

    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
    '----------------------------------------------------------------------------------------
    ' 3º Damos formato al texto seleccionado
    
    oCurs.CharFontName = "Arial"                                                                   ' Nombre de la fuente
    oCurs.CharUnderline = com.sun.star.awt.FontUnderline.SINGLE                                    ' Subrayado
    oCurs.CharWeight = com.sun.star.awt.FontWeight.BOLD                                            ' Negrita
    oCurs.CharColor = RGB(255,0,255)                                                               ' Color del texto
    oCurs.CharHeight = 8                                                                           ' Tamaño de la letra
    oCurs.CharPosture = com.sun.star.awt.FontSlant.ITALIC                                          ' Cursiva
    oCurs.ParaAdjust = com.sun.star.style.ParagraphAdjust.CENTER                                   ' Centrada
Ni que decir tiene que le puedes cambiar el nombre de la fuente, el color, si es cursiva o no, su localización dentro de la celda, tamaño de letra, si la subrayas o no.....
Todas las técnicas que he usado las tienes en distintas macros en mi colección de ejemplos de macros para informes sin ORB, que como ves, también se pueden usar con ORB, aunque no todas (especialmente algunas con textos, etc). https://forum.openoffice.org/es/forum/v ... 70&t=11605

Ah! si lo consideras solucionado, márcalo como tal.
Otro saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
HSEGROD
Mensajes: 53
Registrado: Mié Mar 14, 2018 4:25 pm

Re: Informe: TOTAL DE REGISTROS que hay en cada hoja

Mensaje por HSEGROD »

Como siempre.. dando soluciones efectivas...
Gracias (otra vez)... :super:
Apache OpenOffice 4.1.5 -- Windows 10
Responder