Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да отпечатате няколко отчета с баркод \ или няколко баркода в един отчет

Може лесно да се направи с малка модификация на вашата заявка без програмиране по няколко начина.

Решение 1. Използване на единичен отчет с компонент Баркод в детайлна лента

Можете да използвате един шаблон на отчет за генериране на няколко баркода в един доклад.

В този случай queryString израз (работи за Oracle DB) ще бъде така:

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

- генерира стойност от последователността толкова пъти, колкото е необходимо. $P{количество параметърът определя броя на редовете (баркодовете), които да бъдат генерирани.

Работният rjxml файл:

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

Резултатът ще бъде ($P{quantity} ==5 ):

Във вашия случай queryString изразът ще бъде така:

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

и изразът на Баркод компонент ще бъде:

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

Решение 2. Използване на група за заглавка на група

Можете да използвате същия queryString израз както в първото решение. Групата наrownum поле ще ни помогне да генерираме единични отчет с много баркодове, принадлежащи към собствена група (една група - един баркод). Баркодът компонентът трябва да се постави в Заглавката на групата лента.

Използване на isStartNewPage свойство, което можем да управляваме да генерираме група на нова страница или не.

rjxml файл:

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

В случай, чее StartNewPage="false" за групаrownumGroup резултатът ще бъде ($P{quantity}==7 ):

В случай, чее StartNewPage="true" за групаrownumGroup резултатът ще бъде ($P{quantity} ==5 ):

Решение 3. Използване на подотчет

Можем да добавим Поддоклад компонент към Подробности лента (вижте първото решение ) или Заглавка на групата (вижте второто решение ) банда. В този случай можете да добавите към подотчета не само Баркод компонент, но всичко, което искате.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да разбера дали база данни на Oracle е настроена за автоматично завършване?

  2. Как да създадете потребител и да предоставите разрешения в Oracle

  3. Поддържани модели на формат за функциите за дата ROUND() и TRUNC() в Oracle

  4. Пример за функция на Oracle (Номер за връщане)

  5. Помощна програма ADODFCMP