Вложенные отчеты в отчетах Jasper - PullRequest
2 голосов
/ 18 июня 2010

У меня есть две таблицы для печати на одной странице.Данные для этих таблиц будут предоставляться с карты из пользовательского источника данных.Мне нужно это реализовать.Я погуглил для реализации этой задачи.

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

У меня есть представление о том, как создавать подотчеты,Но я не знаю, как заполнять подотчеты с помощью customdatasource.Это мой вопрос.Пожалуйста, помогите мне в достижении этого.

Примечание. Я пытался реализовать вложенные отчеты, но получаю сообщение об ошибке.Вот код, который я использовал для составления подотчетов:

JasperPrint print = new JasperPrint();
JRPdfExporter exporter = new JRPdfExporter();
JasperDesign design, design1;
JasperReport report, report1;
JasperReport jasperReport;
JasperDesign jd1;

jd1 = JRXmlLoader.load("D:\\sub_report1.jrxml");
jasperReport = JasperCompileManager.compileReport(jd1);
Map parameters = new HashMap();
parameters.put("ReportTitle", "Table Report");
parameters.put("DataFile", "TableSource.java");
parameters.put("Subreport_1", jasperReport);

design = JRXmlLoader.load("D:\\sub_report2.jrxml");
report = JasperCompileManager.compileReport(design);
parameters.put("Subreport_2", report);

design1 = JRXmlLoader.load("D:\\master_report.jrxml");
report1 = JasperCompileManager.compileReport(design1);
JasperFillManager.fillReportToFile(report1, "D:\\master_report.jrprint", parameters, new TableDataSource());

exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "D:K\\Report.pdf");
exporter.exportReport();

JasperViewer.viewReport(print);

Здесь я скомпилировал subreport1 & subreport2 по отдельности и добавил их в качестве параметра в карту.Тогда я получаю сообщение об ошибке при заполнении через мастер-отчеты.Помогите мне скомпилировать отчет.

Трассировка стека ошибки компилятора:

Исключение в потоке "main" net.sf.jasperreports.engine.JRRuntimeException: неизвестный порядок печати 0в net.sf.jasperreports.engine.fill.JRFillSubreport.initSubreportFiller (неизвестный источник) в net.sf.jasperreports.engine.fill.JRFillSubreport.evaluateSubreport (неизвестный источник) в net.sf.jasperreports.engine.fill.JF.оценить (неизвестный источник) по адресу net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate (неизвестный источник) по адресу net.sf.jasperreports.engine.fill.JRFillBand.evaluate (неизвестный источник) по адресу net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand (Неизвестный источник) в net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail (Неизвестный источник) в net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart (Неизвестный источник) в net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport (неизвестный источник) по адресу net.sf.jasperreports.engine.fill.JRBaseFiller.fill (неизвестный Source) в net.sf.jasperreports.engine.fill.JRBaseFiller.fill (неизвестный источник) в net.sf.jasperreports.engine.fill.JRFiller.fillReport (неизвестный источник) в net.sf.jasperreports.engine.JasperFillManager.fillReport(Неизвестный источник) в net.sf.jasperreports.engine.JasperFillManager.fillReportToFile (Неизвестный источник) в ReportTableCompiler.main (ReportTableCompiler.java:53)

Ответы [ 3 ]

1 голос
/ 09 июля 2010

Если у вас есть только одна полоса подробностей, а выражение subreportExpression напоминает «SUBREPORT_1.jasper», вы можете использовать его для составления нескольких подотчетов

   JRDesignBand jrBand = (JRDesignBand) jasperDesign.getDetailSection().getBands()[0];
   JRElement[] jrElements = jrBand.getElements();
   for (JRElement jrElement : jrElements) {
       if (jrElement instanceof JRDesignSubreport) {
       JRDesignSubreport subReportDesign = (JRDesignSubreport) jrElement;
       JRExpression jrExpression = subReportDesign.getExpression();
       String file = jrExpression.getText();
       file = file.substring(1, file.length()-8)+".jrxml";
       JasperCompileManager.compileReport(file);
       }
   }
0 голосов
/ 18 июня 2010

Подотчеты, как и любые другие обычные отчеты. Они имеют собственный файл JRXML и используют собственные источники данных. Вы можете вызвать вложенный отчет отдельно или внутри основного отчета, используя инструмент дополнительного отчета. Источник данных в этом случае указывается в главном JRXML, диалоговом окне свойств подотчета, вкладке Подотчет и отличается от источника данных основного отчета.

Я не совсем понимаю, что вы пытаетесь сделать, но вы также можете предоставить параметры для подотчета, поэтому он фильтрует свои данные на основе текущей строки из основной таблицы.

0 голосов
/ 18 июня 2010

Я разместил ответ на аналогичный вопрос.Вы можете проверить ответ здесь.

Использование iReport с eclipse для правильного создания отчетов

...