- Membuat DataBase dan Table-tablenya.
Sebagai contoh kasus, disini saya menggunakan hanya 2 table saja yaitu Table Kategori Barang ( T_KATEGORI ) dan Table Barang ( T_BARANG ) saja. Nah pada setiap barang yang terdapat pada T_BARANG pasti mempunyai kategori barang yang terdapat pada T_KATEGORI, sedangkan hubungan antar tablenya kurang lebih sebagai berikut :

Click to View Large Image
Sekarang mari kita buat table-table tersebut dengan cara membuat sebuah script *.sql yang isinya kurang lebih sebagai berikut :
-- Database untuk latihan pembuatan report Master-Detail
drop database if exists rptmasterdetail;
create database rptmasterdetail;
use rptmasterdetail;
drop table if exists T_BARANG;
drop table if exists T_KATEGORI;
-- Bikin table Master
create table T_KATEGORI(
kd_Kategori varchar(5) not null primary key,
nm_Kategori varchar(30) not null,
index kd_Kategori(kd_Kategori)
) type = innodb;
-- Bikin table Detail
create table T_BARANG(
id_Barang integer auto_increment primary key,
kd_Barang varchar(10) not null,
kd_Kategori varchar(5) not null,
nm_Barang varchar(50) not null,
index (kd_Kategori),
foreign key(kd_Kategori) references T_KATEGORI(kd_Kategori) on update cascade
) type = innodb;
/* Proses Insert Data Table Master */
insert into T_KATEGORI(kd_Kategori, nm_Kategori) values("HAAP", "Home Application");
insert into T_KATEGORI(kd_Kategori, nm_Kategori) values("AUD", "Audio");
insert into T_KATEGORI(kd_Kategori, nm_Kategori) values("VID", "Video");
/* Proses Insert Data Table Detail */
insert into T_BARANG(kd_Barang, kd_Kategori, nm_Barang) values("1", "AUD", "MP3 Player");
insert into T_BARANG(kd_Barang, kd_Kategori, nm_Barang) values("2", "VID", "VCD Player");
insert into T_BARANG(kd_Barang, kd_Kategori, nm_Barang) values("3", "HAAP", "Kulkas");
insert into T_BARANG(kd_Barang, kd_Kategori, nm_Barang) values("4", "HAAP", "Rice Cooker");
insert into T_BARANG(kd_Barang, kd_Kategori, nm_Barang) values("5", "AUD", "iPod");
insert into T_BARANG(kd_Barang, kd_Kategori, nm_Barang) values("6", "HAAP", "Blender");
insert into T_BARANG(kd_Barang, kd_Kategori, nm_Barang) values("7", "VID", "DVD Player");
insert into T_BARANG(kd_Barang, kd_Kategori, nm_Barang) values("8", "AUD", "USB MP3 Player");
insert into T_BARANG(kd_Barang, kd_Kategori, nm_Barang) values("9", "AUD", "MP4 Player");
Copy dan simpan script diatas dengan nama RptMasterDetail.sql, setelah tersimpan di komputer anda, sekarang jalankan perintah dibawah ini agar seluruh table dan database yang diperlukan siap untuk digunakan:
[javamaniac@pemula:~/Desktop/MembuatRptMasterDetail]$ mysql -u root -p < RptMasterDetail.sql
Enter password: [masukkan password root pada mysql anda]
[javamaniac@pemula:~/Desktop/MembuatRptMasterDetail]$
Ok sekarang langkah pertama telah selesai dilakukan, sekarang DataBase dan table sudah siap untuk digunakan :) Mari lanjut pada langkah ke 2.
- Membuat New Project dari NetBeans
Setelah langkah pertama selesai, sekarang buatlah sebuah project baru dari NetBeans dengan cara sebagai berikut :
Buatlah New Project dan beri nama
RptMasterDetail untuk isian
Project Name, kemudian tekanlah tombol Finish. Setelah menekan tombol Finish, sekarang klik kanan root project yang terdapat pada Projects Inspector kemudian pilih
New > Folder. Pada jendela New Folder isikan
Report pada Folder Name seperti pada gambar dibawah ini:

Click to View Large Image
Setelah proses diatas, maka sekarang struktur direktori Project kita adalah seperti gambar dibawah ini:

Click to View Large Image
Fungsi dari direktori / Folder Report tersebut adalah sebagai tempat menyimpan report yang akan kita buat melalui iReport. Ok, sekarang lanjut ke langkah ke 3.
- Membuat Master Report dan Detail Report Menggunakan iReport.
Sebelum mulai membuat Master dan Detail Report-nya, jangan lupa buatlah dahuluConnection/Data Source yang mengarah ke database rptmasterdetail yang telah kita buat pada langkah pertama diatas. Pada proses pembuatan Master dan Detail Report ini, proses pembuatan Reportnya dimulai dari Detail Report dahulu baru kemudian membuat Master Reportnya.
* **Proses Pembuatan Detail Report.**
Buatlah New Report dengan cara klik
File > New Document, kemudian pada Report Name isikan
RptDetail sedangkan pada Preset Sizes isikan
NOTE dan pada Page Margin isikan
nilai 0 (nol) untuk Top, Bottom, Left dan Right seperti gambar dibawah ini :

Click to View Large Image
Setelah itu, simpanlah RptDetail ini pada direktori Report/ yang telah dibuat pada langkah 2 diatas. Karena Detail Report ini akan digunakan untuk menampilkan data barang berdasarkan kode kategori, maka sekarang masukkanlah query yang akan mengambil data barang berdasarkan kode kategori yang diinginkan tersebut dan syntax sql untuk melakukan proses diatas adalah sebagai berikut :
SELECT T_BARANG.kd_Barang, T_BARANG.nm_Barang FROM T_BARANG, T_KATEGORI WHERE T_BARANG.kd_Kategori = 'HAAP' GROUP BY T_BARANG.kd_Barang
Pada syntax sql diatas, kita membutuhkan 1 parameter supaya query ini berjalan dengan baik yaitu parameter kd_Kategori. Sekarang mari kita buat sebuah parameter di iReport yang berfungsi untuk menampung kd_Kategori tersebut dengan cara memilih menuView > Parameters, kemudian pada jendela Parameters tekanlah tombol New untuk menambahkan sebuah parameter baru. Setelah itu pada jendela Add/Modify Parameters isikanlah sebagai berikut :
* Parameter Name **PRM_DETAIL_KDKATEGORI**
* Parameter Class Type **java.lang.String**
* Beri centang pada pilihan Use as a Prompt
Setelah menambahkan parameter seperti diatas, sekarang masukkanlah query yang akan mengambil seluruh data barang berdasarkan kode kategori yang kita inginkan dengan cara pilihlah menu
Data > Report Query kemudian isikan seperti gambar dibawah ini:

Click to View Large Image
Seluruh konfigurasi untuk Detail Report telah selesai, sekarang design-lah tampilan Detail Reportnya seperti dibawah ini:

Click to View Large Image
Jika telah selesai, sekarang Compile-lah Detail Report-nya dengan cara memilih menu
Build > Compile dan jika tidak ada kesalahan sekarang jalankanlah Detail Reportnya dengan menggunakan
Active Connection yang bisa diakses di menu
Build > Execute (with active connection). Dan jika tidak ada kesalahan, maka tampilan Detail Report akan muncul seperti gambar dibawah ini:

Click to View Large Image
Setelah memastikan bawha Detail Report sukses dijalankan, sekarang hilangkanlah tanda centang pada parameter
PRM_DETAIL_KDKATEGORI seperti gambar dibawah ini:

Click to View Large Image
Setelah menghilangkan tanda centang, simpanlah Detail Reportnya kemudian Compile lagi dengan cara memilih Build > Compile.
Pembuatan detail report telah selesai, sekarang mari kita buat master reportnya :)
* **Proses Pembuatan Master Report.**
Sekarang buatlah Master Reportnya dengan cara memilih menu File > New Documents kemudian pada Report Name isikan RptMaster kemudian tekan OK.
Setelah itu, simpanlah RptMaster ini pada direktori Report/ yang telah dibuat pada langkah 2 diatas. Karena Master Report ini akan digunakan untuk menampilkan data kategori barang berdasarkan kode kategori yang diinputkan oleh user melalui program java yang kita buat, maka sekarang masukkanlah query yang akan mengambil data barang berdasarkan kode kategori tersebut dan syntax sql untuk melakukan proses diatas adalah sebagai berikut :
SELECT * FROM `T_KATEGORI` T_KATEGORI WHERE kd_Kategori = 'VID'
Pada syntax sql diatas, kita membutuhkan 1 parameter supaya query ini berjalan dengan baik yaitu parameter kd_Kategori. Sekarang mari kita buat sebuah parameter di iReport yang berfungsi untuk menampung kd_Kategori tersebut dengan cara memilih menu View > Parameters, kemudian pada jendela Parameters tekanlah tombol New untuk menambahkan sebuah parameter baru. Setelah itu pada jendela Add/Modify Parameters isikanlah sebagai berikut :
* Parameter Name **PRM_KD_KATEGORI**
* Parameter Class Type **java.lang.String**
* Beri centang pada pilihan Use as a Prompt
Setelah menambahkan parameter seperti diatas, sekarang masukkanlah query yang akan mengambil seluruh data kategori barang berdasarkan kode kategori yang kita inputkan dengan cara pilihlah menu
Data > Report Query kemudian isikan seperti gambar dibawah ini:

Click to View Large Image
Jika telah selesai sekarang coba jalankan dengan menggunakan
Active Connection, dan jika tidak ada kesalahan maka Master Report akan tampil seperti gambar dibawah ini:

Click to View Large Image
Setelah Master Report berjalan dengan baik, sekarang waktunya untuk mulai menambahkan Sub-Report atau Detail Report yang telah kita buat pada langkah sebelumnya kedalam Master Report. Untuk menambahkan Sub-Report, tekanlah tombol yang terdapat pada Toolbar seperti gambar dibawah ini:

Click to View Large Image
Setelah menekan tombol Add SubReport, sekarang klik dan geretlah mouse kedalam detail area pada master report. Setelah selesai mengatur tempat dimana SubReport akan ditempatkan, maka secara otomatis akan muncul sebuah jendela pertanyaan yang menanyakan apakah kita ingin membuat report baru, menggunakan report yang sudah ada atau hanya membuat sebuah element subreport saja.
Pada jendela pertanyaan tersebut, pilihlah pilihan nomor 2 yaitu
Use an existing report, kemudian tekanlah tombol
Browse dan arahkan ke tempat dimana kita menyimpan Detail Report kita (RptDetail.jasper) seperti gambar dibawah ini:

Click to View Large Image
Kemudian tekanlah tombol Next, kemudian pada jendela
Connection / DataSource parameters pilihlah opsi
Use the same connection to fill the master … seperti gambar dibawah ini:

Click to View Large Image
Pada jendela Subreport parameters, tekanlah Next karena parameter yang terdapat pada Detail Report akan otomatis terdeteksi. Setelah menekan tombol Next, maka jendela selanjutnya yang akan tampil adalah jendela
Subreport expression. Pada jendela
SubReport expression ini, pilihlah opsi yang pertama yaitu
Store the directory name in a parameter. seperti gambar dibawah ini:

Click to View Large Image
Setelah menekan tombol Finish, sekarang design-lah tampilan Master Report-nya hingga menjadi seperti gambar dibawah ini:

Click to View Large Image
Sebelum mulai menjalankan Master Reportnya, sekarang editlah dahulu
Default Value Expression dari parameter
SUBREPORT_DIR seperti gambar dibawah ini :

Click to View Large Image
Setelah meng-edit parameter SUBREPORT_DIR menjadi seperti diatas, sekarang tambahkanlah sebuah parameter untuk Detail Report-nya. Parameter yang akan dikirim ke Detail Report ini adalah parameter kode kategori hasil dari proses query pada Master Report, mengapa kita perlu mengirimkan kode kategori ke Detail Report ? Karena Detail Report ini berfungsi untuk menampilkan data barang berdasarkan kode kategori yang telah ditampilkan di Master Report.
Karena pada proses pembuatan Detail Report diatas, kita sudah membuat sebuah parameter dengan nama
PRM_DETAIL_KDKATEGORI. Maka sekarang tambahkanlah sebuah parameter yang akan diterima oleh Detail Report dengan cara klik kanan Sub-Report, kemudian pilihlah properties. Setelah jendela SubReport properties muncul, masuklah pada tab
Subreport (Other) kemudian pada tab Subreport parameters isikanlah nilai seperti dibawah ini:

Click to View Large Image
Setelah menambahkan parameter untuk sub-reportnya, sekarang cobalah untuk menjalankannya dengan menggunakan
Active Connection. Jika tidak ada langkah yang terlewati, seharusnya Master Detail Report anda akan tampil seperti gambar dibawah ini:

Click to View Large Image
Jika tampilan report yang ada dihadapan anda sudah seperti gambar diatas, sekarang waktunya untuk mulai memanggil report yang telah kita buat menggunakan iReport ini dari IDE NetBeans dan lanjut ke langkah ke 4 :)
- Memanggil Master-Detail Report Dari Program Java.
Sebelum melangkah ke tahapan selanjutnya, tambahkanlah dahulu library-library yang diperlukan untuk dapat menjalankan Report yang telah kita buat dengan iReport. Beberapa library yang dibutuhkan terlihat seperti gambar dibawah ini:

Click to View Large Image Note : Semua library tersebut, dapat diambil dari direktori lib/ tempat anda menginstal iReport.
Setelah menambahkan library-library yang dibutuhkan, sekarang buatlah sebuah JFrame baru dan tambahkanlah beberapa komponen sehingga nampak seperti gambar dibawah ini:

Click to View Large Image
Sedangkan untuk JComboBox, gantilah modelnya dengan cara klik kanan komponen JComboBox kemudian pada panel Properties pilihlah model. Setelah itu untuk isian Item, gantilah seluruh nilai default dengan AUD, HAAP dan VID hingga seperti gambar dibawah ini:

Click to View Large Image
Setelah mengganti model JComboBox, sekarang beri ActionEvent pada JButton yang berfungsi untuk menampilkan Reportnya dengan cara klik kanan pada JButton kemudian pilih Action > actionPerformed kemudian pastekan kode dibawah ini:
this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
Properties systemProp = System.getProperties();
// Ambil current dir
String currentDir = systemProp.getProperty("user.dir");
File dir = new File(currentDir);
String reportName = "RptMaster.jrxml";
String reportDirName = "Report";
File fileRpt;
String fullPath = "";
if (dir.isDirectory()) {
String[] isiDir = dir.list();
for (int i = 0; i < isiDir.length; i++) {
fileRpt = new File(currentDir + File.separatorChar + isiDir[i] + File.separatorChar +
reportDirName + File.separatorChar + reportName);
if (fileRpt.isFile()) { // Cek apakah file RptMaster.jrxml ada
fullPath = fileRpt.toString();
System.out.println("Found Report File at : " + fullPath);
} // end if
} // end for i
} // end if
// Ambil Direktori tempat file RptMaster.jrxml berada
String[] subRptDir = fullPath.split(reportName);
String reportDir = subRptDir[0];
System.out.println("Report Directory at : " + reportDir);
// Ambil Kode Kategori
final String paramKdKategori = jComboBox1.getSelectedItem().toString();
Connection con = null;
try {
String jdbcDriver = "com.mysql.jdbc.Driver";
Class.forName(jdbcDriver);
String url = "jdbc:mysql://localhost/rptmasterdetail";
String user = "root";
String pass = "rahasia";
con = (Connection) DriverManager.getConnection(url, user, pass);
Statement stm = (Statement) con.createStatement();
// Persiapkan parameter untuk Report
Map parameters = new HashMap();
parameters.put("PRM_KD_KATEGORI", paramKdKategori);
parameters.put("SUBREPORT_DIR", reportDir);
try {
JasperReport JRpt = JasperCompileManager.compileReport(fullPath);
JasperPrint JPrint = JasperFillManager.fillReport(JRpt, parameters, con);
JasperViewer.viewReport(JPrint, false);
} catch (Exception rptexcpt) {
System.out.println("Report Can't view because : " + rptexcpt);
}
} catch (Exception e) {
System.out.println(e);
}
this.setCursor(Cursor.getDefaultCursor());
Setelah menambahkan ActionEvent pada JButton, ada 1 langkah lagi yang harus dilakukan yaitu kopikan
file .jrxml dan file .jasper yang terdapat pada direktori Report/ kedalam direkotri build/ dan dist/. Sedangkan cara untuk meng-kopikan secara otomatis yaitu dengan meng-edit file build.xml, untuk mengedit file build.xml bukalah menu Files Inspector kemudian klik kanan pada file build.xml seperti gambar dibawah ini:

Click to View Large Image
Setelah file build.xml terbuka, sekarang pastekanlah kode dibawah ini pada baris ke 68 :
Setelah itu simpan kemudian coba jalankan dengan menekan tombol F6, dan jika tidak ada masalah maka Report yang telah kita buat akan ditampilkan dari program java kita seperti gambar dibawah ini: