Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-06-2003
DanielAlexander DanielAlexander is offline
Miembro
 
Registrado: may 2003
Ubicación: argentina
Posts: 40
Poder: 0
DanielAlexander Va por buen camino
Unhappy 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..
Responder Con Cita
  #2  
Antiguo 24-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 25-06-2003
DanielAlexander DanielAlexander is offline
Miembro
 
Registrado: may 2003
Ubicación: argentina
Posts: 40
Poder: 0
DanielAlexander Va por buen camino
Question

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.....
Responder Con Cita
  #4  
Antiguo 25-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 25-06-2003
DanielAlexander DanielAlexander is offline
Miembro
 
Registrado: may 2003
Ubicación: argentina
Posts: 40
Poder: 0
DanielAlexander Va por buen camino
Talking

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.
Responder Con Cita
  #6  
Antiguo 25-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 26-06-2003
DanielAlexander DanielAlexander is offline
Miembro
 
Registrado: may 2003
Ubicación: argentina
Posts: 40
Poder: 0
DanielAlexander Va por buen camino
Post

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.
Responder Con Cita
  #8  
Antiguo 26-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
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
Responder Con Cita
  #9  
Antiguo 26-06-2003
DanielAlexander DanielAlexander is offline
Miembro
 
Registrado: may 2003
Ubicación: argentina
Posts: 40
Poder: 0
DanielAlexander Va por buen camino
Post

Si tenes un ejemplo de como hacerlo con los componentes de la paleta server, para exportar el informe a word, o excel
Muchas gracias.
Responder Con Cita
  #10  
Antiguo 26-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
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;
Insisto en que esto se sale de este foro de Impresión, es mejor que lo mires en el foro adecuado o si vas a la opción Buscar y tecleas Excel te aparecerán varios hilos donde se trata este tema. En este ejemplo que te pongo te encargas tú mismo de controlar cuándo hay un cambio de grupo (CODFARMACIA) y ahí puedes hacer lo que creas oportuno, como muestra he dejado una linea en blanco.

De todas formas, esto es muy manual, quizás encuentres algún componente que haga algo parecido.
__________________
Guía de Estilo
Responder Con Cita
  #11  
Antiguo 27-06-2003
DanielAlexander DanielAlexander is offline
Miembro
 
Registrado: may 2003
Ubicación: argentina
Posts: 40
Poder: 0
DanielAlexander Va por buen camino
Talking

Muchas gracias !!!!!!!!!!!
Responder Con Cita
  #12  
Antiguo 27-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:31:38.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi