[SOLUCIONADO] Como salir en excel desde un formulario ml

Muchachos, estoy un poco perdido.
Necesito hacer una salida excel desde un form ml y no le encuentro la vuelta.

Si alguien hizo algo parecido, le agradecería mucho que me de una manito.

Un cordial saludo.

Hola Claudio,

como es que necesitas disparar esa salida excel? Porque estoy pensando en un boton con un vinculo a si mismo que tenga como servicio la salida excel, de esa forma te la generaria toba a partir del formulario_ml… contame mas vos necesitas colocar formulas o alguna extension extra?

Saludos

Te cuento, Richard.
Acá usamos el Pilagá. Bueno, al intendente se le ocurrió (entre otras cosas) que la agenda de pagos de tesorería la quiere exportar a excel.
Me hice una copia en otro servidor y me puse a investigar el asunto. Resulta que dicha agenda se carga, filtro mediante, en un formulario multilineas.

Antes de molestarte me leí todo lo que, al respecto, encontré en este foro, pero todos los problemas se resolvian reescribiendo el método vista_excel, que, evidentemente está en la clase del ei_cuadro y se dispara cuando clickeas sobre el dibujito del excel que se ve al declarar desde toba que el cuadro es exportable.

Intenté hacer un evento, de hecho se lo agregué a la pantalla, y me guardo los datos en una variable de sesión en la configuración del formulario (el get_datos me da un error diciendo que hay caracteres inaceptables mostrandome lo siguiente: “”") pero no encuentro la forma de armar un objeto del tipo toba_vista_excel para entregarlo como parámetro al metodo vista_excel(toba_vista_excel $salida) del formulario.

Quise probar incluyendo la clase PHPExcel.php, y ver si lo podía dibujar yo, pero, la verdad, es que no puedo traer lo que esté por arriba de la carpeta del proyecto.

Me falta ver esa posibilidad que vos mencionás, voy a intentarlo, a ver que sale.

La verdad es que me falta un poco más de conocimiento del Toba y como trabaja, solo hice el curso básico y lamentablemente a último momento no pude asistir al módulo 2 que dictaron hace unos días en Bs. As., así que toda sugerencia y/o lección que puedan darme es sumamente bienvenida y agradecida, gracias a Dios, mi nivel de vanidad no me impide preguntar.

Voy a ver como se puede hacer la llamada al servicio.
Si se te ocurre algo mejor respecto a la forma de obtener los datos, contame.
Te comento cualquiera sea el resultado que obtenga.

Un cordial saludo.

Bueno, Richard; te cuento.

Generé un botón (exp_excel) como vínculo a la operación y servicio: vista_excel.
Dicho evento está asociado a la pantalla (quise hacerlo en el formulario, pero no aparece).

Reescribí el método vista_excel, en la clase del ci, de la siguiente manera:

function vista_excel(toba_vista_excel $salida)
{
$excel = $salida->get_excel();
$excel->setActiveSheetIndex(0);
$salida->separacion(1);
$this->dependencia(‘formulario’)->vista_excel($salida);
$excel->getActiveSheet()->setTitle(‘Agenda de Pagos’);
}

Genera la salida excel perfectamente, con un único inconveniente:
En las celdas numéricas aparecen los tags de html, por ejemplo:

32128.54

Si logro que salga sin eso, estamos ok.

Adjunto un .doc con las imágenes para quién quiera verlo.


Bueno amigos, he logrado una solución parcial que pongo a vuestra disposición por si les es útil, o desean investigar un poco más.

A los efectos de eliminar los tags de HTML que el servicio de salida excel incluye, tuve que guardar en una variable de sesión el recordset con que se arma originalmente el multilineas.
Luego de generar el documento excel y antes de que quede disponible para el usuario, reescribo las celdas de excel correspondientes (solo las que tienen el problema) con el contenido del recordset, eliminando así las tags mencionadas.

No pude hacerlo inspeccionando dichas celdas y eliminando los caracteres indeseables porque el método getValue de la clase que permite el manejo de excel, devuelve null para esas celdas (no así con las otras) poe lo que supongo que también tiene problemas con alguno de los caracteres que contienen.

El inconveniente que sigue presente, pendiente de investigación, es que los valores de campos del ml que uno edita, no son incluidos en el excel final. Aclaro que esto era sí incluso antes de que utilizara la reescritura de las celdas.

Si a alguien se le ocurre algo, agradeceré profundamente que me lo cuente.

Agrego la pequeña porción de código por si les interesa.

Un cordial saludo.

	function vista_excel(toba_vista_excel $salida)
	{
		$excel = $salida->get_excel();
		$excel->setActiveSheetIndex(0);
		$this->dependencia('formulario')->vista_excel($salida);
		$excel->getActiveSheet()->setTitle('Agenda de Pagos');

		# Reescribo las celdas del documento Excel con los valores del recordset con que se armó el form		
		foreach($this->s__rs as $i => $fila)
		{
			$excel->getActiveSheet()->getCellByColumnAndRow(3, $i+2)->setValue($fila['importe_devengado']);
			$excel->getActiveSheet()->getCellByColumnAndRow(4, $i+2)->setValue($fila['importe_pendiente']);
			$excel->getActiveSheet()->getCellByColumnAndRow(5, $i+2)->setValue($fila['importe']);
		}

Hola Claudio,

disculpa la demora, muchas gracias por haber subido el codigo para la modificacion. De todas maneras lo que te queria comentar es que estuve probando en el ejemplo con formularios ML de toba referencia (toba 1.4.13) y no logre reproducir la salida que te esta generando esos valores. Pareciera como si en realidad el servicio que se estuviera procesando fuera la impresion_html, te pediria que me pases el codigo del CI que atiende el evento (aunque parte del codigo ya lo subiste) para ver si alguna porcion de codigo en particular esta generando la diferencia.

Por cierto lo otro que te queria decir es que no es necesario definirlo como un vinculo a la misma operacion, se me olvido que el mismo evento ya posee entre las acciones predefinidas la exportacion a excel, de esa manera cuando lanzas el evento se dispara el servicio que hace la exportacion sin necesidad de hacer un vinculo. Mi error disculpame, te paso una imagen de como deberia ser la configuracion.

Saludos


Richard, estos son los dos php principales de la agenda de pagos. Un ci y un cn.
El que modifiqué yo es exclusivamente el ci.

Cualquier cosa que haya omitido, avisame y te la envio.

Un cordial saludo.


Hola Claudio,

creo que este es el metodo responsable de que te este saliendo el codigo HTML en el excel. Fijate en el CI de la operacion que en el metodo conf__formulario haces una llamada a:


function formatear_importe($rs)

Si los campos ‘importe_pendiente’ e ‘importe_devengado’ estan configurados como ef_editable_numero o ef_editable_moneda ya te deberian quedar alineados a derecha sin necesidad de agregarle nada extra, ademas probablemente esten marcados como ‘permite HTML’ para que no te salga el codigo HTML en la pantalla tampoco y se procese la alineacion.

Fijate si comentando las llamadas a dicho metodo se te soluciona el tema de la exportacion y si en ese caso en pantalla se te visualizan mal los valores quizas debas informarlo a la gente de Pilaga o ya que estas personalizando la operacion realizar el cambio en el tipo de EF correspondiente.

Saludos

Ok, Richard. Muchas gracias por tu tiempo.