Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So drucken Sie mehrere Berichte mit Barcode \ oder mehrere Barcodes in einem Bericht

Es kann leicht mit kleinen Änderungen Ihrer Abfrage ohne Programmierung auf verschiedene Arten durchgeführt werden.

Lösung 1. Verwenden eines einzelnen Berichts mit Barcode-Komponente im Detailband

Sie können die Vorlage eines einzelnen Berichts verwenden, um mehrere Barcodes in einem zu generieren melden.

In diesem Fall der queryString Ausdruck (funktioniert für Oracle DB) sieht so aus:

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

- Es wird so oft wie nötig ein Wert aus der Sequenz generiert. Die $P{Menge} Parameter bestimmt die Anzahl der zu generierenden Zeilen (Barcodes).

Die funktionierende rjxml Datei:

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

Das Ergebnis ist ($P{quantity} ==5 ):

In Ihrem Fall der queryString Der Ausdruck sieht folgendermaßen aus:

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

und der Ausdruck Barcode Komponente wird sein:

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

Lösung 2. Gruppenkopfband verwenden

Sie können denselben queryString verwenden Ausdruck wie in der ersten Lösung. Die Gruppe auf rownum Feld wird uns helfen, single zu generieren Bericht mit vielen Barcodes, die zu einer eigenen Gruppe gehören (eine Gruppe - ein Barcode). Der Strichcode Komponente sollte im Gruppenkopf platziert werden Band.

Verwenden von isStartNewPage Eigenschaft, die wir verwalten können, um eine Gruppe auf einer neuen Seite zu generieren oder nicht.

Die rjxml Datei:

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

Falls isStartNewPage="false" für die Gruppe rownumGroup das Ergebnis ist ($P{quantity}==7 ):

Falls isStartNewPage="true" für die Gruppe rownumGroup das Ergebnis ist ($P{quantity} ==5 ):

Lösung 3. Unterbericht verwenden

Wir können Unterbericht hinzufügen Komponente zum Detail Band (siehe erste Lösung ) oder Gruppenkopf (siehe zweite Lösung ) Band. In diesem Fall können Sie dem Unterbericht nicht nur den Barcode hinzufügen Komponente, aber alles, was Sie wollen.