Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-01-2016
JM1985 JM1985 is offline
Miembro
NULL
 
Registrado: jul 2013
Posts: 68
Poder: 11
JM1985 Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 21-01-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
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
  #3  
Antiguo 18-02-2016
JM1985 JM1985 is offline
Miembro
NULL
 
Registrado: jul 2013
Posts: 68
Poder: 11
JM1985 Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Enumerado genérico como parámetro elrayo76 Varios 19 27-06-2015 00:41:36
Creador generico de formulario. movorack OOP 8 02-03-2010 15:16:12
procedimiento de asignación genérico gushynet OOP 23 09-09-2008 10:50:15
Apuntar a un tipo genérico Guillermo80 Varios 4 09-03-2008 11:48:22
reporte generico piyugo Impresión 8 07-05-2004 18:20:03


La franja horaria es GMT +2. Ahora son las 17:56: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
Copyright 1996-2007 Club Delphi