java - 如何在具有不同标题的单个报告中打印两个表

标签 java mysql jasper-reports

我正在使用 Java、MySQL 和 iReport-3.7.6。我需要创建一个包含两个表的报告。一个包含机器生产详细信息,另一个包含轮类工作的员工。它应该打印日期和类次。

我可以将员工与机器合并。因为有一名或多名员工在两三台相同的机器上工作。

我需要获得如下报告。

<小时/>
Date:04-03-2015   Shift - I

Sno    Supervisor    Machines      Employees
-----------------------------------------------------------
 1        Arun        1,2,4       Siva,Raj,Ram,James
 2        Kumar        3,5        Balu,Mano,Stephan 

Sno  Machines   WorkMins    Production_kg
--------------------------------------------
 1      1        480             800
 2      2        300             500
 3      3        480             1200
 4      4        480             900
 5      5        480             1000
<小时/>

然后仅日期:04-03-2015 Shift - II,依此类推。

如果我使用子报告概念,例如,我给出一日报告的意思,它会像所有类次的员工表一样打印,然后是当天类次的生产表。但我需要按照上面的方式打印。

有人可以给我一个解决方案来解决这个问题吗?

最佳答案

我认为你可以使用子报表,我知道你需要一个HashMap来构建子报表,那么我建议如下:

1.- 创建三个类:

public class RowEmployee {
private int sno;
private String supervisor;
private int [] machines;
private String [] employees;
// getters and setters
}

public class RowMachinesDetails {
    private int sno;
    private int machine;
    private int workMins;
    private int productinKg;
    // getters and setters
}

public class Shift {
    private Date dateShift;
    private List<TableEmployee> listTableEmployee;
    private List<TableMachinesDetails> listTableMachinesDetails;
    // getters and setters
}

RowEmployee 类用于第一个表,RowMachinesDetails 用于第二个表,Shift 类用于报表的每个类次。正如您所看到的,Shift 类有一个 RowEmployee 列表和一个 RowMachinesDetails 列表,因为这些列表对应于每个表,并且它还有一个与轮类日期相对应的日期。

2.- 在您的列表中填写员工数据和生产数据

List<TableEmployee> listTableEmployee = new ArrayList<TableEmployee>();
List<TableMachinesDetails> listTableMachinesDetails = new ArrayList<TableMachinesDetails>();

//Create instances of TableEmployee and TableMachinesDetails, and fill your lists

listTableEmployee.add(TableEmployee);
listTableMachinesDetails(TableMachinesDetails);

3.- 创建 Shift 的实例并用这些实例填充 HashMap,将 Shift 的编号作为 HashMap 中的键。

//Create instances of Shift

Shift shift = new Shift();

shift.setDateShitf (dateShift);
shift.setListTableEmployee(listTableEmployee);
shift.setListTableMachinesDetails(listTableMachinesDetails);

//Fill the HashMap

hashMapShift.add("I", shift);

4.- 最后,在 iReport 中将数据源创建为 HashMap,并使用 hashMapShift 来填充数据源。

注意:可能变量的类型不合适,最重要的是解决方案的概念。

希望这对您有帮助。

祝你好运。

关于java - 如何在具有不同标题的单个报告中打印两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28852075/

相关文章:

java套接字不接受字节数组

java - xml - StreamResult - 绕过空格错误

java - 如何在java中创建具有值的日期对象

mysql - Sails.js:如何为记录做updatedDate?

jasper-reports - 当我使用 jasper 报告时出现 FileNotFoundException

java - GWT IncompatibleRemoteServiceException

mysql - 如何只显示负值,而让正值全部显示为0?

用于 "IN"语句的变量/字符串的 PHP PDO bindParam ...?

java - 将 Temp 路径指向 JasperReports 中的不同目录以编译报告

java - 哪种方法可以提供更好的性能?