(RESOLVIDO)Passar parâmetro para Jasper através de uma Grid

53 respostas Resolvido
vaadinspringmysqljavaprogramação
R

Bom dia a todos, estou com uma ideia, mas não sei como executa-la

Ideia:

Minha Grid:

Se eu deixa todas a vendas desmarcadas, e clicar em exportar relatório, ele ira gerar um relatório completo em pdf(com Jasper)

A ideia agora é selecionar vendas de modo alternado e exibir apenas as selecionadas, exemplo na grid:

no exemplo acima selecionei as vendas com IDs 6 e 12, se eu clicar agora em exportar relatório, gostaria que apenas essas duas vendas fossem exibidas.

Mas confesso que não sei nem por onde começar…alguém poderia me ajudar?

53 Respostas

L

Tu pode passar os IDs das vendas selecionadas como parâmetro para o relatório e usar na consulta que é executada pelo relatório. O parâmetro é passado no mesmo ponto onde é passada a conexão com o banco de dados.

R

@Lucas_Camara é exatamente isso que quero fazer, para passar os parametros terei que usar HashMap…

R

@Lucas_Camara se vc puder me ajudar, te agradeço…rs

L

No momento em que o relatório é processado, veja:

JasperFillManager.fillReport(report, parameters, connection);

O parameters é um mapa que vc deverá preencher com os ids das vendas selecionadas:

Map<String, Object> parameters = new HashMap<>();
parameter.put("idsVenda", idsVendasSelecionadas);

E para usar os parâmetros na consulta, dê uma olhada nesse link: https://community.jaspersoft.com/documentation/tibco-jaspersoft-studio-user-guide/v60/using-parameters-queries

A referência do método fillReport é essa:
JasperFillManager#fillReport(java.io.InputStream,java.util.Map,java.sql.Connection)

R

este: idsVendasSelecionadas, onde e como devo cria-lo?

L

Tu tem que receber como parâmetro. Ele pode ser um List<Long> (use o mesmo tipo que vc está usando para definir a PK da entidade Venda.

R

então nesta classe:

package br.com.fjsistemas.relatorios;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.stereotype.Component;

import br.com.fjsistemas.repository.VendaRepository;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;

@Component
public class ConverteJrxmlToPdf {

	@SuppressWarnings("unused")
	private VendaRepository vendaRepository;

	private DataSource dataSource;

	public ConverteJrxmlToPdf(VendaRepository vendaRepository, DataSource dataSource) {
		this.vendaRepository = vendaRepository;
		this.dataSource = dataSource;
	}

	public byte[] conversor() throws JRException, SQLException {

		InputStream reportJrxml = this.getClass().getResourceAsStream("/RelatorioVendas.jrxml");
		JasperReport document = JasperCompileManager.compileReport(reportJrxml);
		
		Map<String, Object> parameters = new HashMap<>();
		parameters.put("idsVenda", idsVendasSelecionadas);

		JasperPrint print = JasperFillManager.fillReport(document, parameters, dataSource.getConnection());

		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		JasperExportManager.exportReportToPdfStream(print, baos);
		byte[] relatorio = baos.toByteArray();

		return relatorio;
	}

}

devo criar uma lista, desta forma:

List<Long> idsVendasSelecionadas = null;

correto?

Ficando a classe assim:

package br.com.fjsistemas.relatorios;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.stereotype.Component;

import br.com.fjsistemas.repository.VendaRepository;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;

@Component
public class ConverteJrxmlToPdf {

	@SuppressWarnings("unused")
	private VendaRepository vendaRepository;

	private DataSource dataSource;

	public ConverteJrxmlToPdf(VendaRepository vendaRepository, DataSource dataSource) {
		this.vendaRepository = vendaRepository;
		this.dataSource = dataSource;
	}

	public byte[] conversor() throws JRException, SQLException {
		
		List<Long> idsVendasSelecionadas = null;

		InputStream reportJrxml = this.getClass().getResourceAsStream("/RelatorioVendas.jrxml");
		JasperReport document = JasperCompileManager.compileReport(reportJrxml);
		
		Map<String, Object> parameters = new HashMap<>();
		parameters.put("idsVenda", idsVendasSelecionadas);

		JasperPrint print = JasperFillManager.fillReport(document, parameters, dataSource.getConnection());

		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		JasperExportManager.exportReportToPdfStream(print, baos);
		byte[] relatorio = baos.toByteArray();

		return relatorio;
	}

}
L

Tem que ser por parâmetro:

public byte[] conversor(List<Long> idsVendasSelecionadas) throws JRException, SQLException {

E no lugar onde vc chama esse método conversor vc deve passa a lista de ids preenchida.

R

Aqui é onde passo o metodo conversor

exportarRelatorio.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
		exportarRelatorio.getStyle().set("margin-top", "37px");
		exportarRelatorio.setWidth("180px");

		FileDownloadWrapper buttonWrapper = new FileDownloadWrapper(new StreamResource("RelatorioVenda.pdf", () -> {
			try {
				return new ByteArrayInputStream(pdf.conversor());
			} catch (JRException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			return null;
		}));

Minha duvida é, como eu relaciono a seleção na grid com a lista? E, como passo a lista preenchida para o metodo?

L

passa a lista preenchida para o método é facil:

return new ByteArrayInputStream(pdf.conversor(listaIds));

Agora, recuperar a lista com base na seleção feita em tela, tu tem que pesquisar como o componente do vaadin te entrega isso.

R

Certo…só para deixar claro

na classe converteJrxmlToPdf eu passe a lista no parametro

public byte[] conversor(List<Long> idsVendasSelecionadas) throws JRException, SQLException

Agora na classe RelatorioView, devo criar a lista

List<Long> idsVendasSelecionadas;

e devo passar ela preenchida para o metodo

return new ByteArrayInputStream(pdf.conversor(idsVendasSelecionadas));

é isso?

L

Isso mesmo.

R

@Lucas_Camara, ok vou agora pesquisar como recuperar a lista com base na seleção feita em tela

R

@Lucas_Camara

Mano, pelo que estou lendo aqui na documentação:

Grid | Using Vaadin Components | Flow | Vaadin 14 Docs

Eles não usam listas, mas sim um Set…tentei fazer aqui com Set, mas não deu certo(não deu erros, apenas não funcionou)

L

O uso com Set ou List é indiferente nesse seu caso, a diferença é que o Set garante a ordem, e isso não impacta o que vc precisa fazer.

A primeira coisa é conseguir recuperar esse Set preenchido. Como está o código para obter os itens selecionados nesse Set?

R

@Lucas_Camara

Bom meu código está assim no momento:

Classe converteJrxmlToPdf

package br.com.fjsistemas.relatorios;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import javax.sql.DataSource;

import org.springframework.stereotype.Component;

import br.com.fjsistemas.backend.Venda;
import br.com.fjsistemas.repository.VendaRepository;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;

@Component
public class ConverteJrxmlToPdf {

	@SuppressWarnings("unused")
	private VendaRepository vendaRepository;

	private DataSource dataSource;

	public ConverteJrxmlToPdf(VendaRepository vendaRepository, DataSource dataSource) {
		this.vendaRepository = vendaRepository;
		this.dataSource = dataSource;
	}

	public byte[] conversor(Set<Venda> idsVendasSelecionadas) throws JRException, SQLException { //Aqui eu substitui List<Venda> por Set<Venda>
		
		InputStream reportJrxml = this.getClass().getResourceAsStream("/RelatorioVendas.jrxml");
		JasperReport document = JasperCompileManager.compileReport(reportJrxml);
		
		Map<String, Object> parameters = new HashMap<>();
		parameters.put("id", idsVendasSelecionadas);

		JasperPrint print = JasperFillManager.fillReport(document, parameters, dataSource.getConnection());

		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		JasperExportManager.exportReportToPdfStream(print, baos);
		byte[] relatorio = baos.toByteArray();

		return relatorio;
	}

}

Classe RelatorioView

package br.com.fjsistemas.relatorios;

    import java.io.ByteArrayInputStream;
    import java.sql.SQLException;
    import java.text.NumberFormat;
    import java.text.ParseException;
    import java.time.format.DateTimeFormatter;
    import java.util.List;
    import java.util.Locale;
    import java.util.Set;

    import org.springframework.beans.factory.annotation.Autowired;
    import org.vaadin.olli.FileDownloadWrapper;

    import com.vaadin.flow.component.button.Button;
    import com.vaadin.flow.component.button.ButtonVariant;
    import com.vaadin.flow.component.datepicker.DatePicker;
    import com.vaadin.flow.component.grid.Grid;
    import com.vaadin.flow.component.grid.Grid.SelectionMode;
    import com.vaadin.flow.component.html.Label;
    import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
    import com.vaadin.flow.component.orderedlayout.VerticalLayout;
    import com.vaadin.flow.component.textfield.TextField;
    import com.vaadin.flow.data.binder.PropertyId;
    import com.vaadin.flow.data.renderer.LocalDateRenderer;
    import com.vaadin.flow.data.selection.MultiSelect;
    import com.vaadin.flow.router.PageTitle;
    import com.vaadin.flow.router.Route;
    import com.vaadin.flow.server.StreamResource;

    import br.com.fjsistemas.backend.Venda;
    import br.com.fjsistemas.main.MainView;
    import br.com.fjsistemas.repository.VendaRepository;
    import net.sf.jasperreports.engine.JRException;

    @Route(value = "relatorio-view", layout = MainView.class)
    @PageTitle("Relatório de Vendas")
    public class RelatorioVendaView extends VerticalLayout {

    	private static final long serialVersionUID = 1L;

    	private HorizontalLayout layoutDatas = new HorizontalLayout();

    	private Button gerarRelatorio = new Button("Gerar Relatório");
    	private Button exportarRelatorio = new Button("Exportar Relatório");

    	private Grid<Venda> grid = new Grid<>();

    	@Autowired
    	private ConverteJrxmlToPdf pdf;

    	Label label = new Label("Valor Total no Periodo:");

    	@PropertyId("dataInicio")
    	private DatePicker dataInicio = new DatePicker("Início");

    	@PropertyId("dataFim")
    	private DatePicker dataFim = new DatePicker("Final");

    	@PropertyId("somaValores")
    	private TextField somaValores = new TextField();

    	@Autowired
    	private VendaRepository vendaRepository;

    	private List<Venda> listaVendas;
    	
    	Set<Venda> idsVendasSelecionadas;

    	public RelatorioVendaView() {
    		configuraRelatorio();
    	}

    	private void populaInformacao() {

    		listaVendas = vendaRepository.findAllByDataVendaBetween(dataInicio.getValue(), dataFim.getValue());
    		somaValoresRelatorio();
    		atualizaGrdVenda();

    	}

    	private void atualizaGrdVenda() {
    		grid.setItems(listaVendas);
    	}

    	private void somaValoresRelatorio() {

    		NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));

    		double soma = 0;

    		for (Venda venda : listaVendas) {
    			try {
    				soma += formatter.parse(venda.getValorTotalVenda()).doubleValue();
    			} catch (ParseException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}

    		somaValores.setValue(formatter.format(soma));
    	}

    	private void configuraRelatorio() {

    		grid.setWidthFull();
    		grid.setHeight("740px");

    		grid.addColumn(Venda::getId).setHeader("ID:").setAutoWidth(true);

    		grid.addColumn(new LocalDateRenderer<>(Venda::getDataVenda, DateTimeFormatter.ofPattern("dd/MM/yyy")))
    				.setHeader("Data Venda").setAutoWidth(true);

    		grid.addColumn(venda -> venda.getCliente().getNome()).setHeader("Nome:").setAutoWidth(true)
    				.setKey("cliente.nome");

    		grid.addColumn(Venda::getValorTotalVenda).setHeader("Valor Total:").setAutoWidth(true)
    				.setKey("valorTotalVenda");

    		grid.getColumns().forEach(col -> col.setAutoWidth(true).setSortable(true).setResizable(true));
//----------------------------------------------------------------------------------------------------------------------------
    		grid.setSelectionMode(SelectionMode.MULTI);

    		MultiSelect<Grid<Venda>, Venda> multiSelect = grid.asMultiSelect();
    		multiSelect.addValueChangeListener(e -> {
    			Set<Venda> idsVendasSelecionadas = e.getValue();
    		});

    		gerarRelatorio.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
    		gerarRelatorio.getStyle().set("margin-top", "37px");
    		gerarRelatorio.setWidth("180px");
    		gerarRelatorio.addClickListener(event -> {
    			populaInformacao();
    		});

    		exportarRelatorio.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
    		exportarRelatorio.getStyle().set("margin-top", "37px");
    		exportarRelatorio.setWidth("180px");

    		FileDownloadWrapper buttonWrapper = new FileDownloadWrapper(new StreamResource("RelatorioVenda.pdf", () -> {
    			try {
    				return new ByteArrayInputStream(pdf.conversor(idsVendasSelecionadas));
    			} catch (JRException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}

    			return null;
    		}));

    		buttonWrapper.wrapComponent(exportarRelatorio);
    		add(buttonWrapper);
//-----------------------------------------------------------------------------------------------------------------------------
    		somaValores.setWidth("245px");
    		somaValores.getStyle().set("margin-left", "620px");
    		somaValores.setLabel("Valor Total no Período");

    		dataInicio.setWidth("181px");
    		dataFim.setWidth("181px");

    		layoutDatas.add(dataInicio, dataFim, gerarRelatorio, buttonWrapper, somaValores);

    		add(layoutDatas, grid);
    	}

    	public List<Venda> getListaVenda() {
    		return listaVendas;
    	}

    	public void setListaVenda(List<Venda> listaVenda) {
    		this.listaVendas = listaVenda;
    	}

    }
L

Essa parte está errada:

multiSelect.addValueChangeListener(e -> {
	Set<Venda> idsVendasSelecionadas = e.getValue();
});

Vc está atribuindo numa variável diferente (que tem o mesmo nome) da variável passada para o método conversor. Mude para:

multiSelect.addValueChangeListener(e -> {
	this.idsVendasSelecionadas = e.getValue();
});
R

mudei, mas continua buscando todas as vendas

MultiSelect<Grid<Venda>, Venda> multiSelect = grid.asMultiSelect();
		multiSelect.addValueChangeListener(e -> {
			this.idsVendasSelecionadas = e.getValue();
		});
L

Buscando onde? no relatório? Se for isso, agora vc terá que usar esse parâmetro com os Ids selecionados na consulta que está no relatório.

R

Então Lucas, eu add o parâmetro no relatório(se quiser envio xml pra vc ver)…e fui testar na app

primeiro gero o relatorio na tela, segundo eu seleciono uma venda e terceiro clico em exportar:

mas recebo este erro

java.lang.NullPointerException: null
	at com.vaadin.flow.server.StreamResource$Pipe.read(StreamResource.java:104) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.server.StreamResource$Pipe.copy(StreamResource.java:94) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.server.StreamResource$Pipe.accept(StreamResource.java:77) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.server.communication.StreamResourceHandler.handleRequest(StreamResourceHandler.java:89) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.server.communication.StreamRequestHandler.handleRequest(StreamRequestHandler.java:106) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1570) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:252) ~[flow-server-2.6.3.jar:2.6.3]
	at com.vaadin.flow.spring.SpringServlet.service(SpringServlet.java:111) ~[vaadin-spring-12.4.0.jar:na]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.45.jar:4.0.FR]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:710) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:457) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:352) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.45.jar:4.0.FR]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.45.jar:4.0.FR]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.6.jar:5.3.6]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.6.jar:5.3.6]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.6.jar:5.3.6]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.6.jar:5.3.6]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.6.jar:5.3.6]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.6.jar:5.3.6]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]

2021-07-02 14:30:47.835  WARN 2168 --- [nio-8080-exec-8] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotWritableException: No converter for [class java.util.LinkedHashMap] with preset Content-Type 'application/pdf']
L

Esse erro não parece que está completo. A linha onde ocorreu o NPE parece ser interno (nas dependências) do vaadin.

R

@Lucas_Camara bom dia mano!

então, dei uma mexida aqui, e agora o erro não existe mais, porem o único resultado que estou obtendo é um relatório em branco…sem erros de execução ou compilação:

Não sei se tem algo haver, mas aqui nos parametros, estou passando isso:

Map<String, Object> parameters = new LinkedHashMap<String, Object>();
		parameters.put("idVenda", idsVendasSelecionadas);

Como estou passando o id como parametro e o id é Long, não deveria passar desta forma?:

Map<Long, Object> parameters = new LinkedHashMap<Long, Object>();
		parameters.put("idVenda", idsVendasSelecionadas);
R

Dei mais outra mexida, agora o relatório voltou aparecer, mas não faz a filtragem:

repare que ele diz que o ID é nulo

L

O certo é Map<String, Object>, pois o mapa vai servir apenas para a passagem do valor. A chave do mapa sendo uma string é o que será usado pelo relatório para obter o valor.

Depois que vc passou o parâmetro para o relatório, como ficou a consulta sql dentro do jrxml?

R
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.17.0.final using JasperReports Library version 6.17.0-6d93193241dd8cc42629e188b94f9e0bc5722efd  -->
<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="RelatorioVendas" pageWidth="842" pageHeight="595" orientation="Landscape" columnWidth="802" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="df013db5-f76e-44d3-b0df-bcbc46d93160">
	<property name="com.jaspersoft.studio.data.sql.tables" value=""/>
	<property name="com.jaspersoft.studio.data.sql.SQLQueryDesigner.sash.w1" value="140"/>
	<property name="com.jaspersoft.studio.data.sql.SQLQueryDesigner.sash.w2" value="855"/>
	<property name="com.jaspersoft.studio.data.defaultdataadapter" value="fsistemas"/>
	<style name="Title" fontName="Times New Roman" fontSize="50" isBold="true"/>
	<style name="SubTitle" forecolor="#736343" fontName="Arial" fontSize="18"/>
	<style name="Column header" forecolor="#666666" fontName="Arial" fontSize="12" isBold="true"/>
	<style name="Detail" fontName="Arial" fontSize="12"/>
	<style name="Row" mode="Transparent">
		<conditionalStyle>
			<conditionExpression><![CDATA[$V{REPORT_COUNT}%2 == 0]]></conditionExpression>
			<style backcolor="#E6DAC3"/>
		</conditionalStyle>
	</style>
	<parameter name="idVenda" class="java.lang.Long"/>
	<queryString language="SQL">
		<![CDATA[SELECT fjsistemas.cliente.nome,
	fjsistemas.forma_de_pagamento.forma_de_pagamento,
	fjsistemas.produto.valor,
	fjsistemas.produto.nome,
	fjsistemas.produto_vendido.produto_id,
	fjsistemas.produto_vendido.valor_total_do_item,
	fjsistemas.produto_vendido.quantidade,
	fjsistemas.venda.id,
	fjsistemas.venda.data_venda,
	fjsistemas.venda.valor_total_venda
FROM fjsistemas.venda
	INNER JOIN fjsistemas.cliente ON 
	 fjsistemas.cliente.id = fjsistemas.venda.cliente_id 
	INNER JOIN fjsistemas.forma_de_pagamento ON 
	 fjsistemas.forma_de_pagamento.id = fjsistemas.venda.forma_de_pagamento_id 
	INNER JOIN fjsistemas.produto_vendido ON 
	 fjsistemas.produto_vendido.venda_id = fjsistemas.venda.id 
	INNER JOIN fjsistemas.produto ON 
	 fjsistemas.produto.id = fjsistemas.produto_vendido.produto_id 
ORDER BY fjsistemas.venda.id ASC]]>
	</queryString>
	<field name="nome" class="java.lang.String">
		<property name="com.jaspersoft.studio.field.name" value="nome"/>
		<property name="com.jaspersoft.studio.field.label" value="nome"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="cliente"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="forma_de_pagamento" class="java.lang.String">
		<property name="com.jaspersoft.studio.field.name" value="forma_de_pagamento"/>
		<property name="com.jaspersoft.studio.field.label" value="forma_de_pagamento"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="forma_de_pagamento"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="valor" class="java.lang.Double">
		<property name="com.jaspersoft.studio.field.name" value="valor"/>
		<property name="com.jaspersoft.studio.field.label" value="valor"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="produto"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="COLUMN_4" class="java.lang.String">
		<property name="com.jaspersoft.studio.field.name" value="nome"/>
		<property name="com.jaspersoft.studio.field.label" value="nome"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="produto"/>
	</field>
	<field name="produto_id" class="java.lang.Long">
		<property name="com.jaspersoft.studio.field.name" value="produto_id"/>
		<property name="com.jaspersoft.studio.field.label" value="produto_id"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="produto_vendido"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="valor_total_do_item" class="java.lang.Double">
		<property name="com.jaspersoft.studio.field.name" value="valor_total_do_item"/>
		<property name="com.jaspersoft.studio.field.label" value="valor_total_do_item"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="produto_vendido"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="quantidade" class="java.lang.Integer">
		<property name="com.jaspersoft.studio.field.name" value="quantidade"/>
		<property name="com.jaspersoft.studio.field.label" value="quantidade"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="produto_vendido"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="id" class="java.lang.Long">
		<property name="com.jaspersoft.studio.field.name" value="id"/>
		<property name="com.jaspersoft.studio.field.label" value="id"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="venda"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="data_venda" class="java.sql.Date">
		<property name="com.jaspersoft.studio.field.name" value="data_venda"/>
		<property name="com.jaspersoft.studio.field.label" value="data_venda"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="venda"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="valor_total_venda" class="java.lang.String">
		<property name="com.jaspersoft.studio.field.name" value="valor_total_venda"/>
		<property name="com.jaspersoft.studio.field.label" value="valor_total_venda"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="venda"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<variable name="Soma" class="java.lang.Double" calculation="Sum">
		<variableExpression><![CDATA[$F{valor_total_do_item}]]></variableExpression>
	</variable>
	<background>
		<band splitType="Stretch"/>
	</background>
	<title>
		<band height="60" splitType="Stretch">
			<staticText>
				<reportElement style="Title" x="1" y="0" width="799" height="60" uuid="bc1ce1da-8232-46ea-be55-cec4abb986dd"/>
				<textElement textAlignment="Center" verticalAlignment="Middle"/>
				<text><![CDATA[RELATÓTIO VENDAS]]></text>
			</staticText>
		</band>
	</title>
	<pageHeader>
		<band height="20" splitType="Stretch">
			<textField>
				<reportElement x="0" y="0" width="80" height="20" uuid="22e99724-47f5-43db-890e-f358c9f52841"/>
				<textFieldExpression><![CDATA["Filtro ID: " + $P{idVenda}]]></textFieldExpression>
			</textField>
		</band>
	</pageHeader>
	<columnHeader>
		<band height="16" splitType="Stretch">
			<line>
				<reportElement positionType="FixRelativeToBottom" x="0" y="15" width="802" height="1" uuid="e9d2002a-c8ee-4649-a258-640dad29110c"/>
				<graphicElement>
					<pen lineWidth="0.5" lineColor="#999999"/>
				</graphicElement>
			</line>
			<staticText>
				<reportElement style="Column header" x="0" y="0" width="89" height="15" forecolor="#736343" uuid="f957e008-a7be-42e2-ae1e-6dd37d516e1d">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="3cfcbd04-6058-4ae4-9559-fcaf41cff3d7"/>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle"/>
				<text><![CDATA[ID]]></text>
			</staticText>
			<staticText>
				<reportElement style="Column header" x="89" y="0" width="89" height="15" forecolor="#736343" uuid="347f29a5-d360-4f5a-a83c-d6b7d6a4ddd2">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="f1b1e558-48c2-4edf-89e3-f00326230e66"/>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle"/>
				<text><![CDATA[DATA]]></text>
			</staticText>
			<staticText>
				<reportElement style="Column header" x="178" y="0" width="89" height="15" forecolor="#736343" uuid="81f8f18f-f32f-47f8-a734-fede5682198e">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="2648b9ef-6fe4-43f1-abf9-8794829d1694"/>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle"/>
				<text><![CDATA[CLIENTE]]></text>
			</staticText>
			<staticText>
				<reportElement style="Column header" x="267" y="0" width="89" height="15" forecolor="#736343" uuid="bcba985c-963b-49ea-86cc-ec57344a2086">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="06ecdd4b-9066-41e1-9a1a-acc122e485b1"/>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle"/>
				<text><![CDATA[PRODUTO]]></text>
			</staticText>
			<staticText>
				<reportElement style="Column header" x="356" y="0" width="89" height="15" forecolor="#736343" uuid="1a122b7f-c2c3-4c51-8747-32f0bb61f7f6">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="730df7e6-112f-45ca-b531-02341e4ce46f"/>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle"/>
				<text><![CDATA[UN]]></text>
			</staticText>
			<staticText>
				<reportElement style="Column header" x="445" y="0" width="89" height="15" forecolor="#736343" uuid="ca4ac53c-0a68-4502-995a-4bf4cd3d5b35">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="77b6370b-c0f6-49e1-ba91-4a7faaae799c"/>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle"/>
				<text><![CDATA[V. UN]]></text>
			</staticText>
			<staticText>
				<reportElement style="Column header" x="534" y="0" width="89" height="15" forecolor="#736343" uuid="0371cdde-c420-4c96-8d0a-8b43279ac129">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="77b95e65-85ca-40f2-94b4-ef57c2267b80"/>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle"/>
				<text><![CDATA[V. ITEM]]></text>
			</staticText>
			<staticText>
				<reportElement style="Column header" x="623" y="0" width="89" height="15" forecolor="#736343" uuid="8eb42e24-ec00-47dc-94eb-6ede95073832">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="131ec30c-5aca-4030-9716-cb59c6a9d76f"/>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle"/>
				<text><![CDATA[V. TOTAL]]></text>
			</staticText>
			<staticText>
				<reportElement style="Column header" x="712" y="0" width="89" height="15" forecolor="#736343" uuid="7cdf36f3-0d71-4f85-8c29-86c8f9465f2a">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="54cd7934-4c56-45c8-8d53-c09e9f5ab87d"/>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle"/>
				<text><![CDATA[PAGAMENTO]]></text>
			</staticText>
		</band>
	</columnHeader>
	<detail>
		<band height="15" splitType="Stretch">
			<frame>
				<reportElement style="Row" mode="Opaque" x="0" y="0" width="802" height="15" uuid="fa7cec56-4ec1-48e6-a26e-7266a995d174"/>
				<textField textAdjust="StretchHeight">
					<reportElement style="Detail" isPrintRepeatedValues="false" x="0" y="0" width="89" height="15" uuid="470f2a4b-9c82-447f-b058-045f8f7b6320">
						<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="3cfcbd04-6058-4ae4-9559-fcaf41cff3d7"/>
					</reportElement>
					<textElement textAlignment="Center" verticalAlignment="Middle"/>
					<textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
				</textField>
				<textField textAdjust="StretchHeight" pattern="dd/MM/yyyy">
					<reportElement style="Detail" x="89" y="0" width="89" height="15" uuid="3d20ac67-da36-485b-85c1-64fa11bcd1ce">
						<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="f1b1e558-48c2-4edf-89e3-f00326230e66"/>
					</reportElement>
					<textElement textAlignment="Center" verticalAlignment="Middle"/>
					<textFieldExpression><![CDATA[$F{data_venda}]]></textFieldExpression>
				</textField>
				<textField textAdjust="StretchHeight">
					<reportElement style="Detail" isPrintRepeatedValues="false" x="178" y="0" width="89" height="15" uuid="717bcda6-46fc-4758-827f-5ab0d783b475">
						<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="2648b9ef-6fe4-43f1-abf9-8794829d1694"/>
					</reportElement>
					<textElement textAlignment="Center" verticalAlignment="Middle"/>
					<textFieldExpression><![CDATA[$F{nome}]]></textFieldExpression>
				</textField>
				<textField textAdjust="StretchHeight">
					<reportElement style="Detail" x="267" y="0" width="89" height="15" uuid="8b5e5563-b822-4b3b-82cf-aa2652cb016b">
						<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="06ecdd4b-9066-41e1-9a1a-acc122e485b1"/>
					</reportElement>
					<textElement textAlignment="Center" verticalAlignment="Middle"/>
					<textFieldExpression><![CDATA[$F{COLUMN_4}]]></textFieldExpression>
				</textField>
				<textField textAdjust="StretchHeight">
					<reportElement style="Detail" x="356" y="0" width="89" height="15" uuid="51b4525b-bbf4-42bf-b641-466821af7721">
						<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="730df7e6-112f-45ca-b531-02341e4ce46f"/>
					</reportElement>
					<textElement textAlignment="Center" verticalAlignment="Middle"/>
					<textFieldExpression><![CDATA[$F{quantidade}]]></textFieldExpression>
				</textField>
				<textField textAdjust="StretchHeight" pattern="R$ #,##0.###;#,##0.###-">
					<reportElement style="Detail" x="445" y="0" width="89" height="15" uuid="e894bbca-56cd-4eec-8df0-9bea51b83c39">
						<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="77b6370b-c0f6-49e1-ba91-4a7faaae799c"/>
					</reportElement>
					<textElement textAlignment="Center" verticalAlignment="Middle"/>
					<textFieldExpression><![CDATA[$F{valor}]]></textFieldExpression>
				</textField>
				<textField textAdjust="StretchHeight" pattern="R$ #,##0.###;#,##0.###-">
					<reportElement style="Detail" x="534" y="0" width="89" height="15" uuid="2687f8ba-75bf-4750-8d8e-cb46f7f23c88">
						<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="77b95e65-85ca-40f2-94b4-ef57c2267b80"/>
					</reportElement>
					<textElement textAlignment="Center" verticalAlignment="Middle"/>
					<textFieldExpression><![CDATA[$F{valor_total_do_item}]]></textFieldExpression>
				</textField>
				<textField textAdjust="StretchHeight">
					<reportElement style="Detail" isPrintRepeatedValues="false" x="623" y="0" width="89" height="15" uuid="60c6f2c9-7bd4-4278-893a-bb1af0e02120">
						<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="131ec30c-5aca-4030-9716-cb59c6a9d76f"/>
					</reportElement>
					<textElement textAlignment="Center" verticalAlignment="Middle"/>
					<textFieldExpression><![CDATA[$F{valor_total_venda}]]></textFieldExpression>
				</textField>
				<textField textAdjust="StretchHeight">
					<reportElement style="Detail" isPrintRepeatedValues="false" x="712" y="0" width="89" height="15" uuid="9f6d3f67-984d-40a1-9275-cb4fe98fb4c7">
						<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="54cd7934-4c56-45c8-8d53-c09e9f5ab87d"/>
					</reportElement>
					<textElement textAlignment="Center" verticalAlignment="Middle"/>
					<textFieldExpression><![CDATA[$F{forma_de_pagamento}]]></textFieldExpression>
				</textField>
			</frame>
		</band>
	</detail>
	<columnFooter>
		<band height="6" splitType="Stretch">
			<line>
				<reportElement positionType="FixRelativeToBottom" x="0" y="3" width="802" height="1" uuid="fa5e88d5-a011-4e32-8f12-ce923f903111"/>
				<graphicElement>
					<pen lineWidth="0.5" lineColor="#999999"/>
				</graphicElement>
			</line>
		</band>
	</columnFooter>
	<pageFooter>
		<band height="25" splitType="Stretch">
			<frame>
				<reportElement mode="Opaque" x="-21" y="1" width="843" height="24" forecolor="#D0B48E" backcolor="#F2EBDF" uuid="5d8169bd-4a75-48c8-8a68-6d3ad5ba9402"/>
				<textField pattern="EEEEE dd MMMMM yyyy">
					<reportElement style="Column header" x="22" y="0" width="197" height="24" forecolor="#736343" uuid="fbce24bb-3cb1-44a3-8eec-8c067ddbe5b5"/>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font size="12" isBold="true"/>
					</textElement>
					<textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression>
				</textField>
				<textField pattern="R$ #,##0.###;#,##0.###-">
					<reportElement x="644" y="0" width="179" height="24" forecolor="#736343" uuid="70bde723-8ff5-462c-8210-53a024e848ec"/>
					<box>
						<topPen lineWidth="1.0" lineStyle="Solid"/>
						<bottomPen lineWidth="1.0" lineStyle="Solid"/>
						<rightPen lineWidth="1.0" lineStyle="Solid"/>
					</box>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font size="12"/>
					</textElement>
					<textFieldExpression><![CDATA[$V{Soma}]]></textFieldExpression>
				</textField>
				<textField>
					<reportElement x="555" y="0" width="89" height="24" forecolor="#736343" uuid="379838be-d508-4b97-995c-522af90f8019"/>
					<box>
						<topPen lineWidth="1.0" lineStyle="Solid"/>
						<leftPen lineWidth="1.0" lineStyle="Solid"/>
						<bottomPen lineWidth="1.0" lineStyle="Solid"/>
					</box>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font size="12" isBold="true"/>
					</textElement>
					<textFieldExpression><![CDATA["Valor Total:"]]></textFieldExpression>
				</textField>
			</frame>
		</band>
	</pageFooter>
	<summary>
		<band splitType="Stretch"/>
	</summary>
</jasperReport>
L

Ah, a consulta ainda não está considerando o parâmetro com os IDs selecionados.

Abri seu jrxml aqui no jasper e vi que a forma como vc declarou o parâmetro está errado. Se pode ser selecionado várias vendas na tela e vc está passando uma lista de ids como parâmetro do relatório, vc deve declarar o parâmetro no jrxml como List e não como um simples Long.

Recomendo usar um nome mais indicativo para a lista de ids selecionados, como, por exemplo: idsVendasSelecionadas. Do jeito que está: idVenda, parece que é apenas uma venda que pode ser selecionada.

R

Então devo alterar isso:

<parameter name="idVenda" class="java.lang.Long"/>

para isso:

<parameter name="idVenda" class="java.util.List"/>

L

Isso mesmo. Antes de alterar a consulta, continue tentando fazer esse parâmetro dos ids das vendas aparecer no relatório.

R

Mesmo alterando o xml para:

<parameter name="idsVendasSelecionadas" class="java.util.List"/>

L

Vc usou o parâmetro para aparecer no relatório assim: $P{idsVendasSelecionadas}?

Lembrando que o parâmetro declarado no relatório tem que ter o mesmo nome do valor passado no Map pela aplicação.

R
<parameter name="$P{idsVendasSelecionadas}" class="java.util.List"/>

está desta forma

L

A declaração do parameter no relatório pode ficar só assim mesmo:

<parameter name="idsVendasSelecionadas" class="java.util.List"/>

Apenas quando vc for usar o parâmetro, tem que ser assim: $P{idsVendasSelecionadas}. Mas pelo que vi aqui no seu jrxml, vc estava fazendo certo já.

Agora tem que verificar se na aplicação o ids estão preenchidos corretamente no momento em que o relatório é gerado.

R

Então, pelo que foi gerado na tela, está tudo preenchido corretamente:

no mysql:

Aparentemente, tudo ok

Na app o código está assim:

Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("idsVendasSelecionadas", idsVendasSelecionadas);

e no xml está assim:

`<parameter name="idsVendasSelecionadas" class="java.util.List"/>`
L

Ao gerar o relatório, no código java, a variável idsVendasSelecionadas está com quais valores?

R

R

mano estou usando Set lembra?

não deveria ser assim?:

<parameter name="idsVendasSelecionadas" class="java.util.Set"/>

L

Verdade. Tem que ser java.util.Set. Porém o problema mesmo é que o Set está sendo enviado null para o relatório.

R

exato…alterei testei e continua null

L

Mudar o tipo, não vai corrigir o valor que está null. Tem que ver na tela, se o esquema de pegar os itens selecionados está correto.

R

parece que não está mais null

R

L

Maravilha, está quase. O problema é que está sendo montado um Set de vendas. E para o relatório, só precisa de um Set de IDs das vendas.

Em vez de: Set<Venda>, tem que ser Set<Long>, ou, para evitar mudar o código vc pode obter os Ids assim:

idsVendasSelecionadas.stream().map(v -> v.getId()).collect(Collectors.toSet());
R

Mano vamos por partes…kk

primeiro olha como está o código neste exato momento:

Classe converteJrxmlToPdf

package br.com.fjsistemas.relatorios;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

import javax.sql.DataSource;

import org.springframework.stereotype.Component;

import br.com.fjsistemas.backend.Venda;
import br.com.fjsistemas.repository.VendaRepository;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;

@Component
public class ConverteJrxmlToPdf {

	@SuppressWarnings("unused")
	private VendaRepository vendaRepository;

	private DataSource dataSource;

	public ConverteJrxmlToPdf(VendaRepository vendaRepository, DataSource dataSource) {
		this.vendaRepository = vendaRepository;
		this.dataSource = dataSource;
	}

	public byte[] conversor(Set<Venda> idsVendasSelecionadas) throws JRException, SQLException {
		
		InputStream reportJrxml = this.getClass().getResourceAsStream("/RelatorioVenda.jrxml");
		JasperReport document = JasperCompileManager.compileReport(reportJrxml);
//---------------------------------------------------------------------------------------------------------		
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("idsVendasSelecionadas", idsVendasSelecionadas);
		idsVendasSelecionadas.stream().map(v -> v.getId()).collect(Collectors.toSet());
//---------------------------------------------------------------------------------------------------------		
		JasperPrint print = JasperFillManager.fillReport(document, parameters, dataSource.getConnection());

		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		JasperExportManager.exportReportToPdfStream(print, baos);
		byte[] relatorio = baos.toByteArray();

		return relatorio;
	}

}

Classe RelatorioView

package br.com.fjsistemas.relatorios;

import java.io.ByteArrayInputStream;
import java.sql.SQLException;
import java.text.NumberFormat;
import java.text.ParseException;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Locale;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.vaadin.olli.FileDownloadWrapper;

import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.button.ButtonVariant;
import com.vaadin.flow.component.datepicker.DatePicker;
import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.grid.Grid.SelectionMode;
import com.vaadin.flow.component.html.Label;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.data.binder.PropertyId;
import com.vaadin.flow.data.renderer.LocalDateRenderer;
import com.vaadin.flow.data.selection.MultiSelect;
import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route;
import com.vaadin.flow.server.StreamResource;

import br.com.fjsistemas.backend.Venda;
import br.com.fjsistemas.main.MainView;
import br.com.fjsistemas.repository.VendaRepository;
import net.sf.jasperreports.engine.JRException;

@Route(value = "relatorio-view", layout = MainView.class)
@PageTitle("Relatório de Vendas")
public class RelatorioVendaView extends VerticalLayout {

	private static final long serialVersionUID = 1L;

	private HorizontalLayout layoutDatas = new HorizontalLayout();

	private Button gerarRelatorio = new Button("Gerar Relatório");
	private Button exportarRelatorio = new Button("Exportar Relatório");

	private Grid<Venda> grid = new Grid<>();

	@Autowired
	private ConverteJrxmlToPdf pdf;

	Label label = new Label("Valor Total no Periodo:");

	@PropertyId("dataInicio")
	private DatePicker dataInicio = new DatePicker("Início");

	@PropertyId("dataFim")
	private DatePicker dataFim = new DatePicker("Final");

	@PropertyId("somaValores")
	private TextField somaValores = new TextField();

	@Autowired
	private VendaRepository vendaRepository;

	private List<Venda> listaVendas;
//-----------------------------------------------------
	Set<Venda> idsVendasSelecionadas;
//-----------------------------------------------------
	public RelatorioVendaView() {
		configuraRelatorio();
	}

	private void populaInformacao() {

		listaVendas = vendaRepository.findAllByDataVendaBetween(dataInicio.getValue(), dataFim.getValue());
		somaValoresRelatorio();
		atualizaGrdVenda();

	}

	private void atualizaGrdVenda() {
		grid.setItems(listaVendas);
	}

	private void somaValoresRelatorio() {

		NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));

		double soma = 0;

		for (Venda venda : listaVendas) {
			try {
				soma += formatter.parse(venda.getValorTotalVenda()).doubleValue();
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		somaValores.setValue(formatter.format(soma));
	}

	@SuppressWarnings("unused")
	private void configuraRelatorio() {

		grid.setWidthFull();
		grid.setHeight("740px");

		grid.addColumn(Venda::getId).setHeader("ID:").setAutoWidth(true);

		grid.addColumn(new LocalDateRenderer<>(Venda::getDataVenda, DateTimeFormatter.ofPattern("dd/MM/yyy")))
				.setHeader("Data Venda").setAutoWidth(true);

		grid.addColumn(venda -> venda.getCliente().getNome()).setHeader("Nome:").setAutoWidth(true)
				.setKey("cliente.nome");

		grid.addColumn(Venda::getValorTotalVenda).setHeader("Valor Total:").setAutoWidth(true)
				.setKey("valorTotalVenda");

		grid.getColumns().forEach(col -> col.setAutoWidth(true).setSortable(true).setResizable(true));
//---------------------------------------------------------------------------------------------------------------------
		grid.setSelectionMode(SelectionMode.MULTI);

		MultiSelect<Grid<Venda>, Venda> multiSelect = grid.asMultiSelect();
		multiSelect.addValueChangeListener(e -> {
			this.idsVendasSelecionadas = e.getValue();
		});
//---------------------------------------------------------------------------------------------------------------------
		gerarRelatorio.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
		gerarRelatorio.getStyle().set("margin-top", "37px");
		gerarRelatorio.setWidth("180px");
		gerarRelatorio.addClickListener(event -> {
			populaInformacao();
		});

		exportarRelatorio.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
		exportarRelatorio.getStyle().set("margin-top", "37px");
		exportarRelatorio.setWidth("180px");
		exportarRelatorio.addClickListener(evento -> {

		});
//--------------------------------------------------------------------------------------------------------------------------------------------
		FileDownloadWrapper buttonWrapper = new FileDownloadWrapper(new StreamResource("RelatorioVenda.pdf", () -> {
			try {
				return new ByteArrayInputStream(pdf.conversor(idsVendasSelecionadas));
			} catch (JRException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			return null;
		}));

		buttonWrapper.wrapComponent(exportarRelatorio);
		add(buttonWrapper);
//--------------------------------------------------------------------------------------------------------------------------------------------
		somaValores.setWidth("245px");
		somaValores.getStyle().set("margin-left", "620px");
		somaValores.setLabel("Valor Total no Período");

		dataInicio.setWidth("181px");
		dataFim.setWidth("181px");

		layoutDatas.add(dataInicio, dataFim, gerarRelatorio, buttonWrapper, somaValores);

		add(layoutDatas, grid);
	}

	public List<Venda> getListaVenda() {
		return listaVendas;
	}

	public void setListaVenda(List<Venda> listaVenda) {
		this.listaVendas = listaVenda;
	}

}

Relatorio XML

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.17.0.final using JasperReports Library version 6.17.0-6d93193241dd8cc42629e188b94f9e0bc5722efd  -->
<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="RelatorioVendas" pageWidth="842" pageHeight="595" orientation="Landscape" columnWidth="802" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="df013db5-f76e-44d3-b0df-bcbc46d93160">
	<property name="com.jaspersoft.studio.data.sql.tables" value=""/>
	<property name="com.jaspersoft.studio.data.sql.SQLQueryDesigner.sash.w1" value="140"/>
	<property name="com.jaspersoft.studio.data.sql.SQLQueryDesigner.sash.w2" value="855"/>
	<property name="com.jaspersoft.studio.data.defaultdataadapter" value="fsistemas"/>
	<style name="Title" fontName="Times New Roman" fontSize="50" isBold="true"/>
	<style name="SubTitle" forecolor="#736343" fontName="Arial" fontSize="18"/>
	<style name="Column header" forecolor="#666666" fontName="Arial" fontSize="12" isBold="true"/>
	<style name="Detail" fontName="Arial" fontSize="12"/>
	<style name="Row" mode="Transparent">
		<conditionalStyle>
			<conditionExpression><![CDATA[$V{REPORT_COUNT}%2 == 0]]></conditionExpression>
			<style backcolor="#E6DAC3"/>
		</conditionalStyle>
	</style>
	<parameter name="idsVendasSelecionadas" class="java.util.Set"/>
	<queryString language="SQL">
		<![CDATA[SELECT fjsistemas.cliente.nome,
	fjsistemas.forma_de_pagamento.forma_de_pagamento,
	fjsistemas.produto.valor,
	fjsistemas.produto.nome,
	fjsistemas.produto_vendido.produto_id,
	fjsistemas.produto_vendido.valor_total_do_item,
	fjsistemas.produto_vendido.quantidade,
	fjsistemas.venda.id,
	fjsistemas.venda.data_venda,
	fjsistemas.venda.valor_total_venda
FROM fjsistemas.venda
	INNER JOIN fjsistemas.cliente ON 
	 fjsistemas.cliente.id = fjsistemas.venda.cliente_id 
	INNER JOIN fjsistemas.forma_de_pagamento ON 
	 fjsistemas.forma_de_pagamento.id = fjsistemas.venda.forma_de_pagamento_id 
	INNER JOIN fjsistemas.produto_vendido ON 
	 fjsistemas.produto_vendido.venda_id = fjsistemas.venda.id 
	INNER JOIN fjsistemas.produto ON 
	 fjsistemas.produto.id = fjsistemas.produto_vendido.produto_id 
ORDER BY fjsistemas.venda.id ASC]]>
	</queryString>
	<field name="nome" class="java.lang.String">
		<property name="com.jaspersoft.studio.field.name" value="nome"/>
		<property name="com.jaspersoft.studio.field.label" value="nome"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="cliente"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="forma_de_pagamento" class="java.lang.String">
		<property name="com.jaspersoft.studio.field.name" value="forma_de_pagamento"/>
		<property name="com.jaspersoft.studio.field.label" value="forma_de_pagamento"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="forma_de_pagamento"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="valor" class="java.lang.Double">
		<property name="com.jaspersoft.studio.field.name" value="valor"/>
		<property name="com.jaspersoft.studio.field.label" value="valor"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="produto"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="COLUMN_4" class="java.lang.String">
		<property name="com.jaspersoft.studio.field.name" value="nome"/>
		<property name="com.jaspersoft.studio.field.label" value="nome"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="produto"/>
	</field>
	<field name="produto_id" class="java.lang.Long">
		<property name="com.jaspersoft.studio.field.name" value="produto_id"/>
		<property name="com.jaspersoft.studio.field.label" value="produto_id"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="produto_vendido"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="valor_total_do_item" class="java.lang.Double">
		<property name="com.jaspersoft.studio.field.name" value="valor_total_do_item"/>
		<property name="com.jaspersoft.studio.field.label" value="valor_total_do_item"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="produto_vendido"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="quantidade" class="java.lang.Integer">
		<property name="com.jaspersoft.studio.field.name" value="quantidade"/>
		<property name="com.jaspersoft.studio.field.label" value="quantidade"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="produto_vendido"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="id" class="java.lang.Long">
		<property name="com.jaspersoft.studio.field.name" value="id"/>
		<property name="com.jaspersoft.studio.field.label" value="id"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="venda"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="data_venda" class="java.sql.Date">
		<property name="com.jaspersoft.studio.field.name" value="data_venda"/>
		<property name="com.jaspersoft.studio.field.label" value="data_venda"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="venda"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<field name="valor_total_venda" class="java.lang.String">
		<property name="com.jaspersoft.studio.field.name" value="valor_total_venda"/>
		<property name="com.jaspersoft.studio.field.label" value="valor_total_venda"/>
		<property name="com.jaspersoft.studio.field.tree.path" value="venda"/>
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<variable name="Soma" class="java.lang.Double" calculation="Sum">
		<variableExpression><![CDATA[$F{valor_total_do_item}]]></variableExpression>
	</variable>
	<background>
		<band splitType="Stretch"/>
	</background>
	<title>
		<band height="60" splitType="Stretch">
			<staticText>
				<reportElement style="Title" x="1" y="0" width="799" height="60" uuid="bc1ce1da-8232-46ea-be55-cec4abb986dd"/>
				<textElement textAlignment="Center" verticalAlignment="Middle"/>
				<text><![CDATA[RELATÓTIO VENDAS]]></text>
			</staticText>
		</band>
	</title>
	<pageHeader>
		<band height="20" splitType="Stretch">
			<textField>
				<reportElement x="0" y="0" width="280" height="20" uuid="22e99724-47f5-43db-890e-f358c9f52841"/>
				<textElement>
					<font fontName="Arial"/>
				</textElement>
				<textFieldExpression><![CDATA["Filtro ID: " + $P{idsVendasSelecionadas}]]></textFieldExpression>
			</textField>
		</band>
	</pageHeader>
	<columnHeader>
		<band height="16" splitType="Stretch">
			<line>
				<reportElement positionType="FixRelativeToBottom" x="0" y="15" width="802" height="1" uuid="e9d2002a-c8ee-4649-a258-640dad29110c"/>
				<graphicElement>
					<pen lineWidth="0.5" lineColor="#999999"/>
				</graphicElement>
			</line>
			<staticText>
				<reportElement style="Column header" x="0" y="0" width="89" height="15" forecolor="#736343" uuid="f957e008-a7be-42e2-ae1e-6dd37d516e1d">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="3cfcbd04-6058-4ae4-9559-fcaf41cff3d7"/>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Arial"/>
				</textElement>
				<text><![CDATA[ID]]></text>
			</staticText>
			<staticText>
				<reportElement style="Column header" x="89" y="0" width="89" height="15" forecolor="#736343" uuid="347f29a5-d360-4f5a-a83c-d6b7d6a4ddd2">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="f1b1e558-48c2-4edf-89e3-f00326230e66"/>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Arial"/>
				</textElement>
				<text><![CDATA[DATA]]></text>
			</staticText>
			<staticText>
				<reportElement style="Column header" x="178" y="0" width="89" height="15" forecolor="#736343" uuid="81f8f18f-f32f-47f8-a734-fede5682198e">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="2648b9ef-6fe4-43f1-abf9-8794829d1694"/>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Arial"/>
				</textElement>
				<text><![CDATA[CLIENTE]]></text>
			</staticText>
			<staticText>
				<reportElement style="Column header" x="267" y="0" width="89" height="15" forecolor="#736343" uuid="bcba985c-963b-49ea-86cc-ec57344a2086">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="06ecdd4b-9066-41e1-9a1a-acc122e485b1"/>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Arial"/>
				</textElement>
				<text><![CDATA[PRODUTO]]></text>
			</staticText>
			<staticText>
				<reportElement style="Column header" x="356" y="0" width="89" height="15" forecolor="#736343" uuid="1a122b7f-c2c3-4c51-8747-32f0bb61f7f6">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="730df7e6-112f-45ca-b531-02341e4ce46f"/>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Arial"/>
				</textElement>
				<text><![CDATA[UN]]></text>
			</staticText>
			<staticText>
				<reportElement style="Column header" x="445" y="0" width="89" height="15" forecolor="#736343" uuid="ca4ac53c-0a68-4502-995a-4bf4cd3d5b35">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="77b6370b-c0f6-49e1-ba91-4a7faaae799c"/>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Arial"/>
				</textElement>
				<text><![CDATA[V. UN]]></text>
			</staticText>
			<staticText>
				<reportElement style="Column header" x="534" y="0" width="89" height="15" forecolor="#736343" uuid="0371cdde-c420-4c96-8d0a-8b43279ac129">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="77b95e65-85ca-40f2-94b4-ef57c2267b80"/>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Arial"/>
				</textElement>
				<text><![CDATA[V. ITEM]]></text>
			</staticText>
			<staticText>
				<reportElement style="Column header" x="623" y="0" width="89" height="15" forecolor="#736343" uuid="8eb42e24-ec00-47dc-94eb-6ede95073832">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="131ec30c-5aca-4030-9716-cb59c6a9d76f"/>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Arial"/>
				</textElement>
				<text><![CDATA[V. TOTAL]]></text>
			</staticText>
			<staticText>
				<reportElement style="Column header" x="712" y="0" width="89" height="15" forecolor="#736343" uuid="7cdf36f3-0d71-4f85-8c29-86c8f9465f2a">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="54cd7934-4c56-45c8-8d53-c09e9f5ab87d"/>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Arial"/>
				</textElement>
				<text><![CDATA[PAGAMENTO]]></text>
			</staticText>
		</band>
	</columnHeader>
	<detail>
		<band height="15" splitType="Stretch">
			<frame>
				<reportElement style="Row" mode="Opaque" x="0" y="0" width="802" height="15" uuid="fa7cec56-4ec1-48e6-a26e-7266a995d174"/>
				<textField textAdjust="StretchHeight">
					<reportElement style="Detail" isPrintRepeatedValues="false" x="0" y="0" width="89" height="15" uuid="470f2a4b-9c82-447f-b058-045f8f7b6320">
						<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="3cfcbd04-6058-4ae4-9559-fcaf41cff3d7"/>
					</reportElement>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font fontName="Arial"/>
					</textElement>
					<textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
				</textField>
				<textField textAdjust="StretchHeight" pattern="dd/MM/yyyy">
					<reportElement style="Detail" x="89" y="0" width="89" height="15" uuid="3d20ac67-da36-485b-85c1-64fa11bcd1ce">
						<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="f1b1e558-48c2-4edf-89e3-f00326230e66"/>
					</reportElement>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font fontName="Arial"/>
					</textElement>
					<textFieldExpression><![CDATA[$F{data_venda}]]></textFieldExpression>
				</textField>
				<textField textAdjust="StretchHeight">
					<reportElement style="Detail" isPrintRepeatedValues="false" x="178" y="0" width="89" height="15" uuid="717bcda6-46fc-4758-827f-5ab0d783b475">
						<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="2648b9ef-6fe4-43f1-abf9-8794829d1694"/>
					</reportElement>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font fontName="Arial"/>
					</textElement>
					<textFieldExpression><![CDATA[$F{nome}]]></textFieldExpression>
				</textField>
				<textField textAdjust="StretchHeight">
					<reportElement style="Detail" x="267" y="0" width="89" height="15" uuid="8b5e5563-b822-4b3b-82cf-aa2652cb016b">
						<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="06ecdd4b-9066-41e1-9a1a-acc122e485b1"/>
					</reportElement>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font fontName="Arial"/>
					</textElement>
					<textFieldExpression><![CDATA[$F{COLUMN_4}]]></textFieldExpression>
				</textField>
				<textField textAdjust="StretchHeight">
					<reportElement style="Detail" x="356" y="0" width="89" height="15" uuid="51b4525b-bbf4-42bf-b641-466821af7721">
						<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="730df7e6-112f-45ca-b531-02341e4ce46f"/>
					</reportElement>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font fontName="Arial"/>
					</textElement>
					<textFieldExpression><![CDATA[$F{quantidade}]]></textFieldExpression>
				</textField>
				<textField textAdjust="StretchHeight" pattern="R$ #,##0.###;#,##0.###-">
					<reportElement style="Detail" x="445" y="0" width="89" height="15" uuid="e894bbca-56cd-4eec-8df0-9bea51b83c39">
						<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="77b6370b-c0f6-49e1-ba91-4a7faaae799c"/>
					</reportElement>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font fontName="Arial"/>
					</textElement>
					<textFieldExpression><![CDATA[$F{valor}]]></textFieldExpression>
				</textField>
				<textField textAdjust="StretchHeight" pattern="R$ #,##0.###;#,##0.###-">
					<reportElement style="Detail" x="534" y="0" width="89" height="15" uuid="2687f8ba-75bf-4750-8d8e-cb46f7f23c88">
						<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="77b95e65-85ca-40f2-94b4-ef57c2267b80"/>
					</reportElement>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font fontName="Arial"/>
					</textElement>
					<textFieldExpression><![CDATA[$F{valor_total_do_item}]]></textFieldExpression>
				</textField>
				<textField textAdjust="StretchHeight">
					<reportElement style="Detail" isPrintRepeatedValues="false" x="623" y="0" width="89" height="15" uuid="60c6f2c9-7bd4-4278-893a-bb1af0e02120">
						<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="131ec30c-5aca-4030-9716-cb59c6a9d76f"/>
					</reportElement>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font fontName="Arial"/>
					</textElement>
					<textFieldExpression><![CDATA[$F{valor_total_venda}]]></textFieldExpression>
				</textField>
				<textField textAdjust="StretchHeight">
					<reportElement style="Detail" isPrintRepeatedValues="false" x="712" y="0" width="89" height="15" uuid="9f6d3f67-984d-40a1-9275-cb4fe98fb4c7">
						<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="54cd7934-4c56-45c8-8d53-c09e9f5ab87d"/>
					</reportElement>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font fontName="Arial"/>
					</textElement>
					<textFieldExpression><![CDATA[$F{forma_de_pagamento}]]></textFieldExpression>
				</textField>
			</frame>
		</band>
	</detail>
	<columnFooter>
		<band height="6" splitType="Stretch">
			<line>
				<reportElement positionType="FixRelativeToBottom" x="0" y="3" width="802" height="1" uuid="fa5e88d5-a011-4e32-8f12-ce923f903111"/>
				<graphicElement>
					<pen lineWidth="0.5" lineColor="#999999"/>
				</graphicElement>
			</line>
		</band>
	</columnFooter>
	<pageFooter>
		<band height="25" splitType="Stretch">
			<frame>
				<reportElement mode="Opaque" x="-21" y="1" width="843" height="24" forecolor="#D0B48E" backcolor="#F2EBDF" uuid="5d8169bd-4a75-48c8-8a68-6d3ad5ba9402"/>
				<textField pattern="EEEEE dd MMMMM yyyy">
					<reportElement style="Column header" x="22" y="0" width="197" height="24" forecolor="#736343" uuid="fbce24bb-3cb1-44a3-8eec-8c067ddbe5b5"/>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font fontName="Arial" size="12" isBold="true"/>
					</textElement>
					<textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression>
				</textField>
				<textField pattern="R$ #,##0.###;#,##0.###-">
					<reportElement x="644" y="0" width="179" height="24" forecolor="#736343" uuid="70bde723-8ff5-462c-8210-53a024e848ec"/>
					<box>
						<topPen lineWidth="1.0" lineStyle="Solid"/>
						<bottomPen lineWidth="1.0" lineStyle="Solid"/>
						<rightPen lineWidth="1.0" lineStyle="Solid"/>
					</box>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font fontName="Arial" size="12"/>
					</textElement>
					<textFieldExpression><![CDATA[$V{Soma}]]></textFieldExpression>
				</textField>
				<textField>
					<reportElement x="555" y="0" width="89" height="24" forecolor="#736343" uuid="f7222752-30bf-4f5d-b1d7-4f373e88c3ab"/>
					<box>
						<topPen lineWidth="1.0" lineStyle="Solid"/>
						<leftPen lineWidth="1.0" lineStyle="Solid"/>
						<bottomPen lineWidth="1.0" lineStyle="Solid"/>
					</box>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font fontName="Arial" size="12" isBold="true"/>
					</textElement>
					<textFieldExpression><![CDATA["Valor Total: "]]></textFieldExpression>
				</textField>
			</frame>
		</band>
	</pageFooter>
	<summary>
		<band splitType="Stretch"/>
	</summary>
</jasperReport>

RESULTADO:

L

Blz, vc está passando uma coleção de Vendas para o relatório, mas só precisa passar uma coleção de IDs das vendas.

Obs.: java.util.Set é uma coleção, assim como java.util.List

R

então devo alterar todos os set<venda> por set<long>

L

Sim, mas para evitar alterar muito o código, vc pode, dentro do método conversor, fazer isso:

parameters.put("idsVendasSelecionadas", idsVendasSelecionadas.stream()
	.map(v -> v.getId())
	.collect(Collectors.toSet()));

já deve resolver.

O map serve para transformar uma coleção de um tipo para outro. No seu caso, um Set de Venda será transformado para um Set de Long.

R

L
Solucao aceita

Blz! Agora falta apenas alterar o SQL da consulta executada no relatório. Veja esse exemplo:

SELECT * FROM Blablabla WHERE $X{IN, ID, idsVendasSelecionadas}

Vc tem que colocar no where do SQL uma condição com isso: $X{IN, ID, idsVendasSelecionadas}

Onde o ID é a coluna que será usada para comparar com os valores recebidos pelo parâmetro idsVendasSelecionadas.

R

QUERY ATUAL:

SELECT fjsistemas.cliente.nome,
	fjsistemas.forma_de_pagamento.forma_de_pagamento,
	fjsistemas.produto.valor,
	fjsistemas.produto.nome,
	fjsistemas.produto_vendido.produto_id,
	fjsistemas.produto_vendido.valor_total_do_item,
	fjsistemas.produto_vendido.quantidade,
	fjsistemas.venda.id,
	fjsistemas.venda.data_venda,
	fjsistemas.venda.valor_total_venda
FROM fjsistemas.venda
	INNER JOIN fjsistemas.cliente ON 
	 fjsistemas.cliente.id = fjsistemas.venda.cliente_id 
	INNER JOIN fjsistemas.forma_de_pagamento ON 
	 fjsistemas.forma_de_pagamento.id = fjsistemas.venda.forma_de_pagamento_id 
	INNER JOIN fjsistemas.produto_vendido ON 
	 fjsistemas.produto_vendido.venda_id = fjsistemas.venda.id 
	INNER JOIN fjsistemas.produto ON 
	 fjsistemas.produto.id = fjsistemas.produto_vendido.produto_id 
ORDER BY fjsistemas.venda.id ASC

QUERY APÓS ALTERAÇÃO:

SELECT fjsistemas.cliente.nome,
	fjsistemas.forma_de_pagamento.forma_de_pagamento,
	fjsistemas.produto.valor,
	fjsistemas.produto.nome,
	fjsistemas.produto_vendido.produto_id,
	fjsistemas.produto_vendido.valor_total_do_item,
	fjsistemas.produto_vendido.quantidade,
	fjsistemas.venda.id,
	fjsistemas.venda.data_venda,
	fjsistemas.venda.valor_total_venda
FROM fjsistemas.venda
	INNER JOIN fjsistemas.cliente ON 
	 fjsistemas.cliente.id = fjsistemas.venda.cliente_id 
	INNER JOIN fjsistemas.forma_de_pagamento ON 
	 fjsistemas.forma_de_pagamento.id = fjsistemas.venda.forma_de_pagamento_id 
	INNER JOIN fjsistemas.produto_vendido ON 
	 fjsistemas.produto_vendido.venda_id = fjsistemas.venda.id 
	INNER JOIN fjsistemas.produto ON 
	 fjsistemas.produto.id = fjsistemas.produto_vendido.produto_id 

SELECT * FROM Venda WHERE $X{IN, ID, idsVendasSelecionadas}
ORDER BY fjsistemas.venda.id ASC
L

Vc soh precisa adicionar o where no SELECT existente. Do jeito que vc fez, vc criou um select com uma sintaxe inválida. Um select correto com where é assim:

SELECT
    colunaA, colunaB
FROM
    tabelaA
WHERE
    colunaA = XXXX

Vc só precisa adicionar o WHERE. E o ID foi soh um exemplo. Vc deve alterar para usar a coluna que será usada na condição.

O ID deve ser substituído por fjsistemas.venda.id

R

desta forma?

SELECT fjsistemas.cliente.nome,
	fjsistemas.forma_de_pagamento.forma_de_pagamento,
	fjsistemas.produto.valor,
	fjsistemas.produto.nome,
	fjsistemas.produto_vendido.produto_id,
	fjsistemas.produto_vendido.valor_total_do_item,
	fjsistemas.produto_vendido.quantidade,
	fjsistemas.venda.id,
	fjsistemas.venda.data_venda,
	fjsistemas.venda.valor_total_venda
FROM fjsistemas.venda
	INNER JOIN fjsistemas.cliente ON 
	 fjsistemas.cliente.id = fjsistemas.venda.cliente_id 
	INNER JOIN fjsistemas.forma_de_pagamento ON 
	 fjsistemas.forma_de_pagamento.id = fjsistemas.venda.forma_de_pagamento_id 
	INNER JOIN fjsistemas.produto_vendido ON 
	 fjsistemas.produto_vendido.venda_id = fjsistemas.venda.id 
	INNER JOIN fjsistemas.produto ON 
	 fjsistemas.produto.id = fjsistemas.produto_vendido.produto_id 
WHERE 
	 fjsistemas.venda.id IN ('$X{IN, ID, idsVendasSelecionadas}') 
ORDER BY fjsistemas.venda.id ASC
L

Quase.

Pelo que li na documentação do jasperreports, em um JXRML, a forma de fazer IN no SQL é usando a expressão X${}, com isso, em vez de usar o IN do SQL, vc deve fazer assim:

WHERE $X{IN, fjsistemas.venda.id, idsVendasSelecionadas}

sim, é diferente da forma como é feito no SQL, mas isso pq o jasperreports transforma no IN do sql para vc durante a execução.

A documentação que li está nesse link que tinha te passado: https://community.jaspersoft.com/documentation/tibco-jaspersoft-studio-user-guide/v60/using-parameters-queries

R

MANOOO…obg mais uma vez…Deu certinho, está fazendo a filtragem corretamente…manooo…muito obg, vc tem sido um baita parceiro…obg por TODA ajuda até aqui, sou muito grato por vc ter compartilhado todo seu conhecimento até aqui comigo…vlw parceiro!!!

Criado 1 de julho de 2021
Ultima resposta 5 de jul. de 2021
Respostas 53
Participantes 2