Page 1 of 1
Problem with layout of rendered subreports
Posted: Fri Aug 10, 2012 3:39 pm
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 - результат генерации отдельного сабрепорта, как самостоятельного репорта, НЕ внутри репорта-контейнера.
Помогите, пожалуйста, решить эту проблему.
Re: Problem with layout of rendered subreports
Posted: Mon Aug 13, 2012 1:43 pm
by HighAley
Здравствуйте.
Мы не смогли воспроизвести проблему без тестовых данных.
Попробуйте перестроить ваш отчёт и уйти от использования сабрепортов.
Спасибо.
Re: Problem with layout of rendered subreports
Posted: Tue Aug 14, 2012 12:21 pm
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;
}
Возможность редактирования отдельных репортов, и последующее их объединение в один общий репорт в качестве сабрепортов очень важны для нас. Наличие этого функционала повлияло на наш выбор в пользу вашего продукта. И, наверное, немного неправильно рекомендовать отказаться от использования функционала, который присутствует в продукте и должен работать.
Спасибо. Рассчитываем на вашу помощь.
Re: Problem with layout of rendered subreports
Posted: Tue Aug 14, 2012 2:07 pm
by Ivan
Здравствуйте.
Alexey wrote:1. ReportSummaryBand печатается внизу первой страницы сабрепорта (должен на последней);
2. DataBand наезжает и перекрывает ReportSummaryBand;
Исправлено. Патч будет включен в следующий предрелизный билд.
Alexey wrote:3. HeaderBand выводится только на первой странице сабрепорта (должен на каждой).
По умолчанию все подотчеты строятся на страницах бесконечной высоты, поэтому все заголовки/подвалы выводятся только один раз.
Для внутренних подотчетов недавно была сделана доработка, и теперь заголовки выводятся корректно.
Для внешних подотчетов, к сожалению, нет простого решения проблемы. Но конкретно для вашего случая (когда на странице только один подотчет) можно включить следующее статическое свойство (будет доступно в следующем предрелизном билде):
Code: Select all
StiOptions.Engine.RenderExternalSubReportsWithHelpOfUnlimitedHeightPages = false;
Alexey wrote:Возможность редактирования отдельных репортов, и последующее их объединение в один общий репорт в качестве сабрепортов очень важны для нас. Наличие этого функционала повлияло на наш выбор в пользу вашего продукта. И, наверное, немного неправильно рекомендовать отказаться от использования функционала, который присутствует в продукте и должен работать.
Подотчеты, как и вложенные контейнеры - это сложный функциональный элемент, а чем сложнее элементы, тем они медленнее работают и могут содержать большее количество багов.
Движок нашего продукта оптимизирован для работы с отчетами, в которых все бэнды расположены на основной странице. При этом достигается большой прирост скорости построения отчетов - от нескольких раз до десятков раз. Поэтому мы и советуем делать отчеты по возможности проще.
Спасибо.
Re: Problem with layout of rendered subreports
Posted: Wed Aug 15, 2012 7:11 am
by Alexey
Спасибо за подробные объяснения и исправления.
Re: Problem with layout of rendered subreports
Posted: Thu Aug 16, 2012 11:14 am
by HighAley
Здравствуйте.
Мы всегда рады помочь. Обращайтесь, если возникнут ещё вопросы.
Спасибо.
Re: Problem with layout of rendered subreports
Posted: Thu Aug 23, 2012 9:37 am
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;
}
Re: Problem with layout of rendered subreports
Posted: Fri Aug 24, 2012 7:58 am
by HighAley
Здравствуйте.
Из сабрепорта вставляется только содержимое страницы, а свойства страница беруться из мастер-отчёта.
В вашей ситуации надо установить границу у компонента "Вложенный отчёт".
Спасибо.
P.S.
Для рускоязычных клиентов у нас есть отдельный форум:
http://forumru.stimulsoft.com/