Oracle
 sql >> Database >  >> RDS >> Oracle

Come stampare più report con codice a barre \ o più codici a barre in un report

Può essere fatto facilmente con piccole modifiche alla tua query senza programmare in diversi modi.

Soluzione 1. Utilizzo di report singolo con componente Codice a barre nella banda Dettagli

Puoi utilizzare il modello di rapporto singolo per generare più codici a barre in uno rapporto.

In questo caso la queryString espressione (funziona per Oracle DB) sarà così:

SELECT seq_barcode.nextval AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}

- genera un valore dalla sequenza tutte le volte che vuoi. Il $P{quantità} parametro determina il numero di righe (codici a barre) da generare.

Il lavoro rjxml file:

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

Il risultato sarà ($P{quantità} ==5 ):

Nel tuo caso la queryString l'espressione sarà così:

SELECT to_char(PALLET_ID_NO_SEQ.nextval) AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}

e l'espressione di Codice a barre il componente sarà:

new com.pepkorit.BarbecueRotateRenderer(
    net.sourceforge.barbecue.BarcodeFactory.createCode128C($F{barcode}),
    false, true, 1, 50, 190, 50)

Soluzione 2. Utilizzo della banda di intestazione del gruppo

Puoi utilizzare la stessa queryString espressione come nella prima soluzione. Il gruppo su rownum campo ci aiuterà a generare single report con più codici a barre appartenenti al proprio gruppo (un gruppo - un codice a barre). Il codice a barre il componente deve essere posizionato nell'intestazione del gruppo fascia.

Utilizzando isStartNewPage proprietà che possiamo gestire per generare un gruppo su una nuova pagina o meno.

Il rjxml file:

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

Nel caso isStartNewPage="false" per il gruppo rownumGroup il risultato sarà ($P{quantity}==7 ):

Nel caso isStartNewPage="true" per il gruppo rownumGroup il risultato sarà ($P{quantità} ==5 ):

Soluzione 3. Utilizzo del sottoreport

Possiamo aggiungere Sottoreport componente al Dettaglio banda (vedi prima soluzione ) o Intestazione gruppo (vedi seconda soluzione ) gruppo musicale. In questo caso puoi aggiungere al sottoreport non solo il Codice a barre componente, ma tutto quello che vuoi.