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
  #41  
Antiguo 04-06-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Lamento responder tan tarde, supongo que ya se ha solucionado el problema. El tema está en que por alguna razón he perdido este hilo .

Si los nombres son muy grandes, puedes usar abreviaturas para los nombres de los campos, despues ajustar el DisplayWidth de cada campo para mostrar X carácteres. Puedes hacer una rutina que analice todos los valores de un Query y ajuste el DisplayWidth de cada campo a la cadena más larga, como son números siempre hará el ancho de columna más pequeño y podrá entrar más columnas en el informe.

Obviamente es una tarea costosa para el sistema, ya que se ha de recorrer todos las columnas por cada registro de la Query (dos For anidados). Otra forma que se me acaba de ocurrir, es crear Otra Query basada en los datos de la anterior y pedir el máximo a la base de datos:

Select Max(Length(campo1)) as Campo1, Max(Length(campo2)),...

Saludos y siento la tardanza.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #42  
Antiguo 15-06-2006
david duarte david duarte is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Poder: 19
david duarte Va por buen camino
Hola!!!!

El problema es que si se seleccionan muchos analisis(no puedo abreviar el nombre de los analisis, lo que hice fue abreviar desde la tabla algunos campos, pero como comente anteriormente, no me fue de mucha ayuda), podrian no llegar a caber todos los analisis en el ancho de la hoja. Lo que comentas del fontwidth ya lo hice, analizo el ancho de cada columna y le pongo el tamaño (del campo) mas grande, pero ni asi funciona, no se que voy a hacer, no logro solucionar el problema.
Seguire investigando
Saludos!!!!

Muchas gracias por su tiempo y su ayuda.
Responder Con Cita
  #43  
Antiguo 15-06-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Imagino que cambiar la fuente al listado no es viable, porque se vería muy pequeño; tendrás que partir el informe en 2, 3 o 4 folios de ancho. El resultado será que primero imprime todos los registros (pero solo 10 columnas), y despues imprime todos los registros (pero solo las 10 columnas siguientes)

Ajustas el ancho para que se vean todos los datos, y ahora recorres las columnas sumando el Width de cada uno hasta llegar al ancho de la hoja.

Haces una consulta cuyo datasource sea la consulta donde tienes todas las columnas, pero solo seleccionas, digamos que caben las 10 primeras columnas, y esta consulta es la que imprimes. Lo digo así para que no tengas que crear otra consulta con el mismo where, además esta segunda consulta puede ser muy rápida porque ya los tienes los resultados.

Una vez finalizada la impresión, ahora cambias los nombres de los campos por las otras 10 columnas siguientes (o las que quepan) y vuelta a imprimir.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #44  
Antiguo 07-07-2006
david duarte david duarte is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Poder: 19
david duarte Va por buen camino
creo que me explique mal o no les entiendo=(

lo que yo quiero hacer es parecido a lo que hace el qreport horizontalmente cuando ya no le caben los datos en esa hoja ( cuando ya no le caben los datos, anexa otra hoja y sigue mostrando o imprimiendo los resultados en la(s) siguiente(s) hojas).

Creen que se pueda??
A ver si se me ocurre algo,

Y Perdon por la tardanza en responder.

Esta bien la respuesta que me dicen, pero el problema es cómo lo hago???
no encuentro la forma para hacerlo, tengo que seguir viendo las propiedades de la pagina del qreport

Muchas Gracias de nuevo
Saludos!!!
Responder Con Cita
  #45  
Antiguo 08-07-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Suponemos que queremos imprimir todos estos campos:
Código:
TeFolio            Numero    Nombre analisis   Posicion  Resultado
Pero los datos del campo TeFolio son muy largos y solo caben las dos primeras columnas en una página.

Armamos el SELECT:
Código SQL [-]
SELECT TeFolio, Numero    , Nombre ,analisis   ,Posicion  ,Resultado 
FROM TABLE
Imagina que tu query tiene 180 registros, y en cada página caben 60 registros (uno debajo de otro), así que debemos imprimir 3 páginas, pues no, sacamos 6 páginas:
- 3 páginas con las columnas: TeFolio y Numero
- otras 3 páginas más, con las columnas : Nombre, analisis, posicion, resultado.

Si coges la primera página y a su derecha pones la cuarta página, tendrás un registro completo con sus 6 campos.
Código Delphi [-]

uses quickrpt, qrextra, qrprntr, qrctrls;

procedure TForm1.Button2Click(Sender: TObject);
var q:TQuickRep;
    listaCampos:TStringList;
    i:Integer;
begin
   listaCampos:= TStringList.Create;
   try
      // lista de campos a incluir en el informe, como sabemos que solo caben 2, pues los 2 primeros
    listacampos.add('TeFolio');
    listaCampos.add('Numero');
    query1.Open;
    q:=nil;

// esto crea un listado con los campos que se le han dicho
    QRCreateList(tcustomquickrep(q),nil,query1,'Listado Principal',listaCampos);
    q.Print; 

   finally
      FreeAndNil(q);
   end;
// ya está impreso las 2 primeras columnas, ahora imprimimos el resto:
// el código es copy y paste, solo cambia los nombres del campo:
   try
      // lista de campos a incluir en el informe, el resto de campos, 
// por simplificar, estoy suponiendo que las 4 columnas caben en el ancho de una página
    ListaCAmpos.Clear;
    listacampos.add('Nombre');    
    listacampos.add('analisis');
    listaCampos.add('Posicion');
    listaCampos.add('Resultado');   
    query1.First; // volvemos al primer registro.
    q:=nil;

// esto crea un listado con los campos que se le han dicho
    QRCreateList(tcustomquickrep(q),nil,query1,'Listado Principal',listaCampos);
    q.Print; 

   finally
      FreeAndNil(q);
   end;

end;

Yo si entiendo lo que quieres hacer, pero no se puede hacer de forma automática, tienes que hacerlo tú a mano, y ésta es la solución que se me ocurre.

¿Se me entiende ahora?

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 08-07-2006 a las 00:43:53.
Responder Con Cita
  #46  
Antiguo 11-07-2006
david duarte david duarte is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Poder: 19
david duarte Va por buen camino
Hola Lepe!!!

Muchas gracias.

Si entiendo como se puede hacer, pero en este caso deberia de guardar en una variable el largo del qreport(del area imprimible) y en otra variable ir sumando los valores de cada analisis y sumarlos hasta que sea < que el ancho del reporte o no??

Eso no se como se hace, como tomo el ancho del reporte(ya que a veces utilizo el reporte en forma horizontal y otras vertical).

O de que otra forma se te ocurre, en un ratillo mas voy a probar a ver como me va.

Ahh y aprovechando de tu amabilidad, sabes como le puedo agregar un retorno de carro a una cadena para ponerla en un qreport??

esto te lo pregunto porque hay veces que escriben una linea demasiada larga y se sale del reporte y no se alcanza a ver todo el texto, entonces volvemos a lo mismo tengo que tomar el ancho del reporte(portrait o landscape) y a partir de ahi agregarle un retorno de carro).

Muchas gracias de nuevo.
Saludos!!!
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 07:39:21.


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