<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.infinite-erp.co.id/index.php?action=history&amp;feed=atom&amp;title=JRXML_Best_Practices</id>
	<title>JRXML Best Practices - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.infinite-erp.co.id/index.php?action=history&amp;feed=atom&amp;title=JRXML_Best_Practices"/>
	<link rel="alternate" type="text/html" href="https://wiki.infinite-erp.co.id/index.php?title=JRXML_Best_Practices&amp;action=history"/>
	<updated>2026-09-17T02:27:35Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>https://wiki.infinite-erp.co.id/index.php?title=JRXML_Best_Practices&amp;diff=4554&amp;oldid=prev</id>
		<title>Wikiadmin at 15:27, 16 September 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.infinite-erp.co.id/index.php?title=JRXML_Best_Practices&amp;diff=4554&amp;oldid=prev"/>
		<updated>2026-09-16T15:27:46Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 15:27, 16 September 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l68&quot; &gt;Line 68:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 68:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Jangan menganggap JRXML benar hanya dari membaca XML. Compile (dan bila perlu render) secara lokal — lihat [[JRXML Local Verification]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Jangan menganggap JRXML benar hanya dari membaca XML. Compile (dan bila perlu render) secara lokal — lihat [[JRXML Local Verification]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Development]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Development &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ERP&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key my_wiki:diff::1.12:old-4541:rev-4554 --&gt;
&lt;/table&gt;</summary>
		<author><name>Wikiadmin</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.infinite-erp.co.id/index.php?title=JRXML_Best_Practices&amp;diff=4541&amp;oldid=prev</id>
		<title>Wikiadmin: Dokumentasi</title>
		<link rel="alternate" type="text/html" href="https://wiki.infinite-erp.co.id/index.php?title=JRXML_Best_Practices&amp;diff=4541&amp;oldid=prev"/>
		<updated>2026-09-16T10:15:26Z</updated>

		<summary type="html">&lt;p&gt;Dokumentasi&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Halaman ini merangkum aturan dan jebakan yang ditemukan saat menulis/memperbaiki JRXML untuk InfiniteERP (runtime JasperReports 6.0.0). Latar belakang versi ada di halaman [[JasperReports]].&lt;br /&gt;
&lt;br /&gt;
== Aturan Kompatibilitas ==&lt;br /&gt;
&lt;br /&gt;
* Namespace root: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://jasperreports.sourceforge.net/jasperreports&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (jangan ganti ke namespace &amp;lt;code&amp;gt;jaspersoft.com&amp;lt;/code&amp;gt; — itu gaya file baru Studio, dan tidak konsisten dengan report existing).&lt;br /&gt;
* Ekspresi ditulis sebagai '''Java valid''', bukan gaya Groovy. Contoh: &amp;lt;code&amp;gt;new Integer($V{No_Urut}.intValue()+1)&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Deklarasikan '''semua''' field yang dipakai di &amp;lt;code&amp;gt;&amp;amp;lt;field&amp;amp;gt;&amp;lt;/code&amp;gt; dengan class Java yang benar:&lt;br /&gt;
** Uang/numerik: &amp;lt;code&amp;gt;java.math.BigDecimal&amp;lt;/code&amp;gt;&lt;br /&gt;
** Tanggal: &amp;lt;code&amp;gt;java.sql.Timestamp&amp;lt;/code&amp;gt;&lt;br /&gt;
** String: &amp;lt;code&amp;gt;java.lang.String&amp;lt;/code&amp;gt;&lt;br /&gt;
* Font: pakai logical font (&amp;lt;code&amp;gt;SansSerif&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Serif&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Monospaced&amp;lt;/code&amp;gt;) kecuali ada font extension jar di server.&lt;br /&gt;
&lt;br /&gt;
== Jebakan yang Sudah Ditemukan ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Path absolut untuk gambar ===&lt;br /&gt;
&lt;br /&gt;
Report existing me-hardcode path seperti:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;imageExpression&amp;amp;gt;&amp;amp;lt;![CDATA[&amp;quot;/home/zaien_aji/appl/sahila/modules/.../ssd_logo.png&amp;quot;]]&amp;amp;gt;&amp;amp;lt;/imageExpression&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ini gagal render di mesin/user lain. '''Solusi''': parameter direktori gambar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;parameter name=&amp;quot;IMAGE_DIR&amp;quot; class=&amp;quot;java.lang.String&amp;quot; isForPrompting=&amp;quot;false&amp;quot;&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;defaultValueExpression&amp;amp;gt;&amp;amp;lt;![CDATA[&amp;quot;.&amp;quot;]]&amp;amp;gt;&amp;amp;lt;/defaultValueExpression&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/parameter&amp;amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;amp;lt;imageExpression&amp;amp;gt;&amp;amp;lt;![CDATA[$P{IMAGE_DIR} + &amp;quot;/ssd_logo.png&amp;quot;]]&amp;amp;gt;&amp;amp;lt;/imageExpression&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. Rectangle selalu ber-outline hitam ===&lt;br /&gt;
&lt;br /&gt;
Elemen &amp;lt;code&amp;gt;&amp;amp;lt;rectangle&amp;amp;gt;&amp;lt;/code&amp;gt; '''selalu digambar dengan garis tepi 1pt berwarna &amp;lt;code&amp;gt;forecolor&amp;lt;/code&amp;gt;''' (default hitam), di samping fill &amp;lt;code&amp;gt;backcolor&amp;lt;/code&amp;gt;. Untuk balok warna bersih (accent bar, latar blok total), samakan keduanya:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;reportElement mode=&amp;quot;Opaque&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;84&amp;quot; width=&amp;quot;565&amp;quot; height=&amp;quot;3&amp;quot;&lt;br /&gt;
    forecolor=&amp;quot;#224435&amp;quot; backcolor=&amp;quot;#224435&amp;quot; .../&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jika hanya &amp;lt;code&amp;gt;backcolor&amp;lt;/code&amp;gt; yang di-set, balok tipis (height 1–3) akan terlihat kehitaman karena tercampur border.&lt;br /&gt;
&lt;br /&gt;
=== 3. Variable mati sisa template ===&lt;br /&gt;
&lt;br /&gt;
Variable dengan &amp;lt;code&amp;gt;calculation=&amp;quot;Sum&amp;quot;&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Average&amp;lt;/code&amp;gt; tetapi &amp;lt;code&amp;gt;&amp;amp;lt;variableExpression&amp;amp;gt;&amp;lt;/code&amp;gt; kosong adalah sisa template iReport — tidak dipakai dan aman dihapus.&lt;br /&gt;
&lt;br /&gt;
=== 4. Atribut versi baru di file lama ===&lt;br /&gt;
&lt;br /&gt;
Atribut seperti &amp;lt;code&amp;gt;splitType&amp;lt;/code&amp;gt; pada &amp;lt;code&amp;gt;&amp;amp;lt;band&amp;amp;gt;&amp;lt;/code&amp;gt; (milik JR 6.x) bisa muncul di file lama karena pernah dibuka di Jaspersoft Studio. Compile tetap OK (parser mengabaikannya), tetapi iReport 5.6 dapat mengacaukannya saat edit-save. Untuk file yang masih dirawat di iReport, hapus atribut tersebut.&lt;br /&gt;
&lt;br /&gt;
== Pola Kalkulasi ==&lt;br /&gt;
&lt;br /&gt;
Report existing melakukan kalkulasi di '''SQL (PostgreSQL)''', bukan di ekspresi report:&lt;br /&gt;
&lt;br /&gt;
* Pajak: &amp;lt;code&amp;gt;ci.grandtotal - ci.totallines as pajak&amp;lt;/code&amp;gt;&lt;br /&gt;
* Terbilang: fungsi custom database &amp;lt;code&amp;gt;terbilang(grandtotal)&amp;lt;/code&amp;gt;&lt;br /&gt;
* Format tanggal Indonesia: &amp;lt;code&amp;gt;CASE EXTRACT(MONTH FROM ...)&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;to_char&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ikuti pola yang sama kecuali ada alasan memindahkannya ke report — query mengambil langsung dari skema Openbravo/ADempiere (&amp;lt;code&amp;gt;c_invoice&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;c_invoiceline&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;c_bpartner&amp;lt;/code&amp;gt;, dst).&lt;br /&gt;
&lt;br /&gt;
== Trik Layout ==&lt;br /&gt;
&lt;br /&gt;
=== Satu sel, dua baris (nama produk + deskripsi) ===&lt;br /&gt;
&lt;br /&gt;
Buat dua text field bertumpuk di kolom yang sama; hilangkan border yang bertemu agar terlihat seperti satu sel:&lt;br /&gt;
&lt;br /&gt;
* Elemen atas: &amp;lt;code&amp;gt;&amp;amp;lt;bottomPen lineWidth=&amp;quot;0.0&amp;quot;/&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Elemen bawah: &amp;lt;code&amp;gt;&amp;amp;lt;topPen lineWidth=&amp;quot;0.0&amp;quot;/&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabel tanpa border penuh (gaya modern) ===&lt;br /&gt;
&lt;br /&gt;
* Header kolom: hanya &amp;lt;code&amp;gt;&amp;amp;lt;bottomPen lineWidth=&amp;quot;1.0&amp;quot; lineColor=&amp;quot;#224435&amp;quot;/&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Baris detail: hanya &amp;lt;code&amp;gt;&amp;amp;lt;bottomPen lineWidth=&amp;quot;0.5&amp;quot; lineColor=&amp;quot;#E0E0E0&amp;quot;/&amp;amp;gt;&amp;lt;/code&amp;gt; di setiap sel (menjadi separator tipis antar-baris)&lt;br /&gt;
* Penekanan total: balok &amp;lt;code&amp;gt;&amp;amp;lt;rectangle&amp;amp;gt;&amp;lt;/code&amp;gt; berlatar warna muda, bukan kotak border&lt;br /&gt;
&lt;br /&gt;
== Setelah Menulis: Verifikasi ==&lt;br /&gt;
&lt;br /&gt;
Jangan menganggap JRXML benar hanya dari membaca XML. Compile (dan bila perlu render) secara lokal — lihat [[JRXML Local Verification]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
		
	</entry>
</feed>