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 “maquetaremos” el reporte, esto significa que vamos a generar:
Una vez concluida esta “maquetació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
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.
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.
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 '--------------'.
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.
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 podrás volver a esta clase para revisar cualquier duda que tengas sobre la estructura del reporte que “cobra 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á!