sql >> Databasteknik >  >> RDS >> Oracle

Hur man skriver ut flera rapporter med streckkoder \ eller flera streckkoder i en rapport

Det kan enkelt göras med små modifieringar av din fråga utan programmering på flera sätt.

Lösning 1. Använd en enda rapport med streckkodskomponent i detaljbandet

Du kan använda en rapportmall för att generera flera streckkoder i en rapportera.

I det här fallet queryString expression (fungerar för Oracle DB) blir så här:

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

- det genererar ett värde från sekvensen så många gånger du behöver. $P{quantity} parametern bestämmer antalet rader (streckkoder) som ska genereras.

Den fungerande 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 blir ($P{quantity} ==5 ):

I ditt fall queryString uttrycket blir så här:

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

och uttrycket Streckkod komponent kommer att vara:

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

Lösning 2. Använda grupphuvudband

Du kan använda samma queryString uttryck som i den första lösningen. Gruppen på rownum fältet hjälper oss att skapa single rapport med många streckkoder som tillhör sin egen grupp (en grupp - en streckkod). Streckkoden komponenten ska placeras i Grupprubrik band.

Använda isStartNewPage egendom vi kan lyckas skapa grupp på ny sida eller inte.

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 fallet isStartNewPage="false" för gruppen rownumGroup resultatet blir ($P{quantity}==7 ):

I fallet isStartNewPage="true" för gruppen rownumGroup resultatet blir ($P{quantity} ==5 ):

Lösning 3. Använder underrapport

Vi kan lägga till Underrapport komponenten till Detalj band (se första lösningen ) eller Grupprubrik (se den andra lösningen ) band. I det här fallet kan du inte bara lägga till streckkoden i underrapporten komponent, men allt du vill ha.



  1. dbms_output size buffertspill

  2. 60 miljoner poster, välj poster från en viss månad. Hur optimerar man databasen?

  3. Släpp alla tabeller vars namn börjar med en viss sträng

  4. Refaktorera främmande nyckel till fält