Membuat No. Urut di iReport
Sabtu siang kemarin saya ditanya sama mas dany tentang bagaimana cara membuat nomor urut di Report yang dibuat dengan iReport, berhubung saya sendiri belum pernah coba
akhirnya percakapan saya dengan mas dany yang berlangsung lewat chatting di YahooMessenger hanya sekedar sharing saja
dan saya janji untuk mencoba dirumah kemudian menuliskan hasilnya di blog.
Ok sekarang kita langsung saja ke inti permasalahannya yaitu membuat nomor urut pada report yang dibuat menggunakan iReport, sedangkan bahan latihan yang digunakan pada latihan kali ini saya menggunakan Template Report yang sama pada posting “Reporting dengan NetBeans” kemarin. Karena report yang kemarin belum terdapat nomor urutnya
jadi daripada buat baru lagi mending pakai yang lama
Sedangkan langkah-langkah untuk membuat nomor urut di report yang dihasilkan oleh iReport adalah sebagai berikut:
- Pertama-tama buka dahulu report yang telah dibuat kemarin (kalau belum punya silahkan baca dulu posting kemaren tentang “Reporting dengan NetBeans”) seperti tampilan pada gambar dibawah ini:

Click to large - Sekarang tambahkanlah sebuah variabel baru dengan cara memilih menu View > Variable, kemudian pada jendela Variable tekanlah tombol New untuk menambahkan sebuah variabel baru. Setelah itu pada jendela Add/Modify Variable isikanlah sebagai berikut :
- Variable Name NOURUT
- Variable Class Type java.lang.Integer
- Calculation Type count
- Reset Type None
- Increment Type None
- Variable Expression $V{NOURUT}
hingga tampilannya menjadi seperti berikut :

Click to large
Setelah itu tekanlah OK untuk menutup jendela Add/Modify Variable dan tekanlah close pada jendela Variable hingga kembali ke tampilan report template. - Sekarang pada report template tambahkanlah Static Text dan Text Field kemudian aturlah seperti gambar dibawah ini:

Click to large
Keterangan konfigurasi Static Text dan Text Field adalah sebagai berikut:- Untuk Static Text, klik kanan kemudian pilihlah Properties kemudian pada jendela Static Text Properties pilihlah Tab Static Text kemudian isikan No. seperti gambar dibawah ini:

Click to large - Untuk Text Field, klik kanan kemudian pilihlah Properties kemudian pada jendela Text Field Properties pilihlah Tab Text Field kemudian isikan sebagai berikut:
- Text Field Expression Class java.lang.Integer
- Text Field Expression $V{NOURUT}
sehingga tampilannya menjadi seperti gambar dibawah ini:

Click to large
Sudah selesai, sekarang coba jalankan dan jika tidak terjadi error maka tampilan report anda akan tampil seperti pada gambar dibawah ini:

Click to largeHmm… tapi koq ada yang aneh ya ? Angka pertama koq nol bukannya satu ? Ok supaya angka pertama bernilai satu dan bukannya nol, sekarang mari kita buat sebuah parameter yang mempunyai nilai awal = 1 dan akan ditambahkan pada variabel NOURUT. Mengapa ditambahkan ke variabel NOURUT ? Karena variabel NOURUT nilai awalnya = 0 dan parameter yang akan kita buat ini akan dikirimkan setiap kali kita menjalankan reportnya
(kwkw.. kenapa saya membuat sebuah parameter baru, soalnya saya belum menemukan bagaimana cara meng-incrementkan variabel NOURUT
)Ok untuk cara-cara pembuatan sebuah parameter baru yaitu :
- Pilih menu View Parameters kemudian pada jendela Parameters tekanlah tombol New untuk mulai menambahkan parameter baru. Kemudian pada jendela Add/Modify parameter isikanlah sebagai berikut:
- Parameter Name DEFA_VALUE
- Parameter Class Type java.lang.Integer
- Default Value Expression new Integer(“1″)
hingga tampilannya seperti dibawah ini:

Click to large - Setelah menambahkan parameter baru, sekarang editlah Text Field yang telah ditambahkan pada langkah ke 3 diatas dengan cara klik kanan kemudian pilihl properties setelah itu pada jendela Text Field Properties pilihlah Tab Text Field kemudian pada kolom isian Text Field Expression isikan seperti dibawah ini:
new Integer($V{NOURUT}.intValue()+$P{DEFA_VALUE}.intValue())
hingga tampilannya menjadi seperti gambar dibawah ini:

Click to large
Setelah melakukan pengeditan seperti diatas, sekarang coba jalankan lagi report anda dan jika tidak ada error maka tampilan report anda akan tampak seperti gambar dibawah ini:

Click to large - Untuk Static Text, klik kanan kemudian pilihlah Properties kemudian pada jendela Static Text Properties pilihlah Tab Static Text kemudian isikan No. seperti gambar dibawah ini:
Hmm… sekarang reportnya sudah mempunyai nomor urut dan kelihatan lebih rapi
Mudah bukan ?? Silahkan dicoba dan kalau masih bingung silahkan ditanyakan. Kritik, saran dan komentar sangat-sangat ditunggu


Sebenernya mas, saya tu mau menampilkan angka menjadi bilangan. Jd saya buat class scriplet u/ buat fungsi terbilang. Fungsi terbilang ini, menerima angka desimal dengan 2 angka di belakang koma.
Di i-report saya punya variable sbb:
- total = $F{pu_detail_ordqty}.multiply($F{pu_detail_price}, MathContext.DECIMAL32)
- subtotal = $V{total}
- tax = $V{subtotal}.multiply($P{persentase}, MathContext.DECIMAL32)
- grandtotal = $V{subtotal}.add( $V{tax})
- terbilang (method di scriplet class) = $P{REPORT_SCRIPTLET}.terbilang($V{grandtotal}.toString(),$F{bb_currency_curdes}.toLowerCase())
Contoh angka2-nya:
- subtotal = 1,875,000.03
- tax = 187,500.00
- grandtotal = 2,062,500.03
Nah ketika saya run reportnya, fungsi terbilang itu malah menampilkan bilangan “seratus sembilan puluh delapan ribu rupiah” -> 2,062,500.03 (seharusnya angka di grandtotal).
Tp saya tes ketika variabel terbilang saya ubah menjadi mengubah angka di subtotal menjadi bilangan: $P{REPORT_SCRIPTLET}.terbilang($V{subtotal}.toString(),$F{bb_currency_curdes}.toLowerCase())
Hasilnya bener lho mas: “satu juta delapan ratus tujuh puluh lima ribu rupiah koma tiga sen” -> 1,875,000.03.
Knp bisa begitu ya mas? Kenapa kalau saya ambil yg grandtotal hasilnya jd ngaco? Apa karna grandtotal merupakan hasil penambahan antara subtotal dengan tax, sedangkan subtotal hanya menjumlah (SUM) dari total?
Bingung nih mas dari td gmn cara benerinnya. Mohon bantuannya dnx mas. ^^
Hm… saya jg belum pernah mengalami kasus seperti diatas
Udah dicoba gini aja, bikin 1 variabel lagi, tapi isi variabel tersebut merupakan nilai dari variabel grandtotal. Jadi variabel didalam variabel, nah baru kemudian coba deh variabel baru yang isinya sama ama grandtotal itu di kirim ke scriplet. Bisa ga ?
Maaf loh ya, klo jawaban saya mulek* (berbelit-belit), belum pernah kejadian spt itu soalnya saya
ga ngaruh mas. masi sama hasilnya. T.T
Kayanya saya baru sadar mas angka 1.980.000 itu dapetnya dari mana. Btw, saya coba antara MathContext.DECIMAL32 dengan setScale(2, RoundingMode.HALF_EVEN) hasilnya sama, jd saya coba ganti pake setScale.
Jd saya set tax = $V{subtotal}.multiply($P{persentase}).setScale(2, RoundingMode.HALF_EVEN). Maunya kan yg dibulatkan itu yg angka di belakang koma. Tp sepertinya yang dibulatkan itu 2 angka pertama (di depan).
Jdnya subtotal yg hasilnya 1,875,000.03 dibulatkan menjadi 1,800,000.00. Tax yg hasilnya 187,500.00 dibulatkan menjadi 180,000.00
Jadinya grandtotalnya = 1,980,000.00 . Makanya terbilangnya jadi satu juta sembilan ratus delapan puluh ribu rupiah.
Gmn cara pembulatan yg bener ya mas? Masalah di pembulatannya nih. >.<
Tambahan mas.
Tp saya jg bingung ya, kenapa saat menjadi bilangan aj ngaconya. Padahal ketika grandtotal itu saya tampilkan angkanya, hasilnya bener. grandttotal = 1,875,000.03 + 187,500.00 = 2,062,500.03
Pakai tipe data BigDecimal yah ? Kalau pakai BigDecimal jangan pakai method setScale(), tapi gunakanlah Rounding Mode yang terdapat di class BigDecimal
Btw coba deh cek dulu API dari BigDecimal disini[1], dan cek juga macam-macam RoundingMode yang terdapat di java disini[2]
[1] http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html
[2] http://java.sun.com/j2se/1.5.0/docs/api/java/math/RoundingMode.html
btw mas, OOT dikit nih. Kalau mau melakukan perkalian bilangan desimal gmn caranya mas di i-Report? Jd saya punya variabel total (java.math.BigDecimal), dan saya mau menghitung pajak dari total, yaitu 10% dari total.
tp saya coba kalikan dengan 0.1 tidak bisa. Katanya 0.1 itu tipe datanya double. Gmn caranya mengubah 0.1 itu jd BigDecimal?
gjd mas. uda bisa. saya buat parameter u/ dikalikan dengan total. terinspirasi dari cara mas buat nambahin no urut itu.
mas nanya lagi ya. >.<
kalau mau membulatkan bilangan desimal menjadi 2 angka di belakang koma aj gmn ya caranya? kok pake set scale ga ngaruh ya.
akhirnya pake cara mas martinus aj dhe. bisa jalan dengan baik di tpt saya. Thx ya mas buat artikelnya. Sangat membantu! ^o^
Owh dah bisa to ? Hehehehe.. ya baguslah kalau begitu
Hmm.. bisa kirimin contoh project-nya tidak ?
Sekalian versi iReportnya
Nanti klo saya ada waktu, saya bantu deh utk fixing-nya
Pertanyaan tambahan, gimana kalo kita menginginkan pada halaman baru no urutnya dimulai dari no 1 lagi
thanks