Problema data MYSQL - JSP - iReport

2 respostas
ireportdatetimejsfjspmysql
marcospaulo.suporte

Pessoal, boa noite.
Estou com um problema onde eu não consigo mais saber por onde procurar uma solução. Vamos lá:
Tenho um relatório onde mostro os pedidos.
Faço um Where na data_emissao usando o between.

Se eu executo a query manualmente no MYSQL, ele traz todos os resultados.
Ex: Pedidos de ‘01/08/2018 00:00’ a ‘17/08/2018 14:00’.
select * from pedido where ped_datacadastro between '2018-08-01 00:00:00 ’ and ‘2018-08-17 14:00:22’;

Se eu executo a query no ireport direto, ele também os resultados corretamente. (valores fixos)

Se eu executo via web, passando a data por parâmetro, ele não exibe todos os resultados. Usei a saída de texto e os parâmetros estão sendo passados corretamente, inclusive as horas.

Porém, se eu seleciono um dia a mais que a ultima data de emissão, ele mostra corretamente, ex:
Meu ultimo pedido foi no dia 17/08 as 14:00, se eu coloco a data final até 17/08/2018 23:59, ele não mostra.
Mas se eu coloco o parâmetro como ‘18/08/2018 00:00’, ele mostra corretamente.

Detalhes:
Ireport : 5.6.0
Mysql 8.0.11
Lib do ireport no projeto: 5.6.0
Hibernate + Jpa

Meu dialog (onde chamo o relatório e passo os parâmetros)

<p:dialog header="Pedidos resumo por período" widgetVar="dlgRepPedRes1" modal="false" appendTo="@(body)" resizable="true" showEffect="explode" hideEffect="clip" position="center center" height="auto" width="600">
	<h:form id="formdlgRepPedRes1" prependId="false">
		<util:botoesReports managedBeanView="#{pedidoBeanView}" camposReload="msgmensagem" dialog="dlgRepPedRes1" funcaoReport="reportGeralResumo" />
		<div class="espacoBranco" />
		<div class="ui-fluid">
			<p:panelGrid id="gridMgm3" columns="4" styleClass="noBorderOut" layout="grid" columnClasses="ui-grid-col-2,ui-grid-col-3,ui-grid-col-1,ui-grid-col-3">

				<p:outputLabel value="Emissão:" />
				<p:calendar id="clInicio" value="#{pedidoBeanView.dtInicial}" pattern="dd/MM/yyyy HH:mm" locale="pt" timeZone="GMT-3" navigator="true" size="5" />
				<p:outputLabel value=" à " />
				<p:calendar id="clFim" value="#{pedidoBeanView.dtFinal}" pattern="dd/MM/yyyy HH:mm" locale="pt" timeZone="GMT-3" navigator="true" size="5" />
				
				<p:outputLabel value="Agrupador" />
				<p:selectOneMenu value="#{pedidoBeanView.agrupador}">
					<f:selectItem itemLabel="Selecione um agrupador" itemValue="null" />
					<f:selectItem itemLabel="Status do pedido" itemValue="statusPedido" />
					<f:selectItem itemLabel="Cliente" itemValue="cliente" />
					<f:selectItem itemLabel="Empresa" itemValue="emp_nome" />
				</p:selectOneMenu>
			</p:panelGrid>
		</div>
	</h:form>
</p:dialog>

meu método:

public StreamedContent getReportGeralResumo() throws Exception {		
	HashMap<Object, Object> parametros = new HashMap<Object, Object>();
	super.setNomeRelatorioJasper("rel_pedidos");
	super.setNomeRelatorioSaida("rel_pedidos");
	super.setTipoRelatorio(tipoReport);	
	System.out.println("agrupador :"+ this.agrupador);
	System.out.println("dtInicial :"+ this.dtInicial);
	System.out.println("dtFinal :"+ this.dtFinal);
	parametros.put("agrupador", agrupador);
	parametros.put("inicio", dtInicial);
	parametros.put("fim", dtFinal);
	
	super.setParametrosRelatorio(parametros);
	return super.getArquivoReportSql();
}

Meu campo do pedido (Hibernate).

@Column(nullable = false, updatable = false)
 @Temporal(TemporalType.TIMESTAMP)
  private Date ped_datacadastro = new Date();

Alguém pode me dar uma luz?
Valeu!

2 Respostas

FacaNaCaveira

Bom dia marcospaulo.suporte

Você poderia utilizar a tecla F12 do chrome para habilitar a barra de inspecionar e utilizar a guiar Network para verificar os dados passados de uma pagina a outra no momento da pesquisa, dai poderá verificar como realmente as datas estão sendo passadas por parâmetro.
Outra coisa que me ocorreu seria o formato de dados tipo estar usando somente DATE ao invés de DATETIME isso sim seria uma boa explicação para o seu caso.
Bom espero poder colaborar para resolução do seu problema
Abraços
Max

marcospaulo.suporte

FacaNaCaveira
Na vdd usei o System.out pra me mostrar o resultado e o parametro está saindo com hora correta. Olha só a saída:

dtInicial :Wed Aug 01 00:00:00 BRT 2018
dtFinal :Fri Aug 17 22:00:00 BRT 2018

Teoricamente o pedido com data de 17/08 as 14:xx deveria aparecer. Mas só coloco se eu selecionar dia 18/08 como data final.
Minha coluna no BD já está como DateTime.

Isso que estou achando muito estranho.

Alguma luz?

Criado 18 de agosto de 2018
Ultima resposta 20 de ago. de 2018
Respostas 2
Participantes 2