
4.- La Procedure
PROGRAMANDO LAS RUTINAS
Ya sabéis que cuando programamos con PowerCobol,
en realidad estamos desarrollando una programación
orientada a eventos, es decir los procesos se ejecutan
cuando algún evento ha entrado en acción,
por ejemplo al hacer clic con el ratón sobre
algún Push Button, al introducir un texto en
un Picture Edit, etc ... Pero también es posible
que algunos de esos procesos se vayan a repetir en mas
de una ocasión, entonces el hecho de copiarlos
en cada evento no nos estaría facilitando la
programación.
Para ello utiliza Power la Procedure de cada Sheet para introducir
los procesos que no son propiedad de algún evento
en concreto. En realidad son como pequeños programas
alojados dentro del propio programa, ya que cada uno
debe de tener un inicio con IDENTIFICATION DIVISION
y un fin con END PROGRAM. Pero todas irán seguidas
una debajo de otra dentro de la PROCEDURE DIVISION de
la Sheet en que se vayan a utilizar.
En nuestro caso vamos a tener cuatro procedures, a continuación
paso a explicaros el porque de cada una y su programación.
Quiero hacer desde aquí una reflexión,
ya que es un tema que nos puede interesar a todos, yo
personalmento programo muy poco en programación
estructurada, porque, por mi costumbre, porque nunca
he programado en grupo y en la mayoría de los
casos he sido autodidacta, por lo tanto me gustaría
dejar claro que cada uno puede realizar los procesos
como mejor sepa o como mejor se adapte a su manera de
programar, yo utilizo el Go y para los ejemplos tengo
que hacer uso de el.
RUTINA "EXISTE"
La primera se llama EXISTE y va a ser llamada siempre que
introduzcamos un código de contacto que exista
en nuestro fichero. Ya habéis que no existe en
la aplicación un mantenimiento como tal, es decir
con altas, bajas, consultas y modificaciones sino, que
simplemente dependiendo del código que introduzcamos
haremos una acción u otra. Si al introducir un
código, éste no existe, nos permitirá
darlo de alta y si por el contrario existe, se nos visualizará
en pantalla y podremos modificarlo, consultarlo o borrarlo.
En nuestro caso, además al comenzar todos los campos
de nuestro mantenimiento están desactivados para
obligar a que solo se pueda introducir el código.
Por eso en ésta rutina además de mover
el contenido del registro a los controles de la pantalla,
los ponemos en enable para poder entrar en ellos y además
el botón de Grabar pasa a tener el texto Regrabar
para indicar que se va a modificar.
Esta sería su programación.
Programación
|
IDENTIFICATION
DIVISION. PROGRAM-ID.
EXISTE IS COMMON. ENVIRONMENT
DIVISION. DATA
DIVISION. PROCEDURE
DIVISION. INICIO
SECTION. MOVE
0 TO POW-ENABLE OF AGE-COD. MOVE
AGECOD TO POW-NUMERIC OF AGE-COD. MOVE
AGENOM TO POW-TEXT OF AGE-NOM. MOVE
AGEDOM TO POW-TEXT OF AGE-DOM. MOVE
AGEPOS TO POW-NUMERIC OF AGE-POS. MOVE
AGEPOB TO POW-TEXT OF AGE-POB. MOVE
AGEPRO TO POW-TEXT OF AGE-PRO. IF
AGEGEN = "H" MOVE POW-ON TO POW-CHECK
OF AGE-GEH ELSE
MOVE POW-ON TO POW-CHECK OF AGE-GEM. MOVE
AGETIP TO POW-SELECT OF AGE-TIP. MOVE
AGETEL TO POW-TEXT OF AGE-TEL. MOVE
AGEMOV TO POW-TEXT OF AGE-MOV. MOVE
AGEMAI TO POW-TEXT OF AGE-MAI. MOVE
AGEWEB TO POW-TEXT OF AGE-WEB. MOVE
1 TO POW-ENABLE OF GRABAR. MOVE
1 TO POW-ENABLE OF L-GRABAR. MOVE
1 TO POW-ENABLE OF BORRAR. MOVE
1 TO POW-ENABLE OF L-BORRAR. MOVE
1 TO POW-ENABLE OF LISTAR. MOVE
1 TO POW-ENABLE OF L-LISTAR. MOVE
1 TO POW-ENABLE OF EMAIL. MOVE
1 TO POW-ENABLE OF L-EMAIL. MOVE
1 TO POW-ENABLE OF CANCELAR. MOVE
1 TO POW-ENABLE OF L-CANCELAR. MOVE
1 TO POW-ENABLE OF AGE-NOM. MOVE
1 TO POW-ENABLE OF AGE-DOM. MOVE
1 TO POW-ENABLE OF AGE-POB. MOVE
1 TO POW-ENABLE OF AGE-POS. MOVE
1 TO POW-ENABLE OF AGE-PRO. MOVE
1 TO POW-ENABLE OF AGE-GEH. MOVE
1 TO POW-ENABLE OF AGE-GEM. MOVE
1 TO POW-ENABLE OF AGE-TIP. MOVE
1 TO POW-ENABLE OF AGE-TEL. MOVE
1 TO POW-ENABLE OF AGE-MOV. MOVE
1 TO POW-ENABLE OF AGE-MAI. MOVE
1 TO POW-ENABLE OF AGE-WEB. MOVE
"Regrabar" TO POW-TEXT OF L-GRABAR. CALL
SETFOCUS OF CANCELAR. EXIT
PROGRAM. END
PROGRAM EXISTE.
|
RUTINA "CARGAR"
Esta segunda es una rutina un poco particular y es que a
mi, me gusta siempre que voy a trabajar con un fichero
y por supuesto siempre que no sea enormemente grande,
me gusta cargarlo en una tabla y así el recorrido
a través de él lo hago de manera mas rápida
y segura. Con ellos conseguimos saber el número
de registros que tenemos, al movernos hacia delante
o hacia atrás ir con seguridad a los registros
y la lectura siempre se hace directa sobre el registro
en cuestión puesto que lo tenemos siempre en
la tabla.
Como véis es una simple rutina con un contador y una
tabla de un elemento para ir cargando los códigos
de nuestra agenda. Al final guardamos en la variable
tope el número de registros totales.
Esta rutina será llamada siempre que se haga un cambio
en el fichero, es decir cuando demos un nuevo contacto
de alta o cuando borremos alguno, para que la tabla
siempre sea el reflejo del fichero. Esta acción
es sumamente rápida en ningún caso ralentizará
el programa.
Esta sería su programación.
Programación
|
IDENTIFICATION
DIVISION. PROGRAM-ID.
CARGAR IS COMMON. ENVIRONMENT
DIVISION. DATA
DIVISION. PROCEDURE
DIVISION. INICIO
SECTION. MOVE
0 TO CCC. CLOSE
AGENDA. OPEN
INPUT AGENDA. INITIALIZE
TABLA. UNO. READ
AGENDA NEXT RECORD AT END GO DOS. ADD
1 TO CCC MOVE AGECOD TO TCOD (CCC). GO
UNO. DOS. CLOSE
AGENDA. OPEN
I-O AGENDA. MOVE
CCC TO TOPE MOVE 0 TO CCC. MOVE
1 TO POW-ENABLE OF AGE-COD. CALL
SETFOCUS OF AGE-COD. EXIT
PROGRAM. END
PROGRAM CARGAR.
|
RUTINA "PARASALIR"
Esta rutina tiene poco que explicar, simplemente se encarga
de sacar una ventana en la pantalla en la que nos pregunta
si estamos de acuerdo en abandonar la aplicación.
Esta rutina la he puesto porque hay mas de un sitio desde
el cual podemos salir, desde un botón en la pantalla
principal y desde una opción del menú.
Esta sería su programación.
Programación
|
IDENTIFICATION
DIVISION. PROGRAM-ID.
PARASALIR IS COMMON. ENVIRONMENT
DIVISION. DATA
DIVISION. WORKING-STORAGE
SECTION. 01
ESTILO PIC S9(4) COMP-5. PROCEDURE
DIVISION.
ADD
POW-DMYESNO POW-DMICONQUESTION GIVING ESTILO CALL
DISPLAYMESSAGE OF PRIMERA USING "Salir
de la aplicación ?" "Mensaje"
ESTILO. IF
PROGRAM-STATUS = POW-DMRYES GO UNO ELSE
GO FINALIZAR. UNO. CALL
CLOSESHEET OF PRIMERA. EXIT
PROGRAM. FINALIZAR. EXIT
PROGRAM. END PROGRAM PARASALIR.
|
RUTINA "PONCCC"
Perdonad por los nombres, es la fuerza de la costumbre. Pero
en realidad esta rutina lo que hace es tener siempre
localizdo el elemento de la tabla que estamos utilizando.
Es decir siempre que consultemos cualquier código
la tabla también debe de posicionarse en ese
punto. De esa manera en el momento en que pulsemos el
botón de siguiente o anterior registro, lo haga
teniendo como referencia el registro último que hemos
consultado.
Así que lo único que hace es recorrer la table en
busca del registro actual.
Esta sería su programación.
Programación
|
IDENTIFICATION
DIVISION. PROGRAM-ID.
PONCCC IS COMMON. ENVIRONMENT
DIVISION. DATA
DIVISION. WORKING-STORAGE
SECTION. 01
NADA PIC X. PROCEDURE
DIVISION. INICIO
SECTION. PERFORM
VARYING CCC FROM 1 BY 1 UNTIL
CCC = TOPE OR TCOD (CCC) = AGECOD MOVE
' ' TO NADA END-PERFORM. EXIT
PROGRAM. END
PROGRAM PONCCC.
|
Finalizadas las explicaciones sobre la Sheet en los siguientes capítulos
veremos la programación de los eventos de los
controles que haya en pantalla. Como véis hasta
ahora siempre hemos estado utilizando código
perfectamente familiar para nosotros, por lo que podemos
decir que el hecho de programar en Power no nos hace
abandonar nuestro lenguaje habitual.
|
|