Al grano por favor
Si ya conoces listarsup y quieres ir directamente a un parámetro, utiliza uno de los enlace siguientes:
| Parámetros Principales | Rupturas de control | Qué se muestra | Look del listado |
| Botones Acción | Control de campos | Inclusión PHP y debug | Los estilos |
Haciendo el reporte como lo necesito
Una de las labores más comunes que tienes que hacer como desarrollador de sistemas, son los reportes. Después de todo el esfuerzo que se ha hecho para introducir información, lo menos que uno aspira es poder sacarla de distintas formas.
En un ambiente normal, se pasan horas y horas escribiendo reportes. Con N2C se dispone de una facilidad para producir reportes. Es el programa listarsup.php. Cuentan los más antiguos que el nombre viene de ser una variante de listar.php, que como era SUPerior, se llamó listarsup.php. ¿Pero que hace ese programa que se las da de SUPERIOR?
En realidad listarsup es un programa muy poderoso y flexible. Cada vez que se hace una búsqueda desde el panel principal de se invoca el programa. Cada vez que se prepara un reporte con el generador automático de N2C, se invoca listarsup. (Ya en confianza lo llamamos listarsup, que es más corto que listarsup.php).
La ventaja que tiene listarsup, es que hace muchas cosas, que no son fáciles de hacer. Y, lo más interesante, es que ya está escrito, chequeado y requetechequeado. Es uno de los programas más sólidos que tiene N2C.
Si estás escribiendo una aplicación y lo que tienes que listar son unos 10 registros o menos, de repente lo puedes hacer fácilmente sin necesidad de invocar listarsup. Te basta leer la tabla y un pequeño loop para listar todos los registros.
Sin embargo, si no usas listarsup, corres el riesgo que el usuario (¡Ay, los usuarios!) te pregunte que por qué ese reporte es distinto a los demás y ahí no puedes ordenar. Entonces, en una aplicación de N2C, evita hacer los reportes sin listarsup.
¿Que hace a listarsup, un programa "superior"?
Pues, hay varias cosas.
- En primer lugar es un programa REUSABLE, que siempre es mantenido y actualizado en cualquier versión de N2C.
- En segundo lugar, es completamente configurable a tu gusto y necesidades.
- En tercer lugar, ofrece una serie de facilidades muy interesantes que enumeramos en el capítulo anterior: Dame_muchos__Preparando_reportes.htm
Y lo más interesante de todo, es que listarsup es completamente configurable. Si hay algo que no te gusta, o que no necesitas, puedes configurarlo para adaptarlo a tus necesidades.
Desafortunadamente, todo tiene su precio en esta vida. Todas las ventajas que enumeramos anteriormente implican mucho código y por lo tanto listarsup es un programa pesado. Sin embargo, también es inteligente y no siempre carga todas las rutinas que existen, sino las necesarias
Invocando a listarsup
El programa listarsup.php debe ser invocado a través de una forma, con los comandos que se indican a continuación.
echo " <form name='invocar' method='POST' action='listarsup.php'> <input type='hidden' name='BD' value='$BD'> <input type='hidden' name='COKCodigo' value='$COKCodigo'> ======= PONER AQUÍ LOS DEMÁS PARÁMETROS ======================== </form>";
Una forma sencilla de preparar los parámetros es con el programa repact.hmt, es decir el programa que prepara los reportes estándares de N2C. Lo único que tienes que hacer es darle al botón de "Mostrar", en "Parámetros Avanzados", en la parte de abajo, después de los campos de ordenamiento. Cuando se utiliza esta facilidad, hay un botón de "Generar HTML" que genera la mayoría de las instrucciones de HTML necesarias para ejecutar este programa. Se recomienda su copiar y pegar, como una forma rápida de generar nuevos reportes.
Nota Importante: listarsup.php requiere que se le pase el COKO (bajo la fomra de BS y COKCodigo) ya verifica que el usuario haya hecho login al sistema y que tiene acceso a todas las tablas y campos que se están utilizando en el reporte.
Parámetros Principales
| Nombre | Uso |
|---|---|
| BD (obligatorio) | La base de datos que se está utilizando |
| COKCodigo (obligatorio) | El código del Cokie |
| TablasAListar (obligatorio) | La lista de tablas que deben ser leídas, separadas por comas |
| CamposAListar (obligatorio) |
La lista de campos que se deben listar, separados por comas. Usar los nombres internos (Ej. PERNombre,AR1Linea3...) Opciones adicionales:
Nota: El perfil del usuario debe tener autorizada la modificación o eliminación de registros para la tabla correspondiente. |
| Condiciones | Las condiciones que se deben cumplir para listar registros. En caso de haber varias tablas a las cuales se les está haciendo un "join", deben aparecer aquí esas condiciones. Se debe usar la sintaxis de MySql, por ejemplo usando los "AND" y los "OR" que sean necesarios |
| Ordenamiento | El Orden que se requiere en el reporte (Sort). Si se desea que un campo sea utilizado como ruptura de control (agrupación), poner un asterisco delante. |
| Titulo | Título del reporte. Si no se incluye, el reporte sera desplegado sin barra de titulo. |
| CantAListar | La cantidad de registros a listar por página. Si se omite, se usa el valor por defecto de la aplicación (que viene en la tabla de parámetros) |
| CantExacAListar | La cantidad Exacta de registros a listar.Cuando este parámetro es utilizado, se ignora CantAListar y se utiliza este valor. Igualmente, no se incluyen las facilidades para pdf ni para bajar los datos a Excel. |
| RegistrosALeer | Si se desean leer unos registros específicos, escriba los números de dichos registros separados por comas. Estos registros corresponden al código de registro en la primera tabla que aparezca en el parámetro "TablasAListar". Si se usa este registro se ignora el parámetro "Condiciones". |
| CamposALeer | Los campos que normalmente aparecen en el SELECT son construidos directamente a partir de los CamposAListar. Este parámetro permite que no se tomen esos campos, sino los indicados por el usuario. Este es un parámetro delicado ya que listarsup muchas veces añade campos requeridos por alguna condición de seguridad y si no se añaden aquí, se puede producir un error. |
| VerConExtendido | si el valor es SI y la persona tiene autorización para ver vistas extendidas, se invoca la vista extendida (verextendido.php) en vez de ver, cuando el usuario hace clic sobre el número del registro |
Parámetros para el manejo de rupturas de control
¿Qué se muestra?
El "Look" del listado
| Nombre | Uso |
|---|---|
| AjustarFrame | Escribir SI en éste parámetro si desea que el reporte sepa que se está desplegando dentro de un frame interno (iframe) y ajuste la altura del mismo para que pueda desplegar todo el reporte sin utilizar scrollbars ni dejar espacio vacio. |
| Ancho | Especifique el número exacto de pixeles que desea que tenga como ancho la página del reporte. Si se omite este parámetro el ancho de la página será libre y dependerá de la cantidad de conetenido desplegado y de los estilos utilizados. |
| Borde | Utilice este parámetro si desea que la pagina de reporte se despliegue dentro de un borde. Su valor sera interpretado como el número exacto de grosor en pixeles de dicho borde. |
|
PRESENTACIÓN DEL LISTADO
|
|
| HojaEstilos | Es la hoja de estilos que se desea incluir en el reporte. Debe estar almacenada en el directorio de estilos |
| Esquema | Número del esquema de colores definido en net2client (ver). Al usuar este parámetro, no hace falta usar ninguno de los 6 parámetros siguientes. |
| Fondo | Cuando NO se usa el parámetro "esquema", color del fondo del título. Escribir el color en inglés o en su configuración hexadecimal #XXXXXX (*) |
| FondoTabla | Cuando NO se usa el parámetro "esquema", color del fondo de la tabla (Marco) . Escribir el color en inglés o en su configuración hexadecimal #XXXXXX (*) |
| Letras | Cuando NO se usa el parámetro "esquema", color de las letras del título. Escribir el color en inglés o en su configuración hexadecimal #XXXXXX (*) |
| LetrasTabla | Cuando NO se usa el parámetro "esquema", color de las letras de la tabla. Escribir el color en inglés o en su configuración hexadecimal #XXXXXX (*) |
| LetrasRuptura | Cuando NO se usa el parámetro "esquema", color de las letras de la ruptura de control. Escribir el color en inglés o en su configuración hexadecimal #XXXXXX (*) |
| FondoLinea | Cuando NO se usa el parámetro "esquema", color del fondo de las líneas intercaladas. Escribir el color en inglés o en su configuración hexadecimal #XXXXXX (*) |
| ImagenFlechaAbajo | URL que reemplaza a la imagen (ordenamiento ascendente). A veces se requiere modificar cuando se desea un fondo oscuro. Puede usarse ruta relativa desde listarsup. |
| ImagenFlechaArriba | URL que reemplaza a la imagen (ordenamiento ascendente). A veces se requiere modificar cuando se desea un fondo oscuro. Puede usarse ruta relativa desde listarsup. |
| ParamSelect | Parámetros del SELECT que se desean justo después de la cláusula SELECT. Típicamente se usa para el DISTINCT |
| MantenerRetorno | Escribir "SI" para no alterar el retorno que se tenía previo a la invocación del programa. Este es usado, cuando se invoca listarsup al seleccionar un campo tipo enlace (ex-lupa) |
Botones de acción
Estos botones permiten tener una columna a la izquierda para poder seleccionar un registro, eliminarlo o tener otras acciones
Control de campos y campos calculados
Campos Calculados
Los campos calculados permiten poner una columna con unos valores específicos, obtenidos de otras columnas. Típicamente son utilizados para poner enlaces o hacer operaciones.
Para utilizar los campos Calculados, en CamposAListar se escribe la variable: CALxx (xx:dos dígitos), y en las variables hidden se debe escribir como en este ejemplo:
<input type='hidden' name='CALxx'
value=\"<a href='versup.php?[[COKO]]pedido.htm,[[EVECodigo]]'
target='_parent'>Editar</a>\">
Observaciones
- xx: es el mismo número de la variable
- Para cada fila, [[EVECodigo]] será reemplazado por el valor que tenga, en esa fila, la variable EVECodigo
- Cuando se escribe [[COKO]], esto es reemplazado por $COKO, la variable de sesión
- En este caso, se va a crear un enlace, que llama al programa pedido.htm, a través de versup.php y pasándole como parámetro el código del registro
- Se escribe la palabra "Editar" como un enlace
| Nombre | Uso |
|---|---|
|
NombreXXX |
Encabezado para el campo XXX. Hasta la versión 4.6A, XXX solo podía ser CALnn (Ej: NombreCAL01). A partir de esta versión, XXX puede ser un campo de datos, como PERTel1 o AR1Linea3. En el caso de ser un campo de datos, utiliza lo que se indique aquí, en vez de tomar el nombre del campo. Esto permite sobreescribir el nombre estándar. |
| EvaluarCALXX | Si tiene el valor "SI", evalúa la expresión especificada en la variable CALXX. Es indispensable cuando se quiere que la variable CAL sea el resultado de una operación aritmética |
| EvaluarVarCALXX | Prepara a Listarsup para que interprete campos calculados dentro de indices de arreglos. Ejemplo: $MM[LOG_[[LOGOper]]] |
| PalabrasMax | Indique la cantidad máxima de palabras que desean que aparezcan cuando se lista un campo tipo bloque. Las demás serán mostradas cuando el usuario pinche la palabra Más... |
| FormatXXX | Escribir "NO" para que no se haga el formateo automático del campo XXX. Ejp: FormatCAL02 o FormatPERMonto1 |
Inclusión de PHP y Ayuda para el debugging
De último, pero no menos importante, te damos unos parámetros que te pueden ayudar mucho:
Los estilos usados en listarsup
Es posible controlar la apariencia del reporte, utilizando hojas de estilos (parámetro HojaEstilos), y las clases que son incluidas automáticamente en los reportes. En el gráfico siguiente, se muestran algunas de las clases utilizadas en las filas (ROW CLASSES), en las columnas (COLUMN CLASSES, en donde las clases de las columnas corresponden a los nombres internos de los campos impresos ) y en los textos de las líneas de totales.

Es importante mencionar que en este ejemplo lo que se tienen son líneas de totales. Si fueran lineas de conteo de registros, o de promedios, las clases serían las siguientes:
| TotalRow | QuantityRow | AverageRow |
| FinalTotalRow | FinalQuantityRow | FinalAverageRow |
| TotalTextn | QuantityTextn | AverageTextn |
Como siempre, una excelente opción para ver los estilos, es que prepares tu reporte y luego con botón derecho, ver código fuente veas los estilos que está usando el reporte
Con dos tablas
Un ejemplo completo
Se quiere escribir un programa que muestre un reporte de todos los contactos con la información siguiente:

- Nombre de la empresa (AR1Nombre)
- Nombre del contacto (PERNombre)
- Email (PEREmail1)
- Teléfono (PERTel1)
- Nombre del Agente (AGENombre)
El reporte debe venir ordenado por nombre de empleado, en forma ascendente.
Como puede observarse, se están requiriendo campos de distintas tablas. Como el programa listarsup.php requiere los nombres internos, lo primero que debe hacer el asesor es buscar los nombres de esos campos. Esto se hace en el módulo de “setup” en la opción de “Lista de Campos”, o en el drop down de administración, bajo ">Campos".
Programa
echo
"<html>
<body>
<form name='invocar' method='POST' action='listarsup.php'>
<input type='hidden' name='BD' value='00'>
<input type='hidden' name='COKCodigo' value='$COKCodigo'>
<input type='hidden' name='CamposAListar'
value='AR1Nombre,PERNombre,PEREmail1,PERTel1,AGENombre'>
<input type='hidden' name='TablasAListar' value='701PER,701AR3,701AGE'>
<input type='hidden' name='Condiciones' value='(AR1Codigo=PEREnlace1) AND
AGECodigo=PERCodAgente)'>
<input type='hidden' name='Ordenamiento' value='AR1Nombre'>
<input type='hidden' name='Titulo' value='CONTACTOS POR EMPRESA'>
<input type='hidden' name='Fondo' value='#00CC99'>
<input type='hidden' name='Letras' value='white'>
<input type='hidden' name='FondoTabla' value='#D5FFEA'>
</form>
<script language='JavaScript'>
document.invocar.submit();
</script>
</body>
</html>";
Comentarios
- El programa listarsup.php se encuentra en el directorio $COKDirectorio, que viene en el Cokie.
- En COKCodigo, se está pasando el código del Cokie recibido, para asegurar que el acceso es legítimo y por un usuario que ha hecho login
- Para pasar los parámetros al programa listarsup.php, se utiliza una forma. Usualmente las formas tienen campos de entrada (input type=text), drop downs y otros campos. En este programa, como no hay nada input que solicitar al usuario, no existen y todos los campos son tipo “hidden” (escondidos). Como tampoco hay un botón para ejecutar el programa, se ha escrito en JavaScript la instrucción document.invocar.submit() que invoca la forma automáticamente. Al invocarse la forma se ejecuta el programa listarsup.php y todos los campos “hidden” (los parámetros) le son disponibles.
- La variable “Condiciones” es la más compleja y es la que le da al programa las instrucciones para unir varias tablas (join). En ella se indican las dos condiciones de esa unión:
o AR1Codigo=PEREnlace1: El código de la tabla de Empresas (AR1), que es el padre, debe ser igual al campo de Enlace1 de la tabla PER
o AGECodigo=PERCodigoAgente: Se busca el agente, cuyo código de Agente coincida con el que está en la tabla PER. - A la hora de necesitar este programa, se recomienda hacer un “copy and paste” de estas instrucciones, modificando lo que aplica
- Para cargar el programa en el sitio de Net2Client, se debe usar la facilidad de FTP en el módulo de “setup” (http:www.net2client.com/sis/setup/administración.htm). Allí se indica el nombre del programa a cargar. Ej: listado1.txt (Se recomienda el uso de la extensión txt)
- Una de las formas más comunes de invocar el programa, es a través de las páginas especiales (A,B,C,D,...J) que se definen en la tabla de parámetros con el nombre PaginaA (o B,C,D,...J). En ese lugar, se debe escribir el nombre completo: Ej: www.net2client.com/ZZZ/BD/EE/EEA/listado1.txt)
Resultado


(ordenamiento ascendente). A veces se requiere modificar cuando se desea un fondo oscuro. Puede usarse ruta relativa desde listarsup.
(ordenamiento ascendente). A veces se requiere modificar cuando se desea un fondo oscuro. Puede usarse ruta relativa desde listarsup.