我正在使用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
,依此类推。
如果我使用子报表概念,例如,我给出了一天的报表方式,它打印所有班次的员工表,然后是那天的班次生产表。但我需要打印如上。
有人能给我一个解决方案来克服这个问题吗?
答案 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填充数据源。
注意:也许变量的类型不合适,最重要的是解决方案的概念。
我希望这会对你有所帮助。
祝你好运。