Cálculo com datas no iReport [RESOLVIDO]

8 respostas
diegogm

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

drsmachado

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

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

diegogm

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

diegogm

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

diegogm

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

diegogm

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