¿Por qué no se genera el archivo exel..?

Buenas tengo este controlador


<?php


class ConsultaEstadisticaController extends Controller

{

	public $layout='//layouts/cuerpo';	

	

	public function actionIndex()

		{

		$this->render('index');

		}

	

	public static $ejecutar;


	const CONSUL_FACTURA="SELECT 

			SUCURSAL, NU_SINIESTRO, NU_FACTURA, FE_OCURRENCIA

			,(CASE POLIZA WHEN 1 THEN 'JUBILADOS' WHEN 2 THEN 'CLAUSULA' WHEN 3 THEN 'CONTRATO COLECTIVO' else 'DIRYCONF' end) TP_EMPL

			,(CASE POLIZA WHEN 1 THEN 'TLCO' WHEN 2 THEN 'TLCO' WHEN 3 THEN 'TLCO' WHEN 4 THEN 'TLCO' WHEN 5 THEN 'MOVILNET' WHEN 6 THEN 'CAVEGUIAS' end) 				FILIAL

			,CEDULA_TITULAR, CEDULA_BENEF, RAMO, POLIZA, BIEN

			,COALESCE((SELECT CRPD_DATO

			FROM GENERADOR.CRET_PRODUCTOS_DATOS

			WHERE crpd_casu_cd_sucursal = SUCURSAL

			AND crpd_carp_cd_ramo = ramo

			AND crpd_capo_nu_poliza = poliza

			AND crpd_cace_nu_certificado = CEDULA_TITULAR

			AND crpd_cd_bien_aseg = bien

			AND crpd_crcd_cd_dato = 990010),(SELECT CACN_CD_SEXO

			FROM CARTERA.CART_CLIENTES

			WHERE CACN_CD_NACIONALIDAD = NAC_BEN

			AND CACN_NU_CEDULA_RIF = CEDULA_BENEF)) SEXO

			/*

			,COALESCE(CONVERSION.BUSCA_SEXO_CLIENTE(SUCURSAL, RAMO, POLIZA, CEDULA_TITULAR, BIEN),(SELECT CACN_CD_SEXO

			FROM CART_CLIENTES

			WHERE CACN_CD_NACIONALIDAD = NAC_BEN

			AND CACN_NU_CEDULA_RIF = CEDULA_BENEF)) SEXO

			*/

			,(SELECT CASE CRPD_DATO WHEN '1' THEN 'TITULAR' WHEN '2' THEN 'CONYUGE' WHEN '3' THEN 'HIJO(A)' WHEN '4' THEN 'PADRE' WHEN '5' THEN 'MADRE' 				WHEN '6' THEN 'HIJO INCAPACITADO' END

			FROM GENERADOR.CRET_PRODUCTOS_DATOS

			WHERE crpd_casu_cd_sucursal = sucursal

			AND crpd_carp_cd_ramo = ramo

			AND crpd_capo_nu_poliza = poliza

			AND crpd_cace_nu_certificado = CEDULA_TITULAR

			AND crpd_cd_bien_aseg = bien

			AND crpd_crcd_cd_dato = 140055) PARENTESCO

			--,BUSCA_PARENTESCO(SUCURSAL, RAMO, POLIZA, CEDULA_TITULAR, BIEN) PARENTESCO

			,(SELECT CRPD_DATO

			FROM GENERADOR.CRET_PRODUCTOS_DATOS

			WHERE crpd_casu_cd_sucursal = sucursal

			AND crpd_carp_cd_ramo = ramo

			AND crpd_capo_nu_poliza = poliza

			AND crpd_cace_nu_certificado = CEDULA_TITULAR

			AND crpd_cd_bien_aseg = bien

			AND crpd_crcd_cd_dato = 990020) FECHA_NAC 

			/*, (SELECT CACN_FE_NACIMIENTO

			FROM CARTERA.CART_CLIENTES

			WHERE CACN_CD_NACIONALIDAD = NAC_BEN

			AND CACN_NU_CEDULA_RIF = CEDULA_BENEF))*/

			/*

			,COALESCE(CONVERSION.BUSCA_FE_NAC_CLIENTE(SUCURSAL, RAMO, POLIZA, CEDULA_TITULAR, BIEN),(SELECT CACN_FE_NACIMIENTO

			FROM CART_CLIENTES

			WHERE CACN_CD_NACIONALIDAD = NAC_BEN

			AND CACN_NU_CEDULA_RIF = CEDULA_BENEF)) FECHA_NAC

			*/

			,DIAG, CD_CONCEPTO, 

			(SELECT SICO_DE_CONCEPTO

			FROM SINIESTROS.SINT_CONCEPTOS

			WHERE SICO_CARP_CD_RAMO = RAMO

			AND SICO_CD_CONCEPTO = CD_CONCEPTO) CONCEPTO

			,MT_FACTURA MT_FACTURADO_CONCEPTO, mt_iva mt_iva_CONCEPTO, MT_FACTURADO_TOT, MT_PAGADO MT_PAGADO_FACTURA

			--COUNT(NU_FACTURA)

			FROM (

			Select SISI_CASU_CD_SUCURSAL SUCURSAL,

			SPFA_SISI_NU_SINIESTRO NU_SINIESTRO,

			SPFA_NU_FACTURA NU_FACTURA,

			SISI_FE_OCURRENCIA FE_OCURRENCIA,

			SISI_CACN_CD_NACIONALIDAD NAC_BEN,

			(SELECT SICE_CACE_CARP_CD_RAMO

			FROM siniestros.SINT_CERTIFICADOS_SINIESTROS

			WHERE SICE_SISI_CASU_CD_SUCURSAL = SISI_CASU_CD_SUCURSAL 

			AND SICE_SISI_NU_SINIESTRO = SISI_NU_SINIESTRO) RAMO,

			(SELECT SICE_CACE_CAPO_NU_POLIZA

			FROM siniestros.SINT_CERTIFICADOS_SINIESTROS

			WHERE SICE_SISI_CASU_CD_SUCURSAL = SISI_CASU_CD_SUCURSAL 

			AND SICE_SISI_NU_SINIESTRO = SISI_NU_SINIESTRO) POLIZA,

			(SELECT SICE_CACE_NU_CERTIFICADO

			FROM siniestros.SINT_CERTIFICADOS_SINIESTROS

			WHERE SICE_SISI_CASU_CD_SUCURSAL = SISI_CASU_CD_SUCURSAL 

			AND SICE_SISI_NU_SINIESTRO = SISI_NU_SINIESTRO) CEDULA_TITULAR,

			(SELECT SICE_CD_BIEN_ASEG

			FROM siniestros.SINT_CERTIFICADOS_SINIESTROS

			WHERE SICE_SISI_CASU_CD_SUCURSAL = SISI_CASU_CD_SUCURSAL 

			AND SICE_SISI_NU_SINIESTRO = SISI_NU_SINIESTRO) BIEN,

			SISI_CACN_NU_CEDULA_RIF CEDULA_BENEF,

			(SELECT sgdi_cd_diagnostico ||'-'||sgdi_de_diagnostico

			FROM SINIESTROS.sint_cie

			WHERE sgdi_cd_diagnostico IN 

			(SELECT snds_dato

			FROM SINIESTROS.sint_datos_siniestro

			WHERE snds_stds_cd_sucursal = SPFA_SISI_CD_SUCURSAL

			AND snds_stds_nu_siniestro = SPFA_SISI_NU_SINIESTRO

			AND snds_crds_crcd_cd_dato = 141040

			AND snds_consecutivo = 150

			LIMIT 1)) diag, 

			--CONVERSION.BUSCA_DIAGNOSTICO(SISI_CASU_CD_SUCURSAL,SISI_NU_SINIESTRO) DIAG,

			SIFA_SICO_CD_CONCEPTO CD_CONCEPTO,

			SIFA_MT_FACTURADO MT_FACTURADO_TOT,

			SIFA_MT_ORIGINAL_GASTO MT_FACTURA,

			SIFA_MT_IVA mt_iva,

			COALESCE((SELECT SILI_MT_PAGO_FINAL

			FROM SINIESTROS.sint_LIQUIDACIONES

			WHERE SILI_SISI_CASU_CD_SUCURSAL = SPFA_SISI_CD_SUCURSAL

			AND SILI_SISI_NU_SINIESTRO = SPFA_SISI_NU_SINIESTRO

			AND SILI_SPFA_NU_CONSECUTIVO = SPFA_NU_CONSECUTIVO

			AND SILI_CD_ENVIO IS NOT NULL),0) MT_PAGADO

			--COUNT(SPFA_NU_FACTURA) 

			from siniestros.SINT_PROVEEDOR_FACTURA

			JOIN siniestros.SINT_CONCEPTOS_FACTURA

			ON SIFA_SBFA_CD_SUCURSAL = SPFA_SISI_CD_SUCURSAL

			AND SIFA_SBFA_NU_SINIESTRO = SPFA_SISI_NU_SINIESTRO

			AND SIFA_SBFA_NU_CONSECUTIVO = SPFA_NU_CONSECUTIVO

			join siniestros.SINT_SINIESTROS

			on SPFA_SISI_CD_SUCURSAL = SISI_CASU_CD_SUCURSAL

			and SPFA_SISI_NU_SINIESTRO = SISI_NU_SINIESTRO

			where SPFA_FE_FACTURA BETWEEN :fecha_inicio AND :fecha_fin

			) as interno WHERE POLIZA = :tipo_poliza;";


	public function actionBuscar()

		{

			

			$consulta=$_POST["tipo_consulta"];			

			$fecha_ini=$_POST["fecha_inicio"];

			$fecha_fin=$_POST["fecha_fin"];

			$tipo_pol=$_POST["tipo_poliza"];

			if($fecha_ini<=$fecha_fin){

				$oDbConnection = Yii::app()->db; // Getting database connection (config/main.php has to set up database

				if($consulta=1){

					$oCommand = $oDbConnection->createCommand(self::CONSUL_FACTURA);

					$oCommand->bindParam(':fecha_inicio', $fecha_ini, PDO::PARAM_STR);

					$oCommand->bindParam(':fecha_fin', $fecha_fin, PDO::PARAM_STR);

					$oCommand->bindParam(':tipo_poliza', $tipo_pol, PDO::PARAM_STR);

					$ejecutar=$oCommand->queryAll(); // Run query and get all results in a CDbDataReader								

						

				elseif($consulta=2){

					$oCommand = $oDbConnection->createCommand(self::CONSUL_FACTURA);

					$oCommand->bindParam(':fecha_inicio', $fecha_ini, PDO::PARAM_STR);

					$oCommand->bindParam(':fecha_fin', $fecha_fin, PDO::PARAM_STR);

					$oCommand->bindParam(':tipo_poliza', $tipo_pol, PDO::PARAM_STR);

					$ejecutar=$oCommand->queryAll(); // Run query and get all results in a CDbDataReader	

				}

				else{

					if($consulta=3){

					$oCommand = $oDbConnection->createCommand(self::CONSUL_FACTURA);

					$oCommand->bindParam(':fecha_inicio', $fecha_ini, PDO::PARAM_STR);

					$oCommand->bindParam(':fecha_fin', $fecha_fin, PDO::PARAM_STR);

					$oCommand->bindParam(':tipo_poliza', $tipo_pol, PDO::PARAM_STR);

					$ejecutar=$oCommand->queryAll(); // Run query and get all results in a CDbDataReader

					}				

				}

		    }else{

				Yii::app()->user->setFlash('mensajeEstado',"La fecha inicio es mayor a la fecha final");

				$this->renderPartial('//flashMsg');

				Yii::app()->end();	

			}

		   Yii::app()->request->sendFile('/consulta.xls', 

						$this->renderPartial('excelfactura',array(

						'ejecutar'=>$ejecutar

						),true)

						);

				}

		}	

}

esta es la vista del exel


<?php if($ejecutar!=null){

$x=0;?>

<table border="1">

<tr>

<th></th>

<th>sucursal</th>

<th>Numero de Siniestros</th>

<th>Numero de Factura</th>

<th>Fecha de Ocurrencia</th>

<th>Tipo de Empleado</th>

<th>Filial</th>

<th>Cedula del Titular</th>

<th>Cedula del Beneficiario</th>

<th>Ramo</th>

<th>Poliza</th>

<th>Bien</th>

<th>Sexo</th>

<th>Parentesco</th>

<th>Fecha de Nacimiento</th>

<th>diag</th>

<th>cd_concepto</th>

<th>Concepto</th>

<th>Monto facturado por Concepto</th>

<th>Monto iva Concepto</th>

<th>Monto Facturado Total</th>

<th>Monto Pagado Factura</th>

</tr>

<?php foreach($ejecutar as $user){?>

<tr <?php echo ($x++)%2==0?"style='background-color:#CCC'":"";?>>

<td><?php echo $user['sucursal'];?></td>

<td><?php echo $user['nu_siniestro'];?></td>

<td><?php echo $user['nu_factura'];?></td>

<td><?php echo $user['fe_ocurrencia'];?></td>

<td><?php echo $user['tp_empl']?></td>

<td><?php echo $user['filial'];?></td>

<td><?php echo $user['cedula_titular'];?></td>

<td><?php echo $user['cedula_benef'];?></td>

<td><?php echo $user['ramo'];?></td>

<td><?php echo $user['poliza'];?></td>

<td><?php echo $user['bien']?></td>

<td><?php echo $user['sexo'];?></td>

<td><?php echo $user['parentesco'];?></td>

<td><?php echo $user['fecha_nac'];?></td>

<td><?php echo $user['diag'];?></td>

<td><?php echo $user['cd_concepto'];?></td>

<td><?php echo $user['concepto']?></td>

<td><?php echo $user['mt_facturado_concepto'];?></td>

<td><?php echo $user['mt_iva_concepto'];?></td>

<td><?php echo $user['mt_facturado_tot'];?></td>

<td><?php echo $user['mt_pagado_factura'];?></td>

</tr>

<?php }?>

</table>

<?php }?>

El problema es que cuando ejecuto el query, no me sale el archivo exel si no que me muestra los datos en la vista, como se soluciona ese problema, tengo dias buscando y no puedo.

hola, no voy a indagar en la respuesta que necesitas debido a algunas acotaciones que me tomo la libertad de exponer aqui para ti, en beneficio de tu codigo, si asi lo tomas, esperando que lo tomes a bien:

estas subutilizando el framework, trayendo tecnicas extremas que considero no estan bien orientadas, y por consiguiente ofrecerte la solucion para lo que ya tienes es contribuir a la mala utilizacion de Yii.

primero, no es tarea de un controlador almacenar consultas SQL.

segundo, una consulta tan extrema y costosa en complejidad como esta debe ser almacenada en mysql, y simplificada como una "vista", o "un procedimiento almacenado" que retorne filas, para luego "MODELAR" esa relacion dentro del modelo MVC, usando lo que Yii bien ofrece: una extension de la clase CActiveRecord que represente la vista que quieres presentar.

de esta forma, al modelar tu vista a algo "estandar, bien comprendido y correctamente aislado" entonces podras sacar provecho de todas aquellas magnificas cosas que Yii ofrece, entre ellas, los filtros para mapear tu salida a un archivo excel descargable.

tercero, debido a que no implementas el punto "segundo" que escribo aqui, entonces te ves obligado a sub utilizar el framework para emitir salidas como:

[indent]

echo “[size=2]$user[/size][color=#666600][size=2][[/size][/color][color=#008800][size=2]‘ramo’[/size][/color][color=#666600][size=2]]”[/size][/color]

[color=#666600][size=2]

[/size][/color][/indent]finalmente, te pregunto, para que usas Yii, si no realmente no vas a usarlo ? [color="#666600"][size=2]

[/size][/color][indent]

[color=#666600][size=2]

[/size][/color][/indent]

a lo mejor sono un poco a regaño…disculpa no esa ni la menor intención,

lee el post anterior y juntalo con este:

1-toma esa enorme vista o storedproc e insertala en MySQL, de modo que puedas simplemente decir en una consulta:

"select nombre,direccion from granconsulta where numero=1", supon que la vista se llama "granconsulta"

2-crea un modelo usango Gii, que lea esa consulta, generará automaticamente un file php llamado "GranConsulta.php"

3-LISTO…con ese modelo, ahora puedes usar todo el mecanismo de modelo-vista-controlador de Yii de una forma simple y facil.

4-una vez sepas como presentar tus resultados, y sepas como extender el modelo GranConsulta.php para que su metodo search() cumpla con tus requisitos, y cuando tengas un CDataProvider que entregue (de forma paginada o no) los resultados deseados

entonces:

[indent]

4.1-puedes crear una VISTA que presente los datos usando un CListView, el cual requerira un file aparte para presentar cada fila de datos,

4.2-en el action en donde esa vista es incluido, puede indicar que los resultados se muestren con un HEADER especifico para que los datos se emitan de forma descargable para el usuario final, en el formato de archivo requerido.

por ejemplo: (solo es un ejemplo, no es tu solucion)




// para emitir datos en el formato MIME especifico, de forma descargable para el usuario final.  Lo que tu emitas en renderPartial, sera el contenido

//

//


header("Cache-Control: public");

header("Content-Description: File Transfer");

header("Content-Disposition: attachment; filename=".$csvOrExcelFileNameOnly);

header("Content-Type: ".$tuMIMEType);

header("Content-Transfer-Encoding: binary");

echo $this->renderPartial('tuvista',array('dataProvider'=>$tuDataProvider),false); 

[/indent]