PDA

Ver la Versión Completa : Details Horizontales y repetidos en QReport??


arieliten
10-07-2006, 16:26:04
Hola a todos! Estoy usando Delphi 6, Firebird y Qreport, para hacer un reporte con etiquetas de código de barras de los productos de la BD.
Tengo un QReport asociado a una consulta SQL cuyo resultado es la selección de los productos que el usuario desea imprimir. La hoja configurada del Reporte es una A4 con 4 columnas.
Tengo dos problemas que no puedo solucionar:

1º) Me gustaría saber si hay alguna manera de que la banda detalle se vaya imprimiendo en forma horizontal y no en vertical como lo hace por defecto. Es decir, quiero cambiar el orden en que se van mostrando los registros por defecto al utilizar el QReport; esto es: imprimir de izquierda a derecha (horizontalmente) a medida que va encontrando registros hasta completar las 4 columnas y de ahi pasar al renglón de abajo. Ya que por defecto imprime toda una primera columna hasta que se acaba la hoja y recién ahí salta a la segunda columna!!

2º) Por otro lado y quizás un poco más complicado, quisiera saber si hay alguna manera (por SQL o configurando el Reporte) de que los details se puedan repetir las veces que yo quiera. Es decir, lo que quiero hacer es por ejemplo: seleccionar un solo producto para imprimir su etiqueta pero quiero que salgan 8 o 10 etiquetas de la misma en el mismo reporte (en la misma hoja). O sea, simular una consulta donde el SELECT me devuelva ese registro repetido la cantidad de veces que quiera, o configurar de alguna manera el reporte para que por cada detail, lo repita "n" veces. ¿Es posible algo así?

Bueno, espero me puedan ayudar en esto ya que no encuentro nada por el estilo que me oriente.
Saludos y gracias por todo!!

Ariel

atani123
10-07-2006, 17:47:45
No tengo una solucion elegante a tu problema pero me he encontrado en la misma situacion y lo que he hecho ha sido crearme una tabla temporal en paradox (en tiempo de ejecucion) con el numero de etiquetas que quiero. luego el report sobre esta tabla y finalmente un deletefile.

atani123
10-07-2006, 17:54:09
Lo de la impresion horizontal he utilizado 2 formas.

1-. una sola columna y 4 veces el mismo codigo en la banda. con lo que me imprimia en forma horizontal.

Por un lado no se desperdician etiquetas, (que supongo que sera el problema que tienes) Por otro lado la cantidad de etiquetas a imprimir siempre debian ser multiplos de 4.

2.- Si aplicas la solucion de la tabla paradox esta te ira bien. Suponemos que hay una primera impresion, se imprimen 15 etiquetas (en vertical), con lo que nos comemos una fila.

La sieguiente vez que se vaya a imprimir etiquetas se debe preguntar cuantas etiquetas en blanco se desean insertar (15 en este caso) con lo que a la hora de generar el fichero paradox metia 15 registros con el codigo de barras en blanco. Total que imprimia 15 etiquetas sin nada y luego continua.

arieliten
10-07-2006, 17:58:34
No tengo una solucion elegante a tu problema pero me he encontrado en la misma situacion y lo que he hecho ha sido crearme una tabla temporal en paradox (en tiempo de ejecucion) con el numero de etiquetas que quiero. luego el report sobre esta tabla y finalmente un deletefile.

Gracias atani por tu ayuda. Podrías ayudarme un poco a cómo implementar esto. Nunca he usada tablas Paradox y no tengo idea de cómo crear tablas dinámicas o de cómo llenarlas con datos etc.:confused:
Con respecto al problema de la orientación de los detail a la hora de imprimir, he revisado el FAQ en la web de qusoft y veo que lo tienen pensado para futuras versiones y dan un ejemplo similar al que tú me propones para poder implementarlo.
Así que solo necesito que me ayudes a implementar lo del Paradox! :)

atani123
11-07-2006, 12:54:53
Mira en la ayuda de delphi TTable.CreateTable, trae un ejemplo que solo tendras que modificar.
Despues de crear la tabla realizas un buccle del sql que tengas. (Ire algo rapido y no te fies de la sintaxis)

(En la tabla no hace falta que pongas DatabaseName, si no en tablename ves directo ej: Tablen ame := 'C:\tmp\paradox\tmpTable.db';)


nId := 1;

For nI := 1 to nEtiquetasEnBlanco Do
Begin
Table.AppendRecord( [nId, '', '']); // Insertamos la etiquetas que quieras en blanco
Inc( nId);
End;


Query.First
While not Query.Eof Do
Begin
For nI := 1 To 8 Do // 8 Etiquetas por codigo
Begin
Table.AppendRecord( [nId, Query[ 'Codigo'], Query[ 'Descripcion']]);
Inc( nId);
End;
Query.Next;
End;

Despues solo tienes que asociar la tabla creada y llena al report.