PDA

Ver la Versión Completa : Imprimir 2 veces en la misma pagina


mRoman
03-02-2014, 21:21:31
Hola que tal amigos...

Tengo el siguiente problema:

Necesito imprimir en una misma página un formato (original y la copia) del tamaño de media carta. Dicho formato lo estoy diseñando dentro del quickreport y ese mismo diseño deseo repertirlo en la parte de abajo de la hoja...la cual obviamente sera "la copia".

Ahora este reporte tiene "detalles" que imprimir...(es sobre control de almacen), el formato es en original y copia media carta.

De tal manera que ya impresa la hoja, solo seria cuestion de cortarla por la mitad.....

En este hilo (http://www.clubdelphi.com/foros/showthread.php?t=61448) menciona algo...

Obviamente tengo problemas ya que hasta ahorita tengo hecha la primera mitad de la hoja....esa sale bien, pero tengo la otra mitad en blanco en donde desearia imprimir el formato nuevamente.....

Espero me puedan ayudar....SIGO INVESTIGANDO...!!!

Saludos

olbeup
04-02-2014, 08:44:16
Hola mRoman,

Creo que definiendo el folio como cuartilla seria mas que suficiente, le estas diciendo al QuickReport que el folio es una cuartilla, que la cuartilla es la mitad de un folio.

Un saludo.

mRoman
05-02-2014, 01:05:06
Hola mRoman,

Creo que definiendo el folio como cuartilla seria mas que suficiente, le estas diciendo al QuickReport que el folio es una cuartilla, que la cuartilla es la mitad de un folio.

Un saludo.

Al decir folio te refieres "tamaño carta" (letter)....en todo caso en donde le digo que es cuartilla?......en las propiedades del QuickRep1???

Saludos y gracias por contestar.

olbeup
05-02-2014, 08:22:23
Al decir folio te refieres "tamaño carta" (letter)....en todo caso en donde le digo que es cuartilla?......en las propiedades del QuickRep1???

Saludos y gracias por contestar.

Hola mRoman,

La mitad de un folio es "A5 210 x 148 (http://es.wikipedia.org/wiki/Cuartilla_(papel))" y lo pones en horizontal y obtendrás la mitad un folio tipo cuartilla esto está en el QuickReport, "Page" -> Orientation = [poLandscape], PaperSize = [A5]

Un saludo

mRoman
05-02-2014, 16:19:08
Ah...ok.....

Pero sabes que?....me parece que no es lo que necesito.....tengo que imprimir en una hoja tamaño carta (en la sección del tamaño A5), es decir en la primera mitad de la hoja carta, algunos datos y en la otra mitad de la hoja, los mismos datos de la primera mitad de la hoja......has de cuenta que en una sola impresión quiero imprimir el original y copia de un recibo.....

Como hago eso?...con deplhi ?.....se puede?....

Como tu dices olbeup.....se imprime 1 sola vez?....a reserva de enviar varias copias. Lo q trato de hacer es que lo q comento arriba....en una sola impresion enviar 2 recibos....original y copia.

Saludos y gracias por tu apoyo.

mRoman
18-02-2014, 04:51:12
Me parece increible que el QReport no tenga opciones que puedan hacer mas fácil este tipo de reportes.....

Alguien sabe con versión de QuickReport se pueden hacer reportes como los q indico en este hilo????!!!!.....

He visto en las opciones del QReport que la hoja se puede dividir en 2 o mas columnas.....estuve viendo si por aqui estaba la clave, cambiando la orientación de la hoja de Landscape a Portrait y viceversa....pero nada.

Buscando en "San Google" encontré un hilo de ClubDelphi del usuario (bubba, que por cierto ya de algun tiempo atras) donde hacia referencia al evento OnNeedData....y que asii lo resolvio....o era una posible solucion. Yo lo estoy intenando pero parece ser que este evento NO ACEPTA datos de un DataSet....

ALGUIEN YA HA IMPRESO DE ESTA FORMA.....!!!???....Q en una hoja tamaño carta imprimir original y copia en la misma página????...

AHHHH....ya estuve viendo tambien el componente CompositeReport....pero no hace lo q requiero....imprimir encabezado, detalle y pie de página, pero en la primera mitad de la hoja carta, y en la segunda mitad....pues lo mismo.

Como fregados se imprimen este tipo de reportes......jajajaja....SERENIDAD Y PACIENCIA "SOLIN"....(Kaliman).

Casimiro Notevi
18-02-2014, 09:46:14
¿Estás seguro que con quickreport no puedes configurar una impresión a tamaño A5?, me extraña mucho.
En todo caso, cambia de generador de informes, usa uno bueno, potente, con todas las posibilidades y además libre, como Report Manager (http://reportman.sourceforge.net/indexes.html), no es muy bonito de presentación, pero sí que es muy efectivo.

mRoman
18-02-2014, 13:55:47
Casimiro gracias por seguir el hilo....

Configuración de la hoja en A5 o A4 no es problema.....el problema es q NO SÉ como hacer para imprimir ese tamaño 2 veces en una hoja tamaño carta. Me sugieres Report Manager (lo probaré)....todos los informes de mi aplicacion están en QuickReport....y hasta el momento habia salido de los problemas.....pero ahora no lo he hecho...YA LLEVO 15 dias (si no es q mas) en resolver esto.

Una pregunta....podré combinar mis informes de QReport con los de ReportManager?

En fin....sigo buscando e investigando.

mRoman
18-02-2014, 14:17:01
Por cierto casimiro...como ejecuto el reporte hecho en ReportManager desde delphi?
Ya lo baje....y lo estoy analizando....

Gracias !

Casimiro Notevi
18-02-2014, 14:54:39
Configuración de la hoja en A5 o A4 no es problema.....el problema es q NO SÉ como hacer para imprimir ese tamaño 2 veces en una hoja tamaño carta.

Imprimes uno y luego imprimes otro. No entiendo el problema, la verdad.

mRoman
18-02-2014, 16:19:38
Creo q no me explicado bien......

En este hilo (http://www.clubdelphi.com/foros/showthread.php?t=65441) se menciona el problema que yo estoy tratando de resolver.
Imprimes uno y luego imprimes otro. No entiendo el problema, la verdad.

No es tan simple Casimiro....el como imprimir en la mitad de la hoja tamaño carta incluyendo en esa mitad un PageHeader, Detail y PageFooter y en la otra mitad de la hoja lo mismo...y todo esto que salga en una sola impresión.

Me has comentado que no conoces quickreport....con el reporteador q me sugeriste se puede?....lo has hecho?....envía un ejemplo porfa, para ver como lo hiciste. Ya baje el ReportManager y voy a intentar por ahí.

En cuanto a los tamaños de la hoja, la onda es que los puedo mandar a impresión, pero saldrán en 2 hojas....y no quiero eso, ya que se estaría desperdiciando la otra mitad....estaría en blanco.

Casimiro Notevi
18-02-2014, 16:37:29
¿Has mirado la documentación, componentes, etc. de quickreport?
Por ejemplo: http://www.quickreport.co.uk/WebInfoPage.aspx?WebInfoID=677

mRoman
18-02-2014, 17:21:04
Si ya hice eso....pero veo que existen algunas instrucciones q no he incluido

procedure MakeComp;
begin
comprep := TQRCompositeReport.Create( mainfrm);
comprep.OnAddReports := mainfrm.CompRepAddReports;
comprep.Preview;
comprep.free;
end;

Sobre todo esto:
comprep.OnAddReports := mainfrm.CompRepAddReports;
Lo agregare....

Gracias Saludos.

mRoman
19-02-2014, 12:25:56
Hola amigos....

Creo haber resuelto el problema. Ahora ya tengo un encabezado, detalle y pie de página en la primera y segunda mitad de una hoja tamaño carta.

De antemano les comento q no estoy satisfecho con la solución, porq talvez no sea la mas óptima, ademas de q tiene un inconveniente con respecto a las lineas impresas del detalle y con el CompositeReport.

Ahi va la explicación:

Al quickreport le quite las bandas y solo use un GroupHeader, Detail y GroupFooter. Despues le cambié el tipo de hoja al QuickReport1 a A5, ah y tambien le cambie el nombre a NotaECopia.

Despues en el formulario de donde mando llamar al QuickReport, agregue el componente CompositeReport, para agregar los informes:

procedure TfrmOpImpEntSali.QRCompositeReport1AddReports(Sender: TObject);
begin
with QRCompositeReport1.Reports do
begin
comprep.Reports.Add(qrNotaECopia.NotaECopia);
comprep.Reports.Add(qrNotaECopia.NotaECopia);
end;
end;


Para lo anterior tuve que declarar en las variables privadas del formulario, la variable comprep:

private
{ Private declarations }
comprep: TQRCompositeReport;


Ademas de declarar un procedure:

procedure MakeComp(Sender: TObject);


En el cuerpo de dicho procedimiento (no confundir con SP), esto:

procedure TfrmOpImpEntSali.MakeComp(Sender: TObject);
begin
comprep:=TQRCompositeReport.Create(frmOpImpEntSali);
comprep.OnAddReports :=frmOpImpEntSali.QRCompositeReport1AddReports;
comprep.Preview;
comprep.Free;
end;




Y en el evento OnClick del Boton para generarlo, esto:

procedure TfrmOpImpEntSali.BitBtn1Click(Sender: TObject);
begin
ModDatos.trsFluida.Active:=FAlse;
ModDatos.trsFluida.StartTransaction;
spcFormatos.Close;
spcFormatos.ParamByName('ifolio_ini').AsString:=mskFolioIni.Text;
spcFormatos.ParamByName('ifolio_fin').AsString:=mskFolioFin.Text;
spcFormatos.ParamByName('imes').AsInteger:=cbxMes.ItemIndex+1;
spcFormatos.ParamByName('IANIO').AsString:=mskAnio.Text;
spcFormatos.ExecProc;

qrNotaECopia.qryDatos.Close;
qrNotaECopia.qryDatos.ParamByName('mes').AsInteger:=cbxMes.ItemIndex+1;
qrNotaECopia.qryDatos.ParamByName('anio').AsString:=mskAnio.Text;
qrNotaECopia.qryDatos.ParamByName('folio1').AsString:=mskFolioIni.Text;
qrNotaECopia.qryDatos.ParamByName('folio2').AsString:=mskFolioFin.Text;
qrNotaECopia.qryDatos.Open;
MakeComp(Sender);
end;


En el código anterior tengo un componente TIBStoredProc, el cual mando llamar para llenar una tabla de paso y almacenar nuevamente el detalle mas algunos registros "en blanco" hasta llegar a 15....porq 15?....porq son los registros que le caben al formato, si se imprime el registro 16 el GroupFooter se imprime en la siguiente página.....(este es el problema q les comente al principio sobre las lineas de impresion), estoy tratando de como resolver esto y controlarlo para q se imprima todo (GroupHeader, Detail y GroupFooter)en la siguiente pagina lo q hace falta.

Este es el cuerpo del SP:
CREATE PROCEDURE LLENAR_RPT_PASO_E_S (
imes numeric(2,0),
ianio numeric(4,0),
ifolio_ini numeric(6,0),
ifolio_fin numeric(6,0))
as
declare variable vlineas numeric(2,0);
declare variable vfolio numeric(6,0);
declare variable vconsec numeric(3,0);
declare variable vdescr varchar(100);
declare variable vcodigo numeric(4,0);
declare variable vcant numeric(5,0);
declare variable vunidad varchar(15);
declare variable vmax_consec numeric(2,0);
begin
/* PROCESO DE LLENADO PARA IMPRIMIR LA NOTA DE ENTRADA DE LECHE AL ALMACEN*/
delete from rpt_paso_e_s_detalle;
vLineas=0;
for select b.folio,
b.consec,
b.cantidad_surtida,
b.unidad_producto,
c.descripcion||' 1-'||c.piezas||' '||c.equivalente_litros||' '||lower(c.unidad_medida) as descripcion,
substr(c.cve_producto,8,11) as codificacion
from registro_e_s a,
registro_e_s_detalle b,
producto c
where a.folio between :ifolio_ini and :ifolio_fin
and extract(month from a.fecha_folio)=:imes
and extract(year from a.fecha_folio)=:ianio
and a.movimiento_e_s='E'
and a.folio=b.folio
and b.cve_producto=c.cve_producto
order by b.folio,
b.consec
into :vfolio,
:vconsec,
:vcant,
:vunidad,
:vdescr,
:vcodigo do
begin
if (vconsec=1) then
begin
select max(c.consec)
from registro_e_s_detalle c
where c.folio=:vfolio
into :vmax_consec;
end
if (vconsec < vmax_consec) then
begin
insert into RPT_PASO_E_S_DETALLE(MOVIMIENTO_E_S_1,
FOLIO_1 ,
CONSEC_1 ,
CANTIDAD_SOLICITADA_1,
CANTIDAD_SURTIDA_1 ,
UNIDAD_PRODUCTO_1 ,
DESCRIPCION,
CODIFICACION )
values ('E',
:vfolio,
:vconsec,
:vcant,
:vcant,
:vunidad,
:vdescr,
:vcodigo);

end Else
begin
insert into RPT_PASO_E_S_DETALLE(MOVIMIENTO_E_S_1,
FOLIO_1 ,
CONSEC_1 ,
CANTIDAD_SOLICITADA_1,
CANTIDAD_SURTIDA_1 ,
UNIDAD_PRODUCTO_1 ,
DESCRIPCION,
CODIFICACION )
values ('E',
:vfolio,
:vconsec,
:vcant,
:vcant,
:vunidad,
:vdescr,
:vcodigo);
vmax_consec=vmax_consec+1;
while (vmax_consec<=15) do
begin
insert into RPT_PASO_E_S_DETALLE(MOVIMIENTO_E_S_1,
FOLIO_1 ,
CONSEC_1 ,
CANTIDAD_SOLICITADA_1,
CANTIDAD_SURTIDA_1 ,
UNIDAD_PRODUCTO_1 ,
DESCRIPCION,
CODIFICACION )
values ('E',
:vfolio,
:vmax_consec,
null,
null,
null,
null,
null);
vmax_consec=vmax_consec+1;
end
end
end
end

Sé que el código anterior se puede mejorar....pero hasta el momento este me funciona.

El CompositeReport agrega varios informes en uno solo en apariencia, solo q el priimer informe lo agrega desde la pagina 1 hasta la N pagina y el segundo nuevamente desde la pagina 1 hasta la N...que quiero decir?, que en mi caso se imprime el No. de Folio 1 hasta el 1000 y enseguida del 1000 el folio 1 nuevamente yhasta el mil.....EN LA PRIMER HOJA IMPRESA SE IMPRIMEN EL FOLIO 1 Y EL 2, EN LA HOJA 2 EL FOLIO 3 Y 4 y asi hasta el mil, y el segundo informe agregado igual....q talvez al final no importaria porq el usuario los tiene q separar (cortar) de todas maneras ya q uno seria el original y el otro la copia (no sé si me haya explicado)

comprep.Reports.Add(qrNotaECopia.NotaECopia); // primer informe agregado.
comprep.Reports.Add(qrNotaECopia.NotaECopia); // segundo informe agregado....que es el mismo q el primero.


Bien hasta ahorita es lo q llevo....y esta funcionando, falta detallarlo mas por supuesto asi q se aceptan sugerencias muchachos y muchachas.....

Espero q a alguien mas le pueda servir. Saludos.

olbeup
05-03-2014, 10:43:58
Hola mRoman,

Después de tú último mensaje que no estabas muy convencido del resultado, me he puesto a investigar como imprimir en dos columnas.

1º Pones QRBand y el BandType que sea rbPageHeader, si lo necesitas y en ForceNewColumn lo pones a True.
2º Pones un QRGroup lo dejas en blanco y en Height lo dejas a 0 (Cero) y en ForceNewColumn lo pones a True
3º Pones un DetailBand (Pulsas dos veces sobre el QuickReport para hacer un Report Settings y seleccionas Detail band) y en ForceNewColumn lo pones a True, dentro de este DetailBand pones los campos que necesites.
4º Pones QRBand y el BandType que sea rbPageFooter, si lo necesitas y en ForceNewColumn lo pones a True.

Esto funciona con dos registros.

Un saludo.

P.D.: Espero no llegar demasiado tarde, aunque ya lo has resuelto pero como no estabas muy contento, mira a ver esto.

mRoman
06-03-2014, 16:06:04
Suena interesante.....olbeup !.

Lo probaré como me lo comentas...haré una prueba ya les comentaré como me fue.....solo q tardaré algunos dias para contestar.....

Te agradezco enormemente el tiempo q le has dedicado a la investigación de mi problema.

Gracias ! Saludos.