报表制作2(传入一个sql主键 含子报表)

Posted 小晓菜鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了报表制作2(传入一个sql主键 含子报表)相关的知识,希望对你有一定的参考价值。

转自:http://www.cnblogs.com/ms-grf/p/6756243.html

 

报表js

复制代码
$scope.printCpTempletMasterDetail = function (cpId) {
        var parameters = {
            reportFileName: "reports/doctorstation/CpTempletMasterDetail.jasper",
            parameters: {
                \'cpId\': cpId
            }
        };
        var printInfoObject = {
            type: "report",
            appletParameters: {
                is_direct_print: true,
                is_display: false,
                printer_name: null,
                report_url: "api/jasper-prints/doctor-station/cp-order-detail"
            },
            reportParameter: parameters
        };
        HrUtils.postMessageToBaseFrame(printInfoObject, "*");
    };
复制代码

 

报表DoctorstationPrintResource.java

复制代码
package com.heren.his.report.api;

import com.heren.his.report.facade.DoctorstationPrintFacade;
import com.heren.his.report.vo.JasperPrintParamsVo;
import net.sf.jasperreports.engine.JasperPrint;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;

@Path("doctor-station")
public class DoctorstationPrintResource {
    @javax.inject.Inject
    private DoctorstationPrintFacade doctorstationPrintFacade;

    /**
     * 打印路径明细
     * @param parameters
     * @return
     */
    @GET
    @Path("cp-order-detail")
    @Produces({MediaType.APPLICATION_OCTET_STREAM})
    public JasperPrint fillCpTempletMasterDetailReport(@QueryParam("parameter") JasperPrintParamsVo parameters){
        return doctorstationPrintFacade.fillCpTempletMasterDetailReport(parameters);
    }
}
复制代码

 

报表DoctorstationPrintFacade.java

复制代码
package com.heren.his.report.facade;


import com.google.common.base.Strings;
import com.heren.his.report.common.HrResultSet;
import com.heren.his.report.vo.JasperPrintParamsVo;
import com.heren.his.report.vo.doctorstation.ErOutpBloodDetail;
import com.heren.his.report.vo.doctorstation.ErOutpBloodVO;
import com.heren.his.report.vo.doctorstation.MedicalRecordInfoVO;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.data.JRMapCollectionDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.inject.Inject;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import static com.heren.his.report.util.ReportUtils.obtainJasperReportByFileName;

public class DoctorstationPrintFacade extends BaseJasperFillFacade {

    private static final Logger LOGGER = LoggerFactory.getLogger(DoctorstationPrintFacade.class);

    @Inject
    private MedicalInfoDataFacade medicalInfoDataFacade;

    /**
     * 打印路径医嘱明细
     *
     * @param jasperPrintParamsVo
     * @return
     */
    public JasperPrint fillCpTempletMasterDetailReport(JasperPrintParamsVo jasperPrintParamsVo) {
        LOGGER.debug("填充报表[{}];填充时使用参数:[{}]。", jasperPrintParamsVo.getReportFileName(), jasperPrintParamsVo.getParameters());
        Map reportParam = jasperPrintParamsVo.getParameters();//js里面的cpId
        reportParam.put("SUBREPORT_DIR", "reports/doctorstation/");
        return hrFillReportWithConnection(obtainJasperReportByFileName(jasperPrintParamsVo.getReportFileName()), reportParam);
    }
}
复制代码

 

报表

1:创建主报表master.jrxml

先在master.jrxml新建两个parameters,名字是上面代码中红色标注的 如下图

cpId是用来写sql的主键,而SUBREPORT_DIR是用来连接子报表的一个地址

开始写master.jrxml的sql语句如下图

 

  写完sql点击Read Fields就可以把master.jrxml里用到的参数放置在Fields里面了

完善master.jrxml

2:建立子报表 nurse.jrxml

  下面这个STAGE_ID是从父报表传到子报表的参数(因为子报表也需要写sql也需要查询条件)

   子报表建立完成

 

最主要的一点配置子报表如下

然后把连接子报表的SUBREPORT_DIR变量设置一下如下

生成.jasper文件如下

做测试如下

以上是关于报表制作2(传入一个sql主键 含子报表)的主要内容,如果未能解决你的问题,请参考以下文章

我是不是可以在按 ID 分组的 tablix 行中包含子报表?

报表制作1(传入对象和其他参数)

cognos怎么制作好看的报表

SQL Server 2008 报表服务入门

如何用FastReport制作动态报表

C# 向RDLC报表传入参数出错 急求解答!!