Вопросы по Fastreport.net

1246

Комментарии

  • отредактировано 20:07
    Лично меня на Windows сейчас удерживает только ваша FastrReport Studio, потому как приличной альтернативы генератора отчетов в Linux пока нет.
    И на мой взгляд портирование FastrReport.NET под Linux заметно прибавило бы Вам сторонников.

    PS
    А под Wine c FastrReport.NET как нибудь пристроиться можно?
  • отредактировано 20:07
    Под wine - а почему бы и нет? Думаю, никаких проблем быть не должно.
  • отредактировано 20:07
    А можно на одном рабочем месте устанавливать FastReport Studio и FastReport.NET?
    Конфликтов не будет?
  • отредактировано 20:07
    Не должно быть - это разные технологии (COM и NET).
  • ShtirlizShtirliz Москва
    отредактировано 20:07
    Вот назрел вопрос...
    А можно ли отключить показ окон прогресса при формировании и печати?
    Чего-то не нашёл я такого или конец дня просто :)
  • отредактировано 20:07
    Config.ReportSettings.ShowProgress?
    или в компоненте EnvironmentSettings (что в toolbox)
  • отредактировано November 2008
    Возможно ли в отчете динамически создаваемый источник данных (в скрипте отчета) привязывать к DataBand, если да, то как?
  • отредактировано November 2008
    По идее, так: DataBand1.DataSource = your_ds
  • отредактировано November 2008
    Так и делаю:
    private void _StartReport(object sender, EventArgs e)
        {
          DataSet ds;
          ... // инициализация и заполнение датасета      
          string tablename = ds.Tables[0].TableName;
          Report.RegisterData(ds, tablename);
          
          DataSourceBase data = Report.GetDataSource(tablename);
          data.Init();
          // источник данных получен и заполнен
          
          MessageBox.Show(string.Format("Количество записей: {0}", data == null ? "null" : data.Rows.Count.ToString())); 
          // записи есть
          
          // настройка DataBand
          Text2.Text = "[LIB.ID]";
          Text6.Text = "[LIB.NAME]";
          Text2.Style = "Data";
          Text6.Style = "Data";
          Text2.AllowExpressions = true;
          Text6.AllowExpressions = true;
          
          Data1.DataSource = data;
        }
    

    При вызове у отчета Show() происходит NullReferenceException при отображении страницы (Page1_StartPage вызывается, Page1_FinishPage нет), как я понял из-за Expressions (если их установить в false, то отчет запускается, но вместо значений понятно выводится [LIB.ID] и т.д.), вот Stacktrace:
    System.NullReferenceException
    
       в Jkx988NdoxWVIeuRN9.At0kTA9mGyd4yUOyiH.xZ5qbk7ou(String , Variant )
       в FastReport.Report.Calc(String expression, Variant value)
       в FastReport.Report.Calc(String expression)
       в FastReport.TextObject.GetData()
       в FastReport.BandBase.GetData()
       в FastReport.Engine.ReportEngine.d40BD3knN(BandBase , Boolean )
       в FastReport.Engine.ReportEngine.w2RtIR95Y(BandBase , Boolean )
       в FastReport.Engine.ReportEngine.LKocUVRPb(BandBase , Boolean )
       в FastReport.Engine.ReportEngine.ShowBand(BandBase band)
       в FastReport.Engine.ReportEngine.36wsBZuvY(DataBand , Int32 )
       в FastReport.Engine.ReportEngine.2e07cSDx9(DataBand , Int32 , Boolean , Boolean , Boolean )
       в FastReport.Engine.ReportEngine.HtFxbZ4a7(DataBand )
       в FastReport.Engine.ReportEngine.B5wCdeZy6D(BandCollection )
       в FastReport.Engine.ReportEngine.0KZCAhFm6j(ReportPage )
       в FastReport.Engine.ReportEngine.YDNCNSOJYw()
       в FastReport.Engine.ReportEngine.n8N0KslUb(Boolean , Boolean , ReportPage )
       в FastReport.Engine.ReportEngine.BjEUJA1T0(Boolean , Boolean )
       в FastReport.Report.Prepare(Boolean append)
       в FastReport.Report.Prepare()
       в FastReport.Report.Show()
    
  • отредактировано 20:07
    Проверил только что.
        private void _StartReport(object sender, EventArgs e)
        {
          DataSet ds = new DataSet();
          ds.ReadXml(@"d:\fr.net\demos\reports\nwind.xml");
    
          string tablename = ds.Tables[0].TableName;
          Report.RegisterData(ds);
    
          DataSourceBase data = Report.GetDataSource(tablename);
          data.Init();
    
          MessageBox.Show(string.Format("Количество записей: {0}", data == null ? "null" : data.Rows.Count.ToString()));
    
          Text1.Text = "[Categories.CategoryName]";
          Text2.Text = "[Categories.Description]";
          
          Data1.DataSource = data;
        }
    

    Report.RegisterData(ds) - регистрация всего датасета. Если нужна только одна таблица, надо делать так:
    Report.RegisterData(ds.Tables[0], tablename);

  • отредактировано 20:07
    Привет!

    Как показать превью отчета в MDI окне, но каждое новое построение отчета надо показывать в новом MDI окне?
    Да и еще - как заголовок окна присвоить для каждого такого MDI првью?

    P.S.
    До релиза еще далеко?
  • отредактировано 20:07
    Очень просто - при одном условии: один Report - одно окно:
          Report report = new Report();
          report.Load(...);
          report.Prepare();
          report.ShowPrepared(false, parent_Mdi_form);
    

    С релизом решили не торопиться. У меня пока есть претензии к асп-части.
  • отредактировано 20:07
    AlexTZ написал: »
    Проверил только что.
        private void _StartReport(object sender, EventArgs e)
        {
          DataSet ds = new DataSet();
          ds.ReadXml(@"d:\fr.net\demos\reports\nwind.xml");
    
          string tablename = ds.Tables[0].TableName;
          Report.RegisterData(ds);
    
          DataSourceBase data = Report.GetDataSource(tablename);
          data.Init();
    
          MessageBox.Show(string.Format("Количество записей: {0}", data == null ? "null" : data.Rows.Count.ToString()));
    
          Text1.Text = "[Categories.CategoryName]";
          Text2.Text = "[Categories.Description]";
          
          Data1.DataSource = data;
        }
    

    Report.RegisterData(ds) - регистрация всего датасета. Если нужна только одна таблица, надо делать так:
    Report.RegisterData(ds.Tables[0], tablename);

    Создаю новый отчет, кидаю на Data1 Text1 и Text2 (источник данных вручную не добавляю), в обработчике _StartReport пишу код, при запуске выводится сообщение "Количество записей: 8", затем NullReferenceException, StackTrace:
    в wjejkqAoQKeOnkA63h.E4NMk9c3f0MQ0yyQvH.5hDOKY1yt(String , Variant )
       в FastReport.Report.CalcExpression(String expression, Variant value)
       в FastReport.Report.Calc(String expression, Variant value)
       в FastReport.Report.Calc(String expression)
       в FastReport.TextObject.GetData()
       в FastReport.BandBase.GetData()
       в FastReport.Engine.ReportEngine.yjG24bPJQ(BandBase , Boolean )
       в FastReport.Engine.ReportEngine.CkSeMcTVl(BandBase , Boolean )
       в FastReport.Engine.ReportEngine.DI0PG8MgT(BandBase , Boolean )
       в FastReport.Engine.ReportEngine.ShowBand(BandBase band)
       в FastReport.Engine.ReportEngine.O35SH6Uhg(DataBand , Int32 )
       в FastReport.Engine.ReportEngine.Upr8C3FFZ(DataBand , Int32 , Boolean , Boolean , Boolean )
       в FastReport.Engine.ReportEngine.BbKFrq7ew(DataBand )
       в FastReport.Engine.ReportEngine.UdIsQk0Byu(BandCollection )
       в FastReport.Engine.ReportEngine.XXysa2U601(ReportPage )
       в FastReport.Engine.ReportEngine.96as7CQBf0()
       в FastReport.Engine.ReportEngine.d55vj5ytf(Boolean , Boolean , ReportPage )
       в FastReport.Engine.ReportEngine.2RUYGnQLo(Boolean , Boolean )
       в FastReport.Report.Prepare(Boolean append)
       в FastReport.Report.Prepare()
       в FastReport.Report.Show()
    

    Прикладываю пример.
  • отредактировано 20:07
    AlexTZ написал: »
    Очень просто - при одном условии: один Report - одно окно:
          Report report = new Report();
          report.Load(...);
          report.Prepare();
          report.ShowPrepared(false, parent_Mdi_form);
    

    А как насчёт заголовка для каждого окна? Как его присвоить?
    Мне надо что б каждое превью называлось по разному.
  • отредактировано November 2008
    Да, забыл...

    report.ReportInfo.Name = "...";
    report.ShowPrepared(...)

    либо так:

    Config.PreviewSettings.Text = "...";
    report.ShowPrepared(...)
  • отредактировано 20:07
    Voyager написал: »
    Создаю новый отчет, кидаю на Data1 Text1 и Text2 (источник данных вручную не добавляю), в обработчике _StartReport пишу код, при запуске выводится сообщение "Количество записей: 8", затем NullReferenceException, StackTrace:

    Вроде поправил. Новая версия соберется в полночь.
    Хоть такая возможность и предусмотрена, динамически строить отчет нежелательно. При запуске он будет скомпилирован дважды (первый раз - компиляция исходного кода отчета, второй - компиляция выражений, которые были добавлены в коде). Это лишние задержки, да и в medium trust работать не будет (если захотите работать с ASP).
  • отредактировано 20:07
    Да и еще: свойство Text у MDI формы проставляется всюду одинаковое "PreviewControl", а не тот заголовок что устанавливается через
    report.ReportInfo.Name = "...";
  • отредактировано 20:07
    Если делать так, то заголовок будет "... - Предварительный просмотр":
          Report report = new Report();
          report.Prepare();
          report.ReportInfo.Name = "...";
          report.ShowPrepared(false, this);
    

    Если вместо report.ReportInfo.Name = "..." сделать Config.PreviewSettings.Text = "...", то будет показано многоточие.
  • отредактировано 20:07
    Здравствуйте!

    Где можно просмотреть информацию о правилах именования источников данных? Сейчас, если в наименовании источника данных встречается точка, например "Таблица.1", то обращение к полям в отчете вызывает ошибку ("[Таблица.1.NAME]"), как я понимаю, выражение разбирается по первой точке и данная ситуация исправляется только использованием алиасов (которые не должны включать в себя точку)?

  • отредактировано 20:07
    Здравствуйте,

    В документации этого нет, нужно будет добавить.
    В имени источника данных точка не допускается. Она может быть только в имени поля, при этом поле будет считаться составным и отображаться в виде дерева.
  • отредактировано 20:07
    Здравствуйте.
    Мы пользуемся BCB2007 + FastReport.VCL но в рамках нового проекта собираемся использовать FastReport.NET.

    Нужно сделать сервер отчетов.
    Все как обычно - шаблоны в БД, SQL-запросы там же.
    Интерфейс к серверу - WEB Services. Клиентская часть - веб-браузер (не .ASP). Соответственно, отображать и печатать нужно не стредствами FastReport а будем использовать экспорт.
    У меня вопросы по экспорту:
    1. Очень нужна возможность экспорта в текстовый формат, пригодный для печати на матричные принтера (типа DotMatrixExport) или как в VCL.
    Ну очень много у нас таких принтеров :)
    Вы планируете экспорт в текст. Можно ли будет его ипользовать для печати на матричных принтерах?
    2. Нужен экспорт в HTML в виде одной сплошной страницы без фреймов и навигатора.
    Я попробовал сделать такой экспорт в демке версии 1.0.35 (SinglePage=true, все остальное=false), но страница формируется с навигатором и фреймами.
    Это баг?

  • отредактировано 20:07
    Здравствуйте,

    1) мы планируем добавить все экспорты, которые были доступны в VCL. Но времени на это уйдет достаточно много - я не могу сказать, когда будет готов TXT.
    2) баг, будем исправлять.
  • ShtirlizShtirliz Москва
    отредактировано 20:07
    А меня очень интересует экспорт в PDF, из-за него проект подтормаживает....
    Будет ли он в ближайшее время?
  • отредактировано 20:07
    Да, мы им сейчас занимаемся. Точных сроков сказать не могу - работы много.
  • Сергей ЛукьяновСергей Лукьянов Санкт-Петербург
    отредактировано 20:07
    AlexTZ написал: »
    Да, мы им сейчас занимаемся. Точных сроков сказать не могу - работы много.

    Здравствуйте!
    У меня вопрос по поводу отслеживания момента, когда начинает формироваться новая страница, т.к. необходимо в начале страницы вывести шапку таблицы отчета, которую я собираю используя методы PrintRow(...) и PrintColumn(...).

    Как это можно сделать?
  • отредактировано 20:07
    Здравствуйте,

    Можно подписаться на события бэнда PageHeader (BeforePrint/AfterPrint). Шапку можно сделать проще - укажите в св-ве таблицы FixedRows количество строк с начала таблицы, которые будут повторяться автоматически на каждой новой странице.
  • CouRageCouRage Санкт-Петербург
    отредактировано 20:07
    Здравствуйте.

    Как в дизайнере записать в окно сообщений свое отладочное сообщение? Отлаживать отчет с помощью MessageBox не очень удобно.
  • отредактировано December 2008
    Здравствуйте,

    В очередном билде добавил:
    Report.Designer.ShowMessage(string)
    Report.Designer.ClearMessages()

    Учтите, что при запуске не из дизайнера св-во Report.Designer == null.
    Очередной билд соберется сегодня в полночь.
  • CouRageCouRage Санкт-Петербург
    отредактировано December 2008
    Ок, спасибо.
    Еще такой вопрос: у MatrixObject колонки сортируются в алфавитном порядке. Если названиями колонок, например, являются названия месяцев, то они идут в неестественном порядке. Можно как-то решить эту проблему ?
  • CouRageCouRage Санкт-Петербург
    отредактировано 20:07
    Если для запуска Preview отчета я использую:

    rpt.Preview не установлен
    rpt.Prepare();
    rpt.ShowPrepared(false);

    и если в отчете есть диалоговая форма, то при нажатии кнопки "Отмена" в этой форме, окно FastReport`a все равно показывается. Можно сделать чтобы оно не показывалось ? Так, как происходит при использовании метода Show().
Дискуссия закрыта.