Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   reportes horizontales???? (https://www.clubdelphi.com/foros/showthread.php?t=26926)

nidia 08-11-2005 01:58:28

reportes horizontales????
 
hola, espero que alguien pueda ayudarme, tengo un problema a la hora de hacer un reporte en delphi 5, tengo k imprimir el valor de un campo en forma horizontal y que al finalizar la linea, se pase a la siguieinte linea y asi sucesivamente por ejemplo: 1 2 3 4 5 6 (find e linea)
7 8 9 10 11 12 y asi hasta que se acaben el num. de registros.

la manera que habia pensado es creando un componente qrtext en tiempo de ejecución y a ese posicionarlo, darle los valores de datasourse y data field, e incremetar posiciones... hasta que fuera fin de la consulta, (los registros a imprimir son el resultao de una consulta con tquery.
mi pregunta es el saber si hay una manera mas sencilla de poder hacer eso???? espero haberme dado a entender.. y gracias por adelantado

Casimiro Notevi 08-11-2005 09:14:10

Se me ocurren algunas preguntas, lee la guía de estilo.

Así, sin más, con lo poquito que explicas, usa un campo memo en lugar de un edit.

nidia 09-11-2005 19:06:59

esto es una prueba: esque he querido responder a lo tu dijiste y se me han regresado los mensajes :(

nidia 09-11-2005 19:16:23

haa ya pude :) ... bueno vi que no fui muy explicita; yo manejo QReport y Query para las consultas y la consulta solo me regresa la información de un solo campo; supongamos que me regresa 10 registros, quisiera imprimir esa informacion en el detalle de la sigueinte forma (formato horizontal):

valor1 valor2 valor3 valor4 valor5
valor6 valor7 valor8 valor9 valor10..

en ves de la forma tradicional de imprimir (formato vertical):

valor1
valor2
valor3
...
ya que solo es la información de un solo campo y como en realidad la consulta me arrojaría mas de 100 registros, el imprimirlo en vertical, me desperdiciaria muchas hojas, yo he estado leyendo al respecto para saber si hay esa posibilidad con la ayuda de algun componente o instrucción de delphi, pero no he encontrado nada.
yo pensaba por lo mismo hacerlo de manera dinamica, hasta que no fuera fin de consulta, crear el componente qrtext, asignarle sus propiedades y posicionarlo.

o si alguien tiene una mejor idea, agradecería mucho sus opiniones :)

Casimiro Notevi 09-11-2005 19:51:19

No conozco el qreport, pero por si te sirve de algo, con report builder, en la configuración de la página le dices que tienes x columnas y listo.

Luego puedes decidir si imprimir de arriba->abajo o de izquierda->derecha, etc...

nidia 10-11-2005 17:31:34

gracias por tu ayuda, haa, menejo quickrep de la pestaña de Qreport de Delphi 5, hice lo de dividir en 8 columnas, aun no encuentro la opción para imprimir de arriba a abajo, de izq. a der. o viceversa...
pero lo que vi es que una consulta que hago me regresa 3 registros y esos tres registros me los imprime 8 veces, 4 veces por columna así:

valor1 valor1
valor2 valor2
valor3 valor3
valor1 valor1
valor2 valor2
valor3 valor3
... ....
gracias, seguire bucando como arreglar eso :)

Casimiro Notevi 10-11-2005 19:21:13

¿No existen manuales, tutoriales y ejemplos para ese qreport?

nidia 11-11-2005 11:13:37

si, pero no vienen ejemplos para el tipo de reporte que necesito, la única persona que también necesitaba hacer reportes como el mio en qreport, dice que lo hizo de manera dinamica, porque el tampoco habia encontrado algo para poderlo hacer como el lo necesitaba.

ya estoy tratando de conseguir el report builder lo malo que ese reporteador no lo conozco, espero que sea facil de usar jaja y muchas gracias por tu ayuda y tiempo.

Lepe 11-11-2005 12:36:04

Por la lógica que usa Quick Report, me parece que no es posible hacerlo facilmente. Lo digo porque el ancho de una banda detalle es el mismo para un solo registro, así que siempre imprimirá, verticalmente y despues horizontalmente.

La solución dinámica es la que me parece más adecuada para este caso, es decir, alimentar manualmente el report e ir cambiando la cadena. Para esto usaría un MEMO colocado a todo el ancho del folio, que cambie de tamaño cuando se exceda el alto; se le va añadiendo el texto manualmente y listo.

Puede que no sea tan facil, si puedo hago un ejemplo.

saludos

Lepe 11-11-2005 14:09:40

Me retracto de lo dicho, es muy facil hacerlo :D

Al abrir el proyecto te dará un error, pasa del tema, he quitado el .res para que ocupe menos.

saludos

nidia 14-11-2005 18:40:11

mil gracias por tu ayuda, ya lo cheque y si me va a servir esa logica, ya que es más sencillo usar el memo y a ese agregarle la cadena que el estar creando los componentes en tiempo de ejecución; ya que haga el reporte les contaré como me fue :)
hasta pronto :)

jlmelida 14-11-2005 20:33:16

Cita:

Empezado por nidia
yo manejo QReport y Query para las consultas y la consulta solo me regresa la información de un solo campo; supongamos que me regresa 10 registros, quisiera imprimir esa informacion en el detalle de la sigueinte forma (formato horizontal):

valor1 valor2 valor3 valor4 valor5
valor6 valor7 valor8 valor9 valor10..

en ves de la forma tradicional de imprimir (formato vertical):

valor1
valor2
valor3
...

Sin campos memos es también sencillo.

Colocas en la banda de detalle tantos TQRDBText como te quepan por linea. ( En tu ejemplo 5). Rellenas la propiedad Dataset y DataFields ( que siempre será el mismo campo)

Luego en el inspector de objetos y para los 4 primeros TQRDBText, colocas en el evento OnPrint la orden de avanzar un registro. ( Si fuese un dataset sería: MiTabla.Next;)

Para el último campo de la linea, no debes poner ese evento ya que al terminar de llenar el renglón la tabla se desplaza un registro hacia abajo).

Después de hacer esto te saldrá lo que deseas:

valor1 valor2 valor3 valor4 valor5
valor6 valor7 valor8 valor9 valor10..

Un problema es si el último registro no coincide con el final de la linea. Por ejemplo, si tu tabla tuviese 7 registros. te saldrá algo parecido a esto:

valor1 valor2 valor3 valor4 valor5
valor6 valor7 valor7 valor7 valor7.

¿ Como lo evitas ? Confío en ti, estoy seguro que lo lograras:D

Lepe 15-11-2005 14:36:57

Un detalle a tener en cuenta:

Con la solución de jmelida si una cadena de texto es muy grande, pisará al QRDBText que tiene a su derecha.

Con un Memo, se verá todo el texto, pero desajusta el alineamiento a la izquierda de las columnas que vienen detrás.

En el ejemplo he usado:

Código Delphi [-]
 memo.lines[2] := memo.lines[2] + 'valor 10';

Se puede construir la linea en un String, y despues usar Memo.Lines.Add(linea). Con esto, la linea que tenga un texto grande se desplazará, pero la siguiente linea ya saldrá alineada a la izquierda con las demás columnas.

Para que quede correctamente alineado, es mejor usar la fuente Courier New.

saludos

nidia 15-11-2005 20:06:27

hola, muchas gracias por sus ideas, las dos son muy buenas, por el momento probe la idea de jlmelida es muy rápida esa solución, pero como dice, hay un detalle y aun ese no he podido quitarselo, si le hago cambios al qrdbtext, me modifica todo lo que haya puesto ese qrdbtext, lo otro que se me habia ocurrido para los qrdbtext fue que si no es fin de consulta, entonces que avance (query.next), si no terminar la ejecución del query con el query.close; pero no pasa nada :( pues seguire intentando otras cosas,

ha! y para lepe, la información que imprimo son puros valores de longitud pequeña y también tu idea es muy buena, al menos ya tengo dos posibles soluciones cosa que les agradesco...

jlmelida 15-11-2005 21:35:16

Cita:

Empezado por jlmelida
Un problema es si el último registro no coincide con el final de la linea. Por ejemplo, si tu tabla tuviese 7 registros. te saldrá algo parecido a esto:

valor1 valor2 valor3 valor4 valor5
valor6 valor7 valor7 valor7 valor7.

¿ Como lo evitas ? Confío en ti, estoy seguro que lo lograras:D

Para que todo salga bien, en el evento on print debes preguntar si es o no el final de la tabla. Si no lo es, avanzas un registro. Si lo es, pones la variable con un string vacio:

if (not loquesea.eof) then
loquesea.next
else
Value := ''; // Asi no se escribe nada

En el evento onPrint del ultimo qrdbText de la linea ( que no usa el next) solo pones la segunda parte:

If (loquesea.eof ) then
Value := '';

Saludos

nidia 16-11-2005 18:54:44

gracias, mil gracias :)

como se noto, tengo como 2 mese usando delphi, y lo poco que lo conozco si me ha gustado crei que iba a estar más dificil el hacer este reporte, pero ya vi que no, para nada.
para lo de los valores que se repetian yo lo estaba haciendo asi:

if not query1.eof then
begin query1.next; end
else
begin
(quise cerrar la consulta y no funciono)
(hasta cambiarle a color blanco la fuente jajajaaj pero tampoco funcionaba)
end;

aun no conocia le instruccion value jeje. ya lo hice, y quedo muy bien :) yo me estaba complicando la vida.

pues muchas gracias por su ayuda a todos los que me asesorarón :)

bye...


La franja horaria es GMT +2. Ahora son las 21:49:36.

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