sql >> Base de Datos >  >> RDS >> Oracle

Cómo imprimir varios informes con código de barras \ o varios códigos de barras en un informe

Se puede hacer fácilmente con pequeñas modificaciones de su consulta sin programar de varias maneras.

Solución 1. Usar un solo informe con el componente de código de barras en la banda de detalles

Puede usar la plantilla de informe único para generar varios códigos de barras en uno informe.

En este caso, la cadena de consulta expresión (funciona para Oracle DB) será así:

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

- se genera un valor a partir de la secuencia tantas veces como necesites. La $P{cantidad} El parámetro determina el número de filas (códigos de barras) que se generarán.

El rjxml de trabajo archivo:

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

El resultado será ($P{cantidad} ==5 ):

En su caso, la cadena de consulta expresión será así:

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

y la expresión de Barcode componente será:

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

Solución 2. Uso de la banda de encabezado de grupo

Puede usar la misma cadena de consulta expresión como en la primera solución. El grupo en rownum campo nos ayudará a generar único informe con muchos códigos de barras pertenecientes a su propio grupo (un grupo - un código de barras). El código de barras el componente debe colocarse en el Encabezado de grupo banda.

Uso de isStartNewPage propiedad que podemos administrar para generar un grupo en una nueva página o no.

El rjxml archivo:

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

En caso de isStartNewPage="false" para el grupo rownumGroup el resultado será ($P{cantidad}==7 ):

En caso de isStartNewPage="true" para el grupo rownumGroup el resultado será ($P{cantidad} ==5 ):

Solución 3. Usar subinforme

Podemos agregar Subinforme componente al Detalle banda (ver primera solución ) o Encabezado de grupo (ver segunda solución ) banda. En este caso, puede agregar al subinforme no solo el Código de barras componente, pero todo lo que quieras.