FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Consulta sobre el componente TQRexp
Hola a todos!!!!!!!
Tengo que poner en un componente TQRexp en un reporte la cantidad de lineas que muestro. Me imagino que se hace con la propiedad expresión, con la función count, pero no se como usarla. Muchas gracias.. |
#2
|
|||
|
|||
Si colocas un componente TQRSysData, tiene una propiedad Data donde un posible valor es DetailCount, que indica el número de lineas de detalle que aparecen en el informe.
__________________
Guía de Estilo |
#3
|
|||
|
|||
Hola!!!!!!!
Hice un informe en el cual necesito mostrar la cantidad de lineas que aparecen por página, probé con un QRsysdata, puse la propiedad data en "qrsDetailNo", en el informe muestro los datos agrupados por farmacia, pero cuando cambio de farmacia no se resetea el contador, sino que los va incrementando. Tambien probe en ponerlo en "qrsDetailCount", pero directamente me trae la cantidad de lineas que hay en todas las paginas de todas las farmacias. Por favor si alguien me puede dar una mano . Gracias..... |
#4
|
|||
|
|||
Hola, efectivamente, para eso que buscas de mostrar el número de lineas por grupos no te sirve un TQRSysData, habría que recurrir a un TQRExpr y usar la función COUNT, pero no sé por qué no funciona en QReports.
Otra solución es que crees una variable global, pe. NumLineas : Integer, la inicializas a 0 en el evento BeforePrint del Informe y en el AfterPrint del QRGroupFooter. En el BeforePrint de la banda de detalle la incrementas y asignas su valor a mano a un TQRLabel, por ejemplo en su evento BeforePrint: QRLabel1.Caption := IntToStr(NumLineas);
__________________
Guía de Estilo |
#5
|
|||
|
|||
Funcionó!!!!!!!!!!.
Depaso te hago otra consulta, el reporte que tengo hecho agrupa por farmacia, el problema que tengo es cuando para una farmacia x los registros para esa farmacia no entra en una hoja, me muestra la proxima hoja en blanco y recien en la proxima la continuación de los detalles. o sea que mientra entra en una hoja funciona perfecto, el tema es cuando no entra en una siempre me genera una intermedia en blanco. Tenes idea porque puede ser? en el groupheader tengo la propiedad forcenewpage en true, porque no quiero que me mezcle las farmacias en una misma hoja. Gracias. |
#6
|
|||
|
|||
Siento no poder ayudarte, la verdad es que puede que sea un fallo de QReports, a veces me he desesperado con comportamientos sin explicación de este generador de informes (pero como llega gratuito con Delphi ...)
De todas formas, trata de jugar con esa propiedad ForceNewPage, mira que no esté activada en el GroupFooter. Otra cosa, mira si tienes activada la propiedad ForceNewColumn y trata de jugar con ella; por último si en algún evento BeforePrint desactivas la banda PageFooter, asegúrate de llamar al método ResetPageFooterSize del componente TQuickReport. Son algunas ideas ...
__________________
Guía de Estilo |
#7
|
|||
|
|||
Lo pude hacer funcionar en el beforeprint del detalle pregunto si la variable que uso para contar las lineas >= 8 lineas que son las que entran por hoja, pongo la propiedad forcenewpage del groupheader en false, de lo contrario en true;
y así salió andando. Con el Qreports la unica forma de exportarlo es con excel en formato CSV, pero te deja los datos todos desparramados, hay alguna forma de exportarlo a excel o word y que me quede mas prolijo?, o me conviene utilizar otro reporte, por ejemplo el cristal8, lo que no se es como funciona con delphi? Salu2. |
#8
|
|||
|
|||
Hola:
Tienes varias alternativas. Puedes pasar la consulta o Dataset en que se apoya el Informe directamente a Word o a Excel, ya sea mediante los componentes de la paleta de Servers (hay un foro dedicado a ellos exclusivamente), o hacerlo a la antigua (antes de Delphi 5.0), usando interfaces OLE, pero esto es algo que debes mirar en los foros de OOP o de Varios o en los Históricos, pues ya se ha tratado en otras ocasiones. Si no encuentras nada que te sirva, pregúntalo de nuevo y te contesto cómo hacerlo mediante OLE variants, prefiero no meterlo en este foro que no es el adecuado. ¿Otros generadores de informes? Bueno, la ventaja de los QReports es que te permiten imprimir lo que el usuario ve en pantalla, desde Delphi mismo, sin tener que rehacer la consulta con sus filtros etc... Esa ventaja no la tienes con CrystalReports. Hay algunos generadores de informes por ahí con una filosofía parecida a QReports pero más potentes y que seguro permiten exportar a Excel. Del que he oído hablar bastante bien es de FastReports, también se emplea por ahí el FreeReports, en este foro de Impresión se habla de ellos.
__________________
Guía de Estilo |
#9
|
|||
|
|||
Si tenes un ejemplo de como hacerlo con los componentes de la paleta server, para exportar el informe a word, o excel
Muchas gracias. |
#10
|
|||
|
|||
Hola de nuevo:
No he utilizado nunca estos componentes, sino que como te decía he generado archivos Excel a la vieja usanza, mediante OLE variants. De esto hay varios ejemplos en estos foros, en concreto en el foro de Servers, por ejemplo: http://www.clubdelphi.com/foros/show...p?threadid=703 La clave es recorrer tu Dataset y a cada registro asignar las filas, algo así como: Código:
var ExcelObj : Variant; // variable global procedure TForm1.Button1Click (...); var WBk, WSh : Variant; i, j : Integer; CodFarmacia : String; begin ExcelObj := CreateOleObject ('Excel.Application'); WBk := ExcelObj.Workbooks.Add('Farmacias.xlt'); // si usas una plantilla WSh := WBk.WorkSheets[1]; Table1.First; i := 0; // lleva el contador de filas CodFarmacia := Table1CODFARMACIA.AsString; while NOT Table1.EOF do begin for j:=0 to Table1.FieldCount - 1 do Wsh.Cells[j, i] := Tabla1.Fields[j].AsString; Inc (i); // controlamos el cambio de grupo if CodFarmacia <> Table1CODFARMACIA.AsString then begin CodFarmacia := Table1CODFARMACIA.AsString; Inc (i); // una forma de dejar una linea en blanco end; Table1.Next; end; ExcelObj.Visible := TRUE; WBk.SaveAs('Farmacias.xls'); end; procedure TForm1.Destroy; begin if NOT VarIsEmpty(ExcelObj) then ExcelObj.Quit; end; De todas formas, esto es muy manual, quizás encuentres algún componente que haga algo parecido.
__________________
Guía de Estilo |
#11
|
|||
|
|||
Muchas gracias !!!!!!!!!!!
|
#12
|
|||
|
|||
De nada !!!!!!!!!!!!!!!!
No sé si has seguido el mismo código que te he puesto o has optado por otra variante, pero me acabo de dar cuenta de que dentro del bucle, al controlar el cambio de grupo, hay que hacer antes el Table1.Next para que sea correcto. Un saludo
__________________
Guía de Estilo |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|