В JasperReport у меня есть список со всеми заказами клиента, для каждого клиента. Я хотел бы рассчитать сумму всех товаров в каждом списке.
Это мой список:
<jr:list>
<datasetRun subDataset="listDataset">
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{products})]]> </dataSourceExpression>
</datasetRun>
<jr:listContents height="20">
<textField>
<reportElement style="table_TD" x="100" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{color}]]></textFieldExpression>
</textField>
<textField>
<reportElement style="table_TD" x="0" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.Integer"><![CDATA[$F{articleNo}]]></textFieldExpression>
</textField>
<textField>
<reportElement style="table_TD" x="200" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.Double"><![CDATA[$F{price}]]></textFieldExpression>
</textField>
</jr:listContents>
Поднабор данных, который я использую для его заполнения (я использую JRBeanCollectionDataSource для всего отчета):
<subDataset name="listDataset">
<field name="color" class="java.lang.String"/>
<field name="articleNo" class="java.lang.Integer"/>
<field name="price" class="java.lang.Double"/>
</subDataset>
В основном отчете я определил переменную с полем набора данных «цена» как выражение:
<variable name="totalPrice" class="java.lang.Double"calculation="Sum">
<variableExpression><![CDATA[$F{price}]]></variableExpression>
</variable>
Но это всегда ноль.
Если я определю ту же переменную в наборе данных списка, итоговая сумма будет рассчитана правильно, но я не смогу использовать ее в основном отчете.
Итак, мой вопрос: есть ли способ, которым я могу достичь этого с помощью списка? Или я должен использовать подотчет (потому что он может возвращать значение)?