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

Sådan udskrives flere rapporter med stregkoder \ eller flere stregkoder i én rapport

Det kan nemt gøres med små ændringer af din forespørgsel uden programmering på flere måder.

Løsning 1. Brug af enkelt rapport med stregkodekomponent i detaljebåndet

Du kan bruge en enkelt rapports skabelon til at generere flere stregkoder i én rapport.

I dette tilfælde queryString udtryk (virker for Oracle DB) bliver sådan her:

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

- det genererer en værdi fra sekvensen så mange gange som du har brug for. $P{quantity} parameter bestemmer antallet af rækker (stregkoder), der skal genereres.

Den fungerende rjxml fil:

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

Resultatet bliver ($P{quantity} ==5 ):

I dit tilfælde queryString udtryk vil være sådan her:

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

og udtrykket stregkode komponent vil være:

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

Løsning 2. Brug af gruppehovedbånd

Du kan bruge den samme queryString udtryk som i den første løsning. Gruppen på rownum feltet vil hjælpe os med at generere single rapport med mange stregkoder, der tilhører sin egen gruppe (en gruppe - en stregkode). Stregkoden komponent skal placeres i Gruppehovedet band.

Brug af isStartNewPage egenskab vi kan klare at generere gruppe på ny side eller ej.

rjxml fil:

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

I tilfælde af isStartNewPage="false" for gruppe rownumGroup resultatet bliver ($P{quantity}==7 ):

I tilfælde af isStartNewPage="true" for gruppe rownumGroup resultatet bliver ($P{quantity} ==5 ):

Løsning 3. Brug af underrapport

Vi kan tilføje Underrapport komponent til Detaljer bånd (se første løsning ) eller Gruppeoverskrift (se anden løsning ) band. I dette tilfælde kan du ikke kun tilføje stregkoden til underrapporten komponent, men alt hvad du ønsker.



  1. CHECK-begrænsningen i MySQL virker ikke

  2. SQL Server 2008:hvordan giver jeg privilegier til et brugernavn?

  3. Opdater forespørgsel ved hjælp af Subquery i SQL Server

  4. Dynamisk SQL til at generere kolonnenavne?