PDA

Ver la Versión Completa : Report Manager


dvlt
06-04-2006, 11:57:23
Buenas!
Tengo un problemilla, o no se como llamarlo, quizas me quiero complicar un poco la vida, pero es a la conclusión que he llegado. Necesito guardar unos informes de Report manager en la base de datos, para luego, según quiera el usuario escojer el q sea mediante un treeview, donde esta toda la lista de los informes de la base de datos, para imprimirlo generando los datos a través del programa, es decir, el usuarios imaginemos q quiere imprimir la ficha de un cliente, entonces desde el programa selecciona el informe de ficha cliente y se genera el informe de la ficha de ese cliente, aqui debo utilizar parametros, pero como? y mas aun... como puedo hacer que el programa me muestre ese determinado informe que se ha seleccionado a través del treeview trayendolo de la base de datos?

Muchas gracias a todos!!!

mazinger
07-04-2006, 00:01:59
Para llamar a un parámetro:

VCLReport1.Report.Params.ParamByName('IdINI').Value := IdIni;

Seleccionar el archivo .rep que quieres llamar:

VCLReport1.FileName := 'Factura.rep';


Y por último el codígo completo de llamada a una funcion de impreesión de un informe en una dll:

Function ImprimeFactura(aDB, aSerie : String; IdIni,IdFin : Integer; Previsual, AutoNombre, PDF,Impresion,Archivo: Boolean) : Boolean;
Var
Directorio, ConnectionString : String ;
Begin
Inicio;
Result := False;
With dmRecursos.VCLReport1 do
Try
ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
aDB+';Jet OLEDB:Engine Type=4';
Directorio := ExtractFilePath(Application.ExeName);
dmRecursos.ADOConnection1.ConnectionString := ConnectionString;
dmRecursos.ADOConnection1.Open;
FileName := Directorio +'informes\' +'Factura.rep';
CambiaImpresora(LeeTextoOpcion('prn_ImpresoraFacturas'));
Report.PrinterSelect := pRpUserPrinter1;
Report.DatabaseInfo.Items[0].ADOConnectionString := ConnectionString;
ShowPrintDialog := False;
ShowProgress := False;
Report.Params.ParamByName('IdINI').Value := IdIni;
Report.Params.ParamByName('IdFIN').Value := IdFin;
Report.Params.ParamByName('SERIEFACTURA').Value := aSerie;
Report.Params.ParamByName('ARCHIVO').Value := Archivo;
Title := 'Impresión de fras. Serie ' + aSerie+' desde la '+
IntToStr(IdIni)+' hasta la '+IntToStr(IdFin);
Preview := Previsual;
If AutoNombre Then
SaveToPDF(Directorio+'FrasSerie_' + aSerie+'_'+IntToStr(IdIni)+
'_'+IntToStr(IdFin)+'.PDF');
If PDF Then Begin
With dmRecursos.SaveDialog1 do Begin
InitialDir := Directorio;
FileName := 'FrasSerie_' + aSerie+'_'+IntToStr(IdIni)+'_'+IntToStr(IdFin)+'.PDF';
Result := Execute;
SaveToPdf(FileName,True);
End;
End Else Execute;
Finally
dmRecursos.FreeOnRelease;
End;
End;

Espero que te ayude

dvlt
12-05-2006, 11:57:06
Hola de nuevo,
sigo sin poder ejecutar un reporte desde la aplicación, quizas no me explique del todo bien.

Tengo unos reportes guardados en la base de datos, en una tabla para informes, con una serie de campos que me ayudaran a situar los informes en grupos en mi treeview y un campo informe de tipo blob donde almaceno el informe. La idea es que al hacer clic en un informe desde el treeview, se me abra el informe. Y aquí empieza el problema, pues no consigo que mi TVCLReport me abra el informe. Hasta ahora, y por lo que he podido descubrir debo utilizar un TRpAlias para definir la conexion a la base de datos y vincular el TVCLReport con este. Creo, y digo solo creo, que el TRpAlias esta bien configurado, pues puedo probar la conexion y me dice que es correcta, pero también da la opción de navegar por la libreria y nada de nada, ahí me dice que hay un parámetro incorrecto, pero no me especifica nada. Total, que enlaco el TVCLReport con el TRpAlias, pero ahora ya no se como indicarle el informe que debe abrir, es decir, que cuando yo clique sobre un informe en el treeview, como, o mejor dicho, que propiedades debo utilizar para indicar el informe que me debe abrir de la tabla de la base de datos.

Bueno, espero haberme explicado mejor ahora. Muchas gracias a todos y a ver si alguien me puede echar una mano!

Saludos!

Casimiro Notevi
12-05-2006, 20:52:45
¿Has visitado la sección de "documentación (http://reportman.sourceforge.net/doc/index.html)" de la página web de report manager?, puede que encuentres lo que necesitas.

dvlt
13-05-2006, 19:23:01
Si, he mirado la documentación, pero no viene ninguna información de como implementar el abrir un reporte de la base de datos en delphi...

En teoria necesito utilizar un TRpAlias para definir la conexion y utilizarlo en las propiedades del TVCLReport, pero no consigo que funcione, a parte de no saber como indicarle al TVCLReport cual es el reporte de la tabla que quiero que abra. Alguna idea?

Gracias de nuevo!

Casimiro Notevi
14-05-2006, 00:22:21
Entre la amplia documentación (http://reportman.sourceforge.net/doc/index.html) de report manager, también tienes esta (http://reportman.sourceforge.net/doc/usingcompo.html) que es exclusivamente para delphi, ¿no te sirve?

dvlt
16-05-2006, 11:52:31
Hola de nuevo
definitivamente, configuro el trpalias, me deja probar la conexion y me dice que es correcta, pero si quiero navegar por la tabla me dice que hay un parametro incorrecto y no me especifica cual... Estoy perdido... alguna idea por favor?

Gracias!!!

Casimiro Notevi
16-05-2006, 14:40:45
prueba a hacer una prueba sencillita siguiendo el ejemplo del tutorial, y vas poco a poco hasta ver qué falla en lo que haces, porque así, desde aquí, a ciegas, está difícil ayudarte
:(

jorllazo
17-11-2006, 08:57:29
Yo lo que haria en el momento del doble click sobre el arbol, es cargar el contenido del blob en un stream y grabarlo en un fichero temporal en disco, para despues cargarlo del modo habitual que tiene report manager. Cuando acaba el preview, este fichero deberias eliminarlo.

Aqui tienes un trozo de codigo que lee un jpg de una BD igual te sirve como idea inicial

procedure TForm1.btnShowImageClick(Sender: TObject);
var
bS : TADOBlobStream;
Pic : TJpegImage;
begin
bS := TADOBlobStream.Create
(AdoTable1Picture, bmRead);
try
Pic:=TJpegImage.Create;
try
Pic.LoadFromStream(bS);
ADOImage.Picture.Graphic:=Pic;
finally
Pic.Free;
end;
finally
bS.Free
end;
end;



Espero te sirva la idea.