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:

  • Si se desea que un campo sea modificable, se debe poner un asterisco delante del nombre del campo.
  • Si se desea un enlace a una vista extendida, escribir el nombre de la tabla seguido de "VerExtendido". Ej: PERVerExtendido
  • Para poner enlaces hacia abajo (registros dependientes), se debe escribir HijoX, en donde X es el número n de la tabla ARn, o P (PER), A (AGE), E (EVE), I (INT). Cuando se están listando varias tablas, el hijo se refiere siempre a la tabla del campo anterior. Esto supone que la tabla dependiente (hija) tiene un enlace hacia la tabla que se está listando. Por ej. para tener los enlaces hacia PER se escribe HijoP, y para AR2 se escribe Hijo2.
  • Cuando hay una sola tabla (en TablasAListar), se puede poner un botón de ELIMINAR, para que el USUARIO pueda eliminar un registro. Para ello, escribir “Del” (Delete), en la posición que se desea que aparezca el botón.
    Nota: Si el usuario tiene autorización para eliminar registros propios, pero no registros ajenos, los iconos de eliminación aparecerán solo cuando los registros sean propios. Sin embargo es requisito que entre los campos a listar esté el código del registro
  • Para campos calculados use CALXX (XX:01 al 09) (Más detalles abajo)

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

Nombre Uso
Totales Campos para los cuales se desea dar totales, separados por comas. Los campos deben ser numéricos (Tipo Cantidad o Monto). Los campos mencionados aquí, deben estar entre los “CamposAListar”.
Promedios

Formato: XYZ (X: Totales   Y: Cantidad  Z: Promedios)

Escriba 3 dígitos con posibles valores 0 y 1. 0 Indica no usar, 1 indica usar.

  • La primera posición se refiere a los totales
  • La segunda a la cantidad de registros
  • La tercera a los promedios.

Por ejemplo, 011 significa que no se desean totales, pero si cantidad de registros y promedios.

Forma Abreviada, escriba:

  • A para Totales con Promedios
  • B promedios sin totales
  • deje en blanco si desea sólo los totales:
SoloTotales Escribir "SI", si se desea que sólo aparezcan las líneas de Total, es decir que no aparezcan los registros que han producido esos totales. Debe usarse en conjunto con los campos que tienen un asterisco en el parámetro Ordenamiento.

¿Qué se muestra?

Nombre Uso
Imagen Escribir "SI", si se desea que las imágenes sean mostradas, con cualquier otro valor, aparece un enlace con la palabra "Ver"
Calculadora Escribir "NO" si se desea que se omita la cantidad de registros encontrados
IndicacionOrden Escribir "SI" si desea que se indique el ordenamiento que tiene el reporte (Ej: Ciudad (Ascendente), Edad (Descendente)) y que se muestra debajo del título
Tope Escribir "SI" si quiere que aparezcan en el tope del reporte, los iconos para obtener copia en excel, en pdf o para preparar cartas. Estos aparecerán siempre y cuando hayan más de 10 registros o no se hayan solicitado al Pie
SaltoRapido Escribir "SI" si quiere que aparezca, después de la indicación de cuales fueron los registros leídos, unas cajas para ir directamente a un registro y para cambiar la cantidad de registros mostrados por página.
Pie Escribir "NO" si se desea que se omita el panel de opciones para impresión a carta, pdf o excel al final del reporte.
Encabezados Escribir "NO" si se desean omitir los encabezados
IrExtendido Si tiene el valor SI, cuando se consiga un solo registro, si existe una vista extendida, se va a la misma directamente
MensajeSiNoHay Mensaje que debe aperecer si no se consigue ningún registro. Si se escribe NO, no parece ningún mensaje, si se omite este parámetro, se escribe el mensaje estándar de Net2Client.
TextoListar Texto que aparece después de listar los registros de una página en el programa listarsup.php
Retorno Si se tiene el valor “NO”, en vez de poner un botón de retorno, pone un botón de cerrar ventana; Si tiene el valor “X” no pone nada (y omite el "powered by Net2Client ) . Si tiene el valor “-2” pone un botón de retorno que regresa dos pantallas atrás
BotonANombre
BotonBNombre
BotonCNombre
Texto que debe aparecer en el Botón X que se muestra al terminar de listar los registros de una página, después de TextoListar y antes del botón de Regresar
BotonADireccion
BotonBDireccion
BotonCDireccion
Dirección completa (www…) a donde ir cuando el usuario pulsa el botón X

VersupA
VersupB
VeruspC

Indica que la invocación (en el boton X) debe ser hecha a través del programa versup

BotonASiempre
BotonBSiempre
BotonCSiempre

Permite mostrar o no los botones de acción A,B y/o C dependiendo si hay o no resultados que mostrar en el reporte.Si estos parámetros tienen el valor de "SI" los botonoes se mostrarán siempre, haya o no resultados a mostrar, en caso contrario sólo se mostrarán si hay resultados.
OcultarSort (V 5.1.c ) Si tiene el valor “SI”, oculta las fechas de sort (flechas para el ordenamiento ascendente o descendente) en los encabezados del reporte.

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

Nombre Uso
ActionBoxType Indica que se quiere una columna de acción a la izquierda, delante de todos los campos. Se debe indicar el tipo de elemento deseado:
  • radio: Para un botón tipo radio. Al tocarse, el control pasa automáticamente al programa indicado en el parámetro ActionBoxProgram y pasando en el parámetro Record el número de registros
  • checkbox: Para una caja que quedará marcada si se pincha. A diferencia del botón tipo radio, el control no pasa al programa indicado en el parámetro ActionBoxProgram, sino cuando el usuario pincha el botón indicado en ActionBoxName. Esto permite que el usuario vaya seleccionando varios registros en varias páginas.
ActionBoxProgram Es el programa a ser invocado cuando el usuario marca un botón de radio (ActionBoxType=radio) o cuando el botón de ActionBoxName es utilizado.
  • Si el programa está en el directorio del proyecto basta con escribir el nombre, si no, se puede escribir la ruta completa desde el directorio new o sis
  • En caso de que el programa deba ser invocado a través de versup.php (o verextendido.php), escribir versup.php?nbeprograma, y el sistema se encargará de poner el parámetro de sesión (COKO)
  • En caso de que la operación sea de eliminar registros, se debe escribir la palabra DELETE
  • El programa invocado va a recibir en el parámetro $SelectedRec los números de registros seleccionados, separados por una coma
ActionBoxName Es el texto que se desea que aparezca el botón de acción que se encuentra arriba de la columna de acción. Ej: Seleccionar. Cuando se trata de una eliminación (ActionBoxProgram=DELETE) se debe omitir\ este parámetro ya que es ignorado.

Nota: El identificador de este botón es botonaccion.

ActionBoxColor Configuración hexadecimal (Ej. #FFEEFF) del color que se quiere que tome la columna de un registro marcado cuando una caja tipo checkbox es marcada. Si se omite este parámetro, se toma el color de la tabla. Si no se desea cambio de color escribir:NO
ActionField No usar cuando se está listando una sola tabla. Si hay más de una tabla, indicar el nombre interno del campo que se desea recibir cuando el usuario selecciona un registro. Por ejemplo, si se están listando las tablas PER y AR1, este campo debería ser PERCodigo o AR1Codigo

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:

Nombre Uso
InitPHP Programa de PHP a ser incluido al principio del programa (después del include de PHPCuerpo). Debe estar incluido en el directorio de programas.
MidPHP Programa de PHP a ser incluido justo después de la lectura del registro, después de haber llenado la variable $row con los datos del registro, antes de escribir el registro. Es ejecutado una vez por cada línea del reporte. Debe estar incluido en el directorio de programas.
EndPHP Programa de PHP a ser incluido al final del programa (después del include de PHPCuerpo). Debe estar incluido en el directorio de programas.
ECHO Poner con la palabra ECHO si se desea que aparezca la instrucción MySQL de lectura generada. EJ: <input type=hidden name='ECHO' value='ECHO'>

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