Обнаруженные баги в Fastreport .net

1910121415

Комментарии

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

    1) в документации по итогам написано: "При этом анализируются все ячейки, которые находятся выше и левее текущей (в которой мы печатаем итог). " Это надо учитывать при печати итогов в объединенной ячейке.
    2) в отличие от ячеек объекта "Матрица", простые объекты "Текст" ведут себя несколько иначе в плане событий. В момент вызова BeforePrint значение Text1.Value еще не доступно, поэтому вместо него используйте обращение к полю:
    Text1.Text = monthNames[((Int32)Report.GetColumnValue("MatrixDemo.Month")) - 1];
    3) да, сделано специально, чтобы не засорять undo после каждого изменения в коде.
  • stan5stan5 Новошахтинск
    отредактировано 03:57
    ОК, спасибо!
  • CouRageCouRage Санкт-Петербург
    отредактировано December 2008
    Ситуация такая:
    На Data-бэнде лежат несколько TextObject и RichObject, у всех установлена рамка по всем краям - в FR при просмотре получаем красивую таблицу. При экспорте в RTF таблица превращается в набор разрозненных картинок с текстом. (Страница 2 в примере)

    Можно ли как-то заставить FR нормально формировать таблицы с rtf-текстом ?

    Попытался выйти из ситуации подложив под объекты RichObject обычные TextObject - чтобы в RTF нормально сформировалась таблица. И практически получилось - таблица сформировалась, однако ширина ее колонок сильно увеличена - между rtf-текстом, экспортированным из FR в виде картинок, и границами ячеек таблицы большой зазор. (Страница 1 в примере)

    Можно ли как-то справится с проблемой ширины ячеек таблицы, если в них есть rtf-текст ?

    Приложенный файл переименовать в "Simple List.frx".
  • CouRageCouRage Санкт-Петербург
    отредактировано 03:57
    Если, например, на Data-бэнде лежит RichObject и занимает всю ширину бэнда, при экспорте в rtf в документе получаются очень большие поля, хотя в FR-дизайнере у страницы установлены поля в 1см.
  • отредактировано 03:57
    Ок, будем править. По экспортам накопился обширный to-do, так что скоро не обещаю.
  • CouRageCouRage Санкт-Петербург
    отредактировано 03:57
    Похоже сломался метод SavePrepared(). Пробовал сохранять в файл готовый отчет и его открывать в дизайнере - файл нормально не открывается - пустое окно.
  • отредактировано 03:57
    Видимо, вызываете его после Show()? После закрытия окна готовый отчет очищается.
  • CouRageCouRage Санкт-Петербург
    отредактировано 03:57
    Да, поменял порядок вызовов - отчет стал нормально сохраняться, спасибо.
  • CouRageCouRage Санкт-Петербург
    отредактировано December 2008
    Здравствуйте.

    TextObject лежит на Data-бэнде, у TextBox установлено свойство "Может расти" - соотвественно, в готовом отчете у всех строк бэнда получается разная высота строк.
    При экспорте в rtf ячейки таблицы получаются слишком маленькими по высоте - текст не влезает. Это почти у всех ячеек.

    Вы можете это быстро поправить ?
  • отредактировано 03:57
    Здравствуйте,

    Пробовал воспроизвести ошибку, не получилось. Можете прислать файлы .FRX и .FPX на tz@fast-report.com?
  • CouRageCouRage Санкт-Петербург
    отредактировано 03:57
    Отправил.
    В готовом отчете (fpx) все нормально. Проблема проявляется в rtf. Установлен Word 2007.
  • отредактировано 03:57
    Посмотрел; у меня нормально. Но у меня в системе стоит обычный размер шрифта, у Вас, судя по всему - увеличенный (120dpi). Исправим сегодня.
  • CouRageCouRage Санкт-Петербург
    отредактировано 03:57
    Да, совершенно верно, у меня установлен увеличенный размер шрифта 120DPI. И у пользователей тоже.
    Спасибо.
  • Сергей ЛукьяновСергей Лукьянов Санкт-Петербург
    отредактировано 03:57
    Здравствуйте!

    Обновил версию FastReport.Net с 1.0.14.0 до 1.0.61.0 и работавший до этого отчет стал выдавать такие ошибки:

    (170,33): error CS0021: Невозможно применить индексирование через [] к выражению типа "object"
    (170,87): error CS0117: "FastReport.Data.DataSourceBase" не содержит определение для "Rows"

    Что делать?
  • отредактировано 03:57
    Здравствуйте,

    Недавно менял работу с источниками данных. Покажите скрипт отчета?
  • Сергей ЛукьяновСергей Лукьянов Санкт-Петербург
    отредактировано 03:57
    AlexTZ написал: »
    Здравствуйте,

    Недавно менял работу с источниками данных. Покажите скрипт отчета?

    Отправил по почте...
  • Сергей ЛукьяновСергей Лукьянов Санкт-Петербург
    отредактировано 03:57
    написал: »
    Отправил по почте...

    Я так понял у таблицы данных пропало свойство Rows, а я с его помощью смотрел значения в других строках...
  • отредактировано December 2008
    Да, этого св-ва теперь нет. Замените код типа

    rationCourse.CurrentRow[5]

    на

    rationCourse[rationCourse.Columns[5]]

    или

    rationCourse["CategoryAllergical"]

    Вместо этого кода:

    rationCourse.Rows[rationCourse.CurrentRowNo - 1]

    надо установить текущую запись и обратиться к нужной колонке:

    rationCourse.Prior();
    ...
  • отредактировано 03:57
    Добавлю: установить текущую запись можно так:

    - методы First/Next/Prior/Last;
    - св-во CurrentRowNo - можно читать и писать.
  • Сергей ЛукьяновСергей Лукьянов Санкт-Петербург
    отредактировано 03:57
    AlexTZ написал: »
    Да, этого св-ва теперь нет. Замените код типа

    rationCourse.CurrentRow[5]

    на

    rationCourse[rationCourse.Columns[5]]

    или

    rationCourse["CategoryAllergical"]

    Вместо этого кода:

    rationCourse.Rows[rationCourse.CurrentRowNo - 1]

    надо установить текущую запись и обратиться к нужной колонке:

    rationCourse.Prior();
    ...

    А нельзя вернуть обратно свойство Rows у таблицы???
    Честно говоря, у меня руки опускаются, когда я представлю, каким кодом мне надо заменить следующую запись:

    if (rationCourse["CategoryStaff"].ToString() != rationCourse.Rows[rationCourse.CurrentRowNo + 1][6].ToString())
    {
    ....
    }
  • отредактировано 03:57
    Св-во Rows теперь internal ArrayList Rows - если я сделаю его public, Вам это не поможет. Внутренности DataSourceBase были серьезно изменены.

    rationCourse.Next();
    string nextStaff = rationCourse["CategoryStaff"].ToString();
    rationCourse.Prior();
    if (rationCourse["CategoryStaff"].ToString() != nextStaff)
    {
    ....
    }
  • Сергей ЛукьяновСергей Лукьянов Санкт-Петербург
    отредактировано 03:57
    AlexTZ написал: »
    Св-во Rows теперь internal ArrayList Rows - если я сделаю его public, Вам это не поможет. Внутренности DataSourceBase были серьезно изменены.

    rationCourse.Next();
    string nextStaff = rationCourse["CategoryStaff"].ToString();
    rationCourse.Prior();
    if (rationCourse["CategoryStaff"].ToString() != nextStaff)
    {
    ....
    }

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

    Расстроили Вы меня... :)
  • отредактировано 03:57
    Вы работаете с TableDataSource, можно обратиться к св-ву Table, которое типа DataTable. Правда, в этом случае сортировка, фильтрация и связи master-detail работать не будут.

    DataTable table = (Report.GetDataSource("MenuRationCourse") as TableDataSource).Table;
    ...
  • отредактировано 03:57
    Сожалею, что расстроил, но новая архитектура продиктована необходимостью корректной работы с бизнес-объектами.
  • ЕгорЕгор Минск
    отредактировано 03:57
    Добрый день AlexTZ.
    Пока не смог добиться, чтобы в бэнде заголовок отчёта выводилось сообщение которое дополнялось бы данными из программы.
    Содержание TextObject в заголовке: "Отчёт о принятых на работу в организацию [Table.CompanyName] [HeaderDate]"
    Свойство text у текстового поля пробовал менять как через способ "Обращение к объектам отчета", так и передавать параметром
    FReport.SetParameterValue("HeaderDate", m_strHeaderRep);
    Если string параметр не содержит информации, тогда выводиться имя организации [Table.CompanyName], иначе имени нет - выводиться лишь параметр.
    Версия компонента пишет в VS2008 как 1.0.58, хотя это моя предыдущая версия, вчера поставил от 16.12.2008

    Большое спасибо.
  • отредактировано 03:57
    Здравствуйте,

    Проверил, работает. Возможно, не хватает ширины объекта - не помещается весь текст?
  • ЕгорЕгор Минск
    отредактировано 03:57
    Вопрос снимаю :)
    Набор данных при заданном диапазоне дат был пуст :)
    Спасибо.
  • Сергей ЛукьяновСергей Лукьянов Санкт-Петербург
    отредактировано 03:57
    Здравствуйте!

    Такая проблема: если в секцию конца группы добавить таблицу, а у нее определить ManualBuild, то ManualBuild вызывается, а ничего не происходит (нужная таблица не формируется)
  • Сергей ЛукьяновСергей Лукьянов Санкт-Петербург
    отредактировано 03:57
    Вылетает по исключению из Prepare() при третьем вызове.

    ************** Текст исключения **************
    System.ArgumentOutOfRangeException: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
    Имя параметра: index
    в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
    в System.ThrowHelper.ThrowArgumentOutOfRangeException()
    в System.Collections.Generic.List`1.get_Item(Int32 index)
    в FastReport.Engine.ReportEngine.p1tDs6Vjy()
    в FastReport.Engine.ReportEngine.Toyhjg7uM8()
    в FastReport.Engine.ReportEngine.Tm5hw3pq8k()
    в FastReport.Engine.ReportEngine.SNehfI3gy4(Boolean )
    в FastReport.Engine.ReportEngine.HC5hcG99Al(Boolean )
    в FastReport.Table.TableResult.MKaCUp9Ak(Object , EventArgs )
    в FastReport.ReportComponentBase.OnAfterPrint(EventArgs e)
    в FastReport.BandBase.RestoreState()
    в FastReport.Engine.ReportEngine.cMVoSy8nU(BandBase , Boolean )
    в FastReport.Engine.ReportEngine.xoMx3dB0e(BandBase , Boolean )
    в FastReport.Engine.ReportEngine.0p2h6l6TIj()
    в FastReport.Engine.ReportEngine.G5fhtJG32e(ReportPage )
    в FastReport.Engine.ReportEngine.1KYhD5kBSK()
    в FastReport.Engine.ReportEngine.pP2jEF4Mq(Boolean , Boolean , ReportPage )
    в FastReport.Engine.ReportEngine.t6GwdwmuL(Boolean , Boolean )
    в FastReport.Report.Prepare(Boolean append)

    После трех часов поисков найдено следующее:
    1. Вызываем Prepare() с данными № 1, № 2 и данными № 3 - вылетаем при формировании страницы с данными номер № 3.
    2. Вызываем Prepare() с данными № 1 и данными № 3 - все ОК.
    3. Вызываем Prepare() с данными № 2 и данными № 3 - все ОК.
    4. Вылетает в строке:

    public string ShowData = ""; // Переменная ShowData указана в ячейке таблицы, как отображаемое значение.

    private void Table1_ManualBuild(object sender, EventArgs e)
    {
    ...

    ShowData = row[<Поле1>].ToString() + "\r\n" + row[<Поле2>].ToString();
    }

    5. НЕ вылетаем во всех случаях, если ShowData = <Строка 1> + "\r" + <Строка 2> или
    ShowData = <Строка 1> + <Строка 2>

    Таким образом экспериментально установленно, что на определенном моменте FastReport'у не нравится символ "\n"...

    Повтор ситуации в чистом C# к ошибке не приводит, т.е. следующая конструкция работает стабильно:
    foreach (DataRow row in datasource.Rows)
    {
    ShowData = row[<Поле1>].ToString() + "\r\n" + row[<Поле2>].ToString();
    }


  • отредактировано 03:57
    Здравствуйте,
    написал: »
    Такая проблема: если в секцию конца группы добавить таблицу, а у нее определить ManualBuild, то ManualBuild вызывается, а ничего не происходит (нужная таблица не формируется)

    Взял отчет Groups из демки, добавил на group footer таблицу, в manual build прекрасно печатается.
Дискуссия закрыта.