sql >> データベース >  >> RDS >> Oracle

1つのレポートにバーコード\または複数のバーコードを含む複数のレポートを印刷する方法

    いくつかの方法でプログラミングしなくても、クエリを少し変更するだけで簡単に実行できます。

    解決策1.詳細バンドのバーコードコンポーネントで単一のレポートを使用する

    単一のレポートのテンプレートを使用して、1つで複数のバーコードを生成できます。 レポート。

    この場合、 queryString 式( Oracleで機能 DB)は次のようになります:

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

    -シーケンスから必要な回数だけ値を生成します。 $ P {quantity} パラメータは、生成される行(バーコード)の数を決定します。

    動作中の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のグループ フィールドは、シングルを生成するのに役立ちます 独自のグループに属する多くのバーコードを含むレポート(1つのグループ-1つのバーコード)。 バーコード コンポーネントはグループヘッダーに配置する必要があります バンド。

    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>
    

    isStartNewPage ="false"の場合 グループrownumGroup 結果は( $ P {quantity} ==7 ):

    isStartNewPage ="true"の場合 グループrownumGroup 結果は( $ P {quantity} ==5 になります ):

    解決策3.サブレポートの使用

    サブレポートを追加できます 詳細のコンポーネント バンド(最初の解決策を参照 )またはグループヘッダー2番目の解決策を参照 )バンド。この場合、バーコードだけでなく、サブレポートに追加できます。 コンポーネントですが、必要なものはすべてあります。



    1. 地理的に分散したMariaDBクラスターを設計する方法

    2. SQL Serverのデータベースですべてのチェックキーと外部キーの制約を無効にする方法(T-SQLの例)

    3. NVLとCoalesceのOracleの違い

    4. 最新バージョンのOSX(YosemiteまたはEl Capitan)のインストール後に`pg_tblspc`がありません