PDA

Ver la Versión Completa : Problemas con Lazreport


santi33a
21-05-2012, 15:32:11
Hola a todos, con los primeros pasos en este reporteador me he encontrado con algunos problemas que me gustaría consultar con ustedes a ver que me podían decir.
según esta pagina
http://wiki.freepascal.org/Tutorial_de_LazReport

encontré que cualquiera de estos 2 códigos funcionan para pasarle un valor a una variable


procedure TForm1.frReport1GetValue(const ParName: String;
var ParValue: Varying; VAr fld: TField);
begin
// trata o caso de variáveis não dependentes
if UpperCase(ParName)=' TEST' then
ParValue:=' Answer: Variable " test1 " ';
end;

ó


procedure TForm1.Button1Click(Sender:TObject);
begin
frReport1.Values.FindVariable('test').Field := QuotedStr('test1');
frReport1.ShowReport;
end;

el caso es que la segunda variante no me funciona, me da Access violation, pensé usar esta variante para crear un solo componente TfrReport en mi aplicación y de esta forma en la medida de cual sea el informe necesario lo llamo desde un form que voy creando, pues cada informe tiene sus propias variables, de lo contrario tendría una lista algo grande de variables en dependencia de la cantidad de informes que al final tenga mi aplicación las cuales todas las tendría que gestionar desde el evento GetValue, o sino en cada form crear un TfrReport para cada informe, creen q ustedes que esta ultima variante sea la mas optima?

Y aprovechando el mismo hilo quería saber si es posible en tiempo de ejecución crear o modificar algun componente de un reporte?, algo así se puede hacer en Rave que es el que siempre he usado.
En Rave lo usaba así


procedure TFIAjuste.BitBtnAClick(Sender: TObject);
var
lRep: TRaveReport;
Pag : TRavePage;
s : string;
begin
with dmr do begin // este es un modulo de datos donde tengo las consultas para los informes
with piAjuste do begin
.
.
.
end;
with rv do begin // rv, es el componente TRvProject, que está en el modulo dmr
Open;
SelectReport(s,true);
Pag := ProjMan.FindRaveComponent(s+'.Page1',nil) as TRavePage; // s tiene el nombre del reporte
lRep := ProjMan.ActiveReport;
with TRaveText.Create(lRep) do
begin
Parent := Pag;
Text := 'Texto que quiero poner';
top := Pag.PageHeight - 0.3;
left := 0.3;
Rotation := 90;
Font.Size := 7;
end;
if RGConf.ItemIndex = 0 then begin
SetParam('Fecha','');
SetParam('Per','Desde ' + DateToStr(dtDesde.Date) +
' hasta el ' + DateToStr(dtHasta.Date));
end
else begin
SetParam('Fecha','sin confirmar');
SetParam('Per','');
end;
RvSystem1.SystemPrinter.Title := 'TMag_Ajustes';
Execute;
Close;
end;
end;
end;
end;


Como podré hacer algo de esto en Lazreport?

santi33a
22-05-2012, 16:18:00
Respondiéndome yo mismo, lo primero lo logré de esta forma

frvariables['casa'] := 'Valor de la variable casa';

y lo segundo


procedure TForm2.Button1Click(Sender: TObject);
var
v: TfrView;
Page: TfrPage;
begin
fr.LoadFromFile('11a.lrf');
Page := fr.Pages[0];
v := frCreateObject(gtMemo, ''); // create data field
v.SetBounds(20, 140, 200, 16);
v.Memo.Add('pepe');
Page.Objects.Add(v);
fr.ShowReport ;
end;

Espero le sirva a alguien

Ahora lo que si no he logrado si alguien sabe como podre visualizar el reporte desde la vista de diseño si le agrego a algun Memo el valor de una variable, me da error, la variable se llama casa por ejemplo


Santiago