Laporan Rekap Transaksi - iReport
1. Buka explorer, cari lokasi proyek "pfm" disimpan, buka folder "web", kemudian buat folder dengan nama "laporan".
2. Buka folder "iReport-3.0.0"
3. Klik kanan "open" atau klik ganda saja pada berkas "iReport.sh", apabila ada pertanyaan, pilih "execute".
4. Setelah muncul iReport, tekan tombol "ctrl+n". Muncul jendela "Report properties", sesuaikan pengaturan dengan kehendak, jangan lupa beri nama dengan "rekap transaksi".
5. Tekan "ctrl+s" untuk menyimpan berkas. Berkas disimpan pada folder baru tersebut (folder "laporan").
6. Secara bawaan, terdapat beberapa bagian yang tampil, yakni "title" (hanya muncul di halaman pertama), "pageHeader" (selalu muncul di setiap halaman), "columnHeader", "detail", "columnFooter" (selalu muncul di setiap halaman), "lastPageFooter" (hanya muncul di akhir halaman), dan "summary" (hanya muncul di akhir halaman). Terdapat 1 bagian spesial yang bernama "bacground", di mana gambar latar belakang di atur di sini.
7. Pada tab "document structure" terdapat beberapa kategori, yaitu "parameters" (dikirim dari luar laporan), "fields", "variables" (rumus) dan bagian-bagian yang ada di iReport. Semua tipe data yang ditangani harus ada kesesuaian, baik yang berasal dari laporan itu sendiri (misal: penggunaan ke dalam rumus) atau hasil kiriman dari luar laporan (misal: dari "*.java"), selain itu akan terjadi kesalahan.
8. Untuk menambahkan "parameters" atau "fields" atau "variables", cukup klik kanan pada "document structure", kemudian pilih "add..." dan pilih yang diinginkan.
9. Laporan ini berdasarkan permintaan "v_rekap" yang di dalamnya terdapat kolom "idtransaksi", "idpengguna", "nominal", "bulan", "tahun", "namaitem", "alurkas". Tidak semua kolom ditampilkan. Buatlah "field" pada iReport untuk "nominal" (integer), "namaitem" (string) dan alurkas (boolean). Buatlah "parameter" dengan nama "namapengguna" (string) dan "periode" (string). Buatlah "variable" dengan nama "vnominal" (integer) dan isikan pada "variabel expression" rumus
( $F{alurkas}.booleanValue() == true ? $F{nominal} : new java.lang.Integer (-1 * $F{nominal}.intValue()) )
yang artinya apabila alurkas bernilai benar, maka nominalnya bernilai positif, selain itu nominalnya bernilai negatif.
1. Buka explorer, cari lokasi proyek "pfm" disimpan, buka folder "web", kemudian buat folder dengan nama "laporan".
2. Buka folder "iReport-3.0.0"
3. Klik kanan "open" atau klik ganda saja pada berkas "iReport.sh", apabila ada pertanyaan, pilih "execute".
4. Setelah muncul iReport, tekan tombol "ctrl+n". Muncul jendela "Report properties", sesuaikan pengaturan dengan kehendak, jangan lupa beri nama dengan "rekap transaksi".
5. Tekan "ctrl+s" untuk menyimpan berkas. Berkas disimpan pada folder baru tersebut (folder "laporan").
6. Secara bawaan, terdapat beberapa bagian yang tampil, yakni "title" (hanya muncul di halaman pertama), "pageHeader" (selalu muncul di setiap halaman), "columnHeader", "detail", "columnFooter" (selalu muncul di setiap halaman), "lastPageFooter" (hanya muncul di akhir halaman), dan "summary" (hanya muncul di akhir halaman). Terdapat 1 bagian spesial yang bernama "bacground", di mana gambar latar belakang di atur di sini.
7. Pada tab "document structure" terdapat beberapa kategori, yaitu "parameters" (dikirim dari luar laporan), "fields", "variables" (rumus) dan bagian-bagian yang ada di iReport. Semua tipe data yang ditangani harus ada kesesuaian, baik yang berasal dari laporan itu sendiri (misal: penggunaan ke dalam rumus) atau hasil kiriman dari luar laporan (misal: dari "*.java"), selain itu akan terjadi kesalahan.
8. Untuk menambahkan "parameters" atau "fields" atau "variables", cukup klik kanan pada "document structure", kemudian pilih "add..." dan pilih yang diinginkan.
9. Laporan ini berdasarkan permintaan "v_rekap" yang di dalamnya terdapat kolom "idtransaksi", "idpengguna", "nominal", "bulan", "tahun", "namaitem", "alurkas". Tidak semua kolom ditampilkan. Buatlah "field" pada iReport untuk "nominal" (integer), "namaitem" (string) dan alurkas (boolean). Buatlah "parameter" dengan nama "namapengguna" (string) dan "periode" (string). Buatlah "variable" dengan nama "vnominal" (integer) dan isikan pada "variabel expression" rumus
( $F{alurkas}.booleanValue() == true ? $F{nominal} : new java.lang.Integer (-1 * $F{nominal}.intValue()) )
yang artinya apabila alurkas bernilai benar, maka nominalnya bernilai positif, selain itu nominalnya bernilai negatif.
10. Hilangkan bagian "title", "columnFooter", "lastPageFooter", dan "summary" dengan cara membuat tingginya menjadi 0 atau dirapatkan menggunakan tetikus.
11. Masukkan "field" "namaitem" dan "variabel" "vnominal" ke dalam detail. Atur posisi sesuai dengan kehendak. Apabila item dipilih, maka garisnya akan berubah menjadi oranye dan ada 8 titik yang berwarna ungu apabila item tersebut tidak bertabrakan dengan item yang lain. Apabila item-item bertabrakan, maka titiknya berwarna hijau. Buat 2 buah "static text" ke dalam "columnHeader" serta ubah labelnya menjadi "Nama Item" dan "Nominal". Klik kanan pada "text field" "$V{vnominal}", kemudian pilih "properties". Muncul jendela "rekap transaksi", pilih tab "font". Ubah "horizontally align" menjadi "right". Pilih tab "text field", kemudian tombol "create...". Muncul jendela "pattern editor", pilih "number". Ubah pada "decimal places" menjadi 0 dan centang "use 1000 separator". Klik tombol "apply", kemudian tutup jendela "rekap transaksi".
12. Buat 2 buah "static text" ke dalam "pageHeader" serta ubah labelnya menjadi "Nama Pengguna" dan "Periode" dalam posisi vertikal. Masukkan "parameter" "namapengguna" dan "periode" ke dalam "pageHeader", posisikan sesuai dengan labelnya.
13. Untuk hasil yang terbaik: jangan sampai item-item bertabrakan, tinggi item lebih tinggi daripada tinggi huruf serta kesamaan jenis huruf pada "font" dan "pdf font".
14. Tekan menu "Build" > "Compile". Buka folder "iReport-3.0.0", buka folder "bin" dan kopikan "rekap transaksi.jasper" ke dalam folder "laporan".
11. Masukkan "field" "namaitem" dan "variabel" "vnominal" ke dalam detail. Atur posisi sesuai dengan kehendak. Apabila item dipilih, maka garisnya akan berubah menjadi oranye dan ada 8 titik yang berwarna ungu apabila item tersebut tidak bertabrakan dengan item yang lain. Apabila item-item bertabrakan, maka titiknya berwarna hijau. Buat 2 buah "static text" ke dalam "columnHeader" serta ubah labelnya menjadi "Nama Item" dan "Nominal". Klik kanan pada "text field" "$V{vnominal}", kemudian pilih "properties". Muncul jendela "rekap transaksi", pilih tab "font". Ubah "horizontally align" menjadi "right". Pilih tab "text field", kemudian tombol "create...". Muncul jendela "pattern editor", pilih "number". Ubah pada "decimal places" menjadi 0 dan centang "use 1000 separator". Klik tombol "apply", kemudian tutup jendela "rekap transaksi".
12. Buat 2 buah "static text" ke dalam "pageHeader" serta ubah labelnya menjadi "Nama Pengguna" dan "Periode" dalam posisi vertikal. Masukkan "parameter" "namapengguna" dan "periode" ke dalam "pageHeader", posisikan sesuai dengan labelnya.
13. Untuk hasil yang terbaik: jangan sampai item-item bertabrakan, tinggi item lebih tinggi daripada tinggi huruf serta kesamaan jenis huruf pada "font" dan "pdf font".
14. Tekan menu "Build" > "Compile". Buka folder "iReport-3.0.0", buka folder "bin" dan kopikan "rekap transaksi.jasper" ke dalam folder "laporan".
Halaman Rekap Transaksi
View: [ Web Pages/laporan/rekap.zul ]
<?xml version="1.0" encoding="UTF-8"?>
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" arg0="win" ?>
<zk xmlns="http://www.zkoss.org/2005/zul">
<window width="800px" id="win" apply="control.rekap">
<panel zindex="2">
<panelchildren>
<grid>
<columns>
<column width="150px"/>
<column width="600px"/>
</columns>
<rows>
<row spans="2" align="center">
<label value="Rekap Transaksi"/>
</row>
<row>
<label value="Tahun Transaksi mulai" style="font-weight:bold;color:red"/>
<hbox>
<intbox id="intMulai" />
<label value=" s.d. " />
<intbox id="intAkhir" />
<button id="btnTampil1" label="Tampilkan" image="../image/presentasi.png" />
</hbox>
</row>
<row>
<label value="Tahun Transaksi dalam" style="font-weight:bold;color:red"/>
<hbox>
<textbox id="txtTahun" />
<label value=" pisah dengan tanda koma, misal: 2010, 2011" />
<button id="btnTampil2" label="Tampilkan" image="../image/presentasi.png" />
</hbox>
</row>
</rows>
</grid>
<jasperreport id="laporan" type="pdf" height="400px" />
</panelchildren>
</panel>
</window>
</zk>
Controller: [ Sources Package/control/index.java ]
package control;
import dao.VRekap;
import formater.tipedata;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;
import org.zkoss.zk.ui.Sessions;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zkex.zul.Jasperreport;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Window;
public class rekap extends GenericForwardComposer
{
static EntityManagerFactory emf = Persistence.createEntityManagerFactory("dao-persistence-pfmPU");
static EntityManager emTabel = emf.createEntityManager();
private List dataList;
private Jasperreport laporan;
private Map reportParam;
protected Window win;
protected Intbox intMulai, intAkhir;
protected Textbox txtTahun;
private String mode = "";
public rekap()
{
}
public void onCreate$win()
{
if (Sessions.getCurrent().getAttribute("userid") == null)
{
win.detach();
win = null;
execution.sendRedirect("../index.zul", "_top");
return;
}
intMulai.setFocus(true);
}
public void onClick$btnTampil1() throws Exception
{
mode = "diantara";
tampilkanlaporan();
}
public void onClick$btnTampil2() throws Exception
{
mode = "dalam";
tampilkanlaporan();
}
//Laporan
public class SumberDataLaporan implements JRDataSource
{
private Object[][] data;
private int index = -1;
public SumberDataLaporan() throws Exception
{
data = setDataToReport();
}
@Override
public boolean next() throws JRException
{
index++;
return (index < data.length);
}
@Override
public Object getFieldValue(JRField field) throws JRException
{
Object value = null;
LinkedList llBuff = getField();
for (int i=0; i<llBuff.size(); i++)
if (llBuff.get(i).equals(field.getName()))
{
value = data[index][i];
i = llBuff.size();
}
return value;
}
}
public Object[][] setDataToReport() throws Exception
{
VRekap buffer_objek;
if (mode.equals("diantara"))
dataList = emTabel.createNamedQuery("VRekap.findByTahunBetween")
.setHint("eclipselink.refresh", "true")
.setParameter("tahun1", intMulai.getValue())
.setParameter("tahun2", intAkhir.getValue())
.setParameter("idpengguna", tipedata.keInt(Sessions.getCurrent().getAttribute("id")))
.getResultList();
else
{
LinkedList<Integer> periode = new LinkedList<Integer>();
StringTokenizer st = new StringTokenizer(txtTahun.getValue(),",");
while(st.hasMoreTokens())
periode.add(tipedata.keInt(st.nextElement().toString().trim()));
dataList = emTabel.createNamedQuery("VRekap.findByTahunIn")
.setHint("eclipselink.refresh", "true")
.setParameter("tahun", periode)
.setParameter("idpengguna", tipedata.keInt(Sessions.getCurrent().getAttribute("id")))
.getResultList();
}
Object[][] xBuffer = new Object[dataList.size()][3];
int x = 0;
for (Iterator it = dataList.iterator(); it.hasNext();)
{
buffer_objek = (VRekap) it.next();
xBuffer[x][0] = buffer_objek.getNamaitem();
xBuffer[x][1] = buffer_objek.getNominal();
xBuffer[x][2] = tipedata.keBoolean(buffer_objek.getAlurkas());
x++;
}
dataList = null;
return xBuffer;
}
public LinkedList getField()
{
LinkedList ll = new LinkedList();
ll.add("namaitem");
ll.add("nominal");
ll.add("alurkas");
return ll;
}
public void tampilkanlaporan() throws Exception
{
laporan.setSrc("/laporan/rekap transaksi.jasper");
reportParam = new HashMap();
reportParam.put("namapengguna", Sessions.getCurrent().getAttribute("userid"));
if (mode.equals("diantara"))
reportParam.put("periode", intMulai.getValue() + " s.d. " + intAkhir.getValue());
else
reportParam.put("periode", txtTahun.getValue());
laporan.setParameters(reportParam);
laporan.setDatasource(new SumberDataLaporan());
}
}
Tambahan:
1. Tambahkan skrip pada:
1. Tambahkan skrip pada:
@NamedQuery(name = "VRekap.findByTahunBetween", query = "SELECT v FROM VRekap v WHERE v.tahun BETWEEN :tahun1 AND :tahun2 AND v.idpengguna = :idpengguna")
dan
@NamedQuery(name = "VRekap.findByTahunIn", query = "SELECT v FROM VRekap v WHERE v.tahun IN :tahun AND v.idpengguna = :idpengguna")
pada "dao-persistence-pfm/dao/VRekap.java", kemudian simpan. Penjelasan:
1. Pada "Web Pages/laporan/rekap.zul" terdapat method "SumberDataLaporan" untuk mengirimkan data dari java ke jasper.
2. Method "SumberDataLaporan" tersebut membutuhkan data yang dikembalikan oleh method "setDataToReport". Pada method "setDataToReport" menggunakan permintaan bernama "VRekap.findByTahunBetween" untuk mengimplementasikan klause "between" dan "VRekap.findByTahunIn" untuk mengimplementasikan klausa "in" yang membutuhkan tipedata List (list/arraylist/linkedlist). Ingat! Tipe data harap disesuaikan pada java dan iReport.
3. Mapping field terjadi pada method "getField". Nama yang tercantum harus sama pada java dan iReport.
4. Konfigurasi laporan terdapat pada method "tampilkanlaporan".
1. Pada "Web Pages/laporan/rekap.zul" terdapat method "SumberDataLaporan" untuk mengirimkan data dari java ke jasper.
2. Method "SumberDataLaporan" tersebut membutuhkan data yang dikembalikan oleh method "setDataToReport". Pada method "setDataToReport" menggunakan permintaan bernama "VRekap.findByTahunBetween" untuk mengimplementasikan klause "between" dan "VRekap.findByTahunIn" untuk mengimplementasikan klausa "in" yang membutuhkan tipedata List (list/arraylist/linkedlist). Ingat! Tipe data harap disesuaikan pada java dan iReport.
3. Mapping field terjadi pada method "getField". Nama yang tercantum harus sama pada java dan iReport.
4. Konfigurasi laporan terdapat pada method "tampilkanlaporan".
Tidak ada komentar:
Posting Komentar