Curso Pr谩ctico de COBOL

Curso Pr谩ctico de COBOL

Carlos S谩nchez Botello

Carlos S谩nchez Botello

Detalles de las variables y orden del proyecto

4/10

Lectura

Para efectuar cualquier reporte en COBOL es necesario indicarle expl铆citamente toda la estructura que necesitamos definir, raz贸n por la cual no solo estaremos definiendo las variables y los tipos de datos a los que estas pertenezcan, sino que tambi茅n 鈥渕aquetaremos鈥 el reporte, esto significa que vamos a generar:

  • Los t铆tulos y subt铆tulos.
  • Los encabezados.
  • Y mostraremos la informaci贸n detallada y en el orden que especifiquemos dentro del programa.

Una vez concluida esta 鈥渕aquetaci贸n鈥 realizaremos el c贸digo con el que vamos a escribir en el reporte de salida, estos puntos que hemos descrito previamente.

Los componentes que conforman la secci贸n de variables

  • Switches.
  • 脕reas de trabajo (los campos del archivo de entrada separados y referenciando al contenido del archivo de entrada).
  • Campos que conforman el t铆tulo del reporte.
  • Campos que conforman el subt铆tulo del reporte.
  • Campos que definen los nombres de las columnas del reporte.
  • Campos que contendr谩n la informaci贸n y el detalle de los registros una vez que hayan sido procesados en nuestro programa.
  • Campos que conforman los pies de p谩gina del reporte, (generalmente contienen el total de los registros procesados durante la ejecuci贸n del programa).
  • Definici贸n de los campos de la linkage section (con la cual recibiremos datos externos, para este reporte recibiremos la fecha de procesamiento del reporte a trav茅s del JCL).

Switches

Los switches contienen un conjunto de valores especificados por el programador. Se comportan como valores Booleanos, es decir, que solo pueden contener 2 valores (apagado o encendido; cero o uno; verdadero o falso, si o no, blanco o negro; ya sabes por donde voy 馃槂 ). Dichos valores son definidos con una numeraci贸n a nivel 77, conteniendo a nivel 88 el valor que pueden contener una vez cumplida la condici贸n.
Para nuestro reporte vamos a definir el switch del siguiente modo:

77  WSS-FIN                     PIC X(03) VALUE '   '.
    88 WSS-SI                             VALUE 'FIN'.

Es importante definir con claridad el nombre del switch, en este que vemos arriba sabemos que se trata de un switch que, cuando sea modificado en su valor, contendr谩 el valor FIN, lo que indica que hemos llegado al t茅rmino del procesamiento que hayamos efectuado.

脕reas de trabajo

Aqu铆 definimos los campos que hacen referencia al contenido del archivo de entrada.

01  WSV-AREAS-TRABAJO.                                   
    05 WSV-REG-ALUMNOS.                                  
       10 WSV-BOLETA-ALU        PIC 9(04).               
       10 WSV-NOMBRE-ALU        PIC X(25).               
       10 WSV-PROM-ALUMN        PIC 99V9.                
       10 WSV-ALUMN-BEC         PIC 9(01).               
       10 WSV-BECA-ALUMN        PIC 9(07)V99.            
    05 WSV-ALUMNOS-LEI          PIC 9(05) VALUE ZEROS.   
    05 WSV-ALUMN-IMP            PIC 9(05) VALUE ZEROS.   
    05 WSV-TOT-MONT-BEC         PIC 9(09)V99 VALUE ZEROS.

Cada uno de los campos que conforman los registros se especifican con la numeraci贸n a nivel 10. Veamos en el siguiente recuadro el mapeo de los campos en el archivo de entrada al programa COBOL y la correspondencia con la definici贸n de las variables:

----+----1----+----2----+----3----+----4----+----5
***************************** TOP OF DATA ********
0021JOSE GANIMEDEZ MONTES    8561000236800 0000100
0850JIMENA HERNANDEZ GONZALEZ7200000000000 0000200
**************************** BOTTOM OF DATA ******

       10 WSV-BOLETA-ALU        PIC 9(04).               
       10 WSV-NOMBRE-ALU        PIC X(25).               
       10 WSV-PROM-ALUMN        PIC 99V9.                
       10 WSV-ALUMN-BEC         PIC 9(01).               
       10 WSV-BECA-ALUMN        PIC 9(07)V99.
  • El campo WSV-BOLETA-ALU es de tipo num茅rico y tiene una longitud de 4 posiciones, este campo va de la columna 1 a la columna 4.
  • El campo WSV-NOMBRE-ALU es de tipo alfanum茅rico y tiene una longitud de 25 posiciones, este campo va de la columna 5 a la columna 29.
  • El campo WSV-PROM-ALUMN es de tipo num茅rico y tiene una longitud de 2 d铆gitos enteros y un decimal, separado por un punto virtual, este campo va de la columna 30 a la columna 32.
  • El campo WSV-ALUMN-BEC es de tipo num茅rico y tiene una longitud de 1 d铆gito, este campo s贸lo abarca la columna 33.
  • El campo WSV-BECA-ALUMN es de tipo num茅rico y tiene una longitud de 7 d铆gitos enteros y dos decimales, separado por un punto virtual, este campo va de la columna 34 a la columna 42.

Describamos la funcionalidad de los 煤ltimos 3 campos contenidos en este bloque:

  • El campo WSV-ALUMNOS-LEI contendr谩 el acumulado de registros le铆dos y que ser谩n escritos en los pies de p谩gina del reporte.
  • El campo WSV-ALUMN-IMP contendr谩 el acumulado de registros impresos y que ser谩n escritos en los pies de p谩gina del reporte.
  • El campo WSV-TOT-MONT-BEC contendr谩 el acumulado de registros pertenecientes al monto de las becas de los estudiantes en el archivo de entrada y que ser谩 escritos en los pies de p谩gina del reporte.

Campos que conforman el t铆tulo del reporte

Es necesario definir la estructura que contendr谩 el reporte, para que este sea f谩cilmente visualizado y comprendido por el 谩rea de negocio que va a hacer uso de dicha informaci贸n, el reporte que vamos a estructurar contendr谩 la estructura de los t铆tulos y encabezados como se muestran:

1       10        20        30        40        50        60        70        80
+---+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
                              UNIVERSIDAD PLATZI                                
 FECHA: 07/04/2021        CONTROL DE ALUMNOS BECADOS              PAGINA:   1   

La definici贸n de los campos del nombre del reporte la describimos a continuaci贸n:

01  WSC-TIT-1.                                             
    05 FILLER                   PIC X(30) VALUE SPACES.    
    05 WSC-T1                   PIC X(18)                  
                                VALUE 'UNIVERSIDAD PLATZI'.
    05 FILLER                   PIC X(32) VALUE SPACES.  

Como nuestro reporte va a contener una longitud fija de 80 caracteres, la suma de cada uno de los campos definidos dentro de la constante WSC-TIT-1 ser谩 igual a 80.

  • El campo FILLER es de tipo alfanum茅rico y tiene una longitud de 30 posiciones, este campo va de la columna 1 a la columna 30.
  • El campo WSC-T1 es de tipo alfanum茅rico y tiene una longitud de 18 posiciones, este campo va de la columna 31 a la columna 48.
  • El segundo campo FILLER es de tipo alfanum茅rico y tiene una longitud de 32 posiciones, este campo va de la columna 49 a la columna 80.

Campos que conforman el subt铆tulo del reporte

01  WSC-TIT-2.                                               
    05 FILLER                   PIC X(08) VALUE ' FECHA: '.  
    05 WSC-TIT-2-DIA            PIC 9(02).                   
    05 FILLER                   PIC X(01) VALUE '/'.         
    05 WSC-TIT-2-MES            PIC 9(02).                   
    05 FILLER                   PIC X(01) VALUE '/'.         
    05 WSC-TIT-2-ANIO           PIC 9(04).                   
    05 FILLER                   PIC X(08) VALUE SPACES.      
    05 WSC-TITU-2               PIC X(26) VALUE              
                                'CONTROL DE ALUMNOS BECADOS'.
    05 FILLER                   PIC X(14) VALUE SPACES.      
    05 FILLER                   PIC X(08) VALUE 'PAGINA: '.  
    05 WSC-TIT-2-PAGINA         PIC ZZ9.                     
    05 FILLER                   PIC X(03) VALUE SPACES.   
  • El campo FILLER es de tipo alfanum茅rico y tiene una longitud de 8 posiciones, este campo va de la columna 1 a la columna 8 y contiene el valor constante de FECHA:.
  • El campo WSC-TIT-2-DIA es de tipo num茅rico y tiene una longitud de 2 d铆gitos, este campo va de la columna 9 a la columna 10 y contiene el valor del d铆a de procesamiento.
  • El segundo campo FILLER es de tipo alfanum茅rico y tiene una longitud de 1 posici贸n, este campo se encuentra en la columna 11 y contiene el valor 鈥/鈥.
  • El campo WSC-TIT-2-MES es de tipo num茅rico y tiene una longitud de 2 d铆gitos, este campo va de la columna 12 a la columna 13 y contiene el valor del mes de procesamiento.
  • El tercer campo FILLER es de tipo alfanum茅rico y tiene una longitud de 1 posici贸n, este campo se encuentra en la columna 14 y contiene el valor 鈥/鈥.
  • El campo WSC-TIT-2-ANIO es de tipo num茅rico y tiene una longitud de 4 d铆gitos, este campo va de la columna 15 a la columna 18 y contiene el valor del a帽o de procesamiento.
  • El cuarto campo FILLER es de tipo alfanum茅rico y tiene una longitud de 8 posiciones, este campo va de la columna 19 a la columna 26.
  • El campo WSC-TITU-2 es de tipo alfanum茅rico y tiene una longitud de 26 posiciones, este campo va de la columna 27 a la columna 52.
  • El quinto campo FILLER es de tipo alfanum茅rico y tiene una longitud de 14 posiciones, este campo va de la columna 53 a la columna 66.
  • El sexto campo FILLER es de tipo alfanum茅rico y tiene una longitud de 8 posiciones, este campo va de la columna 67 a la columna 74.
  • El campo WSC-TIT-2-PAGINA es de tipo num茅rico (m谩scara) y tiene una longitud de 3 posiciones, este campo va de la columna 75 a la columna 77.
  • El s茅ptimo campo FILLER es de tipo alfanum茅rico y tiene una longitud de 3 posiciones, este campo va de la columna 78 a la columna 80.

Campos que definen los nombres de las columnas del reporte

La estructura del detalle del reporte ser谩 como sigue:

1       10        20        30        40        50        60        70        80
+---+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
 ------------------------------------------------------------------------------ 
   BOLETA            NOMBRE             PROMEDIO    BECADO        MONTO DE BECA 
 --------    -------------------------  --------    ------       -------------- 
       21    JOSE GANIMEDEZ MONTES          85.6      SI               2,368.00 
      850    JIMENA HERNANDEZ GONZALEZ      72.0      NO                   0.00 
 ------------------------------------------------------------------------------   

En el siguiente apartado definimos las constantes que determinan los nombres de las columnas:

01  WSC-GUIONES.                                                 
    05 FILLER                   PIC X(01).                       
    05 FILLER                   PIC X(78) VALUE ALL '-'.         
    05 FILLER                   PIC X(01) VALUE SPACES.          
01  WSC-COL-DETA-1.                                              
    05 FILLER                   PIC X(03) VALUE SPACES.          
    05 FILLER                   PIC X(06) VALUE 'BOLETA'.        
    05 FILLER                   PIC X(12) VALUE SPACES.          
    05 FILLER                   PIC X(06) VALUE 'NOMBRE'.        
    05 FILLER                   PIC X(13) VALUE SPACES.          
    05 FILLER                   PIC X(08) VALUE 'PROMEDIO'.      
    05 FILLER                   PIC X(04) VALUE SPACES.          
    05 FILLER                   PIC X(06) VALUE 'BECADO'.        
    05 FILLER                   PIC X(08) VALUE SPACES.          
    05 FILLER                   PIC X(13) VALUE 'MONTO DE BECA'. 
    05 FILLER                   PIC X(01) VALUE SPACES.          
01  WSC-GUION-DETA.                                              
    05 FILLER                   PIC X(01) VALUE SPACES.          
    05 FILLER                   PIC X(08) VALUE '--------'.      
    05 FILLER                   PIC X(04) VALUE SPACES.          
    05 FILLER                   PIC X(25)                        
                             VALUE '-------------------------'.  
    05 FILLER                   PIC X(02) VALUE SPACES.          
    05 FILLER                   PIC X(08) VALUE '--------'.      
    05 FILLER                   PIC X(04) VALUE SPACES.          
    05 FILLER                   PIC X(06) VALUE '------'.        
    05 FILLER                   PIC X(07) VALUE SPACES.          
    05 FILLER                   PIC X(14) VALUE '--------------'.
  • El campo padre WSC-GUIONES contiene 3 campos hijos definidos como FILLER, los cuales despliegan guiones - en el reporte; el campo es de tipo alfanum茅rico y la longitud sumada de los campos hijos es de 80 posiciones.
  • El campo WSC-COL-DETA-1 contiene varios campos hijos definidos como FILLER de tipo alfanum茅rico, cuya longitud sumada es de 80 posiciones. Estos campos, como se observa en la estructura, son los nombre de las columnas.
  • El campo WSC-GUION-DETA contiene varios campos hijos definidos como FILLER de tipo alfanum茅rico, la suma de los campos hijos le otorga el valor de 80 posiciones al campo padre, mismo espacio que ser谩 definido en el reporte. Estos despliegan los guiones de la parte inferior de la estructura.

Campos que contendr谩n la informaci贸n y el detalle de los registros una vez que hayan sido procesados en nuestro programa

Ahora veamos la definici贸n y el valor de los campos que recibir谩n los datos una vez que han sido procesados por nuestro programa:

01  WSV-DETALLE.                                       
    05 FILLER                   PIC X(04) VALUE SPACES.
    05 WSV-DET-BOLETA           PIC ZZZZ9.             
    05 FILLER                   PIC X(04) VALUE SPACES.
    05 WSV-DET-NOMBRE           PIC X(25).             
    05 FILLER                   PIC X(06) VALUE SPACES.
    05 WSV-DET-PROMEDIO         PIC ZZ.9.              
    05 FILLER                   PIC X(06) VALUE SPACES.
    05 WSV-DET-BECADO           PIC X(02).             
    05 FILLER                   PIC X(11) VALUE SPACES.
    05 WSV-DET-BECA             PIC Z,ZZZ,ZZ9.99.      
  • El campo padre WSV-DETALLE contiene 10 campos hijos.
  • El campo WSV-DET-BOLETA es de tipo num茅rico (m谩scara) y tiene una longitud de 5 posiciones, este campo va de la columna 5 a la columna 9. Muestra el n煤mero de boleta.
  • El campo WSV-DET-NOMBRE es de tipo alfanum茅rico y tiene una longitud de 25 posiciones, este campo va de la columna 14 a la columna 38. Muestra el nombre del estudiante.
  • El campo WSV-DET-PROMEDIO es de tipo num茅rico (m谩scara) y tiene una longitud de 4 posiciones, este campo va de la columna 45 a la columna 48. Muestra el promedio del estudiante.
  • El campo WSV-DET-BECADO es de tipo alfanum茅rico y tiene una longitud de 2 posiciones, este campo va de la columna 55 a la columna 56. Muestra si el estudiante est谩 becado o no.
  • El campo WSV-DET-BECA es de tipo num茅rico (m谩scara) y tiene una longitud de 12 posiciones, este campo va de la columna 68 a la columna 79. Muestra el valor o monto de beca que recibe el estudiante.
  • Todos los campos FILLER van a contener espacios, con el fin de formatear el contenido dentro del reporte

Campos que conforman los pies de p谩gina del reporte

Como punto final del reporte, tenemos los totales de los registros procesados en el programa, hablemos de ellos:

01  WSV-DETALLE-LEIDOS.                                          
    05 FILLER                   PIC X(01).                       
    05 FILLER                   PIC X(29)                        
                           VALUE 'TOTAL DE ALUMNOS LEIDOS    : '.
    05 WSV-TOT-LEIDOS           PIC ZZ,ZZ9.                      
    05 FILLER                   PIC X(44) VALUE SPACES.          
01  WSV-DETALLE-IMPRESOS.                                        
    05 FILLER                   PIC X(01).                       
    05 FILLER                   PIC X(29)                        
                         VALUE 'TOTAL DE ALUMNOS IMPRESOS  : '.  
    05 WSV-TOT-IMPRESOS         PIC ZZ,ZZ9.                      
    05 FILLER                   PIC X(44) VALUE SPACES.          
                                                                 
01  WSV-DETALLE-SALARIOS.                                        
    05 FILLER                   PIC X(01).                       
    05 FILLER                   PIC X(35)                        
                     VALUE 'MONTO TOTAL DESTINADO A BECAS   :'.  
    05 FILLER                   PIC X(30) VALUE SPACES.          
    05 WSV-DET-BECA2            PIC $$$,$$$,$$9.99. 
  • El campo padre WSV-DETALLE-LEIDOS contiene campos hijos definidos a nivel 05. Los campos FILLER sirven para ocupar espacios, y para mostrar la etiqueta en el reporte con la leyenda 'TOTAL DE ALUMNOS LEIDOS : 鈥. Y el campo llamado WSV-TOT-LEIDOS de tipo num茅rico (m谩scara) y longitud 6 posiciones muestra el valor total de registros le铆dos provenientes del archivo de entrada.
  • El campo padre WSV-DETALLE-IMPRESOS contiene campos hijos definidos a nivel 05. Los campos FILLER sirven para ocupar espacios, y para mostrar la etiqueta en el reporte con la leyenda 'TOTAL DE ALUMNOS IMPRESOS : 鈥. Y el campo llamado WSV-TOT-IMPRESOS de tipo num茅rico (m谩scara) y longitud 6 posiciones muestra el valor total de registros impresos en el reporte provenientes del archivo de entrada.
  • El campo padre WSV-DETALLE-SALARIOS contiene campos hijos definidos a nivel 05. Los campos FILLER sirven para ocupar espacios, y para mostrar la etiqueta en el reporte con la leyenda 鈥楳ONTO TOTAL DESTINADO A BECAS :鈥. Y el campo llamado WSV-DET-BECA2 de tipo num茅rico (m谩scara) y longitud 14 posiciones, muestra el valor total de las becas destinadas a los estudiantes.

Campos de linkage section

El siguiente apartado que veremos es la secci贸n de enlace o LINKAGE SECTION. Esta secci贸n describe los datos que son recibidos desde otro programa, en este caso, del JCL. Estos datos no son recibidos de manera autom谩tica por nuestro programa COBOL, sino que la LINKAGE SECTION hace referencia a la direcci贸n en memoria donde el JCL est谩 enviando los datos como par谩metro. La LINKAGE SECTION debe codificarse inmediatamente antes que la PROCEDURE DIVISION.
Y la manera en que recibimos los datos, siempre debe corresponder al campo definido dentro de la secci贸n de enlace, como veremos a continuaci贸n.

En el JCL tenemos definido el par谩metro as铆:

PARM='29032021'

Y en la LINKAGE SECTION de nuestro programa COBOL los campos con los que recibiremos la fecha los hemos definido del siguiente modo:

01  LK-FECHA.                             
    05 FILLER                   PIC X(02).
    05 LK-DIA                   PIC 9(02).
    05 LK-MES                   PIC 9(02).
    05 LK-ANIO                  PIC 9(04).
  • Siempre que aceptemos mediante la LINKAGE-SECTION datos provenientes de un programa externo, definimos un campo FILLER de tipo alfanum茅rico y de longitud 2 posiciones, este tiene la funci贸n de direccionar a la memoria donde los datos del par谩metro est谩n siendo alojados.
  • El campo LK-DIA, de tipo num茅rico y de longitud 2 posiciones, contiene el valor del par谩metro que el JCL de ejecuci贸n envi贸. Estamos recibiendo el valor 29, al cual le dimos la correspondencia del d铆a de procesamiento del reporte.
  • Los campos LK-MES de tipo num茅rico y de longitud 2 posiciones, contiene el valor del par谩metro que el JCL de ejecuci贸n envi贸. Estamos recibiendo el valor 03, al cual le dimos la correspondencia del mes de procesamiento del reporte.
  • Los campos LK-ANIO de tipo num茅rico y de longitud 2 posiciones, contiene el valor del par谩metro que el JCL de ejecuci贸n envi贸. Estamos recibiendo el valor 2021, al cual le dimos la correspondencia del a帽o de procesamiento del reporte.

Siempre podr谩s volver a esta clase para revisar cualquier duda que tengas sobre la estructura del reporte que 鈥渃obra vida鈥 gracias a la definici贸n de todas estas variables. Y ahora que hemos profundizado en esto, pasemos a la siguiente clase para crear los procedimientos de nuestro programa. 隆Te veo all谩!

Aportes 3

Preguntas 3

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Carajo esto esta super bueno, ahora entiendo miles de cosas mas.

.
Solo tengo dos peque帽as preguntas que no me quedan claras.

  1. No entiendo bien esta sentencia
PIC 99V9

o esta

PIC 9(09)V99 VALUE ZEROS.

驴C贸mo funciona exactamente esa v9

  1. Que pasa si por error no rellenamos con los 80 espacios en alg煤n bloque, nos saldr谩 error?

WOW, habia olvidado completamente para que se usaba el nivel 88

en Los campos LK-ANIO de tipo num茅rico y de longitud 2 posiciones deber铆a decir 4 posiciones