Форма диалога.

отредактировано 14:24 Раздел: FastReport 3.0
вызывается окно с запросом параметров.

пользователь выбирает нужные параметры
нажимает кнопку Ок
отчет подготавливается появляется превью он что то делает с отчетом
говорит закрыть.
И вот тут он хочет снова попадать в диалог выбора параметров.

а так что все сразу закрывается.
как это сделать?

Комментарии

  • отредактировано 14:24
    А можно ситуацию описать?
  • отредактировано 14:24
    По идее,
    while True do
    frxReport1.ShowReport;
  • отредактировано 14:24
    Это конечно хороший способ, но мы вот например формируем Comboxы на форме из сложных query к SQL серверу, на которые тратится несколько секунд, после этого пользователь выбирает что-то, смотрит отчет, а потом вынужден опять ждать несколько секунд на загрузку, так почему не сделать режим, чтобы форма не закрывалась во время просмотра отчета, а лишь скрывалась, а потом не уничтожалась, а показывалась снова (я пытался сделать так в FR2.53, но мне это не удалось). Надеялся что в FR3 такая возможность появится, даже собирались сделать апгрейд, а потом поняли что этого не сделано.
    Посудите сами, не было ли это более удобно!!!???
    И еще один довольно существенный вопрос по формама в FR3: в FR2.5 формы показывались автономно, а в FR3 они показываются на форме Preview, не могу понять зачем это сделано, какой в этом смысл и как это изменить.

    Заранее спасибо за ответ.

    Керценбаум Кирилл, ООО "САМО-Софт"
  • отредактировано 14:24
    1) это, извините за штамп, в рамках нынешней концепции нереализуемо. Можете попробовать поменять исходники, но не думаю, что получится.
    2) сделайте TfrxReport.OldStyleProgress := True. Поведение при этом будет напоминать FR2.x.
  • отредактировано 14:24
    kirill2000 написал:
    Это конечно хороший способ, но мы вот например формируем Comboxы на форме из сложных query к SQL серверу, на которые тратится несколько секунд, после этого пользователь выбирает что-то, смотрит отчет, а потом вынужден опять ждать несколько секунд на загрузку, так почему не сделать режим, чтобы форма не закрывалась во время просмотра отчета, а лишь скрывалась, а потом не уничтожалась, а показывалась снова
    Это действительно так.
    при создании формы идут вычисления открытие разных справочников.
    выставляются параметры. Как правило и не один.

    Почему сразу все уничтожается после превью?
    Хочется снова вернутся в диалог.

    Как сделать? чтобы снова не происходила загрузка формы ???


  • отредактировано 14:24
    >>1) это, извините за штамп, в рамках нынешней концепции нереализуемо. ??>>Можете попробовать поменять исходники, но не думаю, что получится.

    За штамп конечно извиняю, но к сожалению это не ответ на вопрос, сами Вы не считаете что это было бы удобнее. Если нет, то какие аргументы, если да то почему же концепция такова, что это нереализуемо.

    >>2) сделайте TfrxReport.OldStyleProgress := True. Поведение при этом будет >>напоминать FR2.x.

    Хоть за это огромное спасибо.
  • отредактировано 14:24
    Так я не понял
    Это можно сделать как то?
    или же нет принципиально?
  • отредактировано 14:24
    Нет ну какие люди настырные ;) Вы же программисты и должны понимать, что если проект готов и оказывается, что для реализации какой то (пусть и полезной "фичи") необходимо пересмотреть всю концепцию (идеалогию) работы системы, то это как то не очень интересно ;) Вот когда, в результате эволюции, мы придем к НАСУЩНОЙ необходимости такой переделки - тогда и будет перелка. Но это будет уже Fast Report 4 ;)

    P.S. Это не критика. Так просто вспомнились некоторые запросы моих клиентов ;)
  • отредактировано 14:24
    Похоже ты с исходниками не разбирался.
    почитай на досуге.
    И потом будешь кричать на каждом углу.
  • отредактировано 14:24
    Konst написал:
    Похоже ты с исходниками не разбирался.
    почитай на досуге.
    И потом будешь кричать на каждом углу.
    С исходниами - да, глубоко не разбирался. К сожалению, нет времени. Тут бы сделать свою работу ;)
    А по поводу крика - так я и не кричу. Я даже на каждом шагу наставил смайликов и высказал свое предположение. К тому же, если бы все было так просто, ты бы и сам это сделал, а не кричал на каждом углу ;)
  • отредактировано 14:24
    Саша ответь можно это реализовать или нет?
  • отредактировано 14:24
    Я над этим подумаю. Теоретически можно все.
  • отредактировано 14:24
    AlexTZ написал:
    Я над этим подумаю. Теоретически можно все.
    Спасибо Александр.
    Действительно подумайте пожайлуста, ведь Вам проще это изменить, вы ведь это создали, мы тоже конечно можем, но это будет значительно сложнее и дольше.

    А вопрос действительно, по-моему мнению, очень актуален, ведь FastReport действительно обладает уникальной возможностью по созданию диалоговых форм, причем эта функциональность постоянно расширяется, но отсутствие возможности о который мы говорим сильно портит общую полезность от создания таких отчетов.
  • отредактировано 14:24
    Могу предложить интересное решение вопроса ;)

    1. делаем 2 пользовательские функции: SaveData, LoadData в FR скрипте
    2. Эти пользовательские функции должны сохранять/загружать данные в программе. Ну или можно просто передавать стрнг.....
    3. В форме на событие о начале генерации отчета вешаем функцию LoadData и пишем десерилизацию формы
    4. На клик по кнопке ОК пишем серилизацию формы и функцию SaveData
    5.
    while True do
    frxReport1.ShowReport;
    работает.....

    Все работает, никакую концепцию менять не надо и т.д. ;)

    работы от силы на пару часов с пивом ;)
  • отредактировано 14:24
    Oleg_m написал:
    Могу предложить интересное решение вопроса ;)

    1. делаем 2 пользовательские функции: SaveData, LoadData в FR скрипте
    2. Эти пользовательские функции должны сохранять/загружать данные в программе. Ну или можно просто передавать стрнг.....
    3. В форме на событие о начале генерации отчета вешаем функцию LoadData и пишем десерилизацию формы
    4. На клик по кнопке ОК пишем серилизацию формы и функцию SaveData
    5.
    while True do
    frxReport1.ShowReport;
    работает.....

    Все работает, никакую концепцию менять не надо и т.д. ;)

    работы от силы на пару часов с пивом ;)
    Интересно, а как вы предлагаете запоминать те таблицы, которые вернули SQL запросы, чтобы их снова не запускать
  • отредактировано 14:24
    А можно поподробнее про пп. 3-4
  • отредактировано 14:24
    Сильно сложно.

    ИМНО нужно просто флаг у формы не закрывать диалог после построения отчета.

    А так на каждый отчет вешать обработчики.. если отчетов больше 200....
  • отредактировано 14:24
    AlexTZ написал:
    Я над этим подумаю. Теоретически можно все.
    Александр, Вы обещали подумать. Что-нибудь конкретное уже можно сказать.
    Извините за назойливость, но это действительно очень важно.
    Спасибо.
  • отредактировано 14:24
    В 3.07 есть новое св-во Report.EngineOptions.DestroyForms. Оно по умолчанию True. Если его перед построением отчета поставить в False, то FR не будет делать запись/восстановление отчета во временный поток, и после построения отчета все формы сохранят свое последнее состояние. Т.е. если теперь сделать

    while True do
    frxReport1.ShowReport

    то ничего пересоздаваться и обнуляться не будет.
  • отредактировано 14:24
    AlexTZ написал:
    В 3.07 есть новое св-во Report.EngineOptions.DestroyForms. Оно по умолчанию True. Если его перед построением отчета поставить в False, то FR не будет делать запись/восстановление отчета во временный поток, и после построения отчета все формы сохранят свое последнее состояние. Т.е. если теперь сделать

    while True do
    frxReport1.ShowReport

    то ничего пересоздаваться и обнуляться не будет.
    Спасибо. Все хорошо, только как отловить нажатие кнопки Cancel, чтобы тогда форма закрылась.
  • отредактировано 14:24
    while True do
    if frxReport1.PrepareReport then
    frxReport1.ShowPreparedReport
    else
    break;
  • отредактировано 14:24
    AlexTZ написал:
    while True do
    if frxReport1.PrepareReport then
    frxReport1.ShowPreparedReport
    else
    break;
    Большое человеческое спасибо.
  • отредактировано 14:24
    Но когда в отчете нет форм, тогда он просто зацикливается
  • отредактировано 14:24
    Ну, такие отчеты, видимо, не стоит запускать вышеописанным способом ;)
  • отредактировано 14:24
    AlexTZ написал:
    Ну, такие отчеты, видимо, не стоит запускать вышеописанным способом ;)
    Дело в том что в нашей системе существует отдельный глобальный компонент FRReport и отчеты берутся из базы из BLOB и какой он будет естественно никто не знает (пока это все реализовано на FR 2.53, обновление на 3 версию мы купили, а вот как на нее перейти пока не знаем, постоянно сталкиваемся с разными проблемами в FR3)

    Еще не совсем понятно, насколько я понял все наоборот с DestroyForms если оно True, то формы не уничтожаются, а если False, то уничтожаются, хотя особой разницы я не заметил, при вышеописанном способе повтора отчета форма показывается еще раз и так и так, и все скрипты которые на форме и на отчете повторяются из раза в раз ( а как раз на Form Activate) висит Query.Open, который выполняется достаточно долго каждый раз

    Так что к сожадению практического смысла в этой функции пока не вижу, или может быть опишете другой способ ее использования

    Заранее спасибо
  • отредактировано 14:24
    Что мешает завести переменную и анализировать ее в скрипте? После первого запуска отчета переменную надо выставить в False. Что-то типа:

    frxReport1.Variables := True;
    while True do
    if frxReport1.PrepareReport then
    begin
    frxReport1.ShowPreparedReport
    frxReport1.Variables := False;
    end
    else
    break;

  • отредактировано 14:24
    AlexTZ написал:
    Что мешает завести переменную и анализировать ее в скрипте? После первого запуска отчета переменную надо выставить в False. Что-то типа:

    frxReport1.Variables := True;
    while True do
    if frxReport1.PrepareReport then
    begin
    frxReport1.ShowPreparedReport
    frxReport1.Variables := False;
    end
    else
    break;
    Может я делаю что-то не так, но ничего не получается:

    procedure frxReport1OnStartReport(Sender: TfrxComponent);
    begin
    if <firstcall> = True then
    begin
    query1.Open;
    query2.Open;
    end;
    end;

    Запросы прекрасно открываются первый раз, потом я что-то выбираю из комбобоксов, нажимаю OK, формируется отчет, я его закрываю, и вижу форму снова, но комбобоксы пустые, потому что запросы закрылись и FirstCall = False

    Пробую и при свойстве DestroyForms равное True и False.

    Что я делаю не так???
  • отредактировано 14:24
    Жаль что тема так и осталась без ответа
  • отредактировано 14:24
    В 3.08 я добавлю внутренним датасетам св-во CloseDataSource. Сейчас оно True и датасеты после окончания отчета закрываются.
  • отредактировано 14:24
    AlexTZ написал:
    В 3.08 я добавлю внутренним датасетам св-во CloseDataSource. Сейчас оно True и датасеты после окончания отчета закрываются.
    Спасибо

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

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