Как перезапустить номер страницы с 1 в другой группе отчета BIRT

Backgroud: используйте Java + BIRT для генерации отчета. Создайте отчет в программе просмотра и разрешите пользователю выбрать его экспорт в другой формат (pdf, xls, word...).

Все программы находятся в "Макете", в "Мастер-странице" нет программ. Есть 1 "Набор данных". Поля в "Макете" относятся к этому DS. Есть группа в "Макете", гропу по одному полю. В "Заголовке группы" я создаю одну ячейку для использования в качестве номера страницы. Msgstr "Страница: MyPageNumber". "MyPageNumber" - это поле, которое я определяю, которое будет равно +1 в заголовке группы.

Проблема: Когда я использую 1-й метод для создания отчета, "MyPageNumber" не может отображаться правильно. Поскольку заголовок группы загружается только один раз для каждой группы. Это всегда будет показывать 1.

Вопрос: Как я знаю, в отчете Crystal есть "номер страницы перезапуска в группе". Как перезапустить страницу в BIRT? Я хочу показать данные разных групп в 1 файле отчета, а номер страницы начинается с 1 для каждой группы.

2 ответа

Увы, это не поддерживается с BIRT.

Вероятно, это не тот ответ, на который вы надеялись, но это правда. Это один из немногих аспектов, где BIRT сильно отстает от других инструментов генерации отчетов.

Однако, в зависимости от того, как BIRT интегрирован в вашу среду, возможен обходной путь для экспорта в PDF, который мы с большим успехом используем в нашем решении. Идея состоит в том, чтобы позволить BIRT создать схему PDF на основе группировки. А отчет BIRT создает в ReportContext информацию о том, где и как он хочет отображать номера страниц. После того, как BIRT сгенерировал PDF, пользовательский PDFPostProcessor использует схему PDF и информацию из ReportContext для добавления номеров страниц с помощью iText. Если этот обходной путь является жизнеспособным для вас, не стесняйтесь связаться со мной.

Вы можете сделать это с помощью отчетов BIRT, используя переменные страницы. Например:

  1. Добавьте 2 переменные страницы... Group_page, Group_name.
  2. Добавить 1 переменную отчета... Group_total_page.
  3. В отчете перед фабрикой добавьте скрипт:

    prevGroupKey = "";
    groupPageNumber = 1;
    reportContext.setGlobalVariable("gGROUP_NAME", "");
    reportContext.setGlobalVariable("gGROUP_PAGE", 1);
    
  4. В отчете на странице добавьте скрипт:

    var groupKey = currGroup; 
    var prevGroupKey = reportContext.getGlobalVariable("gGROUP_NAME");
    var groupPageNumber = reportContext.getGlobalVariable("gGROUP_PAGE");
    if( prevGroupKey == null ){
        prevGroupKey = "";
    }
    
    if (prevGroupKey == groupKey)
    {
     if (groupPageNumber != null)
    {
        groupPageNumber = parseInt(groupPageNumber) + 1;
    }
    else {
        groupPageNumber = 1;
    }
    }
    else {
        groupPageNumber = 1;
        prevGroupKey = groupKey;
    }
    reportContext.setPageVariable("GROUP_NAME", groupKey);
    reportContext.setPageVariable("GROUP_PAGE", groupPageNumber);
    reportContext.setGlobalVariable("gGROUP_NAME", groupKey);
    reportContext.setGlobalVariable("gGROUP_PAGE", groupPageNumber);
    
    var groupTotalPage = reportContext.getPageVariable("GROUP_TOTAL_PAGE");
    if (groupTotalPage == null)
    {
        groupTotalPage = new java.util.HashMap();
        reportContext.setPageVariable("GROUP_TOTAL_PAGE", groupTotalPage);
    }
    groupTotalPage.put(groupKey, groupPageNumber);
    
  5. В главной странице скрипта onRender добавьте следующий скрипт:

    var totalPage = reportContext.getPageVariable("GROUP_TOTAL_PAGE");
    var groupName = reportContext.getPageVariable("GROUP_NAME");
    if (totalPage != null)
    { 
        this.text = java.lang.Integer.toString(totalPage.get(groupName));
    }
    
  6. В заголовке группы таблиц для события onCreate добавьте следующий сценарий, заменив "СТРАНА" именем столбца, по которому вы группируете:

    currGroup = this.getRowData().getColumnValue("COUNTRY");
    
  7. На главной странице добавьте сетку в верхний или нижний колонтитул и добавьте переменную автотекста для Group_page и Group_total_page. При желании также добавьте переменную страницы для Group_name.

Проверьте эти ссылки для получения дополнительной информации о переменных страницы BIRT:

Другие вопросы по тегам