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

时间:2015-03-04 10:28:28

标签: 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

然后只有Date:04-03-2015 Shift - II,依此类推。

如果我使用子报表概念,例如,我给出了一天的报表方式,它打印所有班次的员工表,然后是那天的班次生产表。但我需要打印如上。

有人能给我一个解决方案来克服这个问题吗?

1 个答案:

答案 0 :(得分:0)

我认为您可以使用子报告,我知道您需要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填充数据源。

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

我希望这会对你有所帮助。

祝你好运。