Трех-звенка и отчеты, проблемы

отредактировано 12:52 Раздел: FastReport Studio
Я попробовал использовать FR в трех-звенке
Вот такая упрощенная схема получилась (потом можно оптимизировать через хранение отчетов в базе)

1) Клиент вызывает метод сервера, указывает отчет, который он хочет получить (по какому-то индексу)

2) Сервер по этому индексу определяет .fr3 файл и грузит его
pReport->LoadReportFromFile(...)

3) Затем сервер препарит отчет
pReport->PrepareReport(...)

4) И сохраняет препариный отчет в файл
pReport->SavePreparedReportToFile(...)

5) Создает стрим на этом файле и возвражает стрим клиенту
SHCreateStreamOnFile(...)

6) Клиент выкачивает по этому стриму препареный отчет и сохраняет его в файл

5) Затем грузит препаренный отчет и показывает его пользователю
pReport->LoadPreparedReportFromFile(...)
pReport->ShowPreparedReport()

?1) Для оптимизации можно использовать SavePreparedReportToStream(). Но у вас нет встречной функции LoadPreparedReportFromStream(). Хотелось бы ее заиметь.

?2) Большая беда случается в пункте 3., если в отчете есть формы. Сервер пытается отобразить эти формы... а это совсем не то что надо. Вот это действительно проблема.
Вам виднее как ее можно решить... мое предложение:

Сделать возможность на клиенте (без соединения с базой)... показать все формы... а потом сохранить отчет в файл(стрим) с ответами пользователей. У вас наверняка уже какие-то наработки есть... когда вы делали FastReportServer.

Хотелось бы такой последовательности действией:

pReport->LoadReportFromFile(...);
pReport->PrepareReportForms();
pReport->SaveFormsPreparedReportToFile(...);
...
pReport->LoadFormsPreparedReportFromFile(...);
pReport->PrepareReport(...); //тут уже никаких форм показываться не должно
pReport->SavePreparedReportToFile(...)
...
и т.д.

Итого: два мои вопроса этого поста выделены жирным цветом ;)

Комментарии

  • almanalman космополит
    отредактировано 12:52
    LMars написал:
    ?1) Для оптимизации можно использовать SavePreparedReportToStream(). Но у вас нет встречной функции LoadPreparedReportFromStream(). Хотелось бы ее заиметь.

    Метод LoadPreparedReportFromStream() есть у класса TfrxPreviewX.
    LMars написал:
    ?2) Большая беда случается в пункте 3., если в отчете есть формы. Сервер пытается отобразить эти формы... а это совсем не то что надо. Вот это действительно проблема.
    Вам виднее как ее можно решить... мое предложение:
    Я не могу сразу ответить на этот вопрос. Сервер действительно умеет показывать формы, скоее всего возможно портировать код оттуда.

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

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