Tomaremos como ejemplo un programa que lee un archivo secuencial para explicar las partes que componen un programa Cobol batchero .
Luego pasaremos a explicar cada una de las partes del programa correspondiente.
000001 *****************************************************************
000002 * INFORMACION ACERCA DEL MANTENIMIENTO DEL PROGRAMA *
000003 *****************************************************************
000004 ID DIVISION.
000005 *===========*
000006 PROGRAM-ID. PROBPRU.
000007 AUTHOR. RICHARD PEREZ CENTENO.
000008
000009 ENVIRONMENT DIVISION.
000010 *====================*
000011 CONFIGURATION SECTION.
000012 INPUT-OUTPUT SECTION.
000013 FILE-CONTROL.
000014
000015 SELECT DATAOP ASSIGN TO DATAOPI
000016 FILE STATUS IS STAT-DATAOP.
000017
000018 DATA DIVISION.
000019 *=============*
000020 FILE SECTION.
000021 *-------------*
000022
000023 FD DATAOP
000024 LABEL RECORD ARE STANDARD
000025 BLOCK CONTAINS 00 RECORDS.
000026 COPY CPYRPRUE.
000027
000028
000029 WORKING-STORAGE SECTION.
000030 *-----------------------*
000031 77 STAT-DATAOP PIC 9(02) VALUE 0.
000032 77 WS-ERROR PIC 9(02) VALUE 0.
000033
000034 01 VARIOS.
000035 02 W-TOT-SOLES PIC S9(13)V99 COMP-3 VALUE +0.
000036 02 W-TOT-DOLAR PIC S9(13)V99 COMP-3 VALUE +0.
000037
000038 01 WF-FIN-DATAOP PIC 9(01) VALUE 0.
000039 88 FIN-FILE-DATAOP VALUE 1.
000040 77 W-LEIDOS-DATAOP PIC 9(05) VALUE 0.
000041
000042
000043 PROCEDURE DIVISION.
000044 *===================*
000045 PERFORM INICIA.
000046
000047 PERFORM PROCESA THRU PROCESA-FIN UNTIL FIN-FILE-DATAOP.
000048
000049 PERFORM FINALIZA.
000050 *
000051 INICIA.
000052 *======*
000053 DISPLAY '*===============================* '
000054 DISPLAY '*== INICIO PROGRAMA XXXXXXX ==* '
000055 DISPLAY '*===============================* '
000056
000057
000058 MOVE 16 TO RETURN-CODE.
000059
000060 OPEN INPUT DATAOP.
000061
000062 IF STAT-DATAOP NOT EQUAL '00'
000063 DISPLAY '*===============================*'
000064 DISPLAY '** ERROR AL ABRIR ARCHIVOS **'
000065 DISPLAY '*===============================*'
000066 DISPLAY '** STAT-DATAOP : ' STAT-DATAOP
000067 DISPLAY '*===============================*'
000068 MOVE 1 TO WS-ERROR
000069 PERFORM FINALIZA
000070 END-IF.
000071
000072 PERFORM LEER-DATAOP.
000073
000074 PROCESA.
000075 *=======*
000076 DISPLAY ' PROCESO NRO OPE ' REG-NRO-DOC
000077 PERFORM LEER-DATAOP.
000078
000079 PROCESA-FIN.
000080 *-----------*
000081 EXIT.
000082
000083 FINALIZA.
000084 *--------*
000085 DISPLAY '**LEIDOS ' W-LEIDOS-DATAOP.
000086
000087
000088 CLOSE DATAOP.
000089
000090 IF STAT-DATAOP NOT EQUAL '00'
000091 DISPLAY '*===============================*'
000092 DISPLAY '** ERROR AL CERRAR ARCHIVOS **'
000093 DISPLAY '*===============================*'
000094 DISPLAY '** STAT-DATAOP : ' STAT-DATAOP
000095 DISPLAY '*===============================*'
000096 MOVE 1 TO WS-ERROR
000097 END-IF.
000098
000099 IF WS-ERROR = 1
000100 MOVE 16 TO RETURN-CODE
000101 ELSE
000102 MOVE 00 TO RETURN-CODE
000103 END-IF
000104
000105 DISPLAY 'FIN DEL PROGRAMA XXXXXXX'
000106
000107 STOP RUN.
000108
000109 LEER-DATAOP.
000110 *------------*
000111 READ DATAOP AT END
000112 MOVE 1 TO WF-FIN-DATAOP.
000113
000114 IF WF-FIN-DATAOP = 0
000115 IF STAT-DATAOP NOT EQUAL '00'
000116 DISPLAY '*============================*'
000117 DISPLAY '** ERROR AL LEER DATAOP **'
000118 DISPLAY '*============================*'
000119 DISPLAY '** STAT-DATAOP : ' STAT-DATAOP
000120 DISPLAY '*============================*'
000121 MOVE 1 TO WS-ERROR
000122 PERFORM FINALIZA
000123 ELSE
000124 ADD 1 TO W-LEIDOS-DATAOP
000125 DISPLAY '**LEIDOS ' W-LEIDOS-DATAOP
000126 DISPLAY '**WF-FIN-DATAOP ' WF-FIN-DATAOP
000127 END-IF
000128 END-IF.
000129
EXPLICACION
las lineas que figuran en la parte izquierda son etiquetadas por el editor, en este caso Roscoe.
000001 *****************************************************************
000002 * INFORMACION ACERCA DEL MANTENIMIENTO DEL PROGRAMA *
000003 *****************************************************************
De las lineas 1 a la 3 se estila indicar a modo de comentario lo que hace el programa, una descripcion de cada cambia efectuado sobre el mismo.
000004 ID DIVISION.
000005 *===========*
000006 PROGRAM-ID. PROBPRU.
000007 AUTHOR. RICHARD PEREZ CENTENO.
000008
De las lineas 4 a la 8 se puede apreciar el ID DIVISION, y debe ser la primera sección siempre en todo programa COBOL, y contiene el nombre del programa, el autor, la fecha en la que fue escrito, y otra información de interés.
000009 ENVIRONMENT DIVISION.
000010 *====================*
000011 CONFIGURATION SECTION.
000012 INPUT-OUTPUT SECTION.
000013 FILE-CONTROL.
000014
000015 SELECT DATAOP ASSIGN TO DATAOPI
000016 FILE STATUS IS STAT-DATAOP.
000017
De las lineas 9 a la 17 se puede apreciar el ENVIRONMENT DIVISION, y se divide a su vez en 1 subsecciones: la Configuration Section y la Input-Output Section.
La Configuration Section es una sección opcional para el programa y describe el entorno del computador sobre la cual el programa escompilado y ejecutado.
En este ejemplo no estamos indicando ninguna descripcion para esta sección.
El Input-Output Section se subdivide en 2 secciones: el File-Control y el I-O-Control.
El File-Control asocia cada archivo en el programa COBOL con una dataset externo al programa, y especifica su organización(Sequencial, Indexado, etc), modo de acceso, y otra información relacionada.
En el ejemplo el archivo DATAOPI es un archivo organizado secuencialmente y estos sólo pueden ser accedidos secuencialmente asi que no es necesario explicitar la organización del archivo ni el modo de acceso. Mas adelante hablaremos de los tipos de archivo y su modo de acceso.
000015 SELECT DATAOP ASSIGN TO DATAOPI
La sentencia SELECT elige un archivo en el programa COBOL y la asocia con un dataset externo indicado en la sentencia ASSIGN
000016 FILE STATUS IS STAT-DATAOP.
la sentencia FILE STATUS monitorea la ejecución de cada operación de entrada salida para el archivo y mueve el valor del estado la operación al data itemindicado, en el ejemplo el data item se llama STAT-DATAOP.
La DATA DIVISION
000018 DATA DIVISION.
000019 *=============*
000020 FILE SECTION.
000021 *-------------*
000022
000023 FD DATAOP
000024 LABEL RECORD ARE STANDARD
000025 BLOCK CONTAINS 00 RECORDS.
000026 COPY ABCRPRUE.
000027
000028
000029 WORKING-STORAGE SECTION.
000030 *-----------------------*
000031 77 STAT-DATAOP PIC 9(02) VALUE 0.
000032 77 WS-ERROR PIC 9(02) VALUE 0.
000033
000034 01 VARIOS.
000035 02 W-TOT-SOLES PIC S9(13)V99 COMP-3 VALUE +0.
000036 02 W-TOT-DOLAR PIC S9(13)V99 COMP-3 VALUE +0.
000037
000038 01 WF-FIN-DATAOP PIC 9(01) VALUE 0.
000039 88 FIN-FILE-DATAOP VALUE 1.
000040 77 W-LEIDOS-DATAOP PIC 9(05) VALUE 0.
000041
000042
De las lineas 18 a la 41 se puede apreciar la DATA DIVISION, y aqui se definen los datos conlos que se trabajara en el progrma. Esta sección esta dividida a su vez en 3 sub secciónescomo son la FILE SECTION, WORKING STORAGE SECTION, y la LINKAGE SECTION.
FILE SECTION
000020 FILE SECTION.
000021 *-------------*
000022
000023 FD DATAOP
000024 LABEL RECORD ARE STANDARD
000025 BLOCK CONTAINS 00 RECORDS.
000026 COPY ABCRPRUE.
De las lineas 20 al 26 se aprecia la FILE SECTION, esta sección define la estructura de losarchivos de datos y para ello se indican se debe indicar la descripción del archivo y la descripción del registro, tambien conocidas como en ingles como File Description Entry y Record Description Entry respectivamente.
FILE DESCRIPTION ENTRY
000023 FD DATAOP
000024 LABEL RECORD ARE STANDARD
000025 BLOCK CONTAINS 00 RECORDS.
La File Description Entry es el nivel de organización mas alto dentro de la File Section y provee información de la estructura fisica del archivo. En el ejemplo esta comprendido por las lineas23 al 25.
RECORD DESCRIPTION ENTRY
000026 COPY ABCRPRUE.
La Record Description Entry describe el registro particular que contiene el archivo particular referido. En el ejemplo esta parte esta comprendido por la linea 26, es decir el copy ABCRPRUECOPY
ABCRPRUE
000001 ****************************************************************
000002 * COPY : ABCRPRUE *
000003 * LONGITUD : 200 CLAVE : 5 *
000004 * DESCRIPC : DATA DE PRUEBA DE OPERACIONES *
000005 *--------------------------------------------------------------*
000006 01 REG-DATA.
000007 03 REG-CONTROL.
000008 * * KEY EN BLANCO PARA REGISTRO DE CONTROL
000009 05 REG-CTL-KEY PIC X(08).
000010 * * NUMERO DE REGISTROS QUE TRAE EL ARCHIVO
000011 05 REG-CTL-NRO-REG PIC X(07).
000012 * * FECHA DE PROCESO 000013 05 REG-CTL-DATE.
000014 07 REG-CTL-DATE-SS PIC X(02).
000015 07 REG-CTL-DATE-YY PIC X(02).
000016 07 REG-CTL-DATE-MM PIC X(02).
000017 07 REG-CTL-DATE-DD PIC X(02).
000018 * * HORA DE PROCESO
000019 05 REG-CTL-TIME PIC X(08).
000020 * * FECHA DE PROCESO ANTERIOR
000021 05 REG-CTL-DATE-ANT.
000022 07 REG-CTL-DATE-SS-ANT PIC X(02).
000023 07 REG-CTL-DATE-YY-ANT PIC X(02).
000024 07 REG-CTL-DATE-MM-ANT PIC X(02).
000025 07 REG-CTL-DATE-DD-ANT PIC X(02).
000026 * * ESPACIO DISPONIBLE
000027 05 REG-CTL-FILLER PIC X(161).
000028 * * DETALLE DE DATA
000029 03 REG-DETALLE REDEFINES REG-CONTROL.
000030 * * NUMERO DE DOCUMENTO
000031 05 REG-NRO-DOC PIC X(05).
000032 * * CODIGO CLIENTE
000033 05 REG-COD-CLIE PIC X(05).
000034 * * CODIGO DE PRODUCTO
000035 05 REG-COD-PROD PIC X(04).
000036 * * DESCRIPCION
000037 05 REG-DESC PIC X(30).
000038 * * MONEDA
000039 05 REG-MONEDA PIC X(01).
000040 * * CANTIDAD
000041 05 REG-CANTIDAD PIC 9(03).
000042 * * IMPORTE UNITARIO
000043 05 REG-IMP-UNIT PIC S9(13)V99 COMP-3.
000044 * * IMPORTE TOTAL
000045 05 REG-IMP-TOTAL PIC S9(13)V99 COMP-3.
000046 * * FECHA
000047 05 REG-FECHA PIC X(08).
000048 * * FILLER
000049 05 REG-FILLER PIC X(128).
000050 *----------------------------------------------------------------*
Este copy viene a indicar la estructura del registro Pueden existir varias descripciones del registro.
WORKING STORAGE SECTION
000029 WORKING-STORAGE SECTION.
000030 *-----------------------*
000031 77 STAT-DATAOP PIC 9(02) VALUE 0.
000032 77 WS-ERROR PIC 9(02) VALUE 0.
000033
000034 01 VARIOS.
000035 02 W-TOT-SOLES PIC S9(13)V99 COMP-3 VALUE +0.
000036 02 W-TOT-DOLAR PIC S9(13)V99 COMP-3 VALUE +0.
000037
000038 01 WF-FIN-DATAOP PIC 9(01) VALUE 0.
000039 88 FIN-FILE-DATAOP VALUE 1.
000040 77 W-LEIDOS-DATAOP PIC 9(05) VALUE 0.
000041
Esta sección describe los registros de datos que no son parte de los archivo de datos peroson utilizados o procesados por el programa durante su ejecución. Aqui tambien se describen los data items que son utilizados como constantes
Poseo conocimientos de COBOL y DB2 en entornos AS400. Con el PDM podemos llegar al editor de programas SEU para codificar programas cobol, ¿cómo se realiza eso en 3090?
ResponderEliminarLas pantallas se codifican en SDA, ¿Cómo se edita una pantalla en 3090? por CICS?
Para interralacionarse con el SO tenemos la programación CL, en 3090 se utiliza JCL, en dónde se editan los procesos?
La misma pregunta para DB2.
Muchas gracias