[Solucionado]Error 400

Hola a todos y muchas gracias por adelantado, la situación que tengo es la siguiente: Estoy tratando de abrir un reporte exportado a excel con [color="#FF0000"]phpexcel[/color], para ello en el controlador donde tengo los reportes (no exportado a excel, hecho a mano con html), tengo el siguiente método:




public function actionVentasdivisa($id)

 	

	{

        	$this->render('Ventasdivisa');

    	}

public function actionreporteVentasdivisa()

	{    	

    	spl_autoload_unregister(array('YiiBase','autoload'));

        	require(Yii::app()->basePath.'/extensions/phpexcel/Classes/PHPExcel.php');

        	spl_autoload_register(array('YiiBase', 'autoload'));

        	

        	$objPHPExcel = PHPExcel_IOFactory::load("VentasClientesCUC.xls");	

        	

        	$objPHPExcel->setActiveSheetIndex(0)			

             		->setCellValue('A4', $id);  

        	

        	$model=$this->loadModel($id); 

        	$desde = date('Y-m-d',strtotime($_POST['fechainicio']));   //parámetros 

        	$hasta = date('Y-m-d',strtotime($_POST['fechafin'])); 

              	//consulta sql para el reporte                   		

        	$sql='SELECT 

                	`sectores`.`NSector` AS `Sector`,

                	`clientes`.`Descripcion` AS `Cliente`,

                	`productos`.`NProductos` AS `Producto`,

                	`productos`.`PrCUC` AS `Precio`,

                	ROUND(SUM(`detallesfact`.`cantidad`),2) AS `Cantidad`,

                	ROUND(SUM(`detallesfact`.`cantidad`) * `productos`.`PrCUC`,2) AS `Importe`,

           		`datossal`.`fecha`

              	FROM

                	`datossal`

                	INNER JOIN `detallesfact` ON (`datossal`.`id` = `detallesfact`.`Id_sal`)

                	INNER JOIN `productos` ON (`detallesfact`.`Codprod` = `productos`.`Codprod`)

                	INNER JOIN `clientes` ON (`datossal`.`CodCliente` = `clientes`.`CodCliente`)

                	INNER JOIN `sectores` ON (`clientes`.`Codsec` = `sectores`.`Codsec`)

              	WHERE

                	(`datossal`.`CodMon` = 2) AND ((`datossal`.`Fecha`) Between "'.$desde.'" And "'.$hasta.'")

              	GROUP BY

                	sectores.NSector,

                	clientes.Descripcion,

                	productos.NProductos,

                	productos.PrCUC

              	ORDER BY

                	`Sector`,

                	`Cliente`,

                	`Producto`';                	


        	$command = Yii::app()->db->createCommand($sql);		

        	$dataReader = $command->queryAll();

        	

        	$indsec=4;

			$indcli=4;

			$indpro=4;

			$indpre=4;

			$indcan=4;

			$indimp=4;             		

   		

        	foreach($dataReader as $row){  

     		

            	$objPHPExcel->setActiveSheetIndex(0)

                    	->setCellValue('A'.$indsec, $row['Sector'])

                    	->setCellValue('B'.$indcli, $row['Cliente'])

                    	->setCellValue('C'.$indpro, $row['Producto'])

                    	->setCellValue('D'.$indpre, $row['Precio'])

                    	->setCellValue('E'.$indcan, $row['Cantidad'])	

                    	->setCellValue('F'.$indimp, $row['Importe']);

               		

                    	$indsec++; 

                    	$indcli++;

                    	$indpro++;

                    	$indpre++;

                    	$indcan++;

                    	$indimp++;


 		}

                     		

        	header('Content-Type: application/vnd.ms-excel');

        	header('Content-Disposition: attachment;filename="VentasClientesCUC.xls"');

        	header('Cache-Control: max-age=0');


        	$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

        	$objWriter->save('php://output');

        	//$objWriter->save('php://print');

   	// $this->renderPartial('print', array('html'=>$html));   

}	



por supuesto declarado en las reglas y hago una forma para llamar al reporte después de llenar los criterios en esa forma, aquí escribo el código de la forma:




<?php

/* @var $this ReportesController */

/* @var $model Reportes */

/* @var $form CActiveForm */

?>


<?php $form=$this->beginWidget('CActiveForm', array(

	'id'=>'reporte-form',  	

	'htmlOptions'=>array('target'=>'_blank'),

)); ?>

<div style="width: 50%">

  	<div>

    	<h3>Reporte de Ventas Clietes CUC</h3>

	</div>

     <fieldset>

	<legend></legend>

        	Rango de Fechas

        	<div style="float: left;"></div>


        	<div style="float: left;"></div>

  	

	<div style="float: left;">	

 	<div>

      	<table width="255" border="1">

        	<tr>

          	<td width="98"><span style="float: left;"><b>Desde:</b>

              	<?php $this->widget('zii.widgets.jui.CJuiDatePicker', array(

                                	'name'=>'fechainicio',                   							

                                	'language' => 'es',					

                                	'htmlOptions'=>array(						

                                	'readonly'=>"readonly",

                                	),

                                	'options'=>array(						

                                	'dateFormat'=>'dd-mm-yy',

                                	'minDate'=>'date-360("d-m-Y")', //fecha minima

									'maxDate'=> "+20Y", //fecha maxima											

                                	),

            	)); ?>

          	</span></td>

          	<td width="72"><span style="float: left;"><b>Hasta:</b>

              	<?php $this->widget('zii.widgets.jui.CJuiDatePicker', array(

                                	'name'=>'fechafin',                   							

                                	'language' => 'es',					

                                	'htmlOptions'=>array(						

                                	'readonly'=>"readonly",

                                	),

                                	'options'=>array(						

                                	'dateFormat'=>'dd-mm-yy',

                                	'minDate'=>'date-360("d-m-Y")', //fecha minima

		        		'maxDate'=> "+20Y", //fecha maxima												

                                	),

            	)); ?>

          	</span></td> 

   	

	     </tr>

	  	</table>

 <div>

 <?php    	

    	echo CHtml::submitButton('Ver Ventas', array('submit'=>array('reportes/reporteVentasdivisa'))); 

	?>	

 </div>  


 		

<?php $this->endWidget(); ?>


</div>



Como observan en esta forma tengo un botón que llama al método del controlador que es el abre el reporte como tal




<?php    	

    	echo CHtml::submitButton('Ver Ventas', array('submit'=>array('reportes/reporteVentasdivisa'))); 

	?>	

 </div> 



En el menú del sistema main.php del layouts llamo a esa forma con lo siguiente:




array('label'=>'Ventas en CUC', 'url'=>array('/reportes/Ventasdivisa'),

   'itemOptions'=>array('title'=>'Reporte de las Ventas en CUC para Clientes',)),  // la forma esta en una carpeta llamada reportes en views



el problema es que al accionar sobre este menú me sale el siguiente error:




      

[b]Error 400[/b]

   Su solicitud es inválida.

Aclaro que de esta forma llamo los demás reportes hechos con html y funciona bien, que es lo que utilizo al no saber todavía como usar JasperReport o reportico, como puedo hacer para solucionar esto.

Podrías poner las reglas de tu controlador y el código completo de tu menú?

Has revisado que te sale en Firebug?

En principio este error es debido a una mala sintaxis.

Un saludo.

Gracias por responder

Aquí van las reglas del controlador




public function accessRules()

	{

		return array(

			array('allow',  // allow all users to perform 'index' and 'view' and 'create' actions

				'actions'=>array('Planesentidades','reportePlanesentidades','Planesmensuales','reportePlanesmensuales',

				'Masvendidos','reporteMasvendidos','Existencias','reporteExistencias','ResumenExistencias',

				'reporteResumenExistencias','Clientes','reporteClientes','Firmantes','Ventasdivisa','reporteVentasdivisa',

				'reporteFirmantes','Contratos','reporteContratos'),

				'users'=>array('@'),

			),	

			array('deny',  // deny all users

				'users'=>array('*'),

			),	

		);

	}



Código del main




<?php /* @var $this Controller */ ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

	<meta name="language" content="en" />


	<!-- blueprint CSS framework -->

	<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/screen.css" media="screen, projection" />

	<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/print.css" media="print" />

	<!--[if lt IE 8]>

	<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->

request->baseUrl; ?>/css/ie.css" media="screen, projection" />

	<![endif]-->


	<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/main.css" />

	<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/form.css" />

	<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/menu.css" />

			

	<title><?php echo CHtml::encode($this->pageTitle); ?></title>

</head>


<body>

<div id="header">	

<div class="container" id="page">


	<div id="logo">

	  <div align="left"><img src="images/logolacteoo.png" alt="r" width="180" height="75" /><?php echo CHtml::encode(Yii::app()->name); ?></div>

	<link rel="shortcut icon" href="<?php echo Yii::app()->request->baseUrl;

		 ?>/images/logolacteoo.png" type="image/x-icon" />

	</div>

			

	</div><!-- header -->




  	<div align="left">

	 


    	<?php $this->widget('application.extensions.mbmenu.MbMenu',array(

			//'id' => 'menu',

			 

				'items'=>array(

				array('label'=>'Inicio', 'url'=>array('/site/index'),'visible'=>!Yii::app()->user->isGuest),

		

				//Datos entradas y salidas

				array('label'=>'Inventarios',

			 	'url'=>'#', 'visible'=>Yii::app()->user->checkAccess("datos"),'items'=>array(

				array('label'=>'Entradas', //'url'=>array('/datosent/index')),

                	'items'=>array( 						

					array('label'=>'Crear Entrada', 'url'=>array('datosent/create'),

                      	'itemOptions'=>array('title'=>'Darle entrada a productos',)),

					array('label'=>'Administrar Entrada', 'url'=>array('datosent/admin'),

                    	'itemOptions'=>array('title'=>'Administrar las entradas, editarlas o borrarlas',)),

					array('label'=>'Ver Entradas', 'url'=>array('/datosent/index'),

                      	'itemOptions'=>array('title'=>'Ver las entradas',)),

					)),	

				 array('label'=>'Salidas',// 'url'=>array('/datossal/index')),

                                 	'items'=>array( 				   

					array('label'=>'Crear Salidas', 'url'=>array('/datossal/create'),

                                        	'itemOptions'=>array('title'=>'Darle salidas a productos',)),

					array('label'=>'Administrar Salidas', 'url'=>array('/datossal/admin'),

					 'itemOptions'=>array('title'=>'Administrar las salidas, editarlas, imprimirlas o borrarlas',)),

                                    	array('label'=>'Ver Salidas', 'url'=>array('/datossal/index'),                                     	

                                     	'itemOptions'=>array('title'=>'Ver las salidas',)),

                                                                       	

                            	)),

                        	array('label'=>'Prefacturar productos',// 'url'=>array('/datossal/index')),

                             	'items'=>array( 				   

	                        	array('label'=>'Prefacturas de productos', 'url'=>array('/prefacturas/index'),                                     	

                                    	'itemOptions'=>array('title'=>'Ofertar productos',)),

                                  	array('label'=>'Administrar Prefacturas', 'url'=>array('/prefacturas/admin'),

					 'itemOptions'=>array('title'=>'Administrar las Prefacturas de productos, editarlas o borrarlas',)),

				)),

				)),	

				//Planes

		  array('label'=>'Planes',

			'url'=>'#', 'visible'=>Yii::app()->user->checkAccess("datos"),'items'=>array(

						   array('label'=>'Ver Planes', 'url'=>array('/planes/index'),	

                       	'itemOptions'=>array('title'=>'Mostrar los planes mensuales y anuales',)), 

						   array('label'=>'Crear Planes', 'url'=>array('/planes/create'),

                       	'itemOptions'=>array('title'=>'Darle entrada a planes mensuales y anuales',)), 

						   array('label'=>'Administrar Planes', 'url'=>array('/planes/admin'),

                                                   	'itemOptions'=>array('title'=>'Administrar los planes, editarlos o borrarlos',)), 

						  

							),

						),

				

			//Reportes

			array('label'=>'Reportes',

			 'url'=>'#', 'visible'=>!Yii::app()->user->isGuest,'items'=>array(

			   	        	array('label'=>'Planes Anual Entidades', 'url'=>array('/Reportes/Planesentidades'),

                              	'itemOptions'=>array('title'=>'Reporte de los planes anuales por entidades',)),

							array('label'=>'Plan Mensual Entidades', 'url'=>array('/reportes/PlanesMensuales'),

                              	'itemOptions'=>array('title'=>'Reporte de los planes mensuales por entidades',)),

							array('label'=>'Productos mas vendidos', 'url'=>array('/reportes/MasVendidos'),

                              	'itemOptions'=>array('title'=>'Reporte de los productos más vendidos',)),

							array('label'=>'Existencias de productos por entidades', 'url'=>array('/reportes/Existencias'),

                              	'itemOptions'=>array('title'=>'Reporte de las existencias de productos por entidades',)),

							array('label'=>'Existencias resumen de productos', 'url'=>array('/reportes/ResumenExistencias'),

                              	'itemOptions'=>array('title'=>'Reporte de las existencias generales de productos',)),

							array('label'=>'Cumplimiento de planes para Clientes', 'url'=>array('/reportes/Clientes'),

								  'itemOptions'=>array('title'=>'Reporte de la situación de los clientes',)),

						   array('label'=>'Estado de Firmas', 'url'=>array('/reportes/Firmantes'),

								  'itemOptions'=>array('title'=>'Reporte de la situación de las firmas autorizadas',)),

						   array('label'=>'Estado del Contrato', 'url'=>array('/reportes/Contratos'),

								  'itemOptions'=>array('title'=>'Reporte de la situación de los contratos de los clientes',)),                                               	

						   array('label'=>'Ventas en CUC', 'url'=>array('/reportes/Ventasdivisa'),

								  'itemOptions'=>array('title'=>'Reporte de las Ventas en CUC para Clientes',)),

						),

					),

                            	//Productos

				array('label'=>'Productos',

						'url'=>'#', 'visible'=>Yii::app()->user->checkAccess("producto"),'items'=>array( 

						array('label'=>'Administrar Clientes','url'=>array('/clientes/index'),                                   	

					   'itemOptions'=>array('title'=>'Administrar clientes',)),					 

						array('label'=>'Administrar Productos','url'=>array('/productos/index'),                                     	

					   'itemOptions'=>array('title'=>'Administrar Productos',)),

						array('label'=>'Tipos de productos','url'=>array('/tipoprod/index'),                                     	

					   'itemOptions'=>array('title'=>'Administrar los productos de los planes',)),

				   array('label'=>'Tasa de Conversión de productos','url'=>array('/tasa/index'),                                     	

					   'itemOptions'=>array('title'=>'Administrar los productos de las tasa',)),

						array('label'=>'Apertura de productos','url'=>array('/submayorprod/admin'),                                     	

						'itemOptions'=>array('title'=>'Editar las entradas de aperturas para productos',)),

						array('label'=>'Administrar organismos','url'=>array('/organismos/index'),                                     	

						'itemOptions'=>array('title'=>'Administrar los organismos',)),

						array('label'=>'Administrar sectores','url'=>array('/sectores/index'),                                     	

						'itemOptions'=>array('title'=>'Administrar los sectores',)),

							),

						),		

				//Nomencladores

				array('label'=>'Nomencladores',

                   	'url'=>'#', 'visible'=>Yii::app()->user->checkAccess("administrador"),'items'=>array( 

						//   'url'=>'#', 'visible'=>!Yii::app()->user->isGuest,'items'=>array(	

			  	array('label'=>'Administrar Proveedor','url'=>array('/proveedor/index'),                                     	

                           	'itemOptions'=>array('title'=>'Administrar Proveedor',)),

							array('label'=>'Administrar Tipos de Entrada','url'=>array('/tipoentrada/index'),                                     	

                           	'itemOptions'=>array('title'=>'Administrar Tipos de Entrada',)), 

							array('label'=>'Administrar Tipos de Salida','url'=>array('/tiposalida/index'),                                     	

                           	'itemOptions'=>array('title'=>'Administrar Tipos de Salida',)), 								   

							array('label'=>'Administrar Firmas autorizadas','url'=>array('/firmantes/index'),                                     	

                           	'itemOptions'=>array('title'=>'Administrar Firmas autorizadas',)),	

							array('label'=>'Administrar Entidades','url'=>array('/entidades/index'),                                     	

                           	'itemOptions'=>array('title'=>'Administrar Entidades',)),

							),

						),	

				

				//Sistema

				array('label'=>'Sistema',

				 'url'=>'#', 'visible'=>!Yii::app()->user->isGuest,'items'=>array(

			   	array('label'=>'Acerca de...','url'=>array('/site/page', 'view'=>'about'),                                     	

             	'itemOptions'=>array('title'=>'Acerca del Sistema',)),	

            						   

							),

						),	

						

				array('label'=>'Administrar',

         	//   'url'=>'#', 'visible'=>((Yii::App()->user->checkAccess('administrador')) || (Yii::App()->user->checkAccess('admin'))),				

				'url'=>'#', 'visible'=>Yii::app()->user->checkAccess("administrador"),'items'=>array( 

					array('label'=>'Administrar Usuarios','url'=>Yii::app()->user->ui->userManagementAdminUrl,'visible'=>!Yii::app()->user->isGuest,

               	'itemOptions'=>array('title'=>'Administrar los usuarios del sistema',)),

					array('label'=>'Salvas', 'url'=>'index.php?r=backup','visible'=>!Yii::app()->user->isGuest,

               	'itemOptions'=>array('title'=>'Crear salvas de la base de datos, restaurar desde una salva o subir una salva existente',)),	

							),

					),

	      	//entrada y salida

			  array('label'=>'Entrar','url'=>Yii::app()->user->ui->loginUrl,'visible'=>Yii::app()->user->isGuest),

			  array('label'=>'Salir ('.Yii::app()->user->name.')', 'url'=>Yii::app()->user->ui->logoutUrl, 'visible'=>!Yii::app()->user->isGuest),	

					

				),

        	));

			$this->pageTitle=Yii::app()->name;

			

		?>	


		

		</div>

  </div>


  <div align="left">

	<!-- mainmenu -->

  

	<?php echo $content; ?>

  	</div>

	  <div class="clear"></div>


	<div id="footer">

</div><!-- footer -->


</div><!-- page -->


</body>

</html>



Parece estar todo bien.

Para asegurarme, cuando tú haces click en este menú te lanza el error,no?

Has comprobado si te entra en "actionVentasdivisa"? Puede ser que el link sí funcione pero dentro del action hagas algo que esté petando la aplicación.

Pon puntos de control en tu action y comprueba donde falla, pq a mi me parece q el enlace del menú lo tienes bien, entonces podría ser error dentro del action.

Asegúrate también de q realmente exista este archivo:

/protected/controllers/reportesController.php

Y creo (aunque podría estar equivocado), q si en lugar de este archivo tienes este:

/protected/controllers/ReportesController.php

Podría darte ese error.

Un saludo.

Amigo, realmente si entra a la actionVentasdivisa, pero en realidad el controlador se llama ReportesController.php, pero aclaro lo estoy corriendo en Windows, cuando lo puse en Linux fue que me dio bateo de mayúsculas y minúscula, de todas formas me aclaras porque lo de /protected/controllers/ReportesController.php en vez de [u]/protected/controllers/reportesController.php.

[/u]Si cuando hago clic en el munu es cuando me da el error[u]

[/u]

Si te entra en la acción no creo q sea tema de mayúsculas o minúsculas. Puedes mostrar el código de tu acción e indicar en que línea te falla?

Respondiendo a tu pregunta, podría ser q en tu config tuvieses algo como esto?




'urlManager' => array(

            'caseSensitive' => true,

)



Un saludo.

aqui el codigo de la accion




public function actionVentasdivisa($id)

	

	{

        	$this->render('Ventasdivisa');

    	}

public function actionreporteVentasdivisa()

	{    	

    	spl_autoload_unregister(array('YiiBase','autoload'));

        	require(Yii::app()->basePath.'/extensions/phpexcel/Classes/PHPExcel.php');

        	spl_autoload_register(array('YiiBase', 'autoload'));

        	

        	$objPHPExcel = PHPExcel_IOFactory::load("VentasClientesCUC.xls");	

        	

        	$objPHPExcel->setActiveSheetIndex(0)			

             		->setCellValue('A4', $id);  

        	

        	$model=$this->loadModel($id); 

        	$desde = date('Y-m-d',strtotime($_POST['fechainicio']));

        	$hasta = date('Y-m-d',strtotime($_POST['fechafin'])); 

                                     		

        	$sql='SELECT 

                	`sectores`.`NSector` AS `Sector`,

                	`clientes`.`Descripcion` AS `Cliente`,

                	`productos`.`NProductos` AS `Producto`,

                	`productos`.`PrCUC` AS `Precio`,

                	ROUND(SUM(`detallesfact`.`cantidad`),2) AS `Cantidad`,

                	ROUND(SUM(`detallesfact`.`cantidad`) * `productos`.`PrCUC`,2) AS `Importe`,

           		`datossal`.`fecha`

              	FROM

                	`datossal`

                	INNER JOIN `detallesfact` ON (`datossal`.`id` = `detallesfact`.`Id_sal`)

                	INNER JOIN `productos` ON (`detallesfact`.`Codprod` = `productos`.`Codprod`)

                	INNER JOIN `clientes` ON (`datossal`.`CodCliente` = `clientes`.`CodCliente`)

                	INNER JOIN `sectores` ON (`clientes`.`Codsec` = `sectores`.`Codsec`)

              	WHERE

                	(`datossal`.`CodMon` = 2) AND ((`datossal`.`Fecha`) Between "'.$desde.'" And "'.$hasta.'")

              	GROUP BY

                	sectores.NSector,

                	clientes.Descripcion,

                	productos.NProductos,

                	productos.PrCUC

              	ORDER BY

                	`Sector`,

                	`Cliente`,

                	`Producto`';                	


        	$command = Yii::app()->db->createCommand($sql);		

        	$dataReader = $command->queryAll();

        	

        	$indsec=4;

			$indcli=4;

			$indpro=4;

			$indpre=4;

			$indcan=4;

			$indimp=4;             		

   		

        	foreach($dataReader as $row){  

     		

            	$objPHPExcel->setActiveSheetIndex(0)

                    	->setCellValue('A'.$indsec, $row['Sector'])

                    	->setCellValue('B'.$indcli, $row['Cliente'])

                    	->setCellValue('C'.$indpro, $row['Producto'])

                    	->setCellValue('D'.$indpre, $row['Precio'])

                    	->setCellValue('E'.$indcan, $row['Cantidad'])	

                    	->setCellValue('F'.$indimp, $row['Importe']);

               		

                    	$indsec++; 

                    	$indcli++;

                    	$indpro++;

                    	$indpre++;

                    	$indcan++;

                    	$indimp++;


 		}

                     		

        	header('Content-Type: application/vnd.ms-excel');

        	header('Content-Disposition: attachment;filename="VentasClientesCUC.xls"');

        	header('Cache-Control: max-age=0');


        	$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

        	$objWriter->save('php://output');

        	//$objWriter->save('php://print');

   	// $this->renderPartial('print', array('html'=>$html));   

}  



disculpa lo de ahorita no entra a la acción, le di esto aquí y me siguió dando el error, o sea ignoro la petición de print




public function actionVentasdivisa($id)

	

	{

	printf("sdef"); //para ver si entra

	die();

        	$this->render('Ventasdivisa');

    	}



parece que como da el error en el menú, ni siquiera llega a la accion

La acción acepta un parámetro get de nombre id


public function actionVentasdivisa($id)

Si cuando llamas a la url no le pasas este parametro no va a encontrar la acción, si así de arrogante es yii.

si mal no recuerdo para evitar esto tendrias que definir un valor por defecto al parámetro, por ejemplo


public function actionVentasdivisa($id = 0)

así cuando no le pases este parámetro toma el valor declarado por defecto, aunque si no lo vas a usar borrarlo! y deja la acción sin parámetros.


public function actionVentasdivisa()

Ok, realmente es así como dices, le deje asi


public function actionVentasdivisa()

, y al menos me quita el error 4, pero ahora el problema es el siguiente, tengo que pasar parámetros para escoger fecha inicio y fecha fin




  $model=$this->loadModel(); 

  $desde = date('Y-m-d',strtotime($_POST['fechainicio']));

  $hasta = date('Y-m-d',strtotime($_POST['fechafin'])); 



y aqui me genera otro error de Cexception en esta linea


$model=$this->loadModel(); 

donde dice esto: [color="#FF0000"]ReportesController y sus behaviors no tienen un método o closure llamado "loadModel", [color="#000000"]y ahora como resuelvo esto, realmente el va a tomar las fecha de una tabla que tiene un campo fecha y todos los artículos tiene un id autonumerico como campo llave.[/color][/color]

+1

Ahí estaba el problema.

Tienes que pasar la clave primaria a loadModel!!!! Te pasa lo mismo q en el action.

loadModel tiene un parámetro de entrada llamado $id que sería la clave primaria de un registro del modelo que quieras cargar.

Un saludo.

Borra esa linea, viendo el código no le encuentro ninguna utilidad.

borra o comenta la parte que te esta generando el error y debería de funcionar todo en teoría :D


$model=$this->loadModel(); 

Ok ya le quite esa linea de código, pero cuando exporto a excel y cuando intento abrir el archivo, sale un cuadro de dialogo donde dice que el archivo que intento abrir tiene otro formato, yo lo estoy exportando a un archivo con extensión xls (Excel 97-2003) y cuando lo abro me sale con caracteres extraños, no se abre lo que debe, o sea lo que exporte.

¿Que es eso?

Lo que se me ocurre es que comentes la linea


$objWriter->save('php://output');

que es la parte donde envía el excel para la descarga. ejecutes el proceso nuevamente, luego no se debería de ver ningún carácter ni nada por el estilo.

Si notas alguna mensaje o hasta un espacio en blanco puede estar dañando el archivo excel, si aun "debuggeando" esto no logras encontrar nada te recomiendo que visites la pagina oficial de la libreria PHPExcel y busques información al respecto.

Saludos y éxito.

Muy bien por sus respuestas, pero el problema ahora que al borrar la linea:




$objWriter->save('php://output');



y creo un nuevo fichero, configurado igual, me salen caracteres extraños solo en A1, las demás celdas salen en blanco, obviando el fichero configurado, mi PHPExcel esta bien, ya que los medas ficheros sis criterios de búsqueda salen bien, solo es este que si las tiene. Saludos para todos y un buen fin de semana, nos vemos el lunes y ojala tenga una respuesta para esto.

Hola de nuevo, llevo varios dias analizando este error y sigo en las mismas, me sigue abriendo el fichero con códigos extraños solo ahora en la celda A1, pero ahora me doy cuenta que cuando abro el fichero llamado ClientesCUC.xls, se autogenera un fichero llamado ClientesCUC-n.xls, donde n es un consecutivo, inclusive hice otro fichero y le cambie el nombre en:




  $objPHPExcel = PHPExcel_IOFactory::load("facturas.xls");



y en




  header('Content-Disposition: attachment;filename="facturas.xls"');

 

o sea como ven ya el fichero a abrir no es ClientesCUC.xls, si no facturas.xls y me sigue abriendo ClientesCUC-n.xls con los mismos caracteres extraños en A1, ahora tengo el código asi:




public function actionVentasdivisa($id = 0)

 	{

	//printf("sdef"); //para ver si entra aqui

	//die();

   		$this->render('Ventasdivisa');

   	}

public function actionreporteVentasdivisa()

	{	

	

//

  	spl_autoload_unregister(array('YiiBase','autoload'));

        	require(Yii::app()->basePath.'/extensions/phpexcel/Classes/PHPExcel.php');

        	spl_autoload_register(array('YiiBase', 'autoload'));

        	

        	$objPHPExcel = PHPExcel_IOFactory::load("facturas.xls");	

      	

        	$objPHPExcel->setActiveSheetIndex(0)			

             		->setCellValue('A4');  

        	

   	   // $model=$this->loadModel($id = 0);

  	

        	$desde = date('Y-m-d',strtotime($_POST['fechainicio']));

        	$hasta = date('Y-m-d',strtotime($_POST['fechafin'])); 



hasta aquí, y aunque le cambie $id = 0 y lo deje en blanco me hace lo mismo. Necesito ayuda y gracias por adelantado.

Recordar que aqui lo que quiero es llenar un fichero ClientesCUC.xls donde escoja los valores de una base de datos en un rango de fechas y para eso le pongo la condición a la consulta.




 ((`datossal`.`Fecha`) Between "'.$desde.'" And "'.$hasta.'")



con las variables declaradas arriba en:




$desde = date('Y-m-d',strtotime($_POST['fechainicio']));

 $hasta = date('Y-m-d',strtotime($_POST['fechafin']));