|
 |
 |
8.- Clasificando y FIN
página(s) : 1/2 (5107 palabras totales en este texto) (23234 Lecturas) 
EL EVENTO OPENED
En el capítulo anterior nos quedo por el evento
que se produce al abrir la ventana, es decir, el que
se produce en el OPENED. En el vamos a rellenar la tabla
con los registros que tenemos en el fichero de Agenda
y además crearemos el gráfico y totalizaremos
por tipos de contactos.
En primer lugar nos definiremos una Working propia para
trabajar sobre algunas variables, como contadores y
la tabla con los tipos de contactos. Para seguir con
la estructura de programación que he utilizado
durante todo el curso, voy a utilizar párrafos
y sentencias GOTO, pero tengo intención de hacer
un especial sobre programación estructurada en
la que explicaré las diferencias entre un tipo
de programación y otro, con ejemplos, así
que ahora seguiré como siempre.
Fijaros que el párrafo UNO, lo utilizamos para leer el
fichero de principio a fin e ir rellenando los campos
que componen la tabla. El párrafo DOS lo utilizamos
para construir el gráfico tomando como valor
máximo el del tipo de contacto mayor.
PROGRAMACION
EVENTO OPENED
|
ENVIRONMENT
DIVISION. DATA
DIVISION. WORKING-STORAGE
SECTION. 01
COLUMNAS PIC 9999. 01
CUENTA PIC 999. 01
TIPO1 PIC 9(4). 01
TIPO2 PIC 9(4). 01
TIPO3 PIC 9(4). 01
TIPO4 PIC 9(4). 01
TIPO5 PIC 9(4). 01
DEBA PIC 9(4). 01
MAX PIC
9(4). 01
GENH PIC 9(4). 01
GENM PIC 9(4). 01
TIPO PIC X(12). 01
LNUMERO. 02
LNUM PIC ZZ.ZZ9. 01
TABLATIPOS. 02
FILLER PIC X(15) VALUE "PERSONAL
". 02
FILLER PIC X(15) VALUE "PROFESIONAL". 02
FILLER PIC X(15) VALUE "FAMILIAR". 02
FILLER PIC X(15) VALUE "EMPRESAS". 02
FILLER PIC X(15) VALUE "SANITARIO". 01
TABLITIPOS REDEFINES TABLATIPOS. 02
ELETIP PIC X(15) OCCURS 5 TIMES.
PROCEDURE
DIVISION. INICIO
SECTION. CLOSE
AGENDA. OPEN
INPUT AGENDA. OPEN
OUTPUT CLASI. MOVE
0 TO POW-VISIBLE OF TABLA. MOVE
0 TO CCC TIPO1 TIPO2 TIPO3 TIPO4 TIPO5 GENH
GENM. UNO. READ
AGENDA NEXT RECORD AT END GO DOS. ADD
1 TO CCC. MOVE
CCC TO POW-ROWS OF TABLA. CALL
SETCELLNUMERIC OF TABLA USING AGECOD CCC
1 MOVE
AGECOD TO CLACOD. CALL
SETCELLTEXT OF TABLA USING AGENOM CCC 2 MOVE
AGENOM TO CLANOM. CALL
SETCELLTEXT OF TABLA USING AGEDOM CCC 3 MOVE
AGEDOM TO CLADOM. CALL
SETCELLNUMERIC OF TABLA USING AGEPOS CCC
4 MOVE
AGEPOS TO CLAPOS. CALL
SETCELLTEXT OF TABLA USING AGEPOB CCC 5 MOVE
AGEPOB TO CLAPOB. CALL
SETCELLTEXT OF TABLA USING AGEPRO CCC 6 MOVE
AGEPRO TO CLAPRO. MOVE
ELETIP (AGETIP) TO TIPO. CALL
SETCELLTEXT OF TABLA USING TIPO CCC 7 MOVE
TIPO TO CLATIP. CALL
SETCELLTEXT OF TABLA USING AGETEL CCC 8 MOVE
AGETEL TO CLATEL. CALL
SETCELLTEXT OF TABLA USING AGEMOV CCC 9 MOVE
AGEMOV TO CLAMOV. CALL
SETCELLTEXT OF TABLA USING AGEMAI CCC 10 MOVE
AGEMAI TO CLAMAI. WRITE
REGCLA.
EVALUATE
AGETIP WHEN
1 ADD 1 TO TIPO1 WHEN
2 ADD 1 TO TIPO2 WHEN
3 ADD 1 TO TIPO3 WHEN
4 ADD 1 TO TIPO4 WHEN
5 ADD 1 TO TIPO5 END-EVALUATE EVALUATE
AGEGEN WHEN
"H" ADD 1 TO GENH WHEN
"M" ADD 1 TO GENM END-EVALUATE GO
UNO.
DOS. MOVE
1 TO POW-VISIBLE OF TABLA. MOVE
CCC TO LNUM MOVE LNUMERO TO POW-TEXT
OF TOTAL. MOVE
GENH TO LNUM MOVE LNUMERO TO POW-TEXT OF
DEH. MOVE
GENM TO LNUM MOVE LNUMERO TO POW-TEXT OF
DEM. IF
TIPO1 > TIPO2 AND TIPO1 > TIPO3 AND
TIPO1 > TIPO4 AND TIPO1 > TIPO5 COMPUTE
MAX = TIPO1 + 2. IF
TIPO2 > TIPO1 AND TIPO2 > TIPO3 AND
TIPO2 > TIPO4 AND TIPO2 > TIPO5 COMPUTE
MAX = TIPO2 + 2. IF
TIPO3 > TIPO1 AND TIPO3 > TIPO2 AND
TIPO3 > TIPO4 AND TIPO3 > TIPO5 COMPUTE
MAX = TIPO3 + 2. IF
TIPO4 > TIPO1 AND TIPO4 > TIPO2 AND
TIPO4 > TIPO3 AND TIPO4 > TIPO5 COMPUTE
MAX = TIPO4 + 2. IF
TIPO5 > TIPO1 AND TIPO5 > TIPO2 AND
TIPO5 > TIPO3 AND TIPO5 > TIPO4 COMPUTE
MAX = TIPO5 + 2. MOVE
MAX TO POW-UPPER OF GRAFICO. MOVE
TIPO1 TO LNUM MOVE LNUMERO TO POW-TEXT OF
DE1. MOVE
TIPO1 TO POW-DATA (1) OF GRAFICO. MOVE
POW-RED TO POW-DATACOLOR (1) OF GRAFICO. MOVE
TIPO2 TO LNUM MOVE LNUMERO TO POW-TEXT OF
DE2. MOVE
TIPO2 TO POW-DATA (2) OF GRAFICO. MOVE
POW-BLUE TO POW-DATACOLOR (2) OF GRAFICO. MOVE
TIPO3 TO LNUM MOVE LNUMERO TO POW-TEXT OF
DE3. MOVE
TIPO3 TO POW-DATA (3) OF GRAFICO. MOVE
POW-BLACK TO POW-DATACOLOR (3) OF GRAFICO. MOVE
TIPO4 TO LNUM MOVE LNUMERO TO POW-TEXT OF
DE4. MOVE
TIPO4 TO POW-DATA (4) OF GRAFICO. MOVE
POW-DARKGREEN TO POW-DATACOLOR (4) OF GRAFICO. MOVE
TIPO5 TO LNUM MOVE LNUMERO TO POW-TEXT OF
DE5. MOVE
TIPO5 TO POW-DATA (5) OF GRAFICO. MOVE
POW-YELLOW TO POW-DATACOLOR (5) OF GRAFICO. CLOSE
AGENDA CLASI OPEN I-O AGENDA. EXIT
PROGRAM.
|
Con los eventos vistos hasta el momento al llamar a la pantalla
de consultas desde la pantalla principal nos saldrá
perfectamente ésta pantalla. Pero sigamos con
los demás eventos.
Para abandonar la pantalla, pulsaremos sobre el botón
salir y producirá el siguiente evento. La variable
AHIVA, es la que vamos a utilizar para pasar el valor
de un contacto si es que pinchamos sobre el para que
nos vuelva a la pantalla de mantenimiento. En este caso
al darle a salir, le mandamos 0.
Control: SALIR Evento : CLICK
|
Programación
|
ENVIRONMENT
DIVISION. DATA
DIVISION. PROCEDURE
DIVISION. MOVE
0 TO AHIVA CALL
CLOSESHEET OF CONSULTA.
|
Para imprimir la tabla utilizamos el botón listar
y se producirá el siguiente evento. En este caso
utilizamos una ventana de confirmación previa
y fijaros de que forma tan simple conseguimos un listado
muy bueno de nuestro fichero con el mínimo esfuerzo.
Aunque no será aplicable a todos los casos, si
que en muchos de ellos nos va a servir.
Control: LISTAR Evento : CLICK |
Programación |
ENVIRONMENT
DIVISION. DATA
DIVISION. PROCEDURE
DIVISION. ADD
POW-DMYESNO POW-DMICONQUESTION GIVING ESTILO CALL
DISPLAYMESSAGE OF CONSULTA USING "Listar
?" "Mensaje" ESTILO IF
PROGRAM-STATUS = POW-DMRYES GO UNO ELSE
GO FINALIZAR. UNO. CALL
OPENPRINTER OF PRINTCON CALL
WRITESHEET OF PRINTCON CALL
CLOSEPRINTER OF PRINTCON EXIT
PROGRAM. FINALIZAR. EXIT
PROGRAM.
|
Ahora vamos a ver la programación del evento DBCLICK
en la tabla. Con el podremos hacer dos cosas. Una es
seleccionar un contacto para llevarlo a la pantalla
de mantenimiento, para lo cual comprobamos que la fila
sobre la que se ha hecho el DBCLICK no sea la 0, entonces
nos envía al párrafo UNO donde salimos
de ésta ventana enviando los datos del código
del contacto en la variable AHIVA, de tal manera que
al entrar el foco de nuevo en la pantalla de mantenimiento
se ejecutará en esa el evento CLOSECHILD y como
la variable AHIVA lleva un valor hará lo indicado,
que es mostrar dicho contacto. | | (2/2) |
|
|