PDA

Ver la Versión Completa : Problema con el boton imprimir del reporte en Report Builder


Diana Carolina
28-03-2011, 21:44:11
Hola....

Lo que pasa es que tengo un reporte el cual debe imprimir un formulario que mustra una informacion dependiendo del tipo de persona, para ello usa subreportes. Esta hecho en delphi 6, tiene los botones de vista preliminar, imprimir, generar.

Generar...abre los qrys y me muestra una consulta en una grilla.
vista preliminar....me muestra el formulario en report builder.
Imprimir....ps imprime jejeje.

El caso es que cuando genero la informacion y le doy imprimir con el boton de el formulario imprime completo, si le doy click en vista preliminar muestra el formulario completo, PERO cuando le doy imprimir desde el boton que sale en el reporte de vista preliminar, osea el que trae predefinido el report builder NO muestra completo!!! Necesito comprender el por que de este asunto...por favor cualquier comentario podria serme de gran utilidad...

oscarac
28-03-2011, 22:01:47
podrias colocar algo de codigo?
osea se entiende que cuando das click en el boton del "preliminar", no te muestra completo....

podrias ser un poco mas especifica?

no muestra completo que..... el reporte (Datos incompletos?.. el reporte no tiene mucho espacio para su visualizacion?.. etc

Diana Carolina
28-03-2011, 22:40:41
ok...bueno anteriormente el reporte funcionaba correctamente...es decir el boton imprimir del formulario y el imprimir que esta en la vista preliminar mostraban el reporte completo, me toco meterle la validacion de qrynuevo por un cambio en el nombre de un campo en una tabla, despues de ese cambio me sucedio el problema con el imprimir de la vista preliminar...los eventos afterprint y beforeprint estan programados.


procedure TFrmRepFormulario.spbPreliminarClick(Sender: TObject);
begin
inherited;
if Qrytipopersona.AsString = 'A' then
begin
VarTipoIdCl := Qrytipopersonatipo.AsString;
ppReportepers1.DeviceType := dtScreen;
ppReportepers1.Print;
end
else
begin
VarTipoIdCl := Qrytipopersonatipo.AsString;
ppReportepers2.DeviceType := dtScreen;
ppReportepers2.Print;
end;
Qrynuevo.Close;
if FrmPrincipal.QryperteneceFirma.AsString = '001' then
begin
Qrynuevo.SQL.Strings[2]:='A.ALGO,';
Qrynuevo.SQL.Strings[11]:='AND OP.ALGO = A.ALGO';
end
else
begin
Qrynuevo.SQL.Strings[2]:='A.OTRO,';
Qrynuevo.SQL.Strings[11]:='AND OP.OTRO = A.ALGO'
end;

Qrynuevo.open;
end;

procedure TFrmRepFormulario.spbImprimirClick(Sender: TObject);
var
i : Integer;
Pers1,Pers2 : Boolean;
begin
inherited;
Pers1 := False;
Pers2 := False;
for i := 0 to Qrypersona.RecordCount -1 do
begin
if Qrytipopersona.AsString = 'A' then
begin
VarTipoIdCl := Qrytipopersonatipo.AsString;
ppReportepers1.DeviceType := dtPrinter;
if Pers1 then
begin
ppReportepers1.ShowPrintDialog := False;
ppReportepers1.ShowCancelDialog := False;
end;
ppReportepers1.Print;
Pers1 := True;
end
else
begin
VarTipoIdCl := Qrytipopersonatipo.AsString;
ppReportepers2.DeviceType := dtPrinter;
if PersNat then
begin
ppReportepers2.ShowPrintDialog := False;
ppReportepers2.ShowCancelDialog := False;
end;
ppReportepers2.Print;
Pers2 := True;
end;
Qrytipopersona.FindNext;
end;
Qrynuevo.Close;//***Aqui agregue
if FrmPrincipal.QryperteneceFirma.AsString = '001' then
begin
Qrynuevo.SQL.Strings[2]:='A.ALGO,';
Qrynuevo.SQL.Strings[11]:='AND OP.ALGO = A.ALGO'
end
else
begin
Qrynuevo.SQL.Strings[2]:='A.OTRO,';
Qrynuevo.SQL.Strings[11]:='AND OP.OTRO = A.ALGO'
end;

Qrynuevo.open;
end;


Cuando le doy click en vista preliminar muestra el fromulario con toda la informacion(Completo),,,pero al darle click en el boton de imprimir que sale en esa misma ventana, es decir la ventana con el reporte que saca el report builder...no imprime el formulario completo

oscarac
28-03-2011, 23:09:03
Sigo sin entender a que le llamas "reporte completo"

si la unica variacion que has echo es esta

Qrynuevo.Close;//***Aqui agregue
if FrmPrincipal.QryperteneceFirma.AsString = '001' then
begin
Qrynuevo.SQL.Strings[2]:='A.ALGO,';
Qrynuevo.SQL.Strings[11]:='AND OP.ALGO = A.ALGO'
end
else
begin
Qrynuevo.SQL.Strings[2]:='A.OTRO,';
Qrynuevo.SQL.Strings[11]:='AND OP.OTRO = A.ALGO'
end;


puede ser que el reporte tenga "grupos" y que por la condicion agregada no te este saliendo la informacion que tu deseas....

Diana Carolina
28-03-2011, 23:18:45
El reporte se compone de subreportes,,,lo que me mata la cabeza es que al darle en el boton imprimir de la ventana del delphi los muestra todos (Formulario completo con toda la informacion) y cuando entro a vista preliminar y me despliega el "print preview"(Vista preliminar muestra formulario completo con toda la informacion) al mandar a imprimir por el boton que trae por defecto la ventana "Print preview" en la hoja que imprimo solo muestra el pie de pagina...(osea formulario incompleto)....

Casimiro Notevi
29-03-2011, 01:12:50
Tampoco lo entiendo, ¿puedes poner un ejemplo, algún dibujo del esquema del mismo, etc.?

Diana Carolina
29-03-2011, 20:03:41
Jejjej si creo que me cuesta hacerme entender :D

Esta la ventanita del delphi donde tengo las opciones de:
Generar: Al dar click aqui me muestra en una grilla informacion basica.
Vista Preliminar : me muestra un formulario con la informacion de la grilla organizada. (Este reporte lo conforman varios subreportes).
Imprimir : imprime el mismo formulario que me muestra la vista preliminar.

Cuando le doy en el boton vista preliminar y me muestra el formulario en la parte de arriba tambien hay un boton imprimir.

El imprimir que esta en la ventana imprime el formulario completo.
El imprimir que esta dentro de la vista preliminar solo imprime el pie de pagina del formulario.

oscarac
29-03-2011, 20:52:16
mmm
coloca aqui el codigo que esta en el boton de imprimir (del formulario) y el codigo del boton imprimr (q esta en el previo)

OJO has uso de la Sintaxis delphi para entenderlo mejor

.... puedes hacer uso haciendo click en esta ventanita... en el icono que parece una ruina romana o griega

Al González
29-03-2011, 21:35:35
[...] el icono que parece una ruina [...]
¿Tan mal se ve el icono? :eek: :D http://es.wikipedia.org/wiki/Parten%C3%B3n

Casimiro Notevi
29-03-2011, 21:47:44
¿Ruina?, :D, hay que ser políticamente correctos :D, son restos arqueológicos de gran valor histórico :D

Diana Carolina
29-03-2011, 21:52:13
El codigo de imprimir(de la pantalla en delphi) y de vista preliminar ya los publique.
El codigo de imprimir de el formulario que sale al darle vista preliminar no lo tengo por que este boton es el que trae por defecto el "preview" del report builder, es decir en el codigo fuente tengo el componente TppReport el cual al darle doble click me muestra la ventana de diseño del report builder, esa ventana tiene 3 pestañas (Data, Desing, Preview). Cuando le doy click en preview sale lo que debe salir cuando le doy vista preliminar en tiempo de ejecucion, en la parte superior izquierda hay un boton con el icono de imprimir llamado "Print".
En tiempo de ejecucion primero genero los datos, se muestran en la grilla, tengo la opcion de imprimirlos dede alli o primero entrar a vista preliminar para ver como queda el reporte, si lo imprimo sin entrar a vista preliminar imprime toda la informacion pero si entro a vista preliminar y desde alli le doy al boton "Print" que esta en la parte superior izquierda solo imprime el pie de pagina.

Yo se que es complicado entenderme pero ya no se que hacer para exponer mi problema!!! :(

Diana Carolina
30-03-2011, 00:00:11
Ok...aqui esta el codigo de los eventos implicados, espero con esto me puedan ayudar...es urgente!!!!


procedure TFrmRepFormulario.spbGenerarClick(Sender: TObject);
begin
inherited;

QryTipoPersona.ParamByName('tipo').AsString := QryTipoTipo.AsString;
QryTipoPersona.ParamByName('nit1').AsString := QryNit1Nit.AsString;
QryTipoPersona.ParamByName('nit2').AsString := QryNit2Nit.AsString;
if (gGeMotor = ORACLE ) then
QryTipoPersona.SQL.Strings[6]:=' '
else ///si es SQL_SERVER u otro
QryTipoPersona.SQL.Strings[6]:=' ';

QryTipoPersona.Close;
QryTipoPersona.Open;
///aqui agregue validacion//
Qrynuevo.close;
if FrmPrincipal.QryperteneceFirma.AsString = '001' then
begin
Qrynuevo.SQL.Strings[2]:='A.ALGO,';
Qrynuevo.SQL.Strings[11]:='AND OP.ALGO = A.ALGO';
end
else
begin
Qrynuevo.SQL.Strings[2]:='A.OTRO,';
Qrynuevo.SQL.Strings[11]:='AND OP.OTRO = A.ALGO'
end;

Qrynuevo.open;
end;

procedure TFrmRepFormulario.spbPreliminarClick(Sender: TObject);
begin
inherited;
if Qrytipopersona.AsString = 'A' then
begin
VarTipoIdCl := Qrytipopersonatipo.AsString;
ppReportepers1.DeviceType := dtScreen;
ppReportepers1.Print;
end
else
begin
VarTipoIdCl := Qrytipopersonatipo.AsString;
ppReportepers2.DeviceType := dtScreen;
ppReportepers2.Print;
end;
///Aqui agregue validacion///
Qrynuevo.Close;
if FrmPrincipal.QryperteneceFirma.AsString = '001' then
begin
Qrynuevo.SQL.Strings[2]:='A.ALGO,';
Qrynuevo.SQL.Strings[11]:='AND OP.ALGO = A.ALGO';
end
else
begin
Qrynuevo.SQL.Strings[2]:='A.OTRO,';
Qrynuevo.SQL.Strings[11]:='AND OP.OTRO = A.ALGO'
end;

Qrynuevo.open;
end;

procedure TFrmRepFormulario.spbImprimirClick(Sender: TObject);
var
i : Integer;
Pers1,Pers2 : Boolean;
begin
inherited;
Pers1 := False;
Pers2 := False;
for i := 0 to Qrypersona.RecordCount -1 do
begin
if Qrytipopersona.AsString = 'A' then
begin
VarTipoIdCl := Qrytipopersonatipo.AsString;
ppReportepers1.DeviceType := dtPrinter;
if Pers1 then
begin
ppReportepers1.ShowPrintDialog := False;
ppReportepers1.ShowCancelDialog := False;
end;
ppReportepers1.Print;
Pers1 := True;
end
else
begin
VarTipoIdCl := Qrytipopersonatipo.AsString;
ppReportepers2.DeviceType := dtPrinter;
if PersNat then
begin
ppReportepers2.ShowPrintDialog := False;
ppReportepers2.ShowCancelDialog := False;
end;
ppReportepers2.Print;
Pers2 := True;
end;
Qrytipopersona.FindNext;
end;
///Agregue validacion///
Qrynuevo.Close;
if FrmPrincipal.QryperteneceFirma.AsString = '001' then
begin
Qrynuevo.SQL.Strings[2]:='A.ALGO,';
Qrynuevo.SQL.Strings[11]:='AND OP.ALGO = A.ALGO'
end
else
begin
Qrynuevo.SQL.Strings[2]:='A.OTRO,';
Qrynuevo.SQL.Strings[11]:='AND OP.OTRO = A.ALGO'
end;

Qrynuevo.open;
end;

procedure TFrmRepFormulario.ppReportepers1PreviewFormCreate(
Sender: TObject);
begin
inherited;
ppReportepers1.PreviewForm.WindowState := wsMaximized;
end;

procedure TFrmRepFormulario.ppReportepers1BeforePrint(
Sender: TObject);
begin
inherited;

if QryTipoPersona1.RecordCount = 0 then
exit;

Qry1.ParamByName('Tipo').AsString := QryTipoPersona1Tipo.AsString;
Qry1.ParamByName('Nit').AsString := QryTipoPersona1Nit.AsString;
Qry1.Open;

Qry2.ParamByName('Tipo').AsString := QryTipoPersona1Tipo.AsString;
Qry2.ParamByName('Nit').AsString := QryTipoPersona1Nit.AsString;
Qry2.Open;

Qrynuevo.ParamByName('TipId').AsString := QryTipoPersona1Tipo.AsString;
Qrynuevo.ParamByName('NitCliente').AsString := QryTipoPersona1Nit.AsString;
Qrynuevo.Open;

Qry4.ParamByName('Tipo').AsString := QryTipoPersona1Tipo.AsString;
Qry4.ParamByName('Nit').AsString := QryTipoPersona1Nit.AsString;
Qry4.Open;

end;

procedure TFrmRepFormulario.ppReportepers2PreviewFormCreate(
Sender: TObject);
begin
inherited;
ppReportepers2.PreviewForm.WindowState := wsMaximized;
end;

procedure TFrmRepFormulario.ppReportepers2BeforePrint(
Sender: TObject);
begin
inherited;

if QryTipoPersona2.RecordCount = 0 then
exit;

Qry1.ParamByName('Tipo').AsString := QryTipoPersona2Tipo.AsString;
Qry1.ParamByName('Nit').AsString := QryTipoPersona2Nit.AsString;
Qry1.Open;

Qry2.ParamByName('Tipo').AsString := QryTipoPersona2Tipo.AsString;
Qry2.ParamByName('Nit').AsString := QryTipoPersona2Nit.AsString;
Qry2.Open;

Qrynuevo.ParamByName('TipId').AsString := QryTipoPersona2Tipo.AsString;
Qrynuevo.ParamByName('NitCliente').AsString := QryTipoPersona2Nit.AsString;
Qrynuevo.Open;

Qry4.ParamByName('Tipo').AsString := QryTipoPersona2Tipo.AsString;
Qry4.ParamByName('Nit').AsString := QryTipoPersona2Nit.AsString;
Qry4.Open;

end;

procedure TFrmRepFormulario.ppReportepers2AfterPrint(
Sender: TObject);
begin
inherited;

ppReportepers2.ShowPrintDialog := true;
ppReportepers2.ShowCancelDialog := True;

Qry1.Close;
Qry2.Close;
Qrynuevo.Close;
Qry4.close;

end;

procedure TFrmRepFormulario.ppReportepers1AfterPrint(
Sender: TObject);
begin
inherited;
ppReportepers1.ShowPrintDialog := true;
ppReportepers1.ShowCancelDialog := True;

Qry1.Close;
Qry2.Close;
Qrynuevo.Close;
Qry4.close;

end;

Casimiro Notevi
30-03-2011, 00:09:02
Amiga, ya leíste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php), gracias por tu colaboración.
Y cómo poner etiquetas al código:
http://neftali.clubdelphi.com/images/UtilizarTAGs.png

Diana Carolina
30-03-2011, 00:20:17
Lo intentare!

Diana Carolina
30-03-2011, 00:23:44
procedure TFrmRepFormulario.spbGenerarClick(Sender: TObject);
begin
inherited;

QryTipoPersona.ParamByName('tipo').AsString := QryTipoTipo.AsString;
QryTipoPersona.ParamByName('nit1').AsString := QryNit1Nit.AsString;
QryTipoPersona.ParamByName('nit2').AsString := QryNit2Nit.AsString;
if (gGeMotor = ORACLE ) then
QryTipoPersona.SQL.Strings[6]:=' '
else ///si es SQL_SERVER u otro
QryTipoPersona.SQL.Strings[6]:=' ';

QryTipoPersona.Close;
QryTipoPersona.Open;
///aqui agregue validacion//
Qrynuevo.close;
if FrmPrincipal.QryperteneceFirma.AsString = '001' then
begin
Qrynuevo.SQL.Strings[2]:='A.ALGO,';
Qrynuevo.SQL.Strings[11]:='AND OP.ALGO = A.ALGO';
end
else
begin
Qrynuevo.SQL.Strings[2]:='A.OTRO,';
Qrynuevo.SQL.Strings[11]:='AND OP.OTRO = A.ALGO'
end;

Qrynuevo.open;
end;

procedure TFrmRepFormulario.spbPreliminarClick(Sender: TObject);
begin
inherited;
if Qrytipopersona.AsString = 'A' then
begin
VarTipoIdCl := Qrytipopersonatipo.AsString;
ppReportepers1.DeviceType := dtScreen;
ppReportepers1.Print;
end
else
begin
VarTipoIdCl := Qrytipopersonatipo.AsString;
ppReportepers2.DeviceType := dtScreen;
ppReportepers2.Print;
end;
///Aqui agregue validacion///
Qrynuevo.Close;
if FrmPrincipal.QryperteneceFirma.AsString = '001' then
begin
Qrynuevo.SQL.Strings[2]:='A.ALGO,';
Qrynuevo.SQL.Strings[11]:='AND OP.ALGO = A.ALGO';
end
else
begin
Qrynuevo.SQL.Strings[2]:='A.OTRO,';
Qrynuevo.SQL.Strings[11]:='AND OP.OTRO = A.ALGO'
end;

Qrynuevo.open;
end;

procedure TFrmRepFormulario.spbImprimirClick(Sender: TObject);
var
i : Integer;
Pers1,Pers2 : Boolean;
begin
inherited;
Pers1 := False;
Pers2 := False;
for i := 0 to Qrypersona.RecordCount -1 do
begin
if Qrytipopersona.AsString = 'A' then
begin
VarTipoIdCl := Qrytipopersonatipo.AsString;
ppReportepers1.DeviceType := dtPrinter;
if Pers1 then
begin
ppReportepers1.ShowPrintDialog := False;
ppReportepers1.ShowCancelDialog := False;
end;
ppReportepers1.Print;
Pers1 := True;
end
else
begin
VarTipoIdCl := Qrytipopersonatipo.AsString;
ppReportepers2.DeviceType := dtPrinter;
if PersNat then
begin
ppReportepers2.ShowPrintDialog := False;
ppReportepers2.ShowCancelDialog := False;
end;
ppReportepers2.Print;
Pers2 := True;
end;
Qrytipopersona.FindNext;
end;
///Agregue validacion///
Qrynuevo.Close;
if FrmPrincipal.QryperteneceFirma.AsString = '001' then
begin
Qrynuevo.SQL.Strings[2]:='A.ALGO,';
Qrynuevo.SQL.Strings[11]:='AND OP.ALGO = A.ALGO'
end
else
begin
Qrynuevo.SQL.Strings[2]:='A.OTRO,';
Qrynuevo.SQL.Strings[11]:='AND OP.OTRO = A.ALGO'
end;

Qrynuevo.open;
end;

procedure TFrmRepFormulario.ppReportepers1PreviewFormCreate(
Sender: TObject);
begin
inherited;
ppReportepers1.PreviewForm.WindowState := wsMaximized;
end;

procedure TFrmRepFormulario.ppReportepers1BeforePrint(
Sender: TObject);
begin
inherited;

if QryTipoPersona1.RecordCount = 0 then
exit;

Qry1.ParamByName('Tipo').AsString := QryTipoPersona1Tipo.AsString;
Qry1.ParamByName('Nit').AsString := QryTipoPersona1Nit.AsString;
Qry1.Open;

Qry2.ParamByName('Tipo').AsString := QryTipoPersona1Tipo.AsString;
Qry2.ParamByName('Nit').AsString := QryTipoPersona1Nit.AsString;
Qry2.Open;

Qrynuevo.ParamByName('TipId').AsString := QryTipoPersona1Tipo.AsString;
Qrynuevo.ParamByName('NitCliente').AsString := QryTipoPersona1Nit.AsString;
Qrynuevo.Open;

Qry4.ParamByName('Tipo').AsString := QryTipoPersona1Tipo.AsString;
Qry4.ParamByName('Nit').AsString := QryTipoPersona1Nit.AsString;
Qry4.Open;

end;

procedure TFrmRepFormulario.ppReportepers2PreviewFormCreate(
Sender: TObject);
begin
inherited;
ppReportepers2.PreviewForm.WindowState := wsMaximized;
end;

procedure TFrmRepFormulario.ppReportepers2BeforePrint(
Sender: TObject);
begin
inherited;

if QryTipoPersona2.RecordCount = 0 then
exit;

Qry1.ParamByName('Tipo').AsString := QryTipoPersona2Tipo.AsString;
Qry1.ParamByName('Nit').AsString := QryTipoPersona2Nit.AsString;
Qry1.Open;

Qry2.ParamByName('Tipo').AsString := QryTipoPersona2Tipo.AsString;
Qry2.ParamByName('Nit').AsString := QryTipoPersona2Nit.AsString;
Qry2.Open;

Qrynuevo.ParamByName('TipId').AsString := QryTipoPersona2Tipo.AsString;
Qrynuevo.ParamByName('NitCliente').AsString := QryTipoPersona2Nit.AsString;
Qrynuevo.Open;

Qry4.ParamByName('Tipo').AsString := QryTipoPersona2Tipo.AsString;
Qry4.ParamByName('Nit').AsString := QryTipoPersona2Nit.AsString;
Qry4.Open;

end;

procedure TFrmRepFormulario.ppReportepers2AfterPrint(
Sender: TObject);
begin
inherited;

ppReportepers2.ShowPrintDialog := true;
ppReportepers2.ShowCancelDialog := True;

Qry1.Close;
Qry2.Close;
Qrynuevo.Close;
Qry4.close;

end;

procedure TFrmRepFormulario.ppReportepers1AfterPrint(
Sender: TObject);
begin
inherited;
ppReportepers1.ShowPrintDialog := true;
ppReportepers1.ShowCancelDialog := True;

Qry1.Close;
Qry2.Close;
Qrynuevo.Close;
Qry4.close;

end;

Diana Carolina
31-03-2011, 00:15:21
Ok...les cuento que el problema de imprimir parece ser solo en mi computador, un compañero compilo el mismo fuente en su equipo y no existe ningun problema al imprimir por cualquier lado,,,lo curioso es que me paso el ejecutable que funciona en su equipo y al abrirlo en el mio no funciona,,,es el mismo codigo fuente y cuando lo compilo en mi equipo queda con el problema,,,si lo paso a otro equipo no funciona, el de mi compañero si....Quiza alguno de ustedes pueda explicarme el por que de esto...Gracias :p

Casimiro Notevi
31-03-2011, 01:07:41
¿Puede ser configuración de la impresora?, ¿los drivers?, también hay un pequeño truco cuando ocurren "cosas raras", borra el fichero reportbuilder.ini que está en c:\windows

oscarac
31-03-2011, 03:13:42
Ok...les cuento que el problema de imprimir parece ser solo en mi computador, un compañero compilo el mismo fuente en su equipo y no existe ningun problema al imprimir por cualquier lado,,,lo curioso es que me paso el ejecutable que funciona en su equipo y al abrirlo en el mio no funciona,,,es el mismo codigo fuente y cuando lo compilo en mi equipo queda con el problema,,,si lo paso a otro equipo no funciona, el de mi compañero si....Quiza alguno de ustedes pueda explicarme el por que de esto...Gracias :p


Ghost in the Machine.....:cool::cool:

Diana Carolina
31-03-2011, 19:22:17
Muchas Gracias efectivamente parece ser problema de la configuracion de la impresora....:p