передача параметров из репорта в код

отредактировано 01:51 Раздел: FastReport 3.0
Доброго времени суток!
Не подскажете ли, уважаемые, как енто сделать?
Вот из кода в репорт все идет нормально, а из репорта в код - ну никак не получается.
Как делаю:

в репорте Variable myvar описана
в скрипте: set('myvar',''''+'proba'+'''');
в коде: kkk:=frxReport1.Variables; где kkk:string; - возвращаемое значение - null


Кто что скажет?

Комментарии

  • gpigpi
    отредактировано 01:51
    Попробуйте через скриптовую переменную или передайте значение переменной в качестве параметра пользовательской функции
  • отредактировано 01:51
    ч/з скриптовую тоже пробовал - не выходит.
    а вот польз.функции еще не юзал - а можно примерчик если не трудно?
  • gpigpi
    отредактировано 01:51
    Использование скриптовой переменной:
    в скрипте
    var myvar: string;
    
    procedure Memo1OnBeforePrint(Sender: TfrxComponent);
    begin
         myvar:='proba';
    end;
    
    в программе
         frxReport1.ShowReport();
         Label1.Caption:=frxReport1.Script.Variables['myvar'];
    
    Пользовательская функция:
    в программе
    procedure TForm1.Button1Click(Sender: TObject);
    begin
         frxReport1.AddFunction('function MyFunct(str: String)','My Functions');
         frxReport1.ShowReport();
    end;
    
    function TForm1.frxReport1UserFunction(const MethodName: String;
      var Params: Variant): Variant;
    begin
         if MethodName='MYFUNCT' then Label1.Caption:=Params[0];
    end;
    
    в скрипте:
    procedure Memo1OnBeforePrint(Sender: TfrxComponent);
    begin
         MyFunct('proba');
    end;
    
  • отредактировано 01:51
    ОООгромное спасибо!

    ЗЫ:уж не помню как я делал, но у меня не получалось...
  • отредактировано 01:51
    caca написал:
    Не получается тоже самое если объект создаётся динамически.

    FR:=TfrxReport.Create(Application);
    FR.OnUserFunction:=Form1.frxReport1UserFunction;
    FR.AddFunction('procedure MYPROC(str:String)');

    при этом в процедура обработчика даже не вызывается.

    function TForm1.frxReport1UserFunction(const MethodName: String;
    var Params: Variant): Variant;
    begin
    if MethodName='MYPROC' then Label17.Caption:=Params[0];
    end;


    Но если сделать тоже самое поместив компанент на форму то проходит на ура.

    МОжет быть кто то сталкивался с подобным или я в чём то ошибаюсь...
  • gpigpi
    отредактировано 01:51
    Попробуйте
    FR:=TfrxReport.Create(Form1);
    
  • отредактировано 01:51
    а как передать переменную из кода в отчет, если отчет генерируется в frxReportServer?
  • отредактировано 01:51
    gpi написал:
    Попробуйте
    FR:=TfrxReport.Create(Form1);
    
    Прошу прощеняи за неточность, таким образом всё равботает. У меня проблема вознивает если код аткой:

    procedure TForm1.TCPSExecute(AThread: TIdPeerThread);
    FR:TfrxReport;
    begin

    with AThread.Connection do
    try
    INC(SesCount);
    FR:=TfrxReport.Create(Form1);
    FR.OnUserFunction:=frxReport1UserFunction;
    FR.AddFunction('procedure MYPROC(str:String)');

    ....

    В данном случа вроди бы обработчик переназначается, но когда происходит событие, обработчик не вызывается. ПО всей видимости это связано с тем что объекты создаются внутри потока...

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.