Сохранение результатов отчета

отредактировано 16:36 Раздел: FastReport 3.0
Доброго вечера,

Возможно ли сохранить результаты, текстового отчета в файл, из скрипта!!! , не используя меню.

Комментарии

  • отредактировано 16:36
    1. Из скрипта это ты имеешь в виду FastScript?
    2. Не используя меню экспорта?
  • отредактировано October 2005
    _Maxx_ написал:
    1. Из скрипта это ты имеешь в виду FastScript?
    2. Не используя меню экспорта?
    Именно это и имел в виду, смысл сформировать сопроводительный текстовый файл, пока вижу один выход: формировать ручками стринг и сохранять его,

    а хотелось бы автоматически сформировать ему имя и слить на диск по результатам, которые выводятся на экран Preview.

    Или еще вариант, как получить ссылку на экземпляр текущего класса TfrxReport из скрипта?
  • отредактировано October 2005
    Чтобы это сделать надо понять какие объекты у тебя есть. Как узнать какие объекты есть, я так и не понял. Знаю что есть Engine и есть те объекты, которые ты создал на страницах и формах. А вот страницы передварительного просмотра, сам отчет и т.д. - не знаю как найти. В доке вроде не написано. Господа, разработчики, помогите! Как узнать какие объекты есть в системе, кроме Engine?

    Или как вариант (теоритически) можно сделать следующее: завести переменную объекта, у которого можно вызвать соответсвующий метод. Поиск в руководстве пользователя, разработчика по слову Export результатов не дал. А вот в руководстве программиста есть соответсвующий метод у объекта типа TfrxReport. Так и называется Export
    написал:
    procedure Export(Filter: TfrxCustomExportFilter)
    Экспортирует отчет, используя данный фильтр экспорта.
    В общем надежда есть, но только как получить объект отчета в FastScript (и соответсвенно фильтры?)

    Как вариант решения этого вижу, создание внешней функции, которая будет возвращать соответсвующую переменную (то есть программно из приложения добавляешь функцию GetReport: TfrxReport). Затем ее вызываешь. Но такую функцию мне создать не удалось, поскольку CallMethod всегда возвращает Variant.
    написал:
    TfsCallMethodEvent = function(Instance: TObject; ClassType: TClass;
        const MethodName: String; var Params: Variant): Variant of object;

    Хотя по крайней мере на этапе проверки такой скрипт проходит:
    var
     aaa: TfrxReport;
     a: integer;
    begin
      aaa.Export11();
      a = 4;
    end.
    
    В общем учитывая ошибку в последжней строки, синтаксический аналзи проходит на Export11(). Похоже, не решить задачу таким образом. Попробовал, использовать Report.Export, Report - Видно, а метод нет!

    Может разработчики подскажут! ;)
  • отредактировано 16:36
    В общем я туплю конкретно после второго дня плотной работы с FR. Так вот, можно написать метод в программе и из FastScript его вызывать! Я такое делал уже. Поэтому и экпорт можно делать как угодно. Вот оно решение твоей проблемы.

    P.S. Как писать такие методы почитай в доке.
  • отредактировано 16:36
    Спасибо за мысли, реализовал так:

    В делфи:


    AddMethod('procedure ExportToTxt(AReport:TFrxReport; AFileName : String; isOEMCodepage : Boolean)', SetScriptValue);

    procedure ExportToTxt(ReportObj : TfrxReport; AFileName : String; isOEMCodepage : Boolean);
    var
    ExportFilter : TfrxDotMatrixExport;
    begin
    ExportFilter := TfrxDotMatrixExport.Create(nil);
    with ExportFilter do
    try
    OEMConvert := isOEMCodepage;
    FileName := AFileName;
    ExportFilter.SaveToFile := True;
    ShowDialog := False;
    ReportObj.Preview.Lock;
    ReportObj.Export(ExportFilter);
    ReportObj.Preview.Unlock;
    finally
    FreeAndNil(ExportFilter);
    end;
    end;

    function TFunctions.SetScriptValue(Instance: TObject; ClassType: TClass;
    const MethodName: string; var Params : Variant) : Variant;
    begin
    if MethodName = 'EXPORTTOTXT' then
    begin
    assert(VarIsArray(Params));
    assert((VarArrayDimCount(Params) = 1));
    assert((VarArrayLowBound(Params, 1) = 0));
    assert((VarArrayHighBound(Params, 1) = 2));
    ExportToTxt(TfrxReport(integer(Params[0])), Params[1], Params[2]);
    end;
    end;

    В отчете:

    procedure OnStopReport(Sender: TfrxComponent);
    begin
    if ACreateFiles then
    begin
    s := 'C:\tmp\aaa.txt';

    ExportToTxt(TfrxReport(Report), s, true);
    end;
    end;

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

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