
8.- Clasificando y FIN
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.
Si por el contrario hemos pinchado sobre la fila 0, le
indicamos que queremos clasificar por alguna columna,
entonces capturamos la columna y hacemos un sort por
el valor de dicha columna, y volvemos a recargar la
tabla con los valores clasificados del fichero de SORT.
Control: TABLA Evento : DBCLICK |
Programación |
ENVIRONMENT
DIVISION. INPUT-OUTPUT
SECTION. FILE-CONTROL. SELECT
ORDEN ASSIGN TO SORTWK01. DATA
DIVISION. FILE
SECTION. SD
ORDEN. 01
REGORD. 02
ORDCOD PIC 9999. 02
ORDNOM PIC X(30). 02
ORDDOM PIC X(30). 02
ORDPOS PIC 99999. 02
ORDPOB PIC X(20). 02
ORDPRO PIC X(15). 02
ORDTIP PIC X(12). 02
ORDTEL PIC X(20). 02
ORDMOV PIC X(20). 02
ORDMAI PIC X(30). WORKING-STORAGE
SECTION. 01
INDICE PIC S9(8) COMP-5. 01
FILA PIC 9999. 01
COLUMNA PIC 99.
PROCEDURE
DIVISION. MOVE
POW-CLICKROW OF TABLA TO FILA. MOVE
POW-CLICKCOL OF TABLA TO COLUMNA. IF
FILA NOT = 0 GO UNO. IF
COLUMNA = 1 SORT ORDEN ON ASCENDING KEY
ORDCOD USING
CLASI OUTPUT PROCEDURE RELLENA ELSE IF
COLUMNA = 2 SORT ORDEN ON ASCENDING KEY
ORDNOM USING
CLASI OUTPUT PROCEDURE RELLENA ELSE IF
COLUMNA = 3 SORT ORDEN ON ASCENDING KEY
ORDDOM USING
CLASI OUTPUT PROCEDURE RELLENA ELSE IF
COLUMNA = 4 SORT ORDEN ON ASCENDING KEY
ORDPOS USING
CLASI OUTPUT PROCEDURE RELLENA ELSE IF
COLUMNA = 5 SORT ORDEN ON ASCENDING KEY
ORDPOB USING
CLASI OUTPUT PROCEDURE RELLENA ELSE IF
COLUMNA = 6 SORT ORDEN ON ASCENDING KEY
ORDPRO USING
CLASI OUTPUT PROCEDURE RELLENA ELSE
IF COLUMNA = 7 SORT ORDEN ON ASCENDING KEY
ORDTIP
USING
CLASI OUTPUT PROCEDURE RELLENA ELSE
IF COLUMNA = 8 SORT ORDEN ON ASCENDING KEY
ORDTEL
USING CLASI OUTPUT PROCEDURE
RELLENA ELSE
IF COLUMNA = 9 SORT ORDEN ON ASCENDING KEY
ORDMOV USING
CLASI OUTPUT PROCEDURE RELLENA ELSE
IF COLUMNA = 10 SORT ORDEN ON ASCENDING
KEY ORDMAI USING
CLASI OUTPUT PROCEDURE RELLENA ELSE GO
DOS. EXIT
PROGRAM.
UNO. MOVE
FILA TO CCC. CALL
GETCELLNUMERIC OF TABLA USING AHIVA FILA
1. CALL
CLOSESHEET OF CONSULTA. EXIT
PROGRAM. DOS. EXIT
PROGRAM.
RELLENA
SECTION. MOVE
1 TO INDICE. VER. RETURN
ORDEN AT END GO TO FINVER. MOVE
ORDCOD TO POW-NUMERIC(INDICE 1) OF TABLA. MOVE
ORDNOM TO POW-TEXT(INDICE 2) OF TABLA. MOVE
ORDDOM TO POW-TEXT(INDICE 3) OF TABLA. MOVE
ORDPOS TO POW-NUMERIC(INDICE 4) OF TABLA. MOVE
ORDPOB TO POW-TEXT(INDICE 5) OF TABLA. MOVE
ORDPRO TO POW-TEXT(INDICE 6) OF TABLA. MOVE
ORDTIP TO POW-TEXT(INDICE 7) OF TABLA. MOVE
ORDTEL TO POW-TEXT(INDICE 8) OF TABLA. MOVE
ORDMOV TO POW-TEXT(INDICE 9) OF TABLA. MOVE
ORDMAI TO POW-TEXT(INDICE 10) OF TABLA. ADD
1 TO INDICE. GO
VER. FINVER. EXIT.
|
Con esto se da por concluida la ventana de consultas y su
programación, como habéis podido comprobar
no ha sido muy complicada, a partir de aqui podéis
implementar todo lo que deseéis, mas campos,
mas controles, cualquier cosa siempre es mejorable.
VENTANA ACERCA DE
Por último vamos a crear una ventana con información
sobre la aplicación, una ventana pequeña
que solo nos mostrará datos sobre el programa
y un botón para salir de ella, es la típica
pantalla Acerca de... Esta pantalla se llamará
desde la ventana principal.
Al igual que para crear la ventana de consulta, primero
seleccionamos la opción New, del menú de File.
En esta ventana vamos a colocar un Extend Image, donde
colocamos el logotipo de la página que lo habréis
bajado en el archivo totico.zip, que se llama cobol.bmp.
También podéis colocar la imagen que vosotros
queráis intentando que quede adaptada al tamaño
de la ventana.
Además colocamos 2 labels indicando el nombre del programa,
la versión y el autor y para finalizar un Bitmap
Button, que será el que utilicemos para salir
de la ventana.
Para el estilo de la ventana marcamos: Pop-up Windows, Thin
y Title Bar. La llamamos ACERCA y en el título
de la misma le ponemos Acerca de ....
El aspecto que debe de tener una vez la hayais completado
debe de ser algo así.

El único evento que tendremos que programar será
el del botón de salir y será el siguiente:
Control: SALIR Evento : CLICK |
Programación |
ENVIRONMENT
DIVISION. DATA
DIVISION. PROCEDURE
DIVISION. CALL
CLOSESHEET OF ACERCA.
|
El Bitmap Button, tendrá la imagen icook, marcado
como resource y no como file. Y nos servirá para
salir de ésta ventana.
Una vez concluido el diseño de la ventana, pinchamos
sobre Project, Edit y
a continuación pulsamos sobre el botón
Add, para añadir esta ventana al proyecto y así
poder compilar y ver como funciona. Una vez añadida
pulsamos sobre el botón Ok y ya podemos ver en
la pequeña ventana del proyecto que tenemos en
la pantalla, como esa ventana está incluida.
FIN DEL CURSO
Con este capítulo se da por finalizado el curso de
PowerCobol. Solo espero que os haya servido y que hayais
aprendido a utilizarlo y sacarle provecho a la potencia
de este compilador para Windows. A partir de ahora nuestras
aplicaciones tendrán otra visión, otra
perspectiva mas amigable, sencilla y por supuesto bonita.
Tengo que reconocer que el dejar para el final estos capítulos
ha implicado que tuviera que retomar de nuevo el PowerCobol
3, ya que en la actualidad programo sobre la versión
5. Esto supongo que ha dado lugar a una explicación
menos clara y efectiva que en los anteriores capítulos.
Por lo tanto os pido un poco de mas atención
para comprenderlo y por fin podáis terminar el
proyecto.
Un saludo a todos los que hayais llegado hasta el final
y hayais conseguido realizar el proyecto AGENDA en su
totalidad. A partir de este momento estais preparados
para embarcaros en los desarrollos que deseies con PowerCobol.
|
|