Проблема с глобальной переменной

отредактировано 20:48 Раздел: FastReport 3.0
Инициализирую переменную в основной части скрипта (главный begin end). Переменная объявлена в части var. При обращении к этой переменной в обработчике события BeforePrint выясняется, что она уже равна 0. Пробовал передавать через глобальные перменные отчета - возвращает ерунду. Даже через текст объекта Memo пробовал - не инициализируется. Хелп!

Комментарии

  • отредактировано 20:48
    В коде отчета

    var
    i: integer;

    begin
    i := 89;
    ShowMessage(i);
    end.

    Результат - окошо с 89. В чем проблемы не понимаю?
  • отредактировано 20:48
    Или вот так

    var
    i: integer;

    procedure Page1OnBeforePrint(Sender: TfrxComponent);
    begin
    Memo1.Text := IntToStr(i);
    end;

    begin
    i := 89;
    ShowMessage(i);
    end.

    В мемосе текст печатается, окошко выскакивает - чего еще?
  • отредактировано 20:48
    Azrael написал:
    Или вот так

    var
    i: integer;

    procedure Page1OnBeforePrint(Sender: TfrxComponent);
    begin
    Memo1.Text := IntToStr(i);
    end;

    begin
    i := 89;
    ShowMessage(i);
    end.

    В мемосе текст печатается, окошко выскакивает - чего еще?
    К сожалению, выполнение основного блока нелинейно и управляется из Дельфей.

    begin
    if not BlockScript then begin
    I := 89;
    end;
    end;

    BlockScript = false во время подготовки данных, но перед самим выводом отчета пробивается значением true. Инициализаровать переменную ВНЕ блока if then я не могу.
  • отредактировано 20:48
    Ау, спецы ! Неужели не решаемо ?
  • gpigpi
    отредактировано 20:48
    написал:
    BlockScript = false во время подготовки данных, но перед самим выводом отчета пробивается значением true. Инициализаровать переменную ВНЕ блока if then я не могу.
    Поподробнее можно? Где именно не инициализируется переменная? В чём отличия подготовки данных от вывода отчёта? Неплохо было бы рассмотреть проблему на примере тестового проекта.
  • отредактировано 20:48
    gpi написал:
    Поподробнее можно? Где именно не инициализируется переменная? В чём отличия подготовки данных от вывода отчёта? Неплохо было бы рассмотреть проблему на примере тестового проекта.
    Суть в том, что переменная BlockScript (на самом деле, встроенная через AddMetod булевая ф-я) управляет из Дельфей тем, то блок внутри ее выполняется только при загрузке отчета из файла. При вызове ShowReport основной блок скрипта отчета выполняется еще раз, но, так как ф-я BlockScript запрещает к этому моменту выполнение этого блока, то он и не выполняется. Но внутренние переменные отчета обнуляются. В этом и проблема. (Использую Fast Report 3.17)
  • отредактировано 20:48
    Ув. FR Team и знатоки ! Может все же кто-т опотратит 5 (пять) минут времени и ответит на вопрос ?
  • gpigpi
    отредактировано 20:48
    написал:
    Суть в том, что переменная BlockScript (на самом деле, встроенная через AddMetod булевая ф-я) управляет из Дельфей тем, то блок внутри ее выполняется только при загрузке отчета из файла.
    При загрузке отчёта из файла, скрипт отчёта не выполняется. Если после загрузки отчёта выполняется PrepareReport, то потом нужно использовать ShowPreparedReport, а не ShowReport. ShowReport заново строит отчёт. А при использовании ShowPreparedReport скрипт повторно выполняться не будет.
    frxReport1.LoadFromFile('filename');
    frxReport1.PrepareReport();
    //здесь выполняется ещё что-то
    //вообще, к скриптовой переменной можно добраться и так
    //frxReport1.Script.Variables['i']:=89;
    frxReport1.ShowPreparedReport();
    
    Если я неправилино понял проблему, приведите фрагмент кода программы, начиная с LoadFromFile до ShowReport
  • отредактировано April 2006
    ОГРОМНОЕ спасибо, Вы нас очень выручили, все заработало !

    Может подскажите еще ?


    1. Как динамично в скрипте отчета по условию из Дельфей сбросить DataSet у MasterData и сделать невидимыми GroupHeader и GroupFooter?

    Такой кусок не прокатывает:

    procedure ReportTitle1OnBeforePrint(Sender: TfrxComponent);
    begin
    if RecordCount = 0 then Begin {RecordCount - встроенная ф-я из Дельфей}
    MasterData1.DataSet := nil;
    MasterData1.RowCount := 1;
    GroupHeader1.Visible := False;
    GroupFooter1.Visible := False;
    end;
    end;


    2. В чем разница между

    frReport.Variables.AddVariable (aGroupName, AvariableName, aValue);

    и

    fsGlobalUnit.Variables[AvariableName] := aValue;

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

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