
8.- Opción de Listado
En la opción de listado, antes de pasar directamente a imprimir, vamos a
sacar una ventana con una serie de opciones para hacer el listado de
varias maneras. Esto es lo que vamos a ver en éste capítulo. Para ello
vamos a utilizar una ventana para hacer las preguntas y a 2 de ellas
responderemos con un menú de opciones. Para ello aumentaremos de nuevo la
Working-Storage con nuevas variables.
Las frases en éste color son comentarios.
Modificaremos el párrafo LISTADO, que hasta ahora solo nos indicaba que habíamos cogido
esa opción. Gracias a éstas preguntas, podremos generar el listado de
varias formas y no tener que hacer programas distintos para distintos
listados, si lo depuramos mucho mas se pueden conseguir realmente cosas
interesantes. Vamos a conseguir sacar el listado ordenado por cuatro
campos, además pudiendo elegir en cada caso una opción valida, así como
incluir separadores para cada cambio de clave y elegir porque tipo de
impresora saldrá o pantalla.
»»
NUEVAS VARIABLES |
Nuevas
variables para incluir en la Working-Storage Section. |
Estas tablas
contendrán las opciones para conseguir un listado mas
personalizado.
01 TABLALISTADO.
02 FILLER PIC X(24) VALUE " CODIGONOMBRE ".
02 FILLER PIC X(24) VALUE " POBLACION PROVINCIA ".
01 LISTADOTABLA REDEFINES TABLALISTADO.
02 ELELIS PIC X(12) OCCURS 4 TIMES.
01 TABLAPORLIS.
02 FILLER PIC X(30) VALUE " IMPRESORA HP OTRA IMPRESORA".
02 FILLER PIC X(15) VALUE " PANTALLA".
01 LISPORTABLA REDEFINES
TABLAPORLIS.
02 ELEPOR PIC X(15) OCCURS 3 TIMES.
Estas variables, son para saber que opciones hemos escogido.
01
LISCLA PIC 9.
01 LISPOR PIC X.
01 LISSEP PIC X.
01 DESDEPIC 9(4).
01 HASTAPIC 9(4).
01 DEPOBPIC X(20).
01 DEPROPIC X(15). |
|
»»
MODIFICAR PARRAFO |
El PARRAFO LISTADO, que antes solo
indicaba que habíamos escogido esa opción será sustituido por
todo lo que salga a partir de aquí. |
En principio,
creamos una ventana donde nos preguntara, por el tipo de listado
que queramos generar.
LISTADO.
MOVE 7 TO WINLIN MOVE 35 TO WINCOL.
MOVE " LISTADO " TO WINTIT MOVE 9 TO WINTITLO.
MOVE WCB TO WIN (2).
DISPLAY WIN (2) LINE 13 COL 35 LOW ERASE CONTROL
"WINDOW-CREATE, FCOLOR=WHITE, BCOLOR=BROWN".
LISTA0.
DISPLAY "CLASIFICAR POR.." LINE 1 COL 2.
DISPLAY "SEPARADOR ?? ..." LINE 4 COL 2.
DISPLAY "IMPRIMIR POR ..." LINE 5 COL 2.
... |
 |
Como habréis podido comprobar el tipo de programación que he utilizado no es nada estructurado y utilizo mucho la sentencia GO.
En la actualidad no programo así, pero aquí se muestra tal y como lo hacía antes. Los programas funcionan correctamente y exactamente igual, pero me he
dado cuenta que la programación estructurada es mucho mas fácil de leer y entender.
»»
RESPUESTA A LAS PREGUNTAS |
Veamos
como aceptamos las diferentes opciones que nos propone el listado,
si creéis que se pueden añadir mas, me lo decís y las preparo. |
Para la primera
pregunta, ordenar por, generamos otra ventana con las opciones
posibles. MOVE 0 TO LI.
MOVE 4 TO WINLIN MOVE 12 TO WINCOL.
MOVE SPACES TO WINTIT MOVE 0 TO WINTITLO.
MOVE WCB TO WIN (3).
DISPLAY WIN (3) LINE 13 COL 56 LOW ERASE
CONTROL "WINDOW-CREATE, FCOLOR=WHITE, BCOLOR=BLUE".
LISTA1.
ADD 1 TO LI IF LI > 4 GO LISTA2.
DISPLAY ELELIS (LI) LINE LI COL 1 LOW.
GO LISTA1.
LISTA2.
IF LI > 4 MOVE 1 TO LI.
IF LI < 1 MOVE 4 TO LI.
DISPLAY ELELIS (LI) LINE LI COL 1 LOW REVERSE.
LISTA3.
ACCEPT OP LINE LI COL 1 OFF NO BEEP
ON EXCEPTION ESCA NEXT SENTENCE.
DISPLAY ELELIS (LI) LINE LI COL 1 LOW.
IF ESCA = 53 ADD 1 TO LI GO LISTA2.
IF ESCA = 52 SUBTRACT 1 FROM LI GO LISTA2.
IF ESCA = 27 DISPLAY WIN (3) CONTROL "WINDOW-REMOVE"
GO LISTAFIN.
IF ESCA = 13 NEXT SENTENCE ELSE GO LISTA2.
DISPLAY WIN (3) CONTROL "WINDOW-REMOVE".
MOVE LI TO LISCLA.
DISPLAY ELELIS (LI) LINE 1 COL 20
LOW. Según cojamos una u otra opción, se nos
plantearán unas preguntas distintas, por eso nos vamos a
párrafos distintos.
IF LISCLA = 1 OR LISCLA = 2 GO LISTA31.
IF LISCLA = 3 GO LISTA33.
IF LISCLA = 4 GO LISTA34.
Estos dos párrafos se ejecutarán en el caso de haber seleccionado
clasificar por nombre o por código, entonces se nos pedirán un
DESDE y un HASTA para nuestro listado.
LISTA31.
DISPLAY "DESDE .. " LINE 2 COL 2.
DISPLAY "HASTA .. " LINE 2 COL
21.
ACCEPT DESDE LINE 2 COL 12 PROMPT LOW NO BEEP
ON EXCEPTION ESCA NEXT SENTENCE.
IF ESCA = 27 GO LISTA0.
IF DESDE = 0 DISPLAY "LISTAR TODOS "
LINE 2 COL 12 LOW GO LISTA4.
MOVE DESDE TO DC4 DISPLAY DC4 LINE 2 COL 12 LOW.
LISTA32.
ACCEPT HASTA LINE 2 COL 32 PROMPT LOW NO BEEP
ON EXCEPTION ESCA NEXT SENTENCE.
IF ESCA = 27 GO LISTA31.
IF DESDE > HASTA GO LISTA32.
MOVE HASTA TO DC4 DISPLAY DC4 LINE 2 COL 32 LOW.
GO LISTA4.
Si hemos seleccionado clasificar por POBLACION, nos pedirá que le
indiquemos una, por si solo queremos listar los de esa población
o sino todos.
LISTA33.
DISPLAY "POBLACION .." LINE 2 COL 2.
ACCEPT DEPOB LINE 2 COL 21 LOW NO BEEP ECHO
ON EXCEPTION ESCA NEXT SENTENCE.
IF ESCA = 27 GO LISTA0.
IF DEPOB = SPACES DISPLAY "LISTAR TODOS "
LINE 2 COL
21 LOW GO LISTA4.
GO LISTA4.
Si hemos seleccionado clasificar por PROVINCIA, nos pedirá que le
indiquemos una, por si solo queremos listar los de esa provincia o
sino todos.
LISTA34.
DISPLAY "PROVINCIA .." LINE 2 COL 2.
ACCEPT DEPRO LINE 2 COL 21 LOW NO BEEP ECHO
ON EXCEPTION ESCA NEXT SENTENCE.
IF ESCA = 27 GO LISTA0.
IF DEPOB = SPACES DISPLAY "LISTAR TODOS "
LINE 2 COL
21 LOW GO LISTA4.
Aquí preguntaremos si deseamos separador en el listado, cada vez que
cambie la clave por la que hemos seleccionado clasificar, esto es
muy útil, por ejemplo si lo hacemos por Población o por
Provincia, porque cada vez que cambie el valor, le indicaremos que
realice un subtotal y una separación.
LISTA4.
IF LISCLA = 1 MOVE "N" TO OP ELSE MOVE "S" TO OP.
ACCEPT OP LINE 4 COL 21 UPDATE NO BEEP LOW
ON EXCEPTION ESCA NEXT SENTENCE.
IF ESCA = 27 DISPLAY " " LINE 4 COL 21 GO LISTA0.
IF OP = "S" OR OP = "N" NEXT SENTENCE ELSE GO LISTA4.
MOVE OP TO LISSEP.
Volvemos a crear otra ventana, para ofrecernos las opciones del listado, por
Impresora HP, Otra impresora o por pantalla.
LISTA5.
MOVE 3 TO WINLIN MOVE 15 TO WINCOL.
MOVE SPACES TO WINTIT MOVE 0 TO WINTITLO.
MOVE WCB TO WIN (4).
DISPLAY WIN (4) LINE 18 COL 56 LOW ERASE
CONTROL "WINDOW-CREATE, FCOLOR=WHITE, BCOLOR=BLUE".
MOVE 0 TO LI.
LISTA51.
ADD 1 TO LI IF LI > 3 GO LISTA52.
DISPLAY ELEPOR (LI) LINE LI COL 1 LOW.
GO LISTA51.
LISTA52.
IF LI > 3 MOVE 1 TO LI.
IF LI < 1 MOVE 3 TO LI.
DISPLAY ELEPOR (LI) LINE LI COL 1 LOW REVERSE.
LISTA53.
ACCEPT OP LINE LI COL 1 OFF NO BEEP
ON EXCEPTION ESCA NEXT SENTENCE.
DISPLAY ELEPOR (LI) LINE LI COL 1 LOW.
IF ESCA = 53 ADD 1 TO LI GO LISTA52.
IF ESCA = 52 SUBTRACT 1 FROM LI GO LISTA52.
IF ESCA = 27 DISPLAY WIN (4) CONTROL "WINDOW-REMOVE"
GO LISTA4.
IF ESCA = 13 NEXT SENTENCE ELSE GO LISTA52.
DISPLAY WIN (4) CONTROL "WINDOW-REMOVE".
MOVE LI TO LISPOR.
DISPLAY ELEPOR (LI) LINE 5 COL 20
LOW.
Preguntamos si
todo es correcto y si es así nos dispondríamos a desarrollar el
listado. Pero eso lo veremos en otro capítulo.
LISTA7.
DISPLAY "TODO CORRECTO ?" LINE 7 COL 2.
ACCEPT OP LINE 7 COL 23 PROMPT LOW NO BEEP
ON EXCEPTION ESCA NEXT SENTENCE.
DISPLAY SPACES LINE 7 SIZE 35.
IF OP = "N" OR ESCA = 27 GO LISTA5.
IF OP NOT = "S" GO LISTA7.
LISTA8.
DISPLAY "PROXIMO CAPITULO, EL LISTADO"
LINE 7 COL 2 LOW.
ACCEPT OP LINE 2 COL 1 OFF NO BEEP.
Párrafo para
abandonar el listado.
LISTAFIN.
DISPLAY WIN (2) CONTROL "WINDOW-REMOVE".
GO TRES. |
|
 |
Espero que os guste la idea de
preseleccionar una serie de opciones antes de lanzar el listado, como veis,
así nos podemos ahorrar muchos listados, ya que en uno solo, podemos
obtener varios. En el próximo capítulo, veremos el desarrollo necesario
para hacer realidad lo que hemos seleccionado en ésta ventana previa.
|
|