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 malu akhirnya percakapan saya dengan mas dany yang berlangsung lewat chatting di YahooMessenger hanya sekedar sharing saja :D 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 :D jadi daripada buat baru lagi mending pakai yang lama :P


Sedangkan langkah-langkah untuk membuat nomor urut di report yang dihasilkan oleh iReport adalah sebagai berikut:

  1. 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:
    report_template
    Click to large
  2. 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 :
    isi_variabel_nourut
    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.

  3. Sekarang pada report template tambahkanlah Static Text dan Text Field kemudian aturlah seperti gambar dibawah ini:
    tampilan_report_no
    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:
      staticfieldconf
      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:
      textfieldconf
      Click to large

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

    Hmm… 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 :D (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:
      newparamter
      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:
      edittextfield
      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:
    reportfixjadi
    Click to large

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 ;)

67 Responses to “Membuat No. Urut di iReport”

  1. angel says:

    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 :D 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 ? :D Maaf loh ya, klo jawaban saya mulek* (berbelit-belit), belum pernah kejadian spt itu soalnya saya :D

    • angel says:

      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. >.<

    • angel says:

      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

  2. angel says:

    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.

    Pakai tipe data BigDecimal yah ? Kalau pakai BigDecimal jangan pakai method setScale(), tapi gunakanlah Rounding Mode yang terdapat di class BigDecimal :D 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

  3. angel says:

    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?

    • angel says:

      gjd mas. uda bisa. saya buat parameter u/ dikalikan dengan total. terinspirasi dari cara mas buat nambahin no urut itu. :)

    • angel says:

      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.

  4. angel says:

    akhirnya pake cara mas martinus aj dhe. bisa jalan dengan baik di tpt saya. Thx ya mas buat artikelnya. Sangat membantu! ^o^

  5. Hmm.. bisa kirimin contoh project-nya tidak ? :D Sekalian versi iReportnya :) Nanti klo saya ada waktu, saya bantu deh utk fixing-nya :)

  6. endar says:

    Pertanyaan tambahan, gimana kalo kita menginginkan pada halaman baru no urutnya dimulai dari no 1 lagi
    thanks

Leave a Reply

[+] adsenseid emoticons by Martinus Ady H. Modified from nartzco source code.