6.- Mantenimiento Fichero
En este capítulo veremos como añadir, modificar, consultar y modificar socios de nuestra agenda. Pero para ello no utilizaremos ningún menú. El funcionamiento será el siguiente: Todo se realizará desde la misma ventana y no tendremos opciones de menú. Si al introducir un código, éste existe, nos mostrara su contenido y nos preguntará si queremos modificarlo o borrarlo. Si no existe nos dará la oportunidad de crearlo. Cuando modificamos utilizamos el mismo desarrollo que para las altas, solo que los campos aparecen en reverso, para diferenciar. Veréis que bien queda y que fácil es.

El párrafo que teníamos en el capítulo anterior llamado SOCIOS. Ahora se sustituye por lo que viene a continuación.

Las frases en éste color son comentarios.

»» VENTANA Y PANTALLA DE SOCIOS Creamos nuestra ventana independiente del programa principal, donde haremos todo el proceso del mantenimiento del archivo. Dibujamos los campos que van a aparecer para luego colocar su contenido.
SOCIOS.
      MOVE 16 TO WINLIN MOVE 54 TO WINCOL.
      MOVE " CONTACTOS " TO WINTIT MOVE 11 TO WINTITLO.
      MOVE WCB TO WIN (1).
      DISPLAY WIN (1) LINE 3 COL 3 LOW ERASE CONTROL
           "WINDOW-CREATE, FCOLOR=WHITE, BCOLOR=BROWN".

SOCIO0.
      DISPLAY " " LINE 1 COL 1 ERASE CONTROL "FCOLOR=WHITE".
      DISPLAY "CODIGO ....." LINE 2 COL 2.
      DISPLAY RAYA LINE 3 COL 2 SIZE 52.
      DISPLAY "NOMBRE ....." LINE 4 COL 2.
      DISPLAY "DIRECCION .." LINE 5 COL 2.
      DISPLAY "POBLACION." LINE 6 COL 2.
      DISPLAY "C.POSTAL."LINE 6 COL 38.
      DISPLAY "PROVINCIA .." LINE 7 COL 2.
      DISPLAY RAYA LINE 8 COL 2 SIZE 52.
      DISPLAY "TELEFONO ." LINE 9 COL 2.
      DISPLAY "MOVIL ...." LINE 10 COL 2.
      DISPLAY RAYA LINE 11 COL 2 SIZE 52.
      DISPLAY "E-MAIL ..." LINE 12 COL 2.
      DISPLAY "DIRECCION PAGINA WEB COMPLETA ......."
          LINE 13 COL 2.
      DISPLAY ">"LINE 14 COL 2.
      DISPLAY RAYA LINE 15 COL 2 SIZE 52.
      INITIALIZE REGAGE.
Programa Agenda (Imagen 2)
»» ACEPTANDO EL CODIGO Aceptamos el código y si existe nos vamos a mostrar el contenido de los campos en el párrafo SOCI-MOS (que se verá mas adelante). Si no existe, pedimos confirmación para crearlo.
Utilizamos la variable C4 para guardar provisionalmente el código.
SOCI-CERO.
      DISPLAY SPACES LINE 2 COL 16 SIZE 40.
      ACCEPT C4 LINE 2 COL 16 PROMPT LOW NO BEEP
          ON EXCEPTION ESCA NEXT SENTENCE.
      DISPLAY SPACES LINE 2 COL 16 SIZE 30.
      IF ESCA = 27 GO SOCIFIN.
SOCI-MIRA.
      IF C4 < 1 GO SOCI-CERO.
      MOVE C4 TO AGECOD DC4 DISPLAY DC4 LINE 2 COL 16 LOW.
      MOVE 0 TO MODI.
      READ AGENDA INVALID KEY GO SOCI-ABRIR.
      GO SOCI-MOS.
SOCI-ABRIR.
      DISPLAY "CREAR EL CONTACTO ??" LINE 2 COL 22
          LOW REVERSE.
      ACCEPT OP LINE 2 COL 44 OFF NO BEEP
          ON EXCEPTION ESCA NEXT SENTENCE.
      DISPLAY SPACES LINE 2 COL 22 SIZE 30.
      IF OP = "S" NEXT SENTENCE ELSE GO SOCI-CERO.
»» ACEPTANDO LOS CAMPOS Cada uno de éstos párrafos nos va a servir para aceptar cada uno de los campos de nuestro fichero. Cada párrafo es igual, si estamos creando hacemos el ACCEPT LOW y si estamos modificando lo hacemos LOW REVERSE, UPDATE, para que por defecto nos de el valor del campo. Luego si pulsamos ESCAPE o las felcas, se moverá dependiendo si estamos modificando o creando. La variable MODI, es la que utilizamos para diferenciar modificación de creación. Siempre al terminar de aceptar cada campo lo volvemos a displayar sin atributos. 
SOCI-UNO.
      DISPLAY SPACES LINE 4 COL 16 SIZE 40.
      IF MODI = 0 ACCEPT AGENOM LINE 4 COL 16 LOW NO BEEP UPDATE 
          ON EXCEPTION ESCA NEXT SENTENCE ELSE
          ACCEPT AGENOM LINE 4 COL 16 LOW REVERSE NO BEEP UPDATE
          ON EXCEPTION ESCA NEXT SENTENCE.
      IF ESCA = 27 IF MODI = 0 DISPLAY SPACES LINE 4 COL 16
          SIZE 30 GO SOCI-CERO ELSE GO SOCI-MOS.
      DISPLAY AGENOM LINE 4 COL 16 LOW.
SOCI-DOS. 
      DISPLAY SPACES LINE 5 COL 16 SIZE 40.
      IF MODI = 0 ACCEPT AGEDOM LINE 5 COL 16 LOW NO BEEP UPDATE
          ON EXCEPTION ESCA NEXT SENTENCE ELSE
          ACCEPT AGEDOM LINE 5 COL 16 LOW REVERSE NO BEEP UPDATE
          ON EXCEPTION ESCA NEXT SENTENCE.
          IF ESCA = 27 DISPLAY SPACES LINE 5 COL 16 SIZE 40
      GO SOCI-UNO.
      IF MODI = 1 IF ESCA = 52 PERFORM SOCI-MOS GO SOCI-UNO. 
      DISPLAY AGEDOM LINE 5 COL 16 LOW.

Si pulsamos ESCAPE y estamos creando nos vamos al campo anterior. Si estamos modificando nos salimos de modificar.
Si pulsamos FLECHA ARRIBA y estamos modificando reestablece el valor del campo y se va al campo anterior, si estamos creando no hace nada.

SOCI-TRES.
      DISPLAY SPACES LINE 6 COL 16 SIZE 20.
      IF MODI = 0 ACCEPT AGEPOB LINE 6 COL 16 LOW NO BEEP UPDATE
          ON EXCEPTION ESCA NEXT SENTENCE ELSE
          ACCEPT AGEPOB LINE 6 COL 16 LOW REVERSE NO BEEP UPDATE
          ON EXCEPTION ESCA NEXT SENTENCE.
      IF ESCA = 27 IF MODI = 0 DISPLAY SPACES LINE 6 COL 16 
          SIZE 20 GO SOCI-DOS ELSE GO SOCI-MOS.
      IF MODI = 1 IF ESCA = 52 PERFORM SOCI-MOS GO SOCI-DOS. 
      DISPLAY AGEPOB LINE 6 COL 16 LOW.
SOCI-CUATRO.
      DISPLAY " " LINE 6 COL 48.
      IF MODI = 0 ACCEPT AGEPOS LINE 6 COL 48 LOW NO BEEP UPDATE
          ON EXCEPTION ESCA NEXT SENTENCE ELSE
          ACCEPT AGEPOS LINE 6 COL 48 LOW REVERSE NO BEEP UPDATE
          ON EXCEPTION ESCA NEXT SENTENCE.
      IF ESCA = 27 IF MODI = 0 DISPLAY " " LINE 6 COL 48 
          GO SOCI-TRES ELSE GO SOCI-MOS.
      IF MODI = 1 IF ESCA = 52 PERFORM SOCI-MOS GO SOCI-TRES. 
      DISPLAY AGEPOS LINE 6 COL 48 LOW.
SOCI-CINCO.
      DISPLAY SPACES LINE 7 COL 16 SIZE 20.
      IF MODI = 0 ACCEPT AGEPRO LINE 7 COL 16 LOW NO BEEP UPDATE
          ON EXCEPTION ESCA NEXT SENTENCE ELSE
          ACCEPT AGEPRO LINE 7 COL 16 LOW REVERSE NO BEEP UPDATE
          ON EXCEPTION ESCA NEXT SENTENCE.
      IF ESCA = 27 IF MODI = 0 DISPLAY SPACES LINE 7 COL 16 
          SIZE 20 GO SOCI-CUATRO ELSE GO SOCI-MOS.
      IF MODI = 1 IF ESCA = 52 PERFORM SOCI-MOS GO SOCI-CUATRO.
      DISPLAY AGEPRO LINE 7 COL 16 LOW.
SOCI-SEIS.
      DISPLAY SPACES LINE 9 COL 16 SIZE 20.
      IF MODI = 0 ACCEPT AGETEL LINE 9 COL 16 LOW NO BEEP UPDATE
          ON EXCEPTION ESCA NEXT SENTENCE ELSE
      ACCEPT AGETEL LINE 9 COL 16 LOW REVERSE NO BEEP UPDATE
          ON EXCEPTION ESCA NEXT SENTENCE.
      IF ESCA = 27 IF MODI = 0 DISPLAY SPACES LINE 9 COL 16 
          SIZE 20 GO SOCI-CINCO ELSE GO SOCI-MOS.
      IF MODI = 1 IF ESCA = 52 PERFORM SOCI-MOS GO SOCI-CINCO.
      DISPLAY AGETEL LINE 9 COL 16 LOW.
SOCI-SIETE.
      DISPLAY SPACES LINE 10 COL 16 SIZE 20.
      IF MODI = 0 ACCEPT AGEMOV LINE 10 COL 16 LOW NO BEEP UPDATE
          ON EXCEPTION ESCA NEXT SENTENCE ELSE
          ACCEPT AGEMOV LINE 10 COL 16 LOW REVERSE NO BEEP UPDATE
          ON EXCEPTION ESCA NEXT SENTENCE.
      IF ESCA = 27 IF MODI = 0 DISPLAY SPACES LINE 10 COL 16 
          SIZE 20 GO SOCI-SEIS ELSE GO SOCI-MOS.
      IF MODI = 1 IF ESCA = 52 PERFORM SOCI-MOS GO SOCI-SEIS.
      DISPLAY AGEMOV LINE 10 COL 16 LOW.
SOCI-OCHO.
      DISPLAY SPACES LINE 12 COL 16 SIZE 30.
      IF MODI = 0 ACCEPT AGEMAI LINE 12 COL 16 LOW NO BEEP UPDATE
          ON EXCEPTION ESCA NEXT SENTENCE ELSE
          ACCEPT AGEMAI LINE 12 COL 16 LOW REVERSE NO BEEP UPDATE
          ON EXCEPTION ESCA NEXT SENTENCE.
      IF ESCA = 27 IF MODI = 0 DISPLAY SPACES LINE 12 COL 16 
          SIZE 30 GO SOCI-SIETE ELSE GO SOCI-MOS.
      IF MODI = 1 IF ESCA = 52 PERFORM SOCI-MOS GO SOCI-SIETE.
      DISPLAY AGEMAI LINE 12 COL 16 LOW.
SOCI-NUEVE.
      DISPLAY SPACES LINE 14 COL 4 SIZE 40.
      IF MODI = 0 ACCEPT AGEWEB LINE 14 COL 4 LOW NO BEEP UPDATE
          ON EXCEPTION ESCA NEXT SENTENCE ELSE
      ACCEPT AGEWEB LINE 14 COL 4 LOW REVERSE NO BEEP UPDATE
          ON EXCEPTION ESCA NEXT SENTENCE.
      IF ESCA = 27 IF MODI = 0 DISPLAY SPACES LINE 14 COL 4 
          SIZE 40 GO SOCI-OCHO ELSE GO SOCI-MOS.
      IF MODI = 1 IF ESCA = 52 PERFORM SOCI-MOS GO SOCI-OCHO.
      DISPLAY AGEWEB LINE 14 COL 4 LOW.
      IF MODI = 1 GO SOCI-OCHO.


Aqui preguntamos si todos los datos son correctos. Si la respuesta es positiva movemos los valores a la clave alternada y grabamos. En caso de error en la grabación mostraríamos el mensaje con el error.
SOCI-VEINTE.
      DISPLAY "CORRECTO ?" LINE 16 COL 2.
      ACCEPT OP LINE 16 COL 16 PROMPT NO BEEP LOW
          ON EXCEPTION ESCA NEXT SENTENCE.
      DISPLAY SPACES LINE 16 SIZE 50.
      IF ESCA = 27 OR OP = "N" GO SOCI-NUEVE.
      IF OP = "S" NEXT SENTENCE ELSE GO SOCI-VEINTE.
      MOVE AGECOD TO AGECOD1 MOVE AGENOM TO AGENOM1.
      WRITE REGAGE INVALID KEY
          MOVE "GRABAR UN REGISTRO" TO MOTIVO PERFORM MENERROR.
      GO SOCIO0.
»» MOSTRANDO LOS CAMPOS, MODIFICANDO Y BORRANDO. Este apartado comprende 4 párrafos. Uno primero donde mostramos el contenido actual de los campos que componen el registro. Otro donde preguntamos sobre la acción a realizar. Otro para borrar el registro, otro para grabar los cambios realizados y uno mas para abandonar el mantenimiento.
Aquí mostramos el contenido de los campos. Y actualizamos el valor de la variable MODI a 1.
SOCI-MOS.
      DISPLAY AGENOM LINE 4 COL 16 LOW.
      DISPLAY AGEDOM LINE 5 COL 16 LOW.
      DISPLAY AGEPOB LINE 6 COL 16 LOW.
      DISPLAY AGEPOS LINE 6 COL 48 LOW.
      DISPLAY AGEPRO LINE 7 COL 16 LOW.
      DISPLAY AGETEL LINE 9 COL 16 LOW.
      DISPLAY AGEMOV LINE 10 COL 16 LOW.
      DISPLAY AGEMAI LINE 12 COL 16 LOW.
      DISPLAY AGEWEB LINE 14 COL 4 LOW.
      MOVE 1 TO MODI.
SOCI-MOS1.
      DISPLAY SPACES LINE 16 COL 1 SIZE 50.
      DISPLAY "(M)ODIFICA" LINE 16 COL 2 LOW REVERSE.
      DISPLAY "(B)ORRAR " LINE 16 COL 13 LOW REVERSE.
      DISPLAY "(F)GRABAR " LINE 16 COL 24 LOW REVERSE.
      DISPLAY " FIN " LINE 16 COL 35 LOW REVERSE.
      ACCEPT OP LINE 16 COL 49 OFF NO BEEP
          ON EXCEPTION ESCA NEXT SENTENCE.
      DISPLAY SPACES LINE 16 SIZE 50.
      IF ESCA = 27 GO SOCIO0.
      IF OP = "B" GO SOCI-BORRAR.
      IF OP = "F" PERFORM SOCI-GRABAR GO SOCIO0.
      IF OP = "M"
          DISPLAY "" LINE 16 COL 2 LOW REVERSE
          DISPLAY " FIN" LINE 16 COL 12 LOW REVERSE
          GO SOCI-UNO.
      GO SOCI-MOS1.

Si os fijáis la modificación nos lleva de nuevo a la introducción de los campos, solo que el valor de MODI ahora es 1 y eso indica que estamos en modificación.

Confirmación de borrado del registro.

SOCI-BORRAR.
      DISPLAY "BORRARLO ..?" LINE 16 COL 2.
      ACCEPT OP LINE 16 COL 16 PROMPT NO BEEP LOW
          ON EXCEPTION ESCA NEXT SENTENCE.
      DISPLAY SPACES LINE 16 SIZE 50.
      IF OP = "N" OR ESCA = 27 GO SOCI-MOS1.
      IF OP = "S" NEXT SENTENCE ELSE GO SOCI-BORRAR.
      DELETE AGENDA INVALID KEY
          MOVE "BORRAR UN REGISTRO" TO MOTIVO PERFORM MENERROR.
      GO SOCIO0.


Regrabamos el registro con los datos actuales.
SOCI-GRABAR.
      MOVE AGECOD TO AGECOD1 MOVE AGENOM TO AGENOM1.
      REWRITE REGAGE INVALID KEY
          MOVE "REGRABAR UN REGISTRO" TO MOTIVO PERFORM MENERROR.


Abandonamos el mantenimiento del archivo, cerramos la ventana y volvemos a la pantalla principal.
SOCIFIN.
      DISPLAY WIN (1) CONTROL "WINDOW-REMOVE".
      GO TRES.
Programa Agenda (Imagen 3)

El siguiente capítulo, mostrará como hacer una consulta de los datos por pantalla, utilizando para ello un scroll.



Este artículo proviene de Cobol en español
http://www.escobol.com

La dirección de esta noticia es:
http://www.escobol.com/modules.php?name=Sections&op=viewarticle&artid=75