Ошибка в отчете при использовании поля из связанной таблицы в выражении в элементе Текст

отредактировано 21:26 Раздел: FastReport .NET
Здравствуйте!

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

Таблицы свзываю между собой средствами отчета. Методом "Новая связь...". Связь между таблицами получилась, и она работает. Т.е. если просто перетащить поле [ОснТ.ПодчТ.ТипДокВДатПад] из Справочника на бэнд отчета, то данные в нем отображаются нормально. Выводится "договору".

Но... мне надо эти связанные данные вставить в определенное место в длинный кусок текста, который я ввел в текствоое поле! Т.е. текст выглядит примерно так:

"К [ОснТ.ПодчТ.ТипДокВДатПад] № [ОснТ.Номер] от [ОснТ.Дата], заключенному между... ".

Должно получаться следующее - "К договору № 43 от 21.12.2009, заключенному между... ".

При попытке запустить предварительный просмотр отчета - вылетает окно с кучей строк ошибок:
FastReport.Net v1.4.18
Адресат вызова создал исключение.
Inner exception:
В экземпляре объекта не задана ссылка на объект.

   в FastReport.Data.TableDataSource.GetValue(Column column)
   в FastReport.Data.DataSourceBase.GetValue(String alias)
   в FastReport.Data.DataSourceBase.get_Item(String columnAlias)
   в FastReport.Data.DataSourceBase.FindParentRow(Relation relation)
   в FastReport.Data.DataHelper.GetColumn(Dictionary dictionary, DataSourceBase data, String[] names, Boolean initRelation)
   в FastReport.Report.GetColumn(String complexName)
   в FastReport.Report.GetColumnValue(String complexName, Boolean convertNull)
   в FastReport.Report.GetColumnValue(String complexName)
   в FastReport.ReportScript.CalcExpression(String expression, Variant Value)
   в System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   в System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   в System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   в System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   в System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   в FastReport.Code.ExpressionDescriptor.Invoke(Object[] parameters)
   в FastReport.Code.AssemblyDescriptor.CalcExpression(String expr, Variant value)
   в 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.PrepareBand(BandBase band, Boolean getData)
   в FastReport.Engine.ReportEngine.ShowBandToPreparedPages(BandBase band, Boolean getData)
   в FastReport.Engine.ReportEngine.ShowBand(BandBase band, Boolean getData)
   в FastReport.Engine.ReportEngine.StartFirstPage()
   в FastReport.Engine.ReportEngine.RunReportPage(ReportPage page)
   в FastReport.Engine.ReportEngine.RunReportPages()
   в FastReport.Engine.ReportEngine.RunReportPages(ReportPage page)
   в FastReport.Engine.ReportEngine.Run(Boolean runDialogs, Boolean append, ReportPage page)
   в FastReport.Report.Prepare(Boolean append)
   в FastReport.Report.Prepare()
   в FastReport.Design.ReportTab.Preview()

Если [ОснТ.ПодчТ.ТипДокВДатПад] убрать из текста, то номер и дата выводятся нормально, и ошибок не возникает.

Не подскажите, в чем грабли?

Заранее спасибо!

Комментарии

  • отредактировано 21:26
    В общем, методом проб и ошибок я добился кое как работы такого отчета. Помогла вставка перетаскиванием с источника в бэнд поля из основной таблицы, содержащего КЛЮЧ, по которому выбирается значение из справочника (т.е. поле связи). Потом я просто сделал это текстовое поле невидимым.

    Причем, даже при этом условии, добиться работы составного текста в текстовом поле с требуемыми мне данными удалось только после перетаскивания в отчет нужного поля из справочника, и последующим "обвесом" его остальными кусками необходимого мне текста в редакторе. Просто текстовое поле (взятое с панели инструментов), с большим куском текста, в который я постепенно добавлял поля в нужные места, так и не захотело работать.

    Немножко сумбурное сообщение получилось, простите. Но странное поведение отчета, Вам так не кажется?

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

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