sql >> Database >  >> RDS >> Oracle

Hoe meerdere rapporten met barcode \ of meerdere barcodes in één rapport af te drukken

Het kan eenvoudig worden gedaan met een kleine wijziging van uw zoekopdracht zonder op verschillende manieren te programmeren.

Oplossing 1. Eén rapport gebruiken met streepjescodecomponent in detailband

U kunt de sjabloon voor één rapport gebruiken voor het genereren van meerdere streepjescodes in één rapporteren.

In dit geval de queryString uitdrukking (werkt voor Oracle DB) zal er als volgt uitzien:

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

- het genereert zo vaak als nodig een waarde uit de reeks. De $P{quantity} parameter bepaalt het aantal rijen (barcodes) dat moet worden gegenereerd.

De werkende rjxml bestand:

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

Het resultaat is ($P{quantity} ==5 ):

In jouw geval de queryString uitdrukking zal als volgt zijn:

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

en de uitdrukking van Barcode component zal zijn:

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

Oplossing 2. Groepskopband gebruiken

U kunt dezelfde queryString . gebruiken uitdrukking zoals in de eerste oplossing. De groep op rownum veld zal ons helpen om single . te genereren rapport met veel streepjescodes die tot een eigen groep behoren (één groep - één streepjescode). De streepjescode component moet worden geplaatst in de Groepskop band.

De isStartNewPage . gebruiken eigenschap die we kunnen beheren om groep op nieuwe pagina te genereren of niet.

De rjxml bestand:

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

In het geval isStartNewPage="false" voor groep rownumGroup het resultaat is ($P{quantity}==7 ):

In het geval isStartNewPage="true" voor groep rownumGroup het resultaat is ($P{quantity} ==5 ):

Oplossing 3. Subrapport gebruiken

We kunnen Subrapport toevoegen component naar de Detail band (zie eerste oplossing ) of Groepskop (zie tweede oplossing ) band. In dit geval kunt u niet alleen de Barcode . aan het subrapport toevoegen component, maar alles wat je wilt.



  1. pyodbc.connect() werkt, maar niet sqlalchemy.create_engine().connect()

  2. Oracle 12c Installation heeft geen toegang tot de tijdelijke locatie

  3. Is het beter om veel sql-opdrachten met één verbinding uit te voeren, of elke keer opnieuw verbinding te maken?

  4. hoe cte-waarde toe te wijzen aan variabele