Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-11-2007
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Como añadir parámetros o variables (QReport)

Hola

Necesito definir unas variables globales al QReport, en Reportman hacía lo siguiente:

Código Delphi [-]
{ actualizar las variables del Report con las variables del proceso }
  with VCLReport1 do begin
       FileName        := strFileReport;
       Preview         := False; //------> para imprimir
       //Preview         := True; //-------> para verlo en pantalla
       ShowProgress    := True; //-------> ver la barra de progreso
       ShowPrintDialog := False; //------> no ver la barra de herramientas
       Title           := 'INFORME DE DATOS CALCULADOS';
     { rellenar el informe }
       with Report.Params do begin
          { parametros de la oficina }
            ParamByName('OFICINA').Value       := 'En mi casa';
            ParamByName('PROVINCIA').Value     := 'ALBACETE';
          { unidades de medida }
            ParamByName('EN_METROS').Value     := EN_NUDOS;
            ParamByName('EN_KILOMETROS').Value := EN_KILOMETROS;
       end; { del with Report.Params do }
     { ejecutar el informe }
       Execute;
  end; { del with VCLReport1 do }
No he encontrado información para hacer lo mismo con QReport.

Agradecido
Salvica.

Última edición por salvica fecha: 20-11-2007 a las 21:34:52.
Responder Con Cita
  #2  
Antiguo 21-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Nunca he usado parámetros en un QuickReports. Los parámetros los tiene la consulta (TQuery) en la que se basa el QuickReport, y se accede directamente al query.params

En QuickRpeports, no existe el "Filename". Digamos que tendrás un QuickReport por cada tipo de informe que necesites.

Para mostrar el informe se usa: PreviewModal, Preview, PreviewModeless (previsualización del informe)



Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 21-11-2007
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Hola Lepe, gracias por responder.

De lo que se trata es de que QReport actúe en base a unas condiones externas (en mi caso las unidades de medida).
Encontré una mínima información en Google (dos enlaces), y una consulta de jmselesan en éste foro http://www.clubdelphi.com/foros/show...ight=functions

En teoría, según pone en http://www.quickreport.co.uk/QuickReportFAQ.doc, en la pregunta I have some variables defined in the report's functions property and I can't initialize them in the report's BeforePrint event., tengo que hacer lo siguiente:

1º - Crearme la variable en tiempo de diseño, por ejemplo una denominada "test"
2º - Modificarla por código, tal que así:
Código Delphi [-]
{ procedimiento de creación de una variable entera }
procedure TReportForm1.CrearVariableInteger( sNombre:string; iValor:integer );
var
  aQREvElement: TQREvElement;
begin
  with QuickRep1.Functions do
  begin
    aQREvElement := GetConstant(sNombre);

    if (aQREvElement <> nil) and (aQREvElement.Value(nil).Kind = resInt) then
    begin
      SetIntegerConstant(aQREvElement, iValor);
    end;
  end;
end;

{ función de lectura de una variable entera }
function  TReportForm1.LeerVariableInteger( sNombre:string ):integer;
var
  aQREvElement: TQREvElement;
begin
  with QuickRep1.Functions do
       aQREvElement := GetConstant(sNombre);

  Result := aQREvElement.Value(nil).intResult;
end;

y llamar a las funciones tal que así:
Código Delphi [-]
var
   miIntPrueba : ineteger;
begin
   ...
   CrearVariableInteger( 'INTPRUEBA', 300 );
   ...

   ...
   miIntPrueba            := LeerVariableInteger( 'INTPRUEBA' );
   QRLabel_PRUEBA.Caption := FormatFloat( '##0', miIntPrueba );
   ...
end;
Bueno, pues esto "casca" y dá un error de excepción, al hacer un seguimiento "paso a paso" la creación de la variable devuelve nil

¿ideas?
Salvica
Responder Con Cita
  #4  
Antiguo 21-11-2007
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Añado (disculpas por la omisión)
Delphi 7, Windows Xp, QReport que trae Delphi (activado según he visto en éste foro)
Saludos
Salvica
Responder Con Cita
  #5  
Antiguo 22-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Pero, ¿debes hacerlo así exactamente o puedes cambiar el procedimiento?

Lo más fácil, File -> New -> Form, y ahora dentro pones el QuickReport. Las variables esas que necesites, las pones como variables / propiedades públicas del form, y en el OnPrint del Quickreport, lees las variables del Form.

La "variable que digo" puedes definirla de tipo Variant, y así puedes almacenar una fecha, float, integer, string, boolean, etc. Incluso un array of variant con un Tstringlist para guardar los nombres, etc.



Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 22-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
En cuanto al error, es muy posible que dicho parámetro, aunque sea global a QuickReports no esté creado o disponible para asignar su valor antes de hacer el Preview (no me extrañaría nada de QuickReports).

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 22-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Ya he tenido un poco más de tiempo con esto, no me gusta el estilo, pero bueno, si es lo que necesitas....

Que conste que no son "parámetros" como has visto, se incluye pagenumber, por tanto son funciones que debe interpretar QuickReport;

Código Delphi [-]
uses qrExpr;

var pr:TqrEvResult;
// añadimos por código una función:
Quickreport1. functions.addFunction('piopio', quotedStr('mi gorrioncito canta pio pio')); 
Quickreport1. functions.addFunction('unEntero', 25)); 
// si es un string, debes pasarlo con quotedStr, o el parser interno creerá que es una 
//función de agregado (avg, sum, etc) o funciones interna dando excepciones 'Unknow function 'migorrioncito canta pio pio'.

// una vez creados los parámetros por código, es necesario que internamente cree esas funciones:
quickreport1.functions.Prepare;

// Ver los valores que tiene asignados:

// 1ª forma:
ShowMessage(quickreport1.functions.Value('piopio').strResult);


// 2ª forma:
pr := quickreport1.functions.Value('unEntero');
ShowMessage(inttostr(pr.intResult));

// pr es un puntero, así que podemos cambiar su valor y lo acepta sin problemas:
pr.intResult := 32;

// comprobación de que ha aceptado:
pr := quickreport1.functions.Value('unEntero'); // buscamos de nuevo la funcion
ShowMessage(inttostr(pr.intResult)); // dará el valor 32.
Si accedemos por ejemplo a una función que no esté creada, no dará errores de ejecución, tomará lo que haya en la memoria RAM, osea el típico jeroglífico de código máquina.

También tienes DeleteFunction, y después de ejecutarla, asegúrate de llamar a functions.Prepare.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 22-11-2007 a las 17:51:23.
Responder Con Cita
  #8  
Antiguo 22-11-2007
Alfredo Alfredo is offline
Miembro
 
Registrado: nov 2003
Ubicación: Valencia, Venezuela
Posts: 234
Poder: 21
Alfredo Va por buen camino
Efectivamente, tal como lo describe Lepe, lo mejor seria crear el form con el Qreport y sus variables, y si la llamada la haces desde un Tbutton puedes implementar algo como:

Código Delphi [-]
    if form1 = nil then  //Presumiendo que el form no esta creado
        begin
          dm.qDiario.DisableControls; // si vienen los datos de un Dataset
          form1:= tform1.Create(self); // de crea el form en runtime
          form1.QuickRep1.print; // mandas a imprimir directamente
          dm.qDiario.EnableControls;
          form1.Free; //destruye el form
          form1:= nil;
        end
      else
        begin
          form1.Free;
          form1:= nil;
        end;
__________________
if Vivir = Vivir + Aprender then Aprender = ?
Alfredo Borges
Responder Con Cita
  #9  
Antiguo 24-11-2007
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Ante todo gracias lepe y alfredo por las molestias
Cita:
Empezado por Alfredo Ver Mensaje
Efectivamente, tal como lo describe Lepe, lo mejor seria crear el form con el Qreport y sus variables, y si la llamada ...
No, esa solución no me vale porque tendría que declarar todos los OnPrint de los campos que utilizasen las variables (soy un vago, que le voy a hacer )

Cita:
Empezado por Lepe Ver Mensaje
Ya he tenido un poco más de tiempo con esto, no me gusta el estilo, pero bueno, si es lo que necesitas....

Que conste que no son "parámetros" como has visto, se incluye pagenumber, por tanto son funciones que debe interpretar QuickReport;
Código Delphi [-] uses qrExpr;

var pr:TqrEvResult;
// añadimos por código una función:
Quickreport1. functions.addFunction('piopio', quotedStr('mi gorrioncito canta pio pio'));
Quickreport1. functions.addFunction('unEntero', 25));
// si es un string, debes pasarlo con quotedStr, o el parser interno creerá que es una
//función de agregado (avg, sum, etc) o funciones interna dando excepciones 'Unknow function 'migorrioncito canta pio pio'.


También tienes DeleteFunction, y después de ejecutarla, asegúrate de llamar a functions.Prepare.

Saludos
Probaré con esto y ya os contaré.

Me parece que el problema que tenía era el Prepare que no lo estaba llamando

Abusando un poco de vuestra confianza

¿Donde puedo encontrar información para/como crear funciones de usuario en Report Manager?
Estoy pensando volverme a los orígenes

Saludos
Salvica
Responder Con Cita
  #10  
Antiguo 27-11-2007
Alfredo Alfredo is offline
Miembro
 
Registrado: nov 2003
Ubicación: Valencia, Venezuela
Posts: 234
Poder: 21
Alfredo Va por buen camino
Pues te pido por favor que si lo consigues, lo publiques aqui. Yo estoy muy interezado en el report manager. Le veo complicado de usar, pero creo que debe tener por donde entrarle. Actualmete estoy buscando la forma de controlar los eventos de impresión desde delphi, porque el constructor de expresiones lo encuentro muy limitado. Pero bueno esos son granos de otro costal....
__________________
if Vivir = Vivir + Aprender then Aprender = ?
Alfredo Borges
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
Parametros Out y Variables Delphi MySql RiverPlate MySQL 1 17-09-2006 15:45:11
Como añadir el contenido de una tabla a otra maravert Tablas planas 2 16-10-2005 04:04:40
Como añadir los skin al form? tramjauer Varios 8 10-10-2005 23:07:09
Como añadir un nuevo evento a un componente Javi2 Varios 6 20-12-2004 13:25:12
Como añadir un combo en un string grid? burasu Varios 2 08-05-2003 09:25:56


La franja horaria es GMT +2. Ahora son las 00:00:00.


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