Ver Mensaje Individual
  #2  
Antiguo 21-01-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 17
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
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
Responder Con Cita