Ver Mensaje Individual
  #4 (permalink)  
Antiguo 22/07/2011, 03:20
Pelirr
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: problemas con fechas en parametros en jasperreport

Hola, por ahora sigo con el mismo problema de las fechas. Mi consulta es la siguiente:

Cita:
select a.iataCompanyCode as company, a.flightNumber as flightNumber, a.scheduledTime as scheduledTime, a.statusCode as statusCode, a.flightTypeCode as flightType, (select aa.SeatNumber from `aodb`.`aircraft` aa where aa.tailNumber = a.tailNumber) as seats, (select aaa.pax from `aodb`.`paxmerchandisepost` aaa where aaa.idArrivalFlight = a.idArrivalFlight) as passengers, if ((select aaa.pax from `aodb`.`paxmerchandisepost` aaa where aaa.idArrivalFlight = a.idArrivalFlight) is null and (select aa.SeatNumber from `aodb`.`aircraft` aa where aa.tailNumber = a.tailNumber and a.tailnumber is not null),0,(100 - ((select aa.SeatNumber from `aodb`.`aircraft` aa where aa.tailNumber = a.tailNumber)-(select aaa.pax from `aodb`.`paxmerchandisepost` aaa where aaa.idArrivalFlight = a.idArrivalFlight))/(select aa.SeatNumber from `aodb`.`aircraft` aa where aa.tailNumber = a.tailNumber) * 100)) as ocupation from `aodb`.`arrivalFlight` a where a.scheduledTime between '2011-07-20 00:00:00' and '2011-07-20 23:59:59' union all (select b.iataCompanyCode as company, b.flightNumber as idDeparture, b.scheduledTime as scheduledTime, b.statusCode as statusCode, b.flightTypeCode as flightType, (select bb.SeatNumber from `aodb`.`aircraft` bb where bb.tailNumber = b.tailNumber) as seats, (select bbb.pax from `aodb`.`paxmerchandisepost` bbb where bbb.idDepartureFlight = b.idDepartureFlight) as passengers, if ((select bbb.pax from `aodb`.`paxmerchandisepost` bbb where bbb.idDepartureFlight = b.idDepartureFlight) is null and (select bb.SeatNumber from `aodb`.`aircraft` bb where bb.tailNumber = b.tailNumber and b.tailnumber is not null),0,(100 - ((select bb.SeatNumber from `aodb`.`aircraft` bb where bb.tailNumber = b.tailNumber)-(select bbb.pax from `aodb`.`paxmerchandisepost` bbb where bbb.idDepartureFlight = b.idDepartureFlight))/(select bb.SeatNumber from `aodb`.`aircraft` bb where bb.tailNumber = b.tailNumber) * 100)) as ocupation from `aodb`.`departureFlight` b where b.scheduledTime between '2011-07-20 00:00:00' and '2011-07-20 23:59:59') order by scheduledTime;
que funciona perfectamente en la bbdd. La única diferencia es que en el jasperreport sustituyo :

between '2011-07-20 00:00:00' and '2011-07-20 23:59:59'

por

between $P{fechaInformeDesde} and $P{fechaInformeHasta}

En el jasperReport, tengo estos dos parámetros: fechaInformeDesde y fechaInformeHasta. A ambos, en sus properties, les he puesto:

en Parameter Class java.util.date
en Default value expression new java.util.Date()

En mi aplicación, relleno un campo con el valor: 20/07/2011, que va a un servlet que trae el jasperreport.
El código del servlet es el siguiente:

Código:
public class OperacionesDiariasYMensServlet extends HttpServlet
{
	private static final long serialVersionUID = 7154490521050615751L;
	
...	
		
		JasperPrint jasperPrint = null;
		JasperReport listadoDiarioOperacionesJasperReport = null;
		
		String tituloInforme = request.getParameter(TITULO_INFORME);
		String compania = request.getParameter(COMPANIA);
		String numeroVuelo = request.getParameter(NUMERO_VUELO);
		String fechaProgramada = request.getParameter(FECHA_PROGRAMADA);
		String estadoActual = request.getParameter(ESTADO_ACTUAL);
		String tipoVuelo = request.getParameter(TIPO_VUELO);
		String tipoAeronave = request.getParameter(TIPO_AERONAVE);
		String numeroAsientos = request.getParameter(NUMERO_ASIENTOS);
		String numeroPasajeros = request.getParameter(NUMERO_PASAJEROS);
		String ocupacion = request.getParameter(OCUPACION);
	
		HashMap parameters = new HashMap();
		parameters.put("tituloInforme", tituloInforme);
		parameters.put("compania", compania);
		parameters.put("numeroVuelo", numeroVuelo);
		parameters.put("fechaProgramada", fechaProgramada);
		parameters.put("estadoActual", estadoActual);
		parameters.put("tipoVuelo", tipoVuelo);
		parameters.put("tipoAeronave", tipoAeronave);
		parameters.put("numeroAsientos", numeroAsientos);
		parameters.put("numeroPasajeros", numeroPasajeros);
		parameters.put("ocupacion", ocupacion);
				
		SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
		SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String reportDateString = request.getParameter(REPORT_DATE_STRING);
		String reportMonth = request.getParameter(REPORT_MONTH);
		String reportYear = request.getParameter(REPORT_YEAR);
		//para el informe de operaciones diarias
		if (reportDateString != null && !reportDateString.equals(""))
		{
			try 
			{
				/*Date fechaInformeDesde = formatoFecha.parse(reportDateString + " 00:00:00");			
				Date fechaInformeHasta = formatoFecha.parse(reportDateString + " 23:59:59");*/
				String arrayFecha[] = reportDateString.split("/");	
				String dia = arrayFecha[0];
				String mes = arrayFecha[1];
				String anno = arrayFecha[2];
				reportDateString = anno + "-" + mes + "-" + dia;
				Date fechaInformeDesde = formato.parse(reportDateString + " 00:00:00");			
				Date fechaInformeHasta = formato.parse(reportDateString + " 23:59:59");
				
				//parameters.put("fechaInformeDesde", reportDateString + " 00:00:00");
				//parameters.put("fechaInformeHasta", reportDateString + " 23:59:59");
				parameters.put("fechaInformeDesde", fechaInformeDesde);
				parameters.put("fechaInformeHasta", fechaInformeHasta);
			} 
			catch (ParseException e) {
				logger.error("No se han transformado bien las fechas desde y hasta de informe, informe diario");
				errorsList.add("No se han transformado bien las fechas desde y hasta de informe, informe diario");
				e.printStackTrace();
			}
		}
		//para el informe de operaciones mensual
		else
		{
			try
			{
				int year = Integer.parseInt(reportYear);
				int month = Integer.parseInt(reportMonth);
				Date fechaInformeDesde = formatoFecha.parse("01/" + reportMonth + "/" + reportYear + " 00:00:00");
				GregorianCalendar calendario = new GregorianCalendar (year, month, 1);
				int numDays = calendario.getActualMaximum(Calendar.DAY_OF_MONTH);
				Date fechaInformeHasta = formatoFecha.parse(numDays + "/" + (month + 1) + "/" + reportYear + " 23:59:59");
				parameters.put("fechaInformeDesde", fechaInformeDesde);
				parameters.put("fechaInformeHasta", fechaInformeHasta);
			}
			catch (ParseException e1) {
				logger.error("No se han transformado bien las fechas desde y hasta de informe, informe mensual");
				errorsList.add("No se han transformado bien las fechas desde y hasta de informe, informe mensual");
				e1.printStackTrace();
			}
		}
		
		try 
		{
			listadoDiarioOperacionesJasperReport = (JasperReport) JRLoader.loadObject(this.getClass().getClassLoader().getResourceAsStream("es/indra/aodb/informes/web/action/informes/reportsJasper/ListadoOperacionesDiarias.jasper"));
			jasperPrint = JasperFillManager.fillReport(listadoDiarioOperacionesJasperReport, parameters, connection);
            if (jasperPrint != null) 
            {
                logger.debug("Se va a mostrar el informe");
                logger.debug("Informe mostrado");
                logger.debug("informe descargado");
                
                byte[] bytes = JasperExportManager.exportReportToPdf(jasperPrint);
                logger.debug("exportado a bytes");
                response.setContentType("application/pdf");
                response.setContentLength(bytes.length);
                response.setHeader( "Content-disposition", "inline; filename=reporte.pdf");
                ServletOutputStream ouputStream = response.getOutputStream();
                logger.debug("creada la salida ourputStream");
                ouputStream.write(bytes, 0, bytes.length);
                ouputStream.flush();
                ouputStream.close();
                
            } 
            else 
            {
                logger.error("No se ha generado el informe correctamente");
                errorsList.add("No se ha generado el informe correctamente");
            }
		} 
		catch (JRException e2) 
		{
			logger.debug(e2);
			errorsList.add(e2.getMessage());
			e2.printStackTrace();
		}
	}


	public Collection<String> getErrorsList() {
		return errorsList;
	}

	public void setErrorsList(Collection<String> errorsList) {
		this.errorsList = errorsList;
	}
y en los valores de fechaInformeDesde y fechaInformeHasta, he intentado meter las fechas, de tipo date, con formato "yyyy-MM-dd hh:mm:ss", que es como las veo en la bbdd.
No sé qué puedo estar haciendo mal. No veo ningún error en la consola.

¿Alguien me puede decir dónde puede estar el fallo?

Muchas gracias, un saludo

PD He quitado parte del código del servlet que no importaba demasiado porque me pasaba de caracteres