Ini dapat dengan mudah dilakukan dengan sedikit modifikasi kueri Anda tanpa memprogram dalam beberapa cara.
Solusi 1. Menggunakan laporan tunggal dengan komponen Barcode di Detail band
Anda dapat menggunakan template laporan tunggal untuk menghasilkan beberapa kode batang dalam satu laporan.
Dalam hal ini queryString ekspresi (berfungsi untuk Oracle DB) akan menjadi seperti ini:
SELECT seq_barcode.nextval AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}
- itu menghasilkan nilai dari urutan sebanyak yang Anda butuhkan. $P{kuantitas} parameter menentukan jumlah baris (barcode) yang akan dihasilkan.
rjxml . yang berfungsi berkas:
<jasperReport ...>
<parameter name="quantity" class="java.lang.Integer">
<defaultValueExpression><![CDATA[20]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[SELECT seq_barcode.nextval AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}]]>
</queryString>
<field name="BARCODE" class="java.lang.Integer"/>
<field name="ROWNUM" class="java.lang.Integer"/>
<title>
<band height="82" splitType="Stretch">
<textField>
<reportElement x="145" y="18" width="240" height="20"/>
<textElement/>
<textFieldExpression><![CDATA["The number of barcodes is: " + $P{quantity}]]></textFieldExpression>
</textField>
</band>
</title>
<detail>
<band height="47" splitType="Stretch">
<componentElement>
<reportElement x="145" y="10" width="200" height="28"/>
<jr:barbecue xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" type="2of7" drawText="false" checksumRequired="false">
<jr:codeExpression><![CDATA[$F{BARCODE}]]></jr:codeExpression>
</jr:barbecue>
</componentElement>
</band>
</detail>
</jasperReport>
Hasilnya adalah ($P{quantity} ==5 ):
Dalam kasus Anda queryString ekspresinya akan seperti ini:
SELECT to_char(PALLET_ID_NO_SEQ.nextval) AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}
dan ekspresi Barcode komponennya adalah:
new com.pepkorit.BarbecueRotateRenderer(
net.sourceforge.barbecue.BarcodeFactory.createCode128C($F{barcode}),
false, true, 1, 50, 190, 50)
Solusi 2. Menggunakan band Header Grup
Anda dapat menggunakan queryString yang sama ekspresi seperti pada solusi pertama. Grup di rownum bidang akan membantu kami menghasilkan tunggal laporkan dengan banyak barcode milik grupnya sendiri (satu grup - satu barcode). Kode Batang komponen harus ditempatkan ke Group Header kelompok.
Menggunakan isStartNewPage properti yang dapat kita kelola untuk menghasilkan grup di halaman baru atau tidak.
rjxml berkas:
<jasperReport ...>
<parameter name="quantity" class="java.lang.Integer">
<defaultValueExpression><![CDATA[20]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[SELECT seq_barcode.nextval AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}]]>
</queryString>
<field name="BARCODE" class="java.lang.Integer"/>
<field name="ROWNUM" class="java.lang.Integer"/>
<group name="rownumGroup" isStartNewPage="true">
<groupExpression><![CDATA[$F{ROWNUM}]]></groupExpression>
<groupHeader>
<band height="50">
<componentElement>
<reportElement x="145" y="11" width="200" height="28"/>
<jr:barbecue xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" type="2of7" drawText="false" checksumRequired="false">
<jr:codeExpression><![CDATA[$F{BARCODE}]]></jr:codeExpression>
</jr:barbecue>
</componentElement>
</band>
</groupHeader>
</group>
<title>
<band height="82" splitType="Stretch">
<textField>
<reportElement x="145" y="18" width="240" height="20"/>
<textElement/>
<textFieldExpression><![CDATA["The number of barcodes is: " + $P{quantity}]]></textFieldExpression>
</textField>
</band>
</title>
</jasperReport>
Jika isStartNewPage="false" untuk grup rownumGroup hasilnya akan menjadi ($P{quantity}==7 ):
Jika isStartNewPage="true" untuk grup rownumGroup hasilnya akan menjadi ($P{quantity} ==5 ):
Solusi 3. Menggunakan sublaporan
Kami dapat menambahkan Sublaporan komponen ke Detail band (lihat solusi pertama ) atau Header Grup (lihat solusi kedua ) pita. Dalam hal ini Anda dapat menambahkan ke sublaporan tidak hanya Barcode komponen, tetapi semua yang Anda inginkan.