Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment imprimer plusieurs rapports avec code-barres \ ou plusieurs codes-barres dans un seul rapport

Cela peut être facilement fait avec de petites modifications de votre requête sans programmation de plusieurs manières.

Solution 1. Utilisation d'un seul rapport avec un composant de code-barres dans la bande Détail

Vous pouvez utiliser le modèle de rapport unique pour générer plusieurs codes-barres en un rapport.

Dans ce cas, la queryString expression (fonctionne pour Oracle DB) ressemblera à ceci :

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

- il génère une valeur à partir de la séquence autant de fois que nécessaire. La $P{quantité} paramètre détermine le nombre de lignes (codes-barres) à générer.

Le rjxml fonctionnel fichier :

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

Le résultat sera ($P{quantity} ==5 ):

Dans votre cas, le queryString l'expression sera comme ceci :

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

et l'expression de Barcode composant sera :

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

Solution 2. Utiliser la bande d'en-tête de groupe

Vous pouvez utiliser le même queryString expression comme dans la première solution. Le groupe sur rownum champ nous aidera à générer unique rapport avec de nombreux codes-barres appartenant à son propre groupe (un groupe - un code-barres). Le code-barres le composant doit être placé dans l'En-tête de groupe bande.

Utilisation de isStartNewPage propriété que nous pouvons gérer pour générer un groupe sur une nouvelle page ou non.

Le rjxml fichier :

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

Au cas où isStartNewPage="false" pour le groupe rownumGroup le résultat sera ($P{quantity}==7 ):

Au cas où isStartNewPage="true" pour le groupe rownumGroup le résultat sera ($P{quantity} ==5 ):

Solution 3. Utiliser un sous-rapport

Nous pouvons ajouter un sous-rapport composant au Détail bande (voir première solution ) ou En-tête de groupe (voir deuxième solution ) bande. Dans ce cas, vous pouvez ajouter au sous-rapport non seulement le code à barres composant, mais tout ce que vous voulez.