Jasper Reports, используйте одну метку для всей группы - PullRequest
0 голосов
/ 21 ноября 2011

Мне нужно создать отчет, используя библиотеку отчетов Jasper и iReport. В отчете используется группировка данных. Это должно быть показано следующим образом:

g    a_line_in_the_group
r    a_line_in_the_group
o    a_line_in_the_group
u    a_line_in_the_group
p    a_line_in_the_group
1    a_line_in_the_group

g    a_line_in_the_group
r    a_line_in_the_group
o    a_line_in_the_group
u    a_line_in_the_group
p    a_line_in_the_group
2    a_line_in_the_group

Так что для группы есть один ярлык. Данные сгруппированы, но метка отображается только в первой строке, например:

group1    a_line_in_the_group
          a_line_in_the_group
          a_line_in_the_group

Я указал свойство stretch для метки, но это не помогает.

Ответы [ 2 ]

2 голосов
/ 22 ноября 2011

Вы можете поместить строки сведений рядом с меткой группы ... но вы сможете сделать это только с помощью подотчета.

В большинстве случаев (и я имею в виду подавляющее большинство случаев) проще и лучше всего отображать метку группы либо в заголовке группы, либо просто в полосе подробностей. В последнем случае его можно включить только в первый ряд в группе или в каждый ряд. Пример Алекса К показывает это отлично.

Но если вы действительно хотите, чтобы метка группы отображалась рядом с деталями, вам понадобится вложенный отчет. Вот пример того, как это будет выглядеть в iReport: report layout

Вот как этот отчет отображается при просмотре:

enter image description here

В моем примере я установил поворот метки группы. Это здорово в PDF, но не так здорово в HTML. Но это только деталь; Вы можете сделать этот ярлык так, как вам нравится.

1 голос
/ 21 ноября 2011

Первый вариант

    <queryString>
        <![CDATA[SELECT
     DOCUMENTID AS POSITIONS_DOCUMENTID,
     POSITIONNO AS POSITIONS_POSITIONNO,
     PRODUCTID AS POSITIONS_PRODUCTID,
     QUANTITY AS POSITIONS_QUANTITY,
     PRICE AS POSITIONS_PRICE
FROM
     POSITIONS order by PRODUCTID]]>
    </queryString>
    <field name="POSITIONS_DOCUMENTID" class="java.lang.Integer"/>
    <field name="POSITIONS_POSITIONNO" class="java.lang.Integer"/>
    <field name="POSITIONS_PRODUCTID" class="java.lang.Integer"/>
    <field name="POSITIONS_QUANTITY" class="java.lang.Integer"/>
    <field name="POSITIONS_PRICE" class="java.math.BigDecimal"/>
    <group name="productid">
        <groupExpression><![CDATA[$F{POSITIONS_PRODUCTID}]]></groupExpression>
        <groupHeader>
            <band height="21">
                <textField>
                    <reportElement x="0" y="0" width="100" height="21"/>
                    <textElement/>
                    <textFieldExpression><![CDATA["Grouped by: " + $F{POSITIONS_PRODUCTID}]]></textFieldExpression>
                </textField>
            </band>
        </groupHeader>
    </group>
    <detail>
        <band height="21" splitType="Stretch">
            <textField>
                <reportElement x="136" y="0" width="100" height="21"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{POSITIONS_POSITIONNO}]]></textFieldExpression>
            </textField>
            <staticText>
                <reportElement x="36" y="0" width="100" height="21"/>
                <textElement/>
                <text><![CDATA[Static text]]></text>
            </staticText>
        </band>
    </detail>

Результат будет:

enter image description here

Второй вариант

    <queryString>
        <![CDATA[SELECT
     DOCUMENTID AS POSITIONS_DOCUMENTID,
     POSITIONNO AS POSITIONS_POSITIONNO,
     PRODUCTID AS POSITIONS_PRODUCTID,
     QUANTITY AS POSITIONS_QUANTITY,
     PRICE AS POSITIONS_PRICE
FROM
     POSITIONS order by PRODUCTID]]>
    </queryString>
    <field name="POSITIONS_DOCUMENTID" class="java.lang.Integer"/>
    <field name="POSITIONS_POSITIONNO" class="java.lang.Integer"/>
    <field name="POSITIONS_PRODUCTID" class="java.lang.Integer"/>
    <field name="POSITIONS_QUANTITY" class="java.lang.Integer"/>
    <field name="POSITIONS_PRICE" class="java.math.BigDecimal"/>
    <group name="productid">
        <groupExpression><![CDATA[$F{POSITIONS_PRODUCTID}]]></groupExpression>
        <groupHeader>
            <band height="21"/>
        </groupHeader>
    </group>
    <detail>
        <band height="21" splitType="Stretch">
            <textField>
                <reportElement x="136" y="0" width="100" height="21"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{POSITIONS_POSITIONNO}]]></textFieldExpression>
            </textField>
            <textField isBlankWhenNull="true">
                <reportElement x="36" y="1" width="100" height="20">
                    <printWhenExpression><![CDATA[$V{productid_COUNT}==1]]></printWhenExpression>
                </reportElement>
                <textElement/>
                <textFieldExpression><![CDATA["Grouped by: " + $F{POSITIONS_PRODUCTID}]]></textFieldExpression>
            </textField>
        </band>
    </detail>

Результат будет: enter image description here

...