Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak wydrukować kilka raportów z kodem kreskowym \ lub kilkoma kodami kreskowymi w jednym raporcie?

Można to łatwo zrobić, modyfikując zapytanie bez konieczności programowania na kilka sposobów.

Rozwiązanie 1. Używanie pojedynczego raportu z komponentem Barcode w paśmie szczegółów

Możesz użyć szablonu pojedynczego raportu do wygenerowania kilku kodów kreskowych w jednym raport.

W tym przypadku queryString wyrażenie (działa dla Oracle DB) będzie tak:

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

- generuje wartość z sekwencji tyle razy, ile potrzebujesz. $P{ilość} parametr określa liczbę wierszy (kodów kreskowych) do wygenerowania.

Działający rjxml plik:

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

Wynik będzie następujący ($P{ilość} ==5 ):

W Twoim przypadku queryString wyrażenie będzie takie:

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

i wyrażenie Kod kreskowy komponentem będzie:

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

Rozwiązanie 2. Korzystanie z nagłówka grupy

Możesz użyć tego samego ciągu zapytania wyrażenie jak w pierwszym rozwiązaniu. Grupa na rownum pole pomoże nam wygenerować pojedynczy raport z wieloma kodami kreskowymi należącymi do własnej grupy (jedna grupa - jeden kod kreskowy). Kod kreskowy komponent należy umieścić w nagłówku grupy zespół.

Korzystanie ze strony isStartNewPage właściwość, którą możemy zarządzać, aby wygenerować grupę na nowej stronie lub nie.

rjxml plik:

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

W przypadku isStartNewPage="false" dla grupy rownumGroup wynik będzie następujący ($P{ilość}==7 ):

W przypadku isStartNewPage="true" dla grupy rownumGroup wynik będzie następujący ($P{ilość} ==5 ):

Rozwiązanie 3. Korzystanie z podraportu

Możemy dodać Podraport komponent Szczegóły zespół (zobacz pierwsze rozwiązanie ) lub Nagłówek grupy (zobacz drugie rozwiązanie ) grupa. W takim przypadku możesz dodać do podraportu nie tylko Kod kreskowy komponent, ale wszystko, co chcesz.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wykonać skrypt Oracle sql za pomocą kodu java?

  2. Oracle PL/SQL:Przykład DBMS_SCHEDULER.CREATE_JOB

  3. Górne n procent górne n%

  4. wybierz rownum z pensji, gdzie rownum=3;

  5. Dodaj dzień do sygnatury czasowej