Example #1
0
function DemoVista_SOPA_Facebook($EntradasFaceBook)
{
    global $MULTILANG_IrEscritorio;
    //Abre un contenedor (Opcional)
    abrir_ventana('Prueba de SO.PA. - (SocialParser by Practico)', 'panel-primary');
    //Encabezados de la tabla
    echo '<h1>Entradas encontradas: <strong>' . count($EntradasFaceBook) . '</strong></h1>
            <table class="table table-hover table-striped table-bordered">
                <thead>
                    <tr>
                      <th>Titulo</td>
                      <th>Descripcion</td>
                      <th>Fecha</td>
                    </tr>
                </thead>
                <tbody>';
    foreach ($EntradasFaceBook as $fila) {
        echo '
                            <tr>
                                <td>' . $fila['Titulo'] . '</td>
                                <td>' . $fila['Descripcion'] . '</td>
                                <td>' . $fila['Fecha'] . '</td>
                            </tr>';
    }
    echo '  </tbody>
            </table>';
    //Crea una barra de estado (opcional)
    abrir_barra_estado();
    echo '<button type="button" class="btn btn-danger" OnClick="document.core_ver_menu.submit();">' . $MULTILANG_IrEscritorio . '</button>';
    cerrar_barra_estado();
    //Cierra el contenedor (Obligatorio si se ha abierto alguno)
    cerrar_ventana();
}
Example #2
0
                                                        <button type="submit" class="btn btn-success btn-xs">' . $MULTILANG_UsrReset . ' <i class="fa fa-refresh"></i></button>
                                                    </span>
                                                </div>
										</form>
								</td>
							</tr>';
            $i++;
        }
        echo '</tbody>
                </table>';
    }
    // Fin sino filtro
    echo '
				<form action="' . $ArchivoCORE . '" method="POST" name="ver_auditoria_general"  style="display:inline; height: 0px; border-width: 0px; width: 0px; padding: 0; margin: 0;">
					<input type="hidden" name="PCO_Accion" value="ver_seguimiento_general">
				</form>
				<form action="' . $ArchivoCORE . '" method="POST" name="ver_auditoria_monitoreo"  style="display:inline; height: 0px; border-width: 0px; width: 0px; padding: 0; margin: 0;">
					<input type="hidden" name="PCO_Accion" value="ver_seguimiento_monitoreo">
				</form>
		';
    abrir_barra_estado();
    echo '<div align=center>
                        <a class="btn btn-default " href="javascript:document.core_ver_menu.submit();"><i class="fa fa-home"></i> ' . $MULTILANG_IrEscritorio . '</a>
                        <a class="btn btn-success " href="javascript:document.form_crear_usuario.submit();"><i class="fa fa-file-o"></i> ' . $MULTILANG_UsrAgregar . '</a>
                        <a class="btn btn-warning " href="javascript:document.ver_auditoria_general.submit();"><i class="fa fa-file-text"></i> ' . $MULTILANG_UsrVerAudit . '</a>
                        <a class="btn btn-info " href="javascript:document.ver_auditoria_monitoreo.submit();"><i class="fa fa-file-text"></i> ' . $MULTILANG_UsrAudMonit . '</a>
                        </div>';
    cerrar_barra_estado();
    cerrar_ventana();
}
//$VerNavegacionIzquierdaResponsive=1; //Habilita la barra de navegacion izquierda por defecto
Example #3
0
function cargar_informe($informe, $en_ventana = 1, $formato = "htm", $estilo = "Informes", $embebido = 0)
{
    global $ConexionPDO, $ArchivoCORE, $TablasCore, $Nombre_Aplicacion, $PCO_ValorBusquedaBD, $PCO_CampoBusquedaBD;
    // Carga variables de sesion por si son comparadas en alguna condicion.  De todas formas pueden ser cargadas por el usuario en el diseno del informe
    global $PCOSESS_LoginUsuario, $Nombre_usuario, $Descripcion_usuario, $Nivel_usuario, $Correo_usuario, $LlaveDePasoUsuario, $PCO_FechaOperacion;
    // Carga variables de definicion de tablas
    global $ListaCamposSinID_informe, $ListaCamposSinID_informe_campos, $ListaCamposSinID_informe_tablas, $ListaCamposSinID_informe_condiciones, $ListaCamposSinID_informe_boton;
    global $MULTILANG_TotalRegistros, $MULTILANG_ContacteAdmin, $MULTILANG_ObjetoNoExiste, $MULTILANG_ErrorTiempoEjecucion, $MULTILANG_Informes, $MULTILANG_IrEscritorio, $MULTILANG_ErrorDatos, $MULTILANG_InfErrTamano, $MULTILANG_MonCommSQL;
    global $IdiomaPredeterminado;
    global $PCO_InformesDataTable;
    global $ModoDepuracion;
    // Busca datos del informe
    $consulta_informe = ejecutar_sql("SELECT id," . $ListaCamposSinID_informe . " FROM " . $TablasCore . "informe WHERE id=? ", "{$informe}");
    $registro_informe = $consulta_informe->fetch();
    $Identificador_informe = $registro_informe["id"];
    //Si no encuentra informe presenta error
    if ($registro_informe["id"] == "") {
        mensaje($MULTILANG_ErrorTiempoEjecucion, $MULTILANG_ObjetoNoExiste . " " . $MULTILANG_ContacteAdmin . "<br>(" . $MULTILANG_Informes . " {$informe})", '', 'fa fa-times fa-5x icon-red texto-blink', 'alert alert-danger alert-dismissible');
    }
    //Identifica si el informe requiere un formulario de filtrado previo
    if ($registro_informe["formulario_filtrado"] != "") {
        //Determina si solicita el informe desde el formulario de filtrado apropiado, sino redirecciona a este
        global $PCO_FormularioActivo;
        if ($registro_informe["formulario_filtrado"] != $PCO_FormularioActivo) {
            echo '<form name="precarga_form_filtro" action="' . $ArchivoCORE . '" method="POST">
							<input type="Hidden" name="PCO_Accion" value="cargar_objeto">
							<input type="Hidden" name="PCO_InformeFiltro" value="' . $registro_informe["id"] . '">
							<input type="Hidden" name="objeto" value="frm:' . $registro_informe["formulario_filtrado"] . ':1">
							<input type="Hidden" name="Presentar_FullScreen" value="' . @$Presentar_FullScreen . '">
							<input type="Hidden" name="Precarga_EstilosBS" value="' . @$Precarga_EstilosBS . '">
						<script type="" language="JavaScript"> document.precarga_form_filtro.submit();  </script>';
            die;
        }
    }
    //Si hay variables de filtro definidas busca su valor en el contexto global
    if ($registro_informe["variables_filtro"] != "") {
        $arreglo_variables_filtro = @explode(",", $registro_informe["variables_filtro"]);
        //Busca y convierte cada variable recibida en global
        foreach ($arreglo_variables_filtro as $nombre_variable_filtro) {
            //if (isset($$nombre_variable_filtro))  // {Deprecated}
            global ${$nombre_variable_filtro};
        }
    }
    // Inicia CONSTRUCCION DE CONSULTA DINAMICA
    $numero_columnas = 0;
    //Busca los CAMPOS definidos para el informe
    $consulta = "SELECT ";
    $consulta_campos = ejecutar_sql("SELECT id," . $ListaCamposSinID_informe_campos . " FROM " . $TablasCore . "informe_campos WHERE informe=? ORDER BY peso", "{$informe}");
    $PCO_ColumnasOcultas[] = "ArregloDeCamposOcultos";
    while ($registro_campos = $consulta_campos->fetch()) {
        //Si tiene alias definido lo agrega
        $posfijo_campo = "";
        if ($registro_campos["valor_alias"] != "") {
            $posfijo_campo = " as " . $registro_campos["valor_alias"];
        }
        //Agrega el campo a la consulta
        $consulta .= $registro_campos["valor_campo"] . $posfijo_campo . ",";
        //Crea un arreglo con los campos marcados como ocultos para filtrarlos luego
        if ($registro_campos["visible"] == 0) {
            $PCO_ColumnasOcultas[] = $registro_campos["valor_campo"] . $posfijo_campo;
            //Lleva el campo oculto despues del punto
            $PCO_PartesCampo = explode(".", $registro_campos["valor_campo"] . $posfijo_campo);
            $PCO_ColumnasOcultas[] = $PCO_PartesCampo[1];
            //Lleva el campo oculto si es un alias
            $PCO_PartesCampo = explode(" as ", $registro_campos["valor_campo"] . $posfijo_campo);
            $PCO_ColumnasOcultas[] = $PCO_PartesCampo[1];
        }
    }
    // Elimina la ultima coma en el listado de campos
    $consulta = substr($consulta, 0, strlen($consulta) - 1);
    //Busca las TABLAS definidas para el informe
    $consulta .= " FROM ";
    $consulta_tablas = ejecutar_sql("SELECT id," . $ListaCamposSinID_informe_tablas . " FROM " . $TablasCore . "informe_tablas WHERE informe=? ", "{$informe}");
    while ($registro_tablas = $consulta_tablas->fetch()) {
        //Si tiene alias definido lo agrega
        $posfijo_tabla = "";
        if ($registro_tablas["valor_alias"] != "") {
            $posfijo_tabla = " as " . $registro_tablas["valor_alias"];
        }
        //Agrega tabla a la consulta
        $consulta .= $registro_tablas["valor_tabla"] . $posfijo_tabla . ",";
    }
    // Elimina la ultima coma en el listado de tablas
    $consulta = substr($consulta, 0, strlen($consulta) - 1);
    // Busca las CONDICIONES para el informe
    $consulta .= " WHERE ";
    $consulta_condiciones = ejecutar_sql("SELECT id," . $ListaCamposSinID_informe_condiciones . " FROM " . $TablasCore . "informe_condiciones WHERE informe=? ORDER BY peso", "{$informe}");
    $hay_condiciones = 0;
    while ($registro_condiciones = $consulta_condiciones->fetch()) {
        //Agrega condicion a la consulta
        $valor_izquierdo = $registro_condiciones["valor_izq"];
        $valor_derecho = $registro_condiciones["valor_der"];
        // CONVIERTE VARIABLES DE SESION PHP A VALORES PARA EL QUERY Cuando el primer simbolos es un PESOS ($), es decir, solo se ingreso una variable
        //LADO IZQUIERDO DE LA CONDICION
        //Si el valor Izquierdo a comparar inicia por signo pesos y es una variable PHP la usa como tal
        if (@$valor_izquierdo[0] == "\$") {
            //Quita el signo pesos inicial para buscar la variable
            $variable_a_buscar = substr($valor_izquierdo, 1, strlen($valor_izquierdo));
            // Si la variable esta definida toma su valor encerrado entre comillas para el query y evitar conflictos de variables con espacios y demas.
            if (@isset($variable_a_buscar)) {
                $valor_izquierdo = "'" . ${$variable_a_buscar} . "'";
            }
        }
        //Evalua casos donde se tienen variables PHP escapadas por llaves.  Ej  "%{$Variable}%" si fuera para un LIKE, por ejemplo.
        if (strpos($valor_izquierdo, "{") !== FALSE && strrpos($valor_izquierdo, "}") !== FALSE) {
            //Determina las posiciones de las llaves en la cadena
            $PosLlaveIzquierda = strpos($valor_izquierdo, "{");
            $PosLlaveDerecha = strrpos($valor_izquierdo, "}");
            //Toma solo el pedazo entre llaves para intentar ubicar el valor de la variable por su nombre
            $NombreVariable = substr($valor_izquierdo, $PosLlaveIzquierda + 2, $PosLlaveDerecha - $PosLlaveIzquierda - 2);
            //Si la variable no esta definida la busca en el entorno global
            global ${$NombreVariable};
            if (@isset($NombreVariable)) {
                $ValorVariable = ${$NombreVariable};
                //Reemplaza el valor encontrado en la cadena de valor original
                $valor_izquierdo = str_replace('{$' . $NombreVariable . '}', $ValorVariable, $valor_izquierdo);
            }
        }
        //LADO DERECHO DE LA CONDICION
        //Si el valor Derecho a comparar inicia por signo pesos y es una variable PHP la usa como tal
        if (@$valor_derecho[0] == "\$") {
            //Quita el signo pesos inicial para buscar la variable
            $variable_a_buscar = substr($valor_derecho, 1, strlen($valor_derecho));
            // Si la variable esta definida toma su valor encerrado entre comillas para el query y evitar conflictos de variables con espacios y demas.
            if (@isset($variable_a_buscar)) {
                $valor_derecho = "'" . ${$variable_a_buscar} . "'";
            }
        }
        //Evalua casos donde se tienen variables PHP escapadas por llaves.  Ej  "%{$Variable}%" si fuera para un LIKE, por ejemplo.
        if (strpos($valor_derecho, "{") !== FALSE && strrpos($valor_derecho, "}") !== FALSE) {
            //Determina las posiciones de las llaves en la cadena
            $PosLlaveIzquierda = strpos($valor_derecho, "{");
            $PosLlaveDerecha = strrpos($valor_derecho, "}");
            //Toma solo el pedazo entre llaves para intentar ubicar el valor de la variable por su nombre
            $NombreVariable = substr($valor_derecho, $PosLlaveIzquierda + 2, $PosLlaveDerecha - $PosLlaveIzquierda - 2);
            //Si la variable no esta definida la busca en el entorno global
            global ${$NombreVariable};
            if (@isset($NombreVariable)) {
                $ValorVariable = ${$NombreVariable};
                //Reemplaza el valor encontrado en la cadena de valor original
                $valor_derecho = str_replace('{$' . $NombreVariable . '}', $ValorVariable, $valor_derecho);
            }
        }
        $consulta .= " " . $valor_izquierdo . " " . $registro_condiciones["operador"] . " " . $valor_derecho . " ";
        $hay_condiciones = 1;
    }
    if (!$hay_condiciones) {
        $consulta .= " 1 ";
    }
    if (@$registro_informe["agrupamiento"] != "") {
        $campoagrupa = $registro_informe["agrupamiento"];
        $consulta .= " GROUP BY {$campoagrupa}";
    }
    if (@$registro_informe["ordenamiento"] != "") {
        $campoorden = $registro_informe["ordenamiento"];
        $consulta .= " ORDER BY {$campoorden}";
    }
    // Si el informe tiene formato_final = T (tabla de datos)
    if ($registro_informe["formato_final"] == "T") {
        $SalidaFinalInforme = '';
        $SalidaFinalInformePDF = '';
        if ($en_ventana) {
            //Cuando es embebido (=1) no imprime el boton de retorno pues se asume dentro de un formulario
            if (!$embebido) {
                echo '<div align=center><button type="Button" onclick="document.core_ver_menu.submit()" class="btn btn-warning"><i class="fa fa-home fa-fw"></i> ' . $MULTILANG_IrEscritorio . '</button></div><br>';
            }
            //Carga la ventana con el informe
            abrir_ventana($Nombre_Aplicacion . ' - ' . $registro_informe["titulo"], 'panel panel-info', $registro_informe["ancho"]);
        }
        // Si se ha definido un tamano fijo entonces crea el marco
        if ($registro_informe["ancho"] != "" && $registro_informe["alto"] != "") {
            echo '<DIV style="DISPLAY: block; OVERFLOW: auto; POSITION: relative; WIDTH: ' . $registro_informe["ancho"] . '; HEIGHT: ' . $registro_informe["alto"] . '">';
        }
        //Genera enlace al PDF cuando se detecta el modulo y ademas el informe lo tiene activado
        if (@file_exists("mod/pdf") && $registro_informe["genera_pdf"] == 'S') {
            echo '<div align=right><a href="tmp/Inf_' . $Identificador_informe . '-' . $PCOSESS_LoginUsuario . '.pdf" target="_BLANK"><i class="fa fa-file-pdf-o"></i> PDF&nbsp;</a></div>';
        }
        // Crea encabezado por tipo de formato:  1=html   2=Excel
        if ($formato == "htm") {
            echo '
								<html>
								<body leftmargin="0" topmargin="0" rightmargin="0" bottommargin="0" marginwidth="0" marginheight="0" style="font-size: 12px; font-family: Arial, Verdana, Tahoma;">';
        }
        if ($formato == "xls") {
            $fecha = date("d-m-Y");
            $tituloinforme = trim($registro_informe["titulo"]);
            $tituloinforme = "Informe";
            $nombrearchivo = $tituloinforme . "_" . $fecha;
            header('Content-type: application/vnd.ms-excel');
            header("Content-Disposition: attachment; filename={$nombrearchivo}.xls");
            header("Pragma: no-cache");
            header("Expires: 0");
        }
        if ($formato == "htm") {
            //Si el informe va a soportar datatable entonces lo agrega a las tablas que deben ser convertidas en el pageonload
            if ($registro_informe["soporte_datatable"] == "S") {
                @($PCO_InformesDataTable .= "TablaInforme_" . $registro_informe["id"] . "|");
            }
            $SalidaFinalInforme .= '<table class="table table-condensed table-hover table-striped table-unbordered ' . $estilo . '" id="TablaInforme_' . $registro_informe["id"] . '"><thead><tr>';
            $SalidaFinalInformePDF .= '<table class="' . $estilo . '"><thead><tr>';
        }
        if ($formato == "xls") {
            $SalidaFinalInforme .= '<table class="font-size: 11px; font-family: Verdana, Tahoma, Arial;"><thead><tr>';
            $SalidaFinalInformePDF .= '<table class="font-size: 11px; font-family: Verdana, Tahoma, Arial;"><thead><tr>';
        }
        // Busca si el informe tiene acciones (botones), los cuenta y prepara dentro de un arreglo para repetir en cada registro
        $consulta_botones = ejecutar_sql("SELECT id," . $ListaCamposSinID_informe_boton . " FROM " . $TablasCore . "informe_boton WHERE informe=? AND visible=1 ORDER BY peso", "{$informe}");
        $total_botones = 0;
        while ($registro_botones = $consulta_botones->fetch()) {
            //Construye una cadena generica con todos los botones para ser reemplazada luego con valores
            if ($registro_botones["tipo_accion"] == "interna_eliminar") {
                $valores = explode(".", $registro_botones["accion_usuario"]);
                $tabla_vinculada = @$valores[0];
                $campo_vinculado = @$valores[1];
                //Si solo se indico el campo, sin la tabla, intenta usar solo el campo
                if ($campo_vinculado == "" && $tabla_vinculada != "") {
                    $campo_vinculado = $valores[0];
                    $tabla_vinculada = "";
                }
                $comando_javascript = "\r\n\t\t\t\t\t\t\t\t\t\tdocument.FRMBASEINFORME.PCO_Accion.value='eliminar_registro_informe';\r\n\t\t\t\t\t\t\t\t\t\tdocument.FRMBASEINFORME.tabla.value='" . @$tabla_vinculada . "';\r\n\t\t\t\t\t\t\t\t\t\tdocument.FRMBASEINFORME.campo.value='" . @$campo_vinculado . "';\r\n\t\t\t\t\t\t\t\t\t\tdocument.FRMBASEINFORME.valor.value='DELFRMVALVALOR';\r\n\t\t\t\t\t\t\t\t\t\tdocument.FRMBASEINFORME.submit()";
            }
            if ($registro_botones["tipo_accion"] == "interna_cargar") {
                $comando_javascript = "\r\n                                        document.FRMBASEINFORME.PCO_Accion.value='cargar_objeto';\r\n\t\t\t\t\t\t\t\t\t\tdocument.FRMBASEINFORME.objeto.value='frm:" . $registro_botones["accion_usuario"] . ":DETFRMVALBASE';\r\n\t\t\t\t\t\t\t\t\t\tdocument.FRMBASEINFORME.submit()";
            }
            if ($registro_botones["tipo_accion"] == "externa_formulario") {
                $comando_javascript = "\r\n\t\t\t\t\t\t\t\t\t\tdocument.FRMBASEINFORME.PCO_Tabla.value='" . @$tabla_vinculada . "';\r\n\t\t\t\t\t\t\t\t\t\tdocument.FRMBASEINFORME.PCO_Campo.value='" . @$campo_vinculado . "';\r\n\t\t\t\t\t\t\t\t\t\tdocument.FRMBASEINFORME.PCO_Valor.value='DELFRMVALVALOR';\r\n                                        document.FRMBASEINFORME.PCO_Accion.value='" . $registro_botones["accion_usuario"] . "';\r\n\t\t\t\t\t\t\t\t\t\tdocument.FRMBASEINFORME.submit()";
            }
            if ($registro_botones["tipo_accion"] == "externa_javascript") {
                $comando_javascript = $registro_botones["accion_usuario"];
            }
            //Verifica si el registro de botones presenta algun texto de confirmacion y lo antepone al script
            $cadena_confirmacion_accion_pre = "";
            $cadena_confirmacion_accion_pos = "";
            if ($registro_botones["confirmacion_texto"] != "") {
                $cadena_confirmacion_accion_pre = " if (confirm('" . $registro_botones["confirmacion_texto"] . "')) {";
                $cadena_confirmacion_accion_pos = " } else {} ";
            }
            //Genera la cadena del enlace
            $cadena_javascript = 'onclick="' . $cadena_confirmacion_accion_pre . '  ' . @$comando_javascript . '  ' . $cadena_confirmacion_accion_pos . ' "';
            @($cadena_generica_botones .= '<input type="Button"  class="' . $registro_botones["estilo"] . '" value="' . $registro_botones["titulo"] . '" ' . $cadena_javascript . ' >&nbsp;');
            $total_botones++;
        }
        // Imprime encabezados de columna
        $resultado_columnas = @ejecutar_sql($consulta);
        $ConteoColumnas = $resultado_columnas->rowCount();
        //Si se tienen registros para mirar las columnas las agrega
        if ($ConteoColumnas > 0) {
            $numero_columnas = 0;
            foreach ($resultado_columnas->fetch(PDO::FETCH_ASSOC) as $key => $val) {
                //Imprime el encabezado siempre y cuando no se trate de un campo que se desea ocultar
                if (!in_array($key, $PCO_ColumnasOcultas)) {
                    $SalidaFinalInforme .= '<th>' . $key . '</th>';
                    $SalidaFinalInformePDF .= '<th>' . $key . '</th>';
                } else {
                    //Agrega la columna al indice de columnas ocultas para no mostrarla luego
                    $PCO_NumerosColumnasOcultas[] = $numero_columnas;
                }
                $numero_columnas++;
            }
        }
        //Si el informe tiene botones entonces agrega columna adicional
        if ($total_botones > 0) {
            $SalidaFinalInforme .= '<th></th>';
            $SalidaFinalInformePDF .= '<th></th>';
        }
        $SalidaFinalInforme .= '</tr></thead><tbody>';
        $SalidaFinalInformePDF .= '</tr></thead><tbody>';
        // Imprime registros del resultado
        $numero_filas = 0;
        $consulta_ejecucion = ejecutar_sql($consulta);
        while ($registro_informe = $consulta_ejecucion->fetch()) {
            $SalidaFinalInforme .= '<tr>';
            $SalidaFinalInformePDF .= '<tr>';
            for ($i = 0; $i < $numero_columnas; $i++) {
                //Muestra la columna solo si no se trata de una de las ocultas
                if (!in_array($i, $PCO_NumerosColumnasOcultas)) {
                    $SalidaFinalInforme .= '<td>' . $registro_informe[$i] . '</td>';
                    $SalidaFinalInformePDF .= '<td>' . $registro_informe[$i] . '</td>';
                }
            }
            //Si el informe tiene botones los agrega
            if ($total_botones > 0) {
                //Transforma la cadena generica con los datos especificos del registro, toma por ahora el primer campo
                $cadena_botones_registro = str_replace("DELFRMVALVALOR", $registro_informe[0], $cadena_generica_botones);
                $cadena_botones_registro = str_replace("DETFRMVALBASE", $registro_informe[0], $cadena_botones_registro);
                //Muestra los botones preparados para el registro
                $SalidaFinalInforme .= '<th>' . $cadena_botones_registro . '</th>';
                $SalidaFinalInformePDF .= '<th>' . $cadena_botones_registro . '</th>';
            }
            $SalidaFinalInforme .= '</tr>';
            $SalidaFinalInformePDF .= '</tr>';
            $numero_filas++;
        }
        $SalidaFinalInforme .= '</tbody>';
        $SalidaFinalInformePDF .= '</tbody>';
        if ($formato == "htm") {
            //Cuando es embebido (=1) no agrega los totales de registro
            if (!$embebido) {
                $SalidaFinalInforme .= '<tfoot>
                                        <tr><td colspan=' . $numero_columnas . '>
                                            <b>' . $MULTILANG_TotalRegistros . ': </b>' . $numero_filas . '
                                        </td></tr>';
                $SalidaFinalInformePDF .= '<tfoot>
                                        <tr><td colspan=' . $numero_columnas . '>
                                            <b>' . $MULTILANG_TotalRegistros . ': </b>' . $numero_filas . '
                                        </td></tr>';
            }
            echo '</tfoot>';
        }
        $SalidaFinalInforme .= '</table>';
        $SalidaFinalInformePDF .= '</table>';
        if ($formato == "htm") {
            echo '</body></html>';
        }
        //Imprime el HTML generado para el informe
        echo $SalidaFinalInforme;
        //Genera el PDF cuando se encuentra el modulo y el informe lo tiene activado
        if (@file_exists("mod/pdf") && $registro_informe["genera_pdf"] == 'S') {
            require_once 'mod/pdf/html2pdf/html2pdf.class.php';
            try {
                //Define parametros para generar el PDF
                $IdiomaPDF = $IdiomaPredeterminado;
                // Acepta solo ca|cs|da|de|en|es|fr|it|nl|pt|tr
                $OrientacionPDF = 'P';
                // P|ortrait  L|andscape
                $TamanoPaginaPDF = 'A4';
                // A4|A5|LETTER|LEGAL|100×200...|
                $MargenPaginaMM = '10';
                // Como Entero o arreglo (Izq,Der,Arr,Aba) ej:  10  o  array(1, 25, 25, 5)
                $ModoVistaPDF = 'fullpage';
                // fullpage|fullwidth|real|default
                $FuentePredeterminadaPDF = 'Arial';
                // Arial|Courier|Courier-Bold|Courier-BoldOblique|Courier-Oblique|Helvetica|Helvetica-Bold|Helvetica-BoldOblique|Helvetica-Oblique|Symbol|Times-Roman|Times-Bold|Times-BoldItalic|Times-Italic|ZapfDingbats
                $ContrasenaLecturaPDF = '';
                // Si se asigna un valor pedira contrasena para poderlo leer
                $JavaScriptPDF = '';
                // Ej.  print(true);
                // Inicia la generacion del PDF
                $html2pdf = new HTML2PDF($OrientacionPDF, $TamanoPaginaPDF, $IdiomaPDF, true, 'UTF-8', $MargenPaginaMM);
                if ($ContrasenaLecturaPDF != "") {
                    $html2pdf->pdf->SetProtection(array('print'), $ContrasenaLecturaPDF);
                }
                if ($JavaScriptPDF != "") {
                    $html2pdf->pdf->IncludeJS($JavaScriptPDF);
                }
                $html2pdf->pdf->SetDisplayMode($ModoVistaPDF);
                $html2pdf->setDefaultFont($FuentePredeterminadaPDF);
                $html2pdf->WriteHTML($SalidaFinalInformePDF);
                $html2pdf->Output('tmp/Inf_' . $Identificador_informe . '-' . $PCOSESS_LoginUsuario . '.pdf', 'F');
                // Antes: $html2pdf->Output('tmp/exemple.pdf'); enviaba salida al navegador directamente
            } catch (HTML2PDF_exception $e) {
                echo $e;
                exit;
            }
        }
        // Si se ha definido un tamano fijo entonces cierra el marco
        if ($registro_informe["ancho"] != "" && $registro_informe["alto"] != "") {
            echo '</DIV>';
        }
    }
    // Fin si informe es T (tabla)
    //Verifica si es un informe grafico sin dimensiones
    if ($registro_informe["formato_final"] == "G" && ($registro_informe["ancho"] == "" || $registro_informe["alto"] == "")) {
        echo '<form name="cancelarXTamano" action="' . $ArchivoCORE . '" method="POST">
					<input type="Hidden" name="PCO_Accion" value="Ver_menu">
					<input type="Hidden" name="PCO_ErrorTitulo" value="' . $MULTILANG_ErrorDatos . '">
					<input type="Hidden" name="PCO_ErrorDescripcion" value="' . $MULTILANG_InfErrTamano . '">
					</form>
					<script type="" language="JavaScript"> document.cancelarXTamano.submit();  </script>';
    }
    // Si el informe tiene formato_final = G (grafico)
    if ($registro_informe["formato_final"] == "G" && $registro_informe["ancho"] != "" && $registro_informe["alto"] != "") {
        //Consulta el formato de grafico y datos de series para ponerlo en los campos
        //Dado por: Tipo|Nombre1!NombreN|Etiqueta1!EtiquetaN|Valor1!ValorN|
        $formato_base = explode("|", $registro_informe["formato_grafico"]);
        $tipo_grafico = $formato_base[0];
        $lista_nombre_series = explode("!", $formato_base[1]);
        $lista_etiqueta_series = explode("!", $formato_base[2]);
        $lista_valor_series = explode("!", $formato_base[3]);
        //Elimina los nombres de tabla en caso de tener punto y usa los alias si los tiene
        for ($i = 0; $i < 5; $i++) {
            //Elimina nombres de tabla encontrando el punto y seleccionando siguiente palabra
            if (strpos($lista_etiqueta_series[$i], ".")) {
                $tmp = explode(".", $lista_etiqueta_series[$i]);
                $lista_etiqueta_series[$i] = $tmp[1];
            }
            if (strpos($lista_valor_series[$i], ".")) {
                $tmp = explode(".", $lista_valor_series[$i]);
                $lista_valor_series[$i] = $tmp[1];
            }
            // Prefiere los alias sobre los nombres de campo cuando encuentra un AS
            if (strpos($lista_etiqueta_series[$i], " AS ")) {
                $tmp = explode(" AS ", $lista_etiqueta_series[$i]);
                $lista_etiqueta_series[$i] = $tmp[1];
            }
            if (strpos($lista_valor_series[$i], " AS ")) {
                $tmp = explode(" AS ", $lista_valor_series[$i]);
                $lista_valor_series[$i] = $tmp[1];
            }
        }
        $nombre_serie_1 = $lista_nombre_series[0];
        $nombre_serie_2 = $lista_nombre_series[1];
        $nombre_serie_3 = $lista_nombre_series[2];
        $nombre_serie_4 = $lista_nombre_series[3];
        $nombre_serie_5 = $lista_nombre_series[4];
        $campo_etiqueta_serie_1 = $lista_etiqueta_series[0];
        $campo_etiqueta_serie_2 = $lista_etiqueta_series[1];
        $campo_etiqueta_serie_3 = $lista_etiqueta_series[2];
        $campo_etiqueta_serie_4 = $lista_etiqueta_series[3];
        $campo_etiqueta_serie_5 = $lista_etiqueta_series[4];
        $campo_valor_serie_1 = $lista_valor_series[0];
        $campo_valor_serie_2 = $lista_valor_series[1];
        $campo_valor_serie_3 = $lista_valor_series[2];
        $campo_valor_serie_4 = $lista_valor_series[3];
        $campo_valor_serie_5 = $lista_valor_series[4];
        // Libreria para graficos
        include "inc/libchart/classes/libchart.php";
        //Crea las series para el grafico, dependiendo si es torta (una serie) o cualquier otro (multiples series)
        if ($tipo_grafico == "torta") {
            $dataSet = new XYDataSet();
            // GENERA DATOS DEL GRAFICO
            $consulta_ejecucion = ejecutar_sql($consulta);
            while ($registro = $consulta_ejecucion->fetch()) {
                if ($nombre_serie_1 != "") {
                    $dataSet->addPoint(new Point($registro[$campo_etiqueta_serie_1], $registro[$campo_valor_serie_1]));
                }
            }
        } else {
            $dataSet = new XYSeriesDataSet();
            if ($nombre_serie_1 != "") {
                $serie1 = new XYDataSet();
                $dataSet->addSerie($nombre_serie_1, $serie1);
            }
            if ($nombre_serie_2 != "") {
                $serie2 = new XYDataSet();
                $dataSet->addSerie($nombre_serie_2, $serie2);
            }
            if ($nombre_serie_3 != "") {
                $serie3 = new XYDataSet();
                $dataSet->addSerie($nombre_serie_3, $serie3);
            }
            if ($nombre_serie_4 != "") {
                $serie4 = new XYDataSet();
                $dataSet->addSerie($nombre_serie_4, $serie4);
            }
            if ($nombre_serie_5 != "") {
                $serie5 = new XYDataSet();
                $dataSet->addSerie($nombre_serie_5, $serie5);
            }
            // GENERA DATOS DEL GRAFICO
            $consulta_ejecucion = ejecutar_sql($consulta);
            while ($registro = $consulta_ejecucion->fetch()) {
                if ($nombre_serie_1 != "") {
                    $serie1->addPoint(new Point($registro[$campo_etiqueta_serie_1], $registro[$campo_valor_serie_1]));
                }
                if ($nombre_serie_2 != "") {
                    $serie2->addPoint(new Point($registro[$campo_etiqueta_serie_2], $registro[$campo_valor_serie_2]));
                }
                if ($nombre_serie_3 != "") {
                    $serie3->addPoint(new Point($registro[$campo_etiqueta_serie_3], $registro[$campo_valor_serie_3]));
                }
                if ($nombre_serie_4 != "") {
                    $serie4->addPoint(new Point($registro[$campo_etiqueta_serie_4], $registro[$campo_valor_serie_4]));
                }
                if ($nombre_serie_5 != "") {
                    $serie5->addPoint(new Point($registro[$campo_etiqueta_serie_5], $registro[$campo_valor_serie_5]));
                }
            }
        }
        // CREA OBJETO SEGUN TIPO DE GRAFICO
        if ($tipo_grafico == "linea" || $tipo_grafico == "linea_multiples") {
            $chart = new LineChart($registro_informe["ancho"], $registro_informe["alto"]);
        }
        if ($tipo_grafico == "barrah" || $tipo_grafico == "barrah_multiples") {
            $chart = new HorizontalBarChart($registro_informe["ancho"], $registro_informe["alto"]);
        }
        if ($tipo_grafico == "barrav" || $tipo_grafico == "barrav_multiples") {
            $chart = new VerticalBarChart($registro_informe["ancho"], $registro_informe["alto"]);
        }
        if ($tipo_grafico == "torta") {
            $chart = new PieChart($registro_informe["ancho"], $registro_informe["alto"]);
        }
        // PRESENTA EL GRAFICO EN PANTALLA
        $chart->setDataSet($dataSet);
        //$chart->getPlot()->setGraphCaptionRatio(0.75);
        $chart->setTitle($registro_informe["titulo"]);
        $chart->render("tmp/Inf_" . $registro_informe["id"] . "-" . $PCOSESS_LoginUsuario . ".png");
        echo '<img alt="Grafico" src="tmp/Inf_' . $Identificador_informe . '-' . $PCOSESS_LoginUsuario . '.png" style="border: 1px solid gray;">';
    }
    // Fin si informe es G (grafico)
    if ($en_ventana) {
        cerrar_ventana();
    }
    //Si el usuario es admin le muestra el query generador.
    if (@$PCOSESS_LoginUsuario == "admin" && $ModoDepuracion) {
        mensaje($MULTILANG_MonCommSQL, $consulta, '', 'fa fa-fw fa-2x fa-database', 'alert alert-info alert-dismissible ');
    }
}