Tutorial_es.odt

(14 KB) Pobierz

Tutorial de LazReport, variables locales  y StringGrid

 

Este tutorial intenta explicar cómo enviar variables locales y datos contenidos en un StringGrid a un reporte construido con LazReport en Lazarus.

Para enviar una variable local a un reporte LazReport, lo que debemos hacer es lo siguiente:

1)                  Crear una variable en LazReport y no asignarle ningún valor.

-                      Esto se hace a través del menú archivo > lista de variables > variables en LazReport

-                      Creamos una variable y no le asignamos ningún valor.

 

2)                  Configurar el evento  OnGetValue de nuestro TfrReport para que asigne el valor de nuestra variable local a su correspondiente variable en el reporte.

-                      Suponiendo  que nuestra variable local se llama var_local y nuestra variable en el reporte se llama var_reporte, en el evento OnGetValue escribimos:

 

If ParName = ‘var_reporte’ then

  ParValue := var_local;

 

Para enviar los datos de un StringGrid a LazReport, a diferencia de un DBGrid, debemos utilizar  un componente llamado TfruserDataset, el cual va a reflejar las filas de nuestro StringGrid para poder ser incluidas en el reporte. Lo que debemos hacer es lo siguiente:

1)                  Agregar  un TfrUserDataset a nuestro formulario y configurarlo en  la propiedad Dataset de nuestro TfrReport.

2)                  Crear una variable tipo longint cuyo alcance sea privada o pública al formulario con el que se está trabajando, por ejemplo FRow. Esta variable se utilizará para referenciar las distintas filas de nuestro StringGrid.

3)                  Luego hay que “dimensionar” nuestro TfruserDataset, lo cual haremos de la siguiente manera:

-                      Configuramos la cantidad de filas mediante el evento OnCheckEOF. Esto lo hacemos de la siguiente manera:

procedure TForm1.frUserDataSet1CheckEOF(Sender: TObject; var Eof: Boolean);

begin

   Eof := FRow > StringGrid1.RowCount - 1;

end;

-                      De esta forma indicamos la cantidad de filas. La propiedad RowCount de un StringGrid indica la cantidad de filas (le restamos 1 porque empieza a contar desde 0, osea que si tiene 5 filas estas serán la 0, la 1, la 2, la 3 y la 4).

4)                  Ahora hay que indicar desde que fila queremos que empiece. Generalmente la fila 0 es para los títulos de las columnas, asi que si este es el caso, empezaremos desde la fila 1.

-                      Configuramos el evento OnFirst de nuestro TfrUserDataSet de la siguiente manera:

procedure TForm1.frUserDataSet1First(Sender: TObject);

begin

  FRow := 1;

end;

-                      De esta forma indicamos que queremos que se empiece a partir de la fila 1 (dado el caso por ejemplo que en la fila 0 estén los títulos de las columnas).

5)                  Configuramos el evento OnNext del TfrUserDataSet:

  procedure TForm1.frUserDataSet1Next(Sender: TObject);

begin

   Inc(FRow);

end;

6)                  Con eso queda configurado el TfrUserDataSet. Ahora hay que preparar el TfrReport para recibir los datos.

-                      Dentro de nuestro reporte creamos una variable para cada campo de nuestro StringGrid que querramos incluir.

-                      En el reporte, agregamos una banda tipo Master Data, y agregamos los objetos rectangulares de texto según sea necesario, uno con cada una de las variables anteriormente creadas. Las acomodamos de forma que queden bonitas J

-                      Luego configuramos el evento OnGetValue (como explicamos en la primera parte de este tutorial) para asignar los campos de la StringGrid, aprovechando la propiedad Cells de la misma (primero la columna, luego la fila).

procedure TForm1.frReport1GetValue(const ParName: String; var ParValue: Variant

  );

begin

  if ParName = 'variable_1' then

    ParValue := StringGrid1.Cells[1, FRow];

   

  if ParName = 'variable_2' then

    ParValue := StringGrid1.Cells[2, FRow];

end; 

Básicamente con esto estamos listos. Acompañando este tutorial hay un pequeño ejemplo para demostrar lo explicado. Espero que a alguien le sea de alguna ayuda. Quien quiera por cualquier cosa puede escribirme a german.basisty@gmail.com

Saludos!

Zgłoś jeśli naruszono regulamin