Переход с версии 2.х на 4.х

отредактировано 23:31 Раздел: FastReport 4.0
Добрый день!

Подскажите. возможно кто-то уже сталкивался со следующей проблемой.
Был осуществелен переход с версии FastReport 2.7 на 4.0, а далее на 4.7.9.

Для конвертации отчетов использован был модуль frx2xto30, правда взят он был от 3 версии.
В принципе с помощью бубна все отчеты заработали под 4 версией. но я так понима модуль frx2xto30 более не нужен, он использовался для преобразования.

Но при его отключении в некоторые отчеты перестают работать. Выдается сообщение "Неопределенный идентификатор (имя переменной) "
Во переменных отчета эта переменная может быть не объявлена вообще (т.к. переменные создаются программно). В старой версии эта переменная просто заполнялась пустым значением.

Или в коде программы используется переменная, которая ранее не была объявлена.

Собственно вопрос вот в чем: нужен ли модуль frx2xto30 после конвертации отчетов для их работы и какие еще проблеиы есть кроме этой.

Комментарии

  • отредактировано 23:31
    Модуль frx2xto30 нужен только для конвертации отчетов, из проекта его лучше исключить.
    Отчеты работают потому, что модуль использует свою обработку события OnGetValue и для всех переменных которые не определены в отчете, возвращает пустое значение.
    Это может в дальнейшем привести к проблемам в рабочих отчетах, и будет сложно определить ошибку.
  • отредактировано 23:31
    А как это лечить?

    Отключил модуль. Создал обработчик события OnGetValue
    procedure TSPReportDM.frxReport1GetValue(const VarName: String;
      var Value: Variant);
    begin
      Value := VarName +' = Unknown';
    end;
    

    Выдается ошибка: Identifier expected; До процедуры даже не доходит.
  • отредактировано 23:31
    Zoran написал: »
    А как это лечить?

    Отключил модуль. Создал обработчик события OnGetValue
    procedure TSPReportDM.frxReport1GetValue(const VarName: String;
      var Value: Variant);
    begin
      Value := VarName +' = Unknown';
    end;
    

    Выдается ошибка: Identifier expected; До процедуры даже не доходит.
  • отредактировано 23:31
    Zoran написал: »
    А как это лечить?

    Отключил модуль. Создал обработчик события OnGetValue
    procedure TSPReportDM.frxReport1GetValue(const VarName: String;
      var Value: Variant);
    begin
      Value := VarName +' = Unknown';
    end;
    

    Выдается ошибка: Identifier expected; До процедуры даже не доходит.

    В скрипте onGetValue не срабатывает.
    То что раньше в двойке было как Имя_переменной_отчета , теперь должно быть как <Имя_переменной_отчета>.
    Конвертер же создает функции в скрипте с аналогичными именами, чтобы можно было обращаться к ним без <>.
    Посмотрите на функцию DoPrepareScript в Frx2xto30.pas ю
  • отредактировано 23:31
    написал: »
    В скрипте onGetValue не срабатывает.
    То что раньше в двойке было как Имя_переменной_отчета , теперь должно быть как <Имя_переменной_отчета>.
    Конвертер же создает функции в скрипте с аналогичными именами, чтобы можно было обращаться к ним без <>.
    Посмотрите на функцию DoPrepareScript в Frx2xto30.pas ю

    Уже смотрел.
    Вопрос был не в этом! Проблема в том, что переменная может быть не определена в массиве frxReport.Variable. И тогда выскакивает окно, что переменная отсуствует. Раньше если переменная отсутствует, тогда просто это значение заполняется пустой строкой. Мне так и надо.

    В конечном итоге мне удалось переопределить событие OnGetValue, но в итоге отвалились значения в функцией SUM
    procedure TSPReportDM.frxReport1GetValue(const VarName: string;
      var Value: Variant);
    var
      Index: integer;
      VName: string;
    begin
      if AnsiStartsText('<', VarName) and AnsiEndsText('>', VarName) then
      begin
        VName := Copy(VarName, 2, Length(VarName) - 2);
        Index := frxReport1.Variables.IndexOf(VName);
        if Index = -1 then
          Value := ''
        else
        begin
          Value := frxReport1.Variables.Items[Index].Value
        end;
      end
      else
        inherited;
    
    end;
    

    Т.е. теперь если переменная не определена, то вместо нее подставляется пустая строка, но объекты, в которых задано например "[SUM(<_frBC_OrderPrint."NETTO_OUT">,MasterData1)]" - пустые, хотя если эту функцию убрать - то все работает.
  • отредактировано 23:31
    Заработало.

    событие GetValue не использовал.
    Переменные, на которые выдавалось сообщение об их отсутствии, объявили в коде в области VAR.

    В принципе такое решение тоже устраивает.

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

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