Yii Framework Forum: [Solucionado]Error 400 - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

[Solucionado]Error 400 Problemas al abrir un reporte exportado a excel Rate Topic: ***** 1 Votes

#1 User is offline   rafaelrosales 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 88
  • Joined: 02-October 13

Posted 08 January 2014 - 03:35 PM

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 phpexcel, 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.
0

#2 User is offline   lagogz 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 30-November 12
  • Location:Galiza

Posted 09 January 2014 - 03:02 AM

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.
-----------------------------------------------------------------------------------------------
------------------------------- VISITEN FOCUCHASART --------------------------------
-----------------------------------------------------------------------------------------------
0

#3 User is offline   rafaelrosales 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 88
  • Joined: 02-October 13

Posted 09 January 2014 - 08:16 AM

 lagogz, on 09 January 2014 - 03:02 AM, said:

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>

0

#4 User is offline   lagogz 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 30-November 12
  • Location:Galiza

Posted 09 January 2014 - 09:09 AM

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.
-----------------------------------------------------------------------------------------------
------------------------------- VISITEN FOCUCHASART --------------------------------
-----------------------------------------------------------------------------------------------
0

#5 User is offline   rafaelrosales 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 88
  • Joined: 02-October 13

Posted 09 January 2014 - 09:20 AM

 lagogz, on 09 January 2014 - 09:09 AM, said:

Parece estar todo bien.

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

Has comprobado si te entra en ""? 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 /protected/controllers/reportesController.php.
Si cuando hago clic en el munu es cuando me da el error

0

#6 User is offline   lagogz 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 30-November 12
  • Location:Galiza

Posted 09 January 2014 - 09:35 AM

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.
-----------------------------------------------------------------------------------------------
------------------------------- VISITEN FOCUCHASART --------------------------------
-----------------------------------------------------------------------------------------------
0

#7 User is offline   rafaelrosales 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 88
  • Joined: 02-October 13

Posted 09 January 2014 - 10:01 AM

 lagogz, on 09 January 2014 - 09:35 AM, said:

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
0

#8 User is offline   xavieremv 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 45
  • Joined: 19-September 12

Posted 09 January 2014 - 10:32 AM

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()

0

#9 User is offline   rafaelrosales 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 88
  • Joined: 02-October 13

Posted 09 January 2014 - 02:56 PM

 xavieremv, on 09 January 2014 - 10:32 AM, said:

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: ReportesController y sus behaviors no tienen un método o closure llamado "loadModel", 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.
0

#10 User is offline   lagogz 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 30-November 12
  • Location:Galiza

Posted 10 January 2014 - 02:15 AM

 xavieremv, on 09 January 2014 - 10:32 AM, said:

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()



+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.
-----------------------------------------------------------------------------------------------
------------------------------- VISITEN FOCUCHASART --------------------------------
-----------------------------------------------------------------------------------------------
0

#11 User is offline   xavieremv 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 45
  • Joined: 19-September 12

Posted 10 January 2014 - 07:40 AM

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(); 

0

#12 User is offline   rafaelrosales 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 88
  • Joined: 02-October 13

Posted 10 January 2014 - 08:49 AM

 xavieremv, on 10 January 2014 - 07:40 AM, said:

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?
0

#13 User is offline   xavieremv 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 45
  • Joined: 19-September 12

Posted 10 January 2014 - 09:15 AM

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.
0

#14 User is offline   rafaelrosales 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 88
  • Joined: 02-October 13

Posted 10 January 2014 - 04:49 PM

 xavieremv, on 10 January 2014 - 09:15 AM, said:

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.
0

#15 User is offline   rafaelrosales 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 88
  • Joined: 02-October 13

Posted 17 January 2014 - 09:18 AM

 rafaelrosales, on 10 January 2014 - 04:49 PM, said:

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'])); 

0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users