Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Dataset generico en quickreport (https://www.clubdelphi.com/foros/showthread.php?t=89707)

JM1985 21-01-2016 00:33:38

Dataset generico en quickreport
 
Buen día actualmente tenemos un formulario base que es generico para presentar los reportes en quickreport mediante TClientDataSet
por ejemplo tengo un reporte de clientes y le agredo una banda title para poner el encabezado datos genericos Nombre de la empresa etc.
Cuando quieres modificar el reporte te aparecen los datasets disponibles en este caso los que estén en ese momento creados.

Mi pregunta es hay alguna manera de que el quickreport detecte en cualquier reporte que hay un dataset generico o público cargado desde el inicio de la aplicación para que ahora sí valga la redundancia tenga datos genericos que me servirán en todos los reportes?
O bien pasarle ese dataset generico como parámetro ??


Espero haberme explicado.
Gracias.

Saludos.

AgustinOrtu 21-01-2016 01:02:03

La forma mas comoda es usar herencia visual

Creas un VCL Form y pones el TQuickRep

Despues, se redefine el constructor para para que tambien acepte una instancia de TDataSet; asi siempre todos tus reportes van a "pedir" el DataSet en cuestion cuando son creados, y si no se los das, elevaran una excepcion:

Código Delphi [-]
unit Unit1;

interface

uses
  Classes,
  Forms,
  Controls,
  ExtCtrls,
  DB,
  QuickRpt;

type
  // clase abstracta: si se intenta crear una instancia, elevara una excepcion, estamos obligados a
  // diseñar una nueva clase que herede de esta
  TReporteBase = class abstract(TForm)
    QuickRep1: TQuickRep;
  // visibilidad privada; solamente esta clase puede ver la variable FDataSet
  strict private
    FDataSet: TDataSet;
  // visibilidad protegida; solamente las clases que hereden de TReporteBase van a poder ver esta propiedad
  // esto lo decide cada uno si "desde afuera" pueden acceder al DataSet o no
  strict protected
    property DataSetGenerico: TDataSet read FDataSet;
  public
    // reintroduce esta para ocultar el constructor de TForm, el cual no esta marcado como virtual
    constructor Create(AOwner: TComponent; ADataSet: TDataSet); reintroduce;
  end;

implementation

{$R *.dfm}

uses
  SysUtils;

{ TReporteBase }

constructor TReporteBase.Create(AOwner: TComponent; ADataSet: TDataSet);
begin
  if not Assigned(ADataSet) or ADataSet = NIL then
    raise Exception.CreateFmt('Error al crear %s, el parametro ADataSet no esta inicializado', [ClassName]);

  inherited Create(AOwner);
  FDataSet := ADataSet;
end;

end.

Para usar "esto de la herencia visual", simplemente te vas a New -> Other y en el TreeView seleccionas Delphi Projects -> Inheritable Items -> ReporteBase

Asegurate que en el RadioGroup de abajo este marcado "inherit"

Esto te creara un nuevo Form que hereda de ReporteBase y tendras el QuickReport listo para empezar a trabajar y la referencia al DataSet anterior

De hecho, en el formulario ReporteBase, podrias ir colocando propiedades y comportamiento comun a todos tus reportes; por ejemplo, podrias poner que en el pie de cada pagina, salga una banda con los datos de la empresa

Tambien podrias dejar configurado todos los filtros (para exportar a los distintos formatos), el tamaño de la vista previa, cantidad de hojas a imprimir por defecto, impresora a usar, etc etc, y todo esto lo haces una vez y siempre y cuando heredes de este form, ya tendras todo eso hecho

JM1985 18-02-2016 16:21:17

Buen día gracias por la respuesta AgustinOrtu.

Investigando un poco mas a fondo en el componente TReportDesignerDialog hay una propiedad llamada UseDataModules aceptando true o false,
La solución fue setear la propiedad en true y en el componente TModuloDeDatos crear el TClientDataSet generico y llenarlo y así ya en todos los reportes ya está disponible.



Gracias.

Saludos.


Julián May.


La franja horaria es GMT +2. Ahora son las 11:50:51.

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