我正在使用JasperReports并填写JRDataSource
其他报告.现在,我想将main传递REPORT_DATA_SOURCE
给子报表.我怎样才能做到这一点?
据我所知,它REPORT_DATA_SOURCE
是一个消耗品,所以它只能使用一次,对吗?我可以复制此数据源并传递它吗?
顺便说一句:我使用iReport来创建布局.
我有一个JasperReport,我将报告日期从主报告传递到子报告.这很好用.我还有另一个我将相同参数传递给具有多个SubReports的子报表.当我在Ireports中预览它时,它的所有页面都显示为空白,这意味着正在调用子子报告,但报告日期未被传递,因为所有子子报告SQL都以报告日期为条件.如何将报告日期字段输入子子报告?当我预览SubReport并在报告日期中输入所有报告日期工作时,所有四个页面都填充了正确的数据.
我有一个包含多个子报告的主报告,每个报告的查询略有不同,并且显示数据的方式也不同.
因此,在我的情况下,我有一个文本框,需要从不同的报告中编写数据,这些报告具有不同的标准.例如
MainReportTextbox =(Sum(columnA, "Main Dataset"))-(SubReportTextBox))
Run Code Online (Sandbox Code Playgroud)
要么
MainReportTextbox =(Sum(columnA, "Main Dataset"))-(subReportVariable))
Run Code Online (Sandbox Code Playgroud)
我看到了一些建议的解决方案,比如这个.哪个使用该=[Reports]!MainReport!SubReport!Textbox
方案.问题是它[Reports]
不是公认的标识符.
我确实考虑废弃子报告,只是让所有内容都在同一个主报表上运行,但我们失去了能够单独使用报表的功能,而不会在两个地方保持相同的功能.
所以我想我的问题是,你能从子报告中提取变量或元素(特别是表格中的文本框)吗?
如果答案是根本没有,请告诉我,为什么它是没有或者它是如何从没有MSDN或有效来源,并给出一些有效的反建议的一些信息.
我正在开发一个java web应用程序,我正在使用maven作为项目管理工具,现在我对这个问题感到疯狂.我尝试从我的应用程序构建一个jasper报告,这个报告由我在src/main/resources中的许多子报告组成.我尝试以下列方式加载这些子报表:
//Sub Report 1
InputStream fileSubRep1=(BufferedInputStream) getClass().getResourceAsStream("/fileSubReport1.jasper");
map.put("fileSubRep1",(JasperReport) JRLoader.loadObject(fileSubRep1));
//Sub Report 2
InputStream fileSubRep2=(BufferedInputStream) getClass().getResourceAsStream("/fileSubReport2.jasper");
map.put("fileSubRep1",(JasperReport) JRLoader.loadObject(fileSubRep2));
Run Code Online (Sandbox Code Playgroud)
问题是这个方法调用JRLoader.loadObject(fileSubRep1)会产生以下异常:
net.sf.jasperreports.engine.JRException: Error loading object from InputStream
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:248)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:228)
at it.aiemonline.report.jasper.GeneraFattureServiceImpl.createMapFileJasper(GeneraFattureServiceImpl.java:292)
at it.aiemonline.report.jasper.GeneraFattureServiceImpl.executeStreamByteFatturaPdf(GeneraFattureServiceImpl.java:890)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:319)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)
at it.aiemonline.utility.logger.SystemLogger.aroundExecuteLog(SystemLogger.java:187)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at …
Run Code Online (Sandbox Code Playgroud) 将iReport v4.0.1与Jasperserver v4.1.0一起使用我正在尝试找到一种语法,用于将子报告链接到主报告,让我在iReport中测试它,然后通过存储库浏览器部署到服务器.
iReport中子报表的子报表的默认语法类似于
$P{SUBREPORT_DIR} + "mySubReport.jasper"
Run Code Online (Sandbox Code Playgroud)
当你从iReport部署它时,它足够聪明,可以选择它并建议将其更改为
"repo:mySubReport.jrxml"
Run Code Online (Sandbox Code Playgroud)
然后将所有子报表部署到主报表的Resources文件夹中.
这很好,但不幸的是它然后在iReport中编辑文件以保存此更改,这意味着您无法再在iReport中运行报告而无需手动重新编辑所有子报表表达式 - 这使得测试和部署到服务器的过程成为可能非常痛苦,特别是当报告中有多个子报告时.
我以为我至少可以将$ P {SUBREPORT}的值设置为"repo:"或"My\local\filepath",这样至少我只有一个地方可以更改它,但是编译器没有像那样.
是否有一个替代结构或表达式将解析为repo:*.jrxml或My\local\filepath*.jasper,具体取决于您运行报告的位置?
如何设置子报告的参数?我已成功连接到SubreportProcessing事件,我可以通过e.ReportPath找到正确的子报告,我可以通过e.DataSources.Add添加数据源.但我发现无法添加报告参数?
我发现人们建议将它们添加到主报告中,但我并不是真的想这样做,因为主报告根本不应该连接到子报告,除了它正在包装分报告.
我使用一个报告作为主模板,打印报告名称,页码等.子报告将成为报告本身.如果我只能找到一种方法来设置子报告的报告参数,我会很高兴...
澄清:创建/定义参数不是问题.问题是设置它们的值.我认为自然要做的就是在SubreportProcessing事件中做到这一点.SubreportProcessingEventArgs实际上有一个Parameters属性.但它是只读的!那你怎么用呢?我怎样才能设定价值?
我想使用子报告,因为它在标题中的许多报告中使用.但是,子报告不会进入标题,也不会显示字段值.虽然,参数会很好.
有关如何绕过这个的任何建议或参考?
Reporting Services 2005
我的布局是这样的:
因此,特定的子报告将在GrpLevel1上运行,并且对于它包含的每个级别2,将运行GrpLevel2下的子报告.
我遇到的问题是子报告想要跳到下一页,在报告中留下空白的空洞.
如果一个子报表包含一个包含大量数据的表,并且它不适合页面的3/4(报表上的第一页上面有报表头的1/4),它会将整个内容跳转到下一页只留下标题,而不是在第一页上打印它.
在桌子上我关闭了"Keep Together".
我很茫然,准备好让我的立方体着火了.我们将非常感谢对此的见解.
更新****************这
已经在SSRS 2008 R2中修复了***********************
它有已修复(SQL Server)Reporting Services 2008 R2.您现在可以在子报表上切换KeepTogether.分页看起来好多了.
我使用 JasperSoft Studio 制作了一份 jasper 报告,其中包含一个子报告。当我在工作室预览它时,效果很好。但是当我将它添加到我的 java fx 项目中时,我必须将子报告作为参数发送到主报告,对吗?
当我这样做时,我不断收到错误消息,指出未找到子报表资源。我不认为有任何拼写错误,因为我尝试过几乎所有包含子报告的报告..仍然继续收到该错误..
这些是我尝试过的事情1.使用jaspersoft studio再次编译报告并将它们再次包含在项目中..2.将jrxml文件包含到项目中并使用编译管理器编译它..3.我阅读了一些教程并问题表明将主报告中的子报告元素的表达式设为
$P{SUBREPORT_DIR} + “subreport_2.jasper”
但我仍然不断收到相同的错误,我不知道我做错了什么下面是我的代码
应用程序中用于查看报告的方法
@FXML
public void btnMarkingSchemeClicked(ActionEvent actionEvent) {
try {
// JasperReport compiledReport = (JasperReport) JRLoader.loadObject(ViewAssignmentsController.class.getResourceAsStream("/edu/ijse/gdse41/ams/reports/MarkingScheme.jasper"));
JasperReport compiledReport = JasperCompileManager.compileReport(ViewAssignmentsController.class.getResourceAsStream("/edu/ijse/gdse41/ams/reports/MarkingScheme.jrxml"));
HashMap<String, Object> parameters = new HashMap<>();
parameters.put("assignID", aid);
parameters.put("course", cmbCourse.getSelectionModel().getSelectedItem().toString());
parameters.put("subject", cmbSub.getSelectionModel().getSelectedItem().toString());
parameters.put("semester", cmbSem.getSelectionModel().getSelectedItem().toString());
parameters.put("assign", ctrlAssign.search(aid).getAssignName());
// JasperReport subReport = (JasperReport) JRLoader.loadObject(ViewAssignmentsController.class.getResourceAsStream("/edu/ijse/gdse41/ams/reports/Answers.jasper"));
JasperReport subReport = JasperCompileManager.compileReport(ViewAssignmentsController.class.getResourceAsStream("/edu/ijse/gdse41/ams/reports/Answers.jrxml"));
parameters.put("subReport", subReport);
JasperPrint fillReport = JasperFillManager.fillReport(compiledReport, parameters, ConnectionFactory.getInstance().getConnection());
JasperViewer.viewReport(fillReport, false);
} catch (JRException | SQLException | ClassNotFoundException ex) { …
Run Code Online (Sandbox Code Playgroud) 我已经创建了一个框架和子报表,用于与APEX集成,并精炼到我准备在JasperServer上部署的地步.不知何故,确切的语法正在打败我.我已经尝试了以下问题所表明的所有变化,但似乎没有任何效果.我正在使用Glassfish,顺便说一句,但我认为这不重要.这是我的问题:
部署子报表时,是作为报表还是作为JRXML文件进行部署?
我是否需要为子报表设置输入控件,如框架报告所传递的那样?
只要我将正确的SUBREPORT_DIR
参数传递给框架,部署子报表(文件夹结构)的位置是否重要?
在那SUBREPORT_DIR
,我尝试了几个不同的东西.首先,我将默认设置作为本地盒子上的绝对路径,用于调试目的,并在URL中传递我想要的值(即...&SUBREPORT_DIR =/Subreports/...).我也尝试将默认设置为我想要的路径.既不起作用,但前者是否应该起作用?
传递的实际语法是SUBREPORT_DIR
什么?我已将框架报告部署为"/ reports/frame",将子报告部署为"/ reports/subreports/sub",因此我传递了"repo:/ Subreports /"(URL中没有引号,默认为引号)在框架上).
我的框架和子工作在iReport中使用与我传递的相同的参数,但它们根本不起作用.我可以在JasperServer下加载sub作为报告,传递params帧传递,然后让它工作,但是当我尝试运行框架时,没有骰子.
在此先感谢所有帮助,我希望一旦我得到正确的配置,我会付清.
subreport ×10
ireport ×3
jasperserver ×2
java ×2
report ×2
c# ×1
datasource ×1
deployment ×1
maven ×1
parameters ×1
reporting ×1
ssrs-2008 ×1