Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Cara mencetak beberapa laporan dengan barcode \ atau beberapa barcode dalam satu laporan

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memasukkan ke Oracle Nested Table di Java

  2. Bagaimana cara mengurutkan berdasarkan angka terlebih dahulu dengan kueri Oracle SQL?

  3. tampilkan teks khusus sql dari hasil kolom tabel

  4. Bagaimana cara mendapatkan konten tekstual dari BLOB di Oracle SQL

  5. Konversi Basis 36 ke Basis 10 hanya menggunakan SQL