Cálculo com datas no iReport [RESOLVIDO]

8 respostas
D

Boa tarde galera!

Preciso da ajuda de vcs, tenho duas datas eu preciso subtrair uma data da outra e fazer + 1.

Ex: DATA_FINAL - DATA_INICIAL +1

Eu pesquisei no Google mais na hora que fui aplicar no iReport não funcionou de maneira alguma.

Agradeço a ajuda de todos!

8 Respostas

D

Repita comigo: cálculos devem ser feitos no java. O iReport e suas libs só servirão para exibir o relatório.

G

Para mim é inviável fazer os cálculos no Java, acaba sobrando bastante coisa pro jasper calcular…

Como você está passando os dados para o report? Select ou bean?

Se for select usa as operações de data do Sql, são bem fáceis de usar xD
Se passar por Bean é melhor calcular na aplicação mesmo xp

D

Gerva:
Para mim é inviável fazer os cálculos no Java, acaba sobrando bastante coisa pro jasper calcular…

Como você está passando os dados para o report? Select ou bean?

Se for select usa as operações de data do Sql, são bem fáceis de usar xD
Se passar por Bean é melhor calcular na aplicação mesmo xp

Olá Gerva obrigado por responder.

Então eu estou passando os dados para o iReport por meio de um Select, fiz uma Query das colunas que quero usar do
banco para usá-las nos Fields. Já fiz alguns cálculos no iReport por meio de variáveis que ele tem, porém nunca fiz com
datas ai queria só uma dica de como é que faz, sei que para fazer certas operações matemáticas no iReport tem uma
sintaxe que ele exige para que possa ser feito os cálculos.

Agradeço desde já!!

D

Bom dia drsmachado.

Então cara já fiz alguns cálculos no iReport, tem uma função que você cria variáveis diretamente no iReport,
sendo assim quando você for montar o relatório é só você usar a variável no respectivo campo para que apareça no relatório na hora da
execução. Claro também dá para ser feito no Java, porém esse relatório será de um módulo e todas as informações constarão nele.
Como disse já fiz alguns cálculos no iReport mais com data nunca fiz, por esse motivo perguntei.

Obrigado!

A

Podes estar fazendo isso direto na query. No ORACLE ficaria assim:

SELECT (TO_DATE('09/11/2012','DD/MM/YYYY') - TO_DATE('01/11/2012','DD/MM/YYYY')) + 1 TOTAL_DIAS FROM DUAL

Avila

D

Avila82:
Podes estar fazendo isso direto na query. No ORACLE ficaria assim:

SELECT (TO_DATE('09/11/2012','DD/MM/YYYY') - TO_DATE('01/11/2012','DD/MM/YYYY')) + 1 TOTAL_DIAS FROM DUAL

Avila

Boa tarde Avila82.

Então cara eu preciso fazer uma variável no iReport, tem uma ferramenta de variáveis lá ai eu preciso pegar duas colunas do
banco e fazer esse calculo para atibuir em vários campos do relatório, mas não estou me entendendo com a sintaxe do iReport
quanto a esse calculo.

Mais valew mesmo, sei que no select iria funcionar legal! :thumbup:

A

consegui fazendo a seguinte expressão na variável:

$F{DATA_DOIS}.getDate() - $F{DATA_UM}.getDate() + 1

segue o xml:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report1" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
	<property name="ireport.zoom" value="1.0"/>
	<property name="ireport.x" value="0"/>
	<property name="ireport.y" value="0"/>
	<queryString>
		<![CDATA[SELECT SYSDATE as data_um,
       SYSDATE + 5 as data_dois
  FROM DUAL]]>
	</queryString>
	<field name="DATA_UM" class="java.sql.Timestamp"/>
	<field name="DATA_DOIS" class="java.sql.Timestamp"/>
	<variable name="variable1" class="java.lang.Number" resetType="None">
		<variableExpression><![CDATA[$F{DATA_DOIS}.getDate() - $F{DATA_UM}.getDate() + 1]]></variableExpression>
	</variable>
	<background>
		<band splitType="Stretch"/>
	</background>
	<title>
		<band height="41" splitType="Stretch">
			<textField>
				<reportElement x="324" y="0" width="100" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.Integer"><![CDATA[$V{variable1}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="91" y="0" width="100" height="20"/>
				<textElement/>
				<textFieldExpression class="java.util.Date"><![CDATA[$F{DATA_UM}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="202" y="0" width="100" height="20"/>
				<textElement/>
				<textFieldExpression class="java.util.Date"><![CDATA[$F{DATA_DOIS}]]></textFieldExpression>
			</textField>
		</band>
	</title>
	<pageHeader>
		<band height="27" splitType="Stretch"/>
	</pageHeader>
	<columnHeader>
		<band height="22" splitType="Stretch"/>
	</columnHeader>
	<detail>
		<band height="38" splitType="Stretch"/>
	</detail>
	<columnFooter>
		<band height="45" splitType="Stretch"/>
	</columnFooter>
	<pageFooter>
		<band height="54" splitType="Stretch"/>
	</pageFooter>
	<summary>
		<band height="133" splitType="Stretch"/>
	</summary>
</jasperReport>

Avila

D

Avila82:
consegui fazendo a seguinte expressão na variável:

$F{DATA_DOIS}.getDate() - $F{DATA_UM}.getDate() + 1

segue o xml:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report1" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
	<property name="ireport.zoom" value="1.0"/>
	<property name="ireport.x" value="0"/>
	<property name="ireport.y" value="0"/>
	<queryString>
		<![CDATA[SELECT SYSDATE as data_um,
       SYSDATE + 5 as data_dois
  FROM DUAL]]>
	</queryString>
	<field name="DATA_UM" class="java.sql.Timestamp"/>
	<field name="DATA_DOIS" class="java.sql.Timestamp"/>
	<variable name="variable1" class="java.lang.Number" resetType="None">
		<variableExpression><![CDATA[$F{DATA_DOIS}.getDate() - $F{DATA_UM}.getDate() + 1]]></variableExpression>
	</variable>
	<background>
		<band splitType="Stretch"/>
	</background>
	<title>
		<band height="41" splitType="Stretch">
			<textField>
				<reportElement x="324" y="0" width="100" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.Integer"><![CDATA[$V{variable1}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="91" y="0" width="100" height="20"/>
				<textElement/>
				<textFieldExpression class="java.util.Date"><![CDATA[$F{DATA_UM}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="202" y="0" width="100" height="20"/>
				<textElement/>
				<textFieldExpression class="java.util.Date"><![CDATA[$F{DATA_DOIS}]]></textFieldExpression>
			</textField>
		</band>
	</title>
	<pageHeader>
		<band height="27" splitType="Stretch"/>
	</pageHeader>
	<columnHeader>
		<band height="22" splitType="Stretch"/>
	</columnHeader>
	<detail>
		<band height="38" splitType="Stretch"/>
	</detail>
	<columnFooter>
		<band height="45" splitType="Stretch"/>
	</columnFooter>
	<pageFooter>
		<band height="54" splitType="Stretch"/>
	</pageFooter>
	<summary>
		<band height="133" splitType="Stretch"/>
	</summary>
</jasperReport>

Avila

Boa Avila82 deu certinho aqui minha variável, ela está trazendo a diferença de datas pela subtração e adicionando +1 corretamente.

Obrigado pela ajuda cara!! :thumbup:

Criado 8 de novembro de 2012
Ultima resposta 9 de nov. de 2012
Respostas 8
Participantes 4