Страница 1 из 1

StackOvereflow и NullReference

Добавлено: 29 сен 2008, 09:19
Валерий В. Шинкевич
Поставил последний пререлиз () - теперь один из отчетов не работает.
в Stimulsoft.Report.Components.StiContainer.GetIncorrect(Boolean onlySelect)
в Stimulsoft.Report.Components.StiContainer.GetIncorrect(Boolean onlySelect)
в Stimulsoft.Report.Components.StiContainer.GetIncorrect(Boolean onlySelect)
в Stimulsoft.Report.Components.StiContainer.Correct(Boolean onlySelect)
в Stimulsoft.Report.Components.StiContainer.Correct()
в Stimulsoft.Report.Components.StiComponentsCollection.AddCore(StiComponent component)
в Stimulsoft.Report.Components.StiComponentsCollection.Add(StiComponent component)
в Stimulsoft.Report.Engine.StiDataBandV1Builder.InternalRender(StiComponent masterComp, StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Engine.StiDataBandV1Builder.Render(StiComponent masterComp, StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Components.StiComponent.Render(StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Engine.StiComponentV1Builder.Render(StiComponent masterComp, StiContainer outContainer)
в Stimulsoft.Report.Components.StiComponent.Render(StiContainer outContainer)
в Stimulsoft.Report.Engine.StiContainerV1Builder.InternalCoreRenderContainer(StiContainer masterContainer, StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Engine.StiContainerV1Builder.InternalRenderContainer(StiContainer masterContainer, StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Engine.StiContainerV1Builder.RenderContainer(StiContainer masterContainer, StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Components.StiContainer.RenderContainer(StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Engine.StiContainerV1Builder.InternalRender(StiComponent masterComp, StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Components.StiComponent.RenderComponent(StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Components.StiComponent.InternalRender(StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Engine.StiComponentV1Builder.Render(StiComponent masterComp, StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Components.StiComponent.Render(StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Engine.StiComponentV1Builder.Render(StiComponent masterComp, StiContainer outContainer)
в Stimulsoft.Report.Components.StiComponent.Render(StiContainer outContainer)
в Stimulsoft.Report.Engine.StiContainerV1Builder.InternalCoreRenderContainer(StiContainer masterContainer, StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Engine.StiContainerV1Builder.InternalRenderContainer(StiContainer masterContainer, StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Engine.StiContainerV1Builder.RenderContainer(StiContainer masterContainer, StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Components.StiContainer.RenderContainer(StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Engine.StiContainerV1Builder.InternalRender(StiComponent masterComp, StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Engine.StiBandV1Builder.InternalRender(StiComponent masterComp, StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Engine.StiPageFooterBandV1Builder.InternalRender(StiComponent masterComp, StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Components.StiComponent.RenderComponent(StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Components.StiComponent.InternalRender(StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Engine.StiComponentV1Builder.Render(StiComponent masterComp, StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Components.StiComponent.Render(StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Engine.StiComponentV1Builder.Render(StiComponent masterComp, StiContainer outContainer)
в Stimulsoft.Report.Components.StiComponent.Render(StiContainer outContainer)
в Stimulsoft.Report.Engine.StiContainerV1Builder.InternalCoreRenderContainer(StiContainer masterContainer, StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Engine.StiContainerV1Builder.InternalRenderContainer(StiContainer masterContainer, StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Engine.StiContainerV1Builder.RenderContainer(StiContainer masterContainer, StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Engine.StiPageV1Builder.InternalRender(StiComponent masterComp, StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Components.StiComponent.RenderComponent(StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Components.StiComponent.InternalRender(StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Engine.StiComponentV1Builder.Render(StiComponent masterComp, StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Components.StiComponent.Render(StiComponent& renderedComponent, StiContainer outContainer)
в Stimulsoft.Report.Engine.StiComponentV1Builder.Render(StiComponent masterComp, StiContainer outContainer)
в Stimulsoft.Report.Components.StiComponent.Render(StiContainer outContainer)
в Stimulsoft.Report.Engine.StiRender.GetNextPage()
в Stimulsoft.Report.Engine.StiRenderProviderV1.RenderReport(StiReport report, StiReport masterReport, StiRenderState state)
в Stimulsoft.Report.Engine.StiRenderProviderV1.Render(StiReport report, StiRenderState state)
в Stimulsoft.Report.Engine.StiReportV1Builder.RenderSingleReport(StiReport masterReport, StiRenderState renderState)
в Stimulsoft.Report.StiReport.Render(StiRenderState renderState)
в Stimulsoft.Report.StiReport.Render(Boolean showProgress, Int32 fromPage, Int32 toPage)
в Stimulsoft.Report.StiReport.Render(Boolean showProgress)
в Reporting.Controls.ObjectPrintViewer.Print(Boolean showPreview) в D:\NewProject\Reporting\Controls\ObjectPrintViewer.cs:строка 48
Отчет прекрасно работал на старой версии (от 06 мая 2008 точно работает) и даже на какой-то из предпоследних....

Проблема возникает, насколько я понял, при выводе элементов с авторазмеров внутри контейнеров или датабендов с несколькими колонками.

Кроме NullReferenceException вылазит и StackOverflow....

PS: если подкорректировать отчет так, чтобы он начал работать в EngineV1 и переключить на EngineV2 - 100% StackOverflow

StackOvereflow и NullReference

Добавлено: 29 сен 2008, 12:40
Edward
Здравствуйте.

Спасибо за баг-репорт.

Присылайте, пожалуйста, этот проблемный отчет на support[at]stimulsoft.com, будем разбираться.

Спасибо.

StackOvereflow и NullReference

Добавлено: 30 сен 2008, 05:40
Валерий В. Шинкевич
отправил...

StackOvereflow и NullReference

Добавлено: 30 сен 2008, 06:13
Edward
Проблема воспризведена. Мы известим Вас о готовности решения.

Спасибо за примеры.

StackOvereflow и NullReference

Добавлено: 30 сен 2008, 09:12
DianovSV
Кстати после последней версии некоторые функции (например Day()) перестали работать с Nullable объектами. Конечно решаемо, но неприятно.

StackOvereflow и NullReference

Добавлено: 04 окт 2008, 23:23
Vital
Здравствуйте,
Поставил последний пререлиз () - теперь один из отчетов не работает.
Ошибка исправлена в билде от 4 октября.

Спасибо.

StackOvereflow и NullReference

Добавлено: 04 окт 2008, 23:24
Vital
Здравствуйте,
DianovSV писал(а):Кстати после последней версии некоторые функции (например Day()) перестали работать с Nullable объектами. Конечно решаемо, но неприятно.
Пришлось изменить тип для даты по умолчанию с datetime nullable обратно на datetime.

Спасибо.

StackOvereflow и NullReference

Добавлено: 08 окт 2008, 16:28
Валерий В. Шинкевич
Vital писал(а):Здравствуйте,
Поставил последний пререлиз () - теперь один из отчетов не работает.
Ошибка исправлена в билде от 4 октября.

Спасибо.
В билде от 4 октября новая проблема. (вероятно вылезла из-за решения предыдущей)
Есть несколько отчетов, работавших до этого во всех предыдущих билдах ( в обоих движках)
при выводе строки датабенда проверялось некоторое условие и в зависимости от его исполнения некоторые столбцы в таблице скрывались (для этого использовались Conditions) а некоторые расширялись чтобы занять свободное место (в обработчике события Rendering)

Код: Выделить всё

private void Text36_Conditions(object sender, System.EventArgs e)
        {
            if (_Document.Goods.Mass<=0)
            {
                ((Stimulsoft.Report.Components.IStiTextBrush)(sender)).TextBrush = new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Red);
                ((Stimulsoft.Report.Components.IStiBrush)(sender)).Brush = new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Transparent);
                ((Stimulsoft.Report.Components.IStiFont)(sender)).Font = new System.Drawing.Font("Arial", 8F);
                ((Stimulsoft.Report.Components.StiComponent)(sender)).Enabled = false;
                return;
            }
        }

public void DataBand1_Rendering(object sender, System.EventArgs e)
        {
          
if(_Document.Goods.Mass<=0)
{
	DescTopText.Width = 12.02;
	DescText.Width = 12.02;
}
else
{
	DescTopText.Width = 8.09;
	DescText.Width = 8.09;
};
        }
Так вот, теперь кондишины отрабатывают и ненужные столбцы скрываются. Но вот размеры DescTopText и DescText не изменяются, хотя в отладчике видно, что присвоение новых значений отрабатывает.
Но! самое интересное - это происходит не на всех отчетах.... Тот, который я вам присылал - работает нормально...
А вот например, если датабенд один и он на всю страницу то размеры в обработчике Rendering не меняются...

StackOvereflow и NullReference

Добавлено: 09 окт 2008, 20:55
Vital
Здравствуйте,

Пока эту проблему не изучали подробно, но если не ошибаюсь она связана со следующим изменением. Почти перед релизом выяснилось, что в новом движке нельзя вызывать событие Rendering до собыйти BeforePrintEvent компонентов, находящихся на это бэнде. В результате вызов события Rendering в новом движке происходит после построения DataBand. Как решить? Попробуйте перенести код из Rendering события датабэнда в событие BeforePrint датабэнда. В новом движке это событие вызывается строго один раз для датабэнда до построения датабэнда. Это касается только EngineV2.

Спасибо.