Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como imprimir vários relatórios com código de barras \ ou vários códigos de barras em um relatório


Isso pode ser feito facilmente com pequenas modificações de sua consulta sem programação de várias maneiras.

Solução 1. Uso de relatório único com componente de código de barras na faixa de detalhes


Você pode usar o modelo de relatório único para gerar vários códigos de barras em um relatório.

Nesse caso, a queryString expressão (funciona para Oracle DB) ficará assim:
SELECT seq_barcode.nextval AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}

- é gerado um valor a partir da sequência quantas vezes você precisar. O $P{quantity} O parâmetro determina o número de linhas (códigos de barras) a serem geradas.

O rjxml de trabalho Arquivo:
<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>

O resultado será ($P{quantity} ==5 ):



No seu caso, a queryString expressão ficará assim:
SELECT to_char(PALLET_ID_NO_SEQ.nextval) AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}

e a expressão de Código de barras componente será:
new com.pepkorit.BarbecueRotateRenderer(
    net.sourceforge.barbecue.BarcodeFactory.createCode128C($F{barcode}),
    false, true, 1, 50, 190, 50)

Solução 2. Usando a banda do cabeçalho do grupo


Você pode usar a mesma queryString expressão como na primeira solução. O grupo em rownum campo nos ajudará a gerar único relatório com muitos códigos de barras pertencentes ao seu próprio grupo (um grupo - um código de barras). O Código de barras componente deve ser colocado no Cabeçalho do Grupo banda.

Usando a isStartNewPage podemos conseguir gerar grupo em nova página ou não.

O rjxml Arquivo:
<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>

Caso isStartNewPage="false" para o grupo rownumGroup o resultado será ($P{quantity}==7 ):



Caso isStartNewPage="true" para o grupo rownumGroup o resultado será ($P{quantity} ==5 ):


Solução 3. Usando sub-relatório


Podemos adicionar Sub-relatório componente para o Detalhe banda (veja a primeira solução ) ou Cabeçalho do Grupo (veja a segunda solução ) banda. Neste caso, você pode adicionar ao sub-relatório não apenas o Código de barras componente, mas tudo o que você quer.