Problem with layout of rendered subreports

Stimulsoft Reports.NET discussion
Post Reply
Alexey
Posts: 10
Joined: Fri May 18, 2012 7:11 am

Problem with layout of rendered subreports

Post by Alexey »

Здравствуйте. Возникли следующие проблемы. Есть репорт-контейнер, внутри которого строятся сабрепорты. Сабрепорт включает в себя HeaderBand, DataBand и ReportSummaryBand. HeaderBand выводится на каждой странице, ReportSummaryBand выводится внизу страницы. Если DataBand сабрепорта содержит много данных и сабрепорт разбивается на несколько страниц, то
1. ReportSummaryBand печатается внизу первой страницы сабрепорта (должен на последней);
2. DataBand наезжает и перекрывает ReportSummaryBand;
3. HeaderBand выводится только на первой странице сабрепорта (должен на каждой).
Если выводить сабрепорт как самостоятельный репорт, а не внутри контейнера, то все строится правильно.
Проблема воспроизводится на последней пререлиз версии от 2012.08.07.

Я приатачил следующие файлы:
MainReport.mrt - репорт-контейнер;
SubReport.mrt - сабрепорт;
SubReportBatchResult_Incorrect.pdf - результат генерации 5 сабрепортов внутри репорта-контейнера;
SubReportSingleResult_Correct.pdf - результат генерации отдельного сабрепорта, как самостоятельного репорта, НЕ внутри репорта-контейнера.

Помогите, пожалуйста, решить эту проблему.
Attachments
MainReport.mrt
Репорт-контейнер
(4.36 KiB) Downloaded 220 times
SubReport.mrt
Сабрепорт
(8.12 KiB) Downloaded 374 times
SubReportBatchResult_Incorrect.pdf
Результат генерации 5 сабрепортов внутри репорта-контейнера
(68.64 KiB) Downloaded 291 times
SubReportSingleResult_Correct.pdf
Результат генерации отдельного сабрепорта, как самостоятельного репорта, НЕ внутри репорта-контейнера
(52.78 KiB) Downloaded 253 times
HighAley
Posts: 8430
Joined: Wed Jun 08, 2011 7:40 am
Location: Stimulsoft Office

Re: Problem with layout of rendered subreports

Post by HighAley »

Здравствуйте.

Мы не смогли воспроизвести проблему без тестовых данных.
Попробуйте перестроить ваш отчёт и уйти от использования сабрепортов.

Спасибо.
Alexey
Posts: 10
Joined: Fri May 18, 2012 7:11 am

Re: Problem with layout of rendered subreports

Post by Alexey »

Здравствуйте.
Ниже приведен пример кода для заполнения репортов тестовыми данными.
Метод Incorrect_SubReportBatch_Button_Click строит 5 сабрепортов внутри репорта-контейнера (результат работы можно было видеть в файле SubReportBatchResult_Incorrect.pdf, приатаченном в предыдущем сообщении).
Метод Correct_SubReportSingle_Button_Click строит сабрепорт как самостоятельный репорт, НЕ внутри репорта-контейнера (результат - SubReportSingleResult_Correct.pdf).

Code: Select all

private void Incorrect_SubReportBatch_Button_Click(object sender, EventArgs e)
{
    var mainReport = new StiReport();
    mainReport.Load(@"Reports/MainReport.mrt");
    var mainTable = CreateMainDataTable();
    mainReport.RegData("MainDS", "MainDS", mainTable);
    mainReport.GetSubReport += mainReport_GetSubReport;
    mainReport.Show();
}

private void Correct_SubReportSingle_Button_Click(object sender, EventArgs e)
{
    var testReport = new StiReport();
    testReport.Load(@"Reports\SubReport.mrt");
    var testTable = CreateSampleDataTable();
    testReport.RegData("TestDS", "TestDS", testTable);
    testReport.Show();
}

private void mainReport_GetSubReport(object sender, StiGetSubReportEventArgs e)
{
    var subReport = new StiReport();
    subReport.Load(@"Reports/SubReport.mrt");
    var subTable = CreateSampleDataTable();
    subReport.RegData("SubDS", "SubDS", subTable);
    e.Report = subReport;
}

private static DataTable CreateMainDataTable()
{
    var dataTable = new DataTable();
    dataTable.Columns.Add("Column", typeof(int));
    for (var i = 0; i < 5; i++)
    {
        var row = dataTable.NewRow();
        row["Column"] = i;
        dataTable.Rows.Add(row);
    }
    return dataTable;
}

private static DataTable CreateSampleDataTable()
{
    var dataTable = new DataTable();
    dataTable.Columns.Add("Column1", typeof(string));
    dataTable.Columns.Add("Column2", typeof(int));
    for (var i = 0; i < 70; i++)
    {
        var row = dataTable.NewRow();
        row["Column1"] = "a" + i;
        row["Column2"] = i;
        dataTable.Rows.Add(row);
    }
    return dataTable;
}
Возможность редактирования отдельных репортов, и последующее их объединение в один общий репорт в качестве сабрепортов очень важны для нас. Наличие этого функционала повлияло на наш выбор в пользу вашего продукта. И, наверное, немного неправильно рекомендовать отказаться от использования функционала, который присутствует в продукте и должен работать.
Спасибо. Рассчитываем на вашу помощь.
Ivan
Posts: 960
Joined: Thu Aug 10, 2006 1:37 am

Re: Problem with layout of rendered subreports

Post by Ivan »

Здравствуйте.
Alexey wrote:1. ReportSummaryBand печатается внизу первой страницы сабрепорта (должен на последней);
2. DataBand наезжает и перекрывает ReportSummaryBand;
Исправлено. Патч будет включен в следующий предрелизный билд.
Alexey wrote:3. HeaderBand выводится только на первой странице сабрепорта (должен на каждой).
По умолчанию все подотчеты строятся на страницах бесконечной высоты, поэтому все заголовки/подвалы выводятся только один раз.
Для внутренних подотчетов недавно была сделана доработка, и теперь заголовки выводятся корректно.
Для внешних подотчетов, к сожалению, нет простого решения проблемы. Но конкретно для вашего случая (когда на странице только один подотчет) можно включить следующее статическое свойство (будет доступно в следующем предрелизном билде):

Code: Select all

StiOptions.Engine.RenderExternalSubReportsWithHelpOfUnlimitedHeightPages = false;
Alexey wrote:Возможность редактирования отдельных репортов, и последующее их объединение в один общий репорт в качестве сабрепортов очень важны для нас. Наличие этого функционала повлияло на наш выбор в пользу вашего продукта. И, наверное, немного неправильно рекомендовать отказаться от использования функционала, который присутствует в продукте и должен работать.
Подотчеты, как и вложенные контейнеры - это сложный функциональный элемент, а чем сложнее элементы, тем они медленнее работают и могут содержать большее количество багов.
Движок нашего продукта оптимизирован для работы с отчетами, в которых все бэнды расположены на основной странице. При этом достигается большой прирост скорости построения отчетов - от нескольких раз до десятков раз. Поэтому мы и советуем делать отчеты по возможности проще.

Спасибо.
Alexey
Posts: 10
Joined: Fri May 18, 2012 7:11 am

Re: Problem with layout of rendered subreports

Post by Alexey »

Спасибо за подробные объяснения и исправления.
HighAley
Posts: 8430
Joined: Wed Jun 08, 2011 7:40 am
Location: Stimulsoft Office

Re: Problem with layout of rendered subreports

Post by HighAley »

Здравствуйте.

Мы всегда рады помочь. Обращайтесь, если возникнут ещё вопросы.

Спасибо.
Alexey
Posts: 10
Joined: Fri May 18, 2012 7:11 am

Re: Problem with layout of rendered subreports

Post by Alexey »

Здравствуйте.
Сейчас работаю с версией от 2012.08.16. В ней описанные выше проблемы были решены. Спасибо большое!
Возник еще один вопрос. Ситуация та же: происходит генерация репорта, включающего в себя внешние сабрепорты. В сабрепорте у элемента Page задана граница. При построении сабрепортов внутри репорта-контейнера эта граница вокруг сабрепорта отсутствует. Если выводить сабрепорт как самостоятельный репорт, а не внутри контейнера, то граница есть.
Я приатачил файлы с репортами и результатами генерации. Ниже код для построения репортов. Посмотрите, пожалуйста, в чем там может быть дело.

Code: Select all

private void Correct_SubReportSingle_Click(object sender, EventArgs e)
{
	var testReport = new StiReport();
	testReport.Load(@"Reports\SubReport_Border.mrt");
	testReport.Show();
}

private void Incorrect_SubReportBatch_Click(object sender, EventArgs e)
{
	var mainReport = new StiReport();
	mainReport.Load(@"Reports/MainReport.mrt");
	var mainTable = CreateMainDataTable();
	mainReport.RegData("MainDS", "MainDS", mainTable);
	mainReport.GetSubReport += mainReport_GetSubReport;
	mainReport.Show();
}

private void mainReport_GetSubReport(object sender, StiGetSubReportEventArgs e)
{
	var subReport = new StiReport();
	subReport.Load(@"Reports\SubReport_Border.mrt");
	e.Report = subReport;
}

private static DataTable CreateMainDataTable()
{
	var dataTable = new DataTable();
	dataTable.Columns.Add("Column", typeof(int));
	for (var i = 0; i < 5; i++)
	{
		var row = dataTable.NewRow();
		row["Column"] = i;
		dataTable.Rows.Add(row);
	}
	return dataTable;
}
Attachments
MainReport.mrt
Репорт-контейнер
(4.36 KiB) Downloaded 368 times
SubReport_Border.mrt
Сабрепорт
(3.46 KiB) Downloaded 373 times
SubReportBatchResult_Incorrect.pdf
Результат генерации 5 сабрепортов внутри репорта-контейнера
(49.3 KiB) Downloaded 241 times
SubReportSingleResult_Correct.pdf
Результат генерации отдельного сабрепорта, как самостоятельного репорта, НЕ внутри репорта-контейнера
(47.11 KiB) Downloaded 219 times
HighAley
Posts: 8430
Joined: Wed Jun 08, 2011 7:40 am
Location: Stimulsoft Office

Re: Problem with layout of rendered subreports

Post by HighAley »

Здравствуйте.

Из сабрепорта вставляется только содержимое страницы, а свойства страница беруться из мастер-отчёта.
В вашей ситуации надо установить границу у компонента "Вложенный отчёт".

Спасибо.

P.S.
Для рускоязычных клиентов у нас есть отдельный форум: http://forumru.stimulsoft.com/
Post Reply