M5 Cobol

Anuncio
COBOL II
COBOL
COmmon
CO
mmon Bussines Oriented Language
• Lenguaje de computación orientado a aplicaciones comerciales
• Auto
Auto--documentable
• Diseñado para integrar nuevas facilidades sin cambiar la
estructura general del lenguaje
• Cobol se ha perfeccionado y estandarizado desde 1959:
–
–
–
–
COBOL ANS
COBOL VS
COBOL II
COBOL III
Codificación Cobol
• Código fuente escrito en registros secuenciales
• Similitud a tarjetas perforadas de 80 posiciones
• Comprende:
–
–
–
–
–
1a. Sección de numeración
Columna de comentarios
Area A
Area B
2a. Sección de numeración
1-6
1a. SECCION
NUMERACION
7
*
8-11
AREA “A”
12
72
AREA “B”
73-80
2a. SECCION
NUMERACION
4 Divisiones
• Estructura general
IDENTIFICATION DIVISION.
ENVIRONMENT DIVISION.
( 2 Secciones
Secciones)
)
CONFIGURATION SECTION.
INPUTINPUT
-OUTPUT SECTION.
DATA DIVISION.
( 3 Secciones)
FILE SECTION.
WORKINGWORKING
-STORAGE SECTION.
LINKAGELINKAGE
-SECTION.
PROCEDURE DIVISION.
Primitivas de Cobol
• Construcción de programas
–
–
–
–
Programas divididos en párrafos
Cada párrafo es utilizado para ejecutar una función específica
Los párrafos contienen instrucciones del lenguaje
Las instrucciones son cláusulas seguidas por punto (.) de
acuerdo al idioma inglés
– Punto(s) obligatorios antes de cada división, sección o párrafo
y al final de cada definición de variable
• Cada división tiene sentencias o cláusulas obligatorias
y otras opcionales
Primitivas de Cobol
• Nombres de campos
– Máximo 30 caracteres
– Se pueden usar letras mayúsculas
(A-Z), números (0-9), y guiones
– Espacios y otros caracteres están prohibidos
– El guión no puede ser el primer o último carácter
• Palabras
– Definidas por el usuario
– Reservadas
• Necesarias en entradas de Cobol
• Palabras clave: ADD, READ, REWRITE, TO, UNTIL
• Palabras optativas
Primitivas de Cobol
• Lineas de continuación
– Cuando se requiere continuar una sentencia o entrada, se
continúa en la área B
– Para continuar literales no numéricas se utiliza un guión en la
columna 7
• Nombres especiales
• Números de nivel
– 01 y 77 puede iniciar en el área A o B
– 02 a 49, 66 u 88 debe estar en el área B
• Líneas en blanco permitidas en cualquier parte del
programa
Identification Division
• Primera línea en un programa de Cobol
• Primer cláusula es PROGRAMPROGRAM-ID y es la única
obligatoria
• sintaxis:
IDENTIFICATION
PROGRAM-ID.
AUTHOR.
INSTALLATION.
DATE-WRITTEN.
DATE-COMPILED.
SECURITY.
DIVISION.
nombre-programa.
nombre-programador.
nombre-instalación.
fecha-escritura-programa.
fecha-compilación-programa.
ESTE PROGRAMA ESTA RESTRINGIDO.
Environment Division
• Utilizada para nombrar y asociar archivos a un
dispositivo
• Describe características de archivos
• Sintaxis sección de configuración:
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. [computadora-fuente]
OBJECT-COMPUTER. [computadora-objeto]
[SPECIAL-NAMES.] [nombre.]
[CURRENCY SIGN IS literal.]
[DECIMAL-POINT IS COMMA.]
Environment Division
• Sintaxis secciones de control de archivos:
INPUT-OUTPUT SECTION.
FILE-CONTROL.
[ entradas SELECT ... sintaxis en las siguientes láminas ]
[I-O-CONTROL.
SAME
RECORD
SORT
AREA FOR nom-arch-1 {nom-arch-2} ...
SORT-MERGE
Environment Division
• Cláusula SELECT archivos secuenciales
SELECT [OPTIONAL] nombre-archivo
ASSIGN TO nom-arch-ext
RESERVE entero AREA
AREAS
[[ ORGANIZATION IS]
SEQUENTIAL]
[ACCESS MODE IS SEQUENTIAL]
[FILE STATUS IS nombre-dato]
• Ejemplo:
…… INPUT-OUTPUT SECTION.
…… FILE-CONTROL.
……
SELECT OPTIONAL ENTRADA ASSIGN TO ARCHENT
……
ORGANIZATION IS SEQUENTIAL
……
ACCESS MODE IS SEQUENTIAL
……
FILE STATUS IS ST-ENTRADA.
……
……
SELECT REPORTE ASSIGN TO ARCHREP.
Environment Division
• Cláusula SELECT archivos relativos
SELECT [OPTIONAL] nombre-archivo
ASSIGN TO nom-arch-ext [RESERVE entero [AREA]
AREAS]]
[[ORGANIZATION IS] RELATIVE]
ACCESS MODE IS [SEQUENTIAL] [RANDOM] [DYNAMIC]
[RELATIVE KEY IS nombre-dato]
[FILE STATUS IS nombre-dato]
• Ejemplos:
…… INPUT-OUTPUT SECTION.
…… FILE-CONTROL.
……
SELECT MOVTOS ASSIGN TO ARCHMOV
……
ORGANIZATION IS RELATIVE
……
ACCESS MODE IS SEQUENTIAL
……
FILE STATUS IS ST-MOVTOS.
……
……
SELECT MAECTA ASSIGN TO ARCHCTAS
……
ORGANIZATION IS RELATIVE
……
ACCESS MODE IS RANDOM
……
RELATIVE KEY IS CTA-LLAVE
……
FILE STATUS IS ST-MAECTA.
Environment Division
• Cláusula SELECT archivos secuencial indexado
SELECT [OPTIONAL] nombre-archivo
ASSIGN TO nom-arch-ext [RESERVE entero [AREA] [AREAS]]
[[ORGANIZATION IS] INDEXED]
ACCESS MODE IS [SEQUENTIAL] [RANDOM] [DYNAMIC]
[RECORD KEY IS nombre-dato]
[ALTERNATE RECORD KEY IS nombre-dato
WITH DUPLICATES]
[FILE STATUS IS nombre-dato]
• Ejemplos:
…… INPUT-OUTPUT SECTION.
…… FILE-CONTROL.
……
SELECT MOVTOS ASSIGN TO ARCHMOV
……
ORGANIZATION IS INDEXED
……
ACCESS MODE IS SEQUENTIAL
……
FILE STATUS IS ST-MOVTOS.
……
……
SELECT MAECTA ASSIGN TO ARCHCTAS
……
ORGANIZATION IS INDEXED
……
ACCESS MODE IS DYNAMIC
……
RECORD
KEY IS CTA-LLAVE
……
ALTERNATE RECORD KEY IS CTA-CENREG
……
WITH DUPLICATES
……
FILE STATUS IS ST-MAECTA.
Data Division
• Definición de:
– Estructuras de archivos
– Variables utilizadas en el programa
– Áreas de trabajo
• FILE SECTION. Descripción de características de
cada unos de los archivos definidos en SELECT y sus
estructuras
• WORKING
WORKING--STORAGE SECTION. Definición de
variables y áreas de trabajo
• LINKAGE SECTION. Definición de datos compartidos
con otros programas o subprogramas
Esquema de programa Cobol
……
……
……
……
……
……
……
……
……
……
……
……
……
……
……
……
……
IDENTIFICATION DIVISION.
PROGRAM-ID.
PROGRAMEJEMPLO1.
AUTHOR.
INTERSOFTWARE.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBMSOURCEIBM-390.
OBJECTOBJECT
-COMPUTER. IBMIBM-390.
INPUT-OUTPUT SECTION.
INPUTFILE-CONTROL.
FILESELECT ENTRADA ASSIGN TO ARCHENT.
SELECT REPORTE ASSIGN TO ARCHREP.
DATA DIVISION.
FILE SECTION.
FD
ENTRADA
…… …… ……
FD
REPORTE
…… …… ……
Data Division
• FILE SECTION sintaxis:
FD
nombre-archivo
BLOCK CONTAINS [entero TO] entero
RECORDS
CHARACTERS
CONTAINS entero CHARACTERS
RECORD IS VARYING IN SIZE [[FROM entero][TO entero] CHARACTERS]
[DEPENDING ON nombre-dato]
CONTAINS entero TO entero CHARACTERS
LABEL
DATA
RECORD IS
RECORDS ARE
STANDARD
OMITTED
RECORD IS
RECORDS ARE
{nombre-dato} ...
Definición de registros de datos
• Descripción de campos
– Estructuras con base a números de nivel
• Del 01 al 49
• Nivel 77 reservado para áreas de trabajo (en desuso)
• Nivel 88 asigna nombre a diferentes valores de un campo
– FILLER
• Palabra reservada para indicar porciones de datos no
referenciados
– CLAUSULAS
• PICTURE. Define el tipo de dato
 X(10)
 9(06)
 A(20)
alfanumérico de 10 posiciones
numérico de 6 posiciones
alfabético DE 20 posiciones
Definición de registros de datos
• Cláusulas
– PICTURE. Uso de decimales
• 9(15)V99
• 99V99999
• 9(02)v9(05)
17 dígitos de los cuales 2 son decimales
7 dígitos de los cuales 5 son decimales
mismo formato que el anterior
– PICTURE. Uso de signo
• S9(15)V99
17 dígitos, 2 decimales con signo
• Ejercicio.
– Defina el siguiente formato de registro:
REGISTRO--EMPLEADO
REGISTRO
NOMBRE
DIRECCION
NUM--EMPLEADO
NUM
Alfanumérico 40
Alfanumérico 40
Numérico 10
– ¿Que longitud tiene REGISTRO-EMPLEADO?
Definición de registros de datos
• Definición de grupos de datos
REGISTRO--EMPLEADO
REGISTRO
NOMBRE
DIRECCION
NUM--EMPLEADO
NUM
FECHA
DD
MM
AAAA
• Ejercicio.
– Haga la definición de la estructura de datos del esquema
anterior si DD y MM son de 2 posiciones numéricas y AAAA
es de 4 posiciones numéricas
– ¿Qué longitud tiene REGISTRO-EMPLEADO?
– ¿Qué longitud tiene FECHA?
Definición de registros de datos
• Cláusula VALUE
– Utilizada para asignar valores iniciales a una variable
02 CONTADOR-PAGINAS PIC 9(03) VALUE 1.
02 CLAVE-BANCO
PIC X(10) VALUE „INTERSOFTWARE ‟.
– Se puede usar en combinación con constantes figurativas
02 FILLER
02 TOTAL-CARGOS
02 RAYA
PIC X(20)
PIC 9(15)V99
PIC X(132)
VALUE SPACES
VALUE ZEROS
VALUE ALL „-‟.
Edición de datos numéricos
• Supresión de ceros
– Si utilizamos PIC 999V99 y el contenido del campo es 1.55
– Al imprimir el campo aparecerá: 00155
– Preferimos que aparezca 1.55, para esto utilizamos el
carácter “Z”, ejemplo: PIC ZZ9.99
• Comas y puntos decimales
– Tenemos un campo con formato PIC 9(05)V99
– Y contenido 14525.55, al imprimir aparece: 1452555
– Para que aparezcan separadores de miles y punto decimal
utilizamos PIC ZZ,ZZ9.99
– Al imprimir aparece: 14,525.55
Edición de datos numéricos
• Notación europea
– En Europa se utiliza como punto decimal la “,” y como
separador de miles “.”
– Es necesario definir en la cláusula SPECIAL-NAMES la
frase: DECIMAL POINT IS COMMA
– Y como máscara de edición:
ZZ.ZZ9,99
– Al imprimir aparecerá:
14.525,55
• Justificación de datos. JUSTIFIED determina si el dato será
almacenado en el campo justificado a la derecha (RIGTH) o a
la izquierda (LEFT). El default para datos alfanuméricos es
LEFT, para numéricos es RIGTH
Redefinición de datos
• Cláusula REDEFINES
– Proporciona otro nombre o descripción a un dato
previamente definido
– Cuando queremos que el datos sea tratado como
alfanumérico, lo referimos como CAMPO-ALFA
– Cuando queremos que sea tratado como numérico, referimos
a CAMPO-NUM, ejemplo:
01 FECHA-N PIC 9(6).
01 FECHA-R REDEFINES FECHA-N.
03 AA PIC 99.
03 MM PIC 99.
03 DD PIC 99.
Formato de datos
• Es dado por la cláusula USAGE
– Es opcional e indica el tipo de formato que tendrá el campo
– DISPLAY. Es asignado a los campos alfabético,
alfanumérico, numérico y editado
– Para los campos numéricos existen
• COMPUTATIONAL o COMP. Formato binario puro.
PIC S9(05) COMP ocupa 2 bytes
PIC S9(09) COMP ocupa 4 bytes
• COMPUTACIONAL-1 y 2 son utilizados en operaciones de
punto flotante, no vistos en éste curso
• COMPUTATIONAL-3. Empacado decimal, almacena 2 dígitos
por cada byte, el último semi-byte ocupa el signo
Justificación de datos
• Definido por la cláusula JUSTIFIED
– Determina si el dato será almacenado en el campo justificado
a la derecha (RIGTH) o a la izquierda (LEFT).
– El default para datos alfanuméricos es LEFT, para numéricos
es RIGTH
– Ejemplo:
02 FILLER PIC X(20) VALUE „INTERSOFTWARE‟ JUSTIFIED LEFT.
02 FILLER PIC X(20) VALUE „INTERSOFTWARE‟ JUST RIGTH.
Definición de arreglos
• Mediante la cláusula OCCURS. Define ocurrencias de
un campo ya sea grupal o simple
• Especifica cuántos elementos tiene un arreglo
• Por ejemplo, si queremos definir los meses del año
01
01
TABLATABLA
-M
02 FILLER
02 FILLER
02 FILLER
…
…
02 FILLER
02 FILLER
TABLA-MESES
TABLA02 TABTAB-MES
PIC X(03) VALUE ‘ENE’.
PIC X(03) VALUE ‘FEB’.
PIC X(03) VALUE ‘MAR’.
…
…
…
PIC X(03) VALUE ‘NOV’.
PIC X(03) VALUE ‘DIC’.
REDEFINES TABLATABLA-M.
OCCURS 12
PIC X(03).
Ejercicios.
• Defina los encabezados del layout de reporte que le
proporcionará su instructor
• Defina la IDENTIFICATION DIVISION, ENVIRONMENT
DIVISION Y DATA DIVISION hasta FILE SECTION, para un
programa típico que utilice 2 archivos de entrada y un archivo de
salida para reporte de 132 posiciones
• Los archivos de entrada son:
– MAECTAS con longitud de 130 posiciones
– MOVCTAS con longitud de 50 posiciones
• Genere un miembro de su librería DSRN0XX.PO.FONTS por
cada ejercicio elaborado
Procedure Division
•
•
•
•
Describe la lógica y operaciones del programa
Arreglo con base a párrafos y/o secciones
Debe iniciar con un nombre de párrafo
Párrafos en el área A, deben terminar con punto (.)
FORMATO:
FORMATO:
[PROCEDURE DIVISION
[USING
{nombre-de
{nombrede-dato}...]
• Formato general para verbos Cobol
000000
-NOMBRE
NOMBRE-PARRAFO.
[[oración]... oración ... ]
Procedure Division
• A continuación se describe la sintaxis de los verbos
Cobol
ACCEPT
ACCEPT
identificador
identificador
[FROM nombre-nemónico]
FROM
• Ejemplo:
ACCEPT WS-FECHA FROM DATE
DATE
DAY
DAY-OF-WEEK
TIME
Operaciones aritméticas
•
•
•
•
•
ADD
SUBTRAC
MULTIPLY
DIVIDE
COMPUTE
OPERACIONES LÓGICAS
• IF
• EVALUATE
• SEARCH
OPERACIONES DE PROCESO
• MOVE
• PERFORM
MANEJO DE ARCHIVOS
•
•
•
•
•
OPEN
CLOSE
READ
WRITE
REWRITE
Procedure Division
ADD
identificador
literal
... TO {identificador [ROUNDED]} ...
[ON SIZE ERROR intrucción-imperativa]
[NOT ON SIZE ERROR instrucción-imperativa]
[END-ADD]
ADD identificador
... TO identificador
literal
GIVING {identificador [ROUNDED]}...
ON SIZE ERROR instrucción imperativa]
NOT ON SIZE ERROR instrucción imperativa]
END-ADD]
• Ejemplo:
ADD 1
TO WS-CONREN
ADD 1
TO WS-LEIMAE WS-LEIMOV WS-LEITAL
ADD WS-CARGO TO WS-TOTSAL GIVING WS-TOTCTA.
Procedure Division
ADD
CORRESPONDING
CORR
identificador TO identificador [ROUNDED]
[ON SIZE ERROR
instrucción-imperativa]
[NOT ON SIZE ERROR instrucción-imperativa]
[END-ADD]
• Ejemplo:
... ... ...
01 TOTALES-MENSUALES.
05 TOT-CARGOS
05 TOT-ABONOS
01 TOTALES-ANUALES.
05 TOT-CARGOS
05 TOT-ABONOS
... .. ...
PIC S9(11)V99.
PIC S9(11)V99.
PIC S9(11)V99.
PIC S9(11)V99.
ADD CORR TOTALES-MENSUALES TO TOTALES-ANUALES.
Procedure Division
• Nunca utilizar:
ALTER {nombre-de-procedimiento TO[PROCCED TO]
nombre-de-
procedimiento}
• Call
• Utilizado en el manejo de subprogramas
• Los datos a pasar al subprograma se definen en WORKINGSTORAGE SECTION
• Ejemplo:
CALL ‘CALCULO’ USING DATO-ENTRADA DATO-RESPUESTA.
Procedure Division
• Compute
– Utilizado para la ejecución de operaciones aritméticas
– Sintaxis:
COMPUTE
{identificador [ROUNDED]}... =
expresión-aritmética
[ON SIZE ERROR instrucción-imperativa]
[NOT ON SIZE ERROR instrucción-imperativa]
[END-COMPUTE]
• Ejemplo:
COMPUTE WS-IVA = (WS-COMISION-A + COMISION-B + COMISION-C) * .15
ROUNDED
Procedure Division
• Continue
– Da continuidad a las oraciones de Cobol sin perder la lógica
– Ejemplo:
IF ENTENT-TIPOPAG = ‘EFEC’
CONTINUE
ELSE
… … …
ENDEND
-IF
Procedure Division
• Delete
– Elimina los registros de un archivo
– Sintaxis:
DELETE nombre-de-archivo RECORD
[INVALID KEY instrucción-imperativa]
[NOT INVALID KEY instricción-imperativa]
[END-DELETE]
Procedure Division
DISPLAY identificador ...{UPON nombre-nemónico}[WITH NO ADVANCING]
literal
DIVIDE
identificador
literal
INTO
{identificador [ROUNDED]} ...
[ON SIZE ERROR instrucción-imperativa]
[NOT ON SIZE ERROR instrucción-imperativa]
[END-DIVIDE]
DIVIDE
identificador
Literal
INTO
identificador
literal
GIVING {identificador [ROUNDED]} ...
[ON SIZE ERROR instrucción-imperativa]
[NOT ON SIZE ERROR instrucción-imperativa]
[END-DIVIDE]
Procedure Division
DIVIDE
identificador
Literal
BY
identificador
literal
GIVING {identificador [ROUNDED]} ...
[ON SIZE ERROR instrucción-imperativa]
[NOT ON SIZE ERROR instrucción-imperativa]
[END-DIVIDE]
DIVIDE identificador INTO identificador GIVING {identificador [ROUNDED]} ...
literal
literal
REMAINDER
identificador
[ON SIZE ERROR instrucción-imperativa]
[NOT ON SIZE ERROR instrucción imperativa]
[END-DIVIDE]
Procedure Division
• Ejemplo de DIVIDE
DIVIDE DIVISOR INTO DIVIDENDO GIVING COCIENTE ROUNDED
ON SIZE ERROR PERFORM 800-OVFLOW-DIVIDE
END-DIVIDE
DIVIDE 4
END-DIVIDE
INTO WS-AA GIVING WS-COCIENTE
REMAINDER WS-RESIDUO
Procedure Division
• EVALUATE
– Puede evitar el uso indiscriminado de IF anidado
– Debido a lo complejo de su sintaxis, se proporcionan
ejemplos claros:
EVALUATE TRUE
WHEN ENTER
PERFORM
WHEN PF2
PERFORM
WHEN PF3
PERFORM
WHEN PF4
PERFORM
WHEN PF5
PERFORM
WHEN OTHER
PERFORM
ENE-EVALUATE.
10000-TRATA-ENTER
20000-PROCESA-BAJA
30000-REGRESA-MENU
40000-PROCESA-ALTA
50000-PROCESA-ENLACE
60000-TECLA-INVALIDA
Procedure Division
• EVALUATE ejemplos:
EVALUATE TRUE
WHEN ENTER
PERFORM
WHEN PF2
PERFORM
WHEN PF3
PERFORM
WHEN OTHER
PERFORM
ENE-EVALUATE
10000-TRATA-ENTER
20000-PROCESA-BAJA
30000-REGRESA-MENU
40000-TECLA-INVALIDA
EVALUATE CANT > 1000
ALSO TIPO-DTO ALSO CLIESP
WHEN TRUE ALSO ‘3’ ALSO ‘N’
PERFORM 31-MAXIMO-DTO-3
WHEN FALSE ALSO ‘3’ ALSO ‘N’
PEFORM 32-PROCESO-DTO-3
WHEN TRUE ALSO ‘2’ ALSO ‘N’
PERFORM 33-MAXIMO-DTO-3
WHEN FALSE ALSO ‘2’ ALSO ‘N’
PEFORM 34-PROCESO-DTO-2
WHEN TRUE ALSO ‘1’ ALSO ‘N’
PERFORM 35-PROCESO-DTO-1
WHEN ANY ALSO ANY ALSO ‘S’
PERFORM 36-DESC-ESPECIALES
WHEN OTHER TRUE ALSO ‘2’ ALSO ‘N’
PERFORM 37-SIN-DESCUENTOS
[END-EVALUATE]
Procedure Division
• MOVE sintaxis y ejemplos
MOVE
identificador
Literal
MOVE
CORRESPONDING
CORR
TO
{identificador}
identificador
... ... ...
01 REG-MOV.
05 CUENTA
05 TOT-CARGOS
05 TOT-ABONOS
01 REG-EDOCTA.
O5 CUENTA
05 FECHA-PROCESO
05 NUMERO-MOVS
05 TOT-CARGOS
05 TOT-ABONOS
... .. ...
MOVE CORR REG-MOV
MOVE FECHA-PROCESO
TO
identificador
PIC X(18).
PIC S9(11)V99.
PIC S9(11)V99.
PIC X(18).
PIC X(10).
PIC S9(05) COMP.
PIC S9(11)V99.
PIC S9(11)V99.
TO REG-EDOCTA.
TO MAE-FECHA-OPER.
Procedure Division
• MULTIPLY
MULTIPLY
Sintaxis y ejemplo
identificador
BY
{identificador [GIVING identificador]
[ROUNDED identificador] ...
[ON SIZE ERROR instrucción-imperativa]
[NOT ON SIZE ERROR instrucción-imperativa]
[END-MULTIPLY]
... ... ...
... ... ...
MULTIPLY TOT-CARGOS OF REG-EDOCTA BY WS-TASAINT
GIVING WS-INTERES ROUNDED.
Procedure Division
• OPEN. Apertura de archivos
INPUT
OUTPUT
{nombre-de-archivo [WITH NO REWIND]} ...
{nombre-de-archivo [WITH NO REWIND]} ...
OPEN
...
I-O
EXTEND
{nombre-de-archivo} ...
{nombre-de-archivo} ...
• Ejemplo:
OPEN INPUT MOVTOS I-O MAECTA
OUTPUT REPORTE
Procedure Division
• PERFORM. Ejecución de un párrafo ya sea en forma
única, consecutiva o iterativa
PERFORM
nombre-de-procedimiento
[Instrucción-imperativa
PERFORM
PERFORM
TIMES
BEFORE
AFTER
THRU
nombre-de-procedimiento
[Instrucción-imperativa
nombre-de-procedimiento
WITH TEST
nombre-de-procedimiento
END-PERFORM]
nombre-de-procedimiento
identificador
integer
entero
THRU
THRU
UNTIL condición
[Instrucción-imperativa
END-PERFORM]
END-PERFORM]
nombre-de-procedimiento
Procedure Division
• PERFORM
PERFORM
nombre-de-procedimiento
THROUGH
THRU
nombre-de-procedimiento
WITH TEST
BEFORE
AFTER
VARYING
identificador
nombre-de-índice
FROM
identificador
nombre-de-índice
literal
BY
identificador
literal
UNTIL
condición
AFTER
identificador
literal
FROM
identificador
nombre-de-índice
literal
BY
identificador
literal
UNTIL
condición
[instrucción-imperativa
END-PERFORM]
Procedure Division
• READ. Lectura de archivos
READ
nombre-de-archivo
[NEXT]
RECORD
[INTO
identificador]
[AT END instrucción-imperativa]
[NOT AT END
instrucción-imperativa]
[END-READ]
READ
nombre-de-archivo
[INVALID KEY
RECORD
[INTO
identificador]
instrucción-imperativa]
[NOT INVALID KEY
instrucción-imperativa]
[END-READ]
• Ejemplos:
READ FOLIOS AT END
MOVE 1 TO SW-FIN-FOLIOS.
READ MOVTOS NEXT RECORD INTO WS-REG-MOVTOS AT END
MOVE 1 TO SW-FIN-MOVTOS.
READ MAECTA INTO WS-REG-MAECTA INVALID KEY
PERFORM 980-CUENTA-NO-EXISTE
END-READ
Procedure Division
• REWRITE. Regraba (Actualiza) registros de un
archivo
REWRITE nombre-de-registro [FROM identificador]
REWRITE nombre-de-registro [FROM
[INVALID KEY
identificador]
instrucción-imperativa]
[NOT INVALID KEY
instrucción-imperativa]
[END-REWRITE]
• Ejemplos:
REWRITE REG-FOLIOS.
REWRITE REG-MOVTOS FROM WS-REG-MOVTOS INVALID KEY
PERFORM 900-DUPLICADO-MOVS.
REWRITE REG-MAECTA FROM WS-REG-MAECTA INVALID KEY
PERFORM 970-CUENTA-DUPLICADA
END-REWRITE
Procedure Division
• SEARCH. Busca un valor determinado en un arreglo
• Sintaxis:
SEARCH
identificador
[AT END
WHEN
identificador
nombre-de-índice
instrucción-imperativa]
condición
VARYING
instrucción-imperativa
NEXT SENTENCE
...
[END-SEARCH]
• Ejemplo:
WORKING-STORAGE SECTION.
01 TAB-VTAS.
02 ELEM-VEND OCCURS 25
INDEXED BY INDICE.
03 COD-VEND PIC 9(2).
03 CANTIDAD PIC S9(7) COMP-3.
SET INDICE TO 1.
SEARCH ELEM-VEND AT END
MOVE 1 TO NO-EXISTE
WHEN COD-VEND(INDICE) = W-CODVEND
ADD IMPOR-IN TO CANTIDAD(INDICE).
Procedure Division
• SEARCH ALL. Para búsquedas en tablas muy grandes y
de principio a fin
• Efectúa búsqueda binaria
• Ejemplo:
01
TABLA.
02 ELEMENTO OCCURS 100 TIMES ASCENDING KEY IS CLAVE
INDEXED BY IND.
03 CLAVE
PIC 99.
03 ACUM
PIC S9(5) COMP-3.
… … … … … … …
… … … … … … …
SEARCH ALL ELEMENTO AT END MOVE ‘NO’ TO ENCONTRADO
WHEN CLAVE = W-NUMERO-1
MOVE ACUM(IND) TO ACUM-SALIDA.
Procedure Division
• SET. Inicialización de índices e indicadores
SET {nombre-de-índice}
SET {nombre-nemónico}
...
UP BY
DOWN BY
...
SET {nombre-de-condición} ...
TO
TO
identificador
entero
ON
OFF
TRUE
• Ejemplos:
SET FIN-ARCH
TO TRUE
SET FIN-CURSOR
TO TRUE
SET INDICE
TO 1
SET INDICE
UP BY 1
...
Procedure Division
• START. Posiciona cursor de lectura de archivos
indexados en un valor determinado
IS EQUAL
TO
IS =
IS GREATER THAN
START nombre-archivo
KEY
IS >
nombre-de-dato
IS NOT LESS THAN
IS NOT <
IS GRATER THAN OR EQUAL TO
IS > =
[INVALID KEY
instrucción-imperativa]
[NOT INVALID KEY
instrucción-imperativa]
[END-START]
• Ejemplo:
START MAECTA KEY IS >= CTA-NOMBRE INVALID KEY
MOVE ‘1’ TO WS-INEX
END-START.
Procedure Division
• STRING. Construye una string y la deja en un campo
receptor desde varios campos
• Ejemplo:
NOMBRE
J A V I E R
APE-PAT
R A M I R E Z
APE-MAT
B U E N O
STRING NOMBRE DELIMITED BY ‘
‘ ‘ ‘
APE-PAT DELIMITED BY ‘
‘ ‘ ‘
APE-MAT DELIMITED BY ‘
‘
WITH POINTER WS-CONTADOR-CAR
NOMBRE-COMPLETO
J A V I E R
DELIMITED BY SIZE
DELIMITED BY SIZE
INTO NOMBRE-COMPLETO
R AM I R E Z
B U E N O
Procedure Division
• SUBTRACT. Substracción de valores o campos a una
variable, sintaxis:
SUBTRACT
identificador
literal
...
FROM
{identificador [ROUNDED]}
GIVING {identificador [ROUNDED]}...
[ON SIZE ERROR
instrucción-imperativa]
[NOT ON SIZE ERROR
instrucción-imperativa]
[END-SUBTRACT]
SUBTRACT
CORRESPONDING
CORR
[END-SUBTRACT]
identificador FROM identificador [ROUNDED]
Procedure Division
• CONDICIONES
CONDICION DE RELACION
IS [NOT] GREATER THAN
IS [NOT] >
IS [NOT] LESS THAN
Identificador
IS [NOT] <
identificador
Literal
IS [NOT] EQUAL TO
literal
Expresión-aritmética
IS [NOT] =
expresión-aritmética
Nombre-de-índice
IS GRATER THAN OR EQUAL TO
nombre-de-índice
IS > =
IS LESS THAN OR EQUAL TO
IS < =
Procedure Division
• CONDICIONES
CONDICION DE CLASE:
NUMERIC
ALPHABETIC
Identificador IS [NOT]
ALPHABETIC-LOWER
ALPHABETIC-UPER
Nombre-de-clase
CONDICION DE SIGNO:
POSITIVE
Expresión aritmética IS [NOT]
NEGATIVE
ZERO
PROGRAMACIÓN ESTRUCTURADA
• Problemas en los sistemas
–
–
–
–
–
–
–
–
–
–
Costo muy elevado en el desarrollo
Toman mucho tiempo para terminarse
Su mantenimiento es muy costoso
No son comprensibles con facilidad
No son modificables con facilidad
Susceptible de contener errores/fallas
No cumplen con las expectativas de los usuarios
Sumamente complejos
No suficientemente depurados
Costosos en su operación
Programación Estructurada
•
•
•
•
•
•
Hacia sistemas más comprensibles
Programas auto documentados
Bien estructurados
Programas bien legibles
Lógica sencilla y clara
Archivos con información ordenada en forma lógica
Confiabilidad
• Mínimo número de fallas
• Manejar de manera apropiada información válida
y nono-válida
• Detectar errores en su diseño
• Facilidad de rastreo
Programación Estructurada
• Objetivos
–
–
–
–
–
Establecer una metodología de diseño
Uso de lógicas sencillas
Lógicas comprensibles
Programas fáciles de modificar
Hacer un programa correcto y asegurarnos que es
correcto
– En suma: Lograr que la estructura del programa
modele la estructura natural del problema
Técnicas de diseño
• Estructuras de control de procesos
– Determinan el flujo de la información durante la ejecución del
programa
– Este flujo debe ser simple y comprensible a simple vista
• Estructuras de registros de datos
– Basadas en agrupamiento de datos
– Modularización de datos
– Simplifican la identificación de datos
Estructuras Control procesos
• Estructuras válidas
• SEQUENCE
–
–
–
–
–
–
IF – THEN – ELSE
CASE
WHILE – DO
REPEAT – UNTIL
LOOP – EXIT – IF
TERMINACION ANORMAL
Estructuras de control
• Codificación con Cobol
– SEQUENCE
PROCESO-A
FORMATO:
Proceso-A
Proceso-B
PROCESO-B
Sequence
EJEMPLO 1
RA = A
RB = B
RC = C
MOVE ENT-CAMPO-A TO SAL-CAMPO-A
MOVE ENT-CAMPO-B TO SAL-CAMPO-B
MOVE ENT-CAMPO-C TO SAL-CAMPO-C
Sequence
Eemplo 2
GENERAR
DESC. ISR
GENERAR
DESC. IMSS
PERFORM 100-GENERA-DESC-ISR
PERFORM 200-GENERA-DESC-IMSS
IF – THEN – ELSE
CONDICION
PROCESO-C
SI
PROCESO-D
FORMATO CASO 1
FORMATO CASO 2
IF condición
Proceso-a
END-IF
IF condición
Proceso-b
ELSE
Proceso-c
END-IF
IF-THEN-ELSE
Calcular el salario mensual (SM) de un
Obrero o empleado a partir de su salario
Base (SB). Para obreros el SB es semanal y
Debe multiplicarse por 4.345, para
Empleados es quincenal y debe
Multiplicarse por 2
EJEMPLO 1
OBRERO ?
SM = 2 * SB
CODIFICACION:
IF
ENT-TIPO-EMP = „O‟
COMPUTE WS-SAL-MENSUAL ROUNDED = ENT-SAL-BASE * 4.345
ELSE
COMPUTE WS-SAL-MENSUAL ROUNDED = ENT-SAL-BASE * 2
END-IF
SI
SM = 4.345 * SB
IF-THEN-ELSE
Generar descuento
de ISR y descuento
De IMSS sólo a los
Obreros
Ejemplo
ES OBRERO ?
SI
GENERAR
DESCUENTO ISR
GENERAR
DESCUENTO IMSS
CODIFICACION:
IF
ENT-TIPO-EMP = „O‟
PERFORM 100-GENERA-DESC-ISR
PERFORM 200-GENERA-DESC-IMSS
END-IF
CASE
CONDICION 1
PROCESO 1
CONDICION 2
PROCESO 2
CONDICION 3
PROCESO 3
FORMATO
EVALUATE TRUE
WHEN condición-1
Proceso-1
WHEN condición-2
Proceso-2
WHEN
Condición-n
Proceso-n
WHEN OTHER
Proceso-n
END-EVALUATE
CASE
Ejemplo
OTHER
Mes = 1,3,5,7,8,10,12
DM = 31
Mes = 4,6,9,11
AÑO BISIESTO?
SI
DM = 30
DM = 28
DM = 29
Obtener los días totales que tiene el mes de acuerdo al número de mes
CASE
Codificación
Ejemplo 1
EVALUATE TRUE
WHEN WSWS-MES = 1 OR 3 OR 5 OR 7 OR 8 OR 10 OR 12
MOVE 31 TO WSWS-DIA
WHEN WSWS-MES = 4 OR 6 OR 9 OR 11
MOVE 30 TO WSWS-DIA
WHEN OTHER
DIVIDE WSWS-ANIO BY 4 GIVING WSWS-RESUL
REMAINDER WSWS-ANIO
ANIO--BISIESTO
IF WSWS-ANIO
ANIO--BISIESTO = 0
MOVE 29 TO WSWS-DIA
ELSE
MOVE 28 TO WSWS-DIA
END--IF
END
END--EVALUATE
END
CASE
EJEMPLO 2
Calcular ISR forma A si salario base es igual al mínimo
Calcular ISR forma B si salario base es mayor al
mínimo y menor o igual al mínimo mas 500
Calcular ISR forma C si
salario base es mayor
a salario mínimo
mas 500
OTHER
S <= SS-MINIMO
Calcula ISR
forma „A‟
CODIFICACION:
EVALUATE TRUE
WHEN ENT-SAL-BASE < = WS-SAL-MINIMO
PERFORM 110-CALC-ISR-A
WHEN ENT-SAL-BASE < = WS-SAL-MINIMO + 500
PERFORM 110-CALC-ISR-B
WHEN OTHER
PERFORM 110-CALC-ISR-C
END-EVALUATE.
S<= S-MINIMO+500
Calcula ISR
forma „B‟
Calcula ISR
forma „C‟
WHILE DO
SI
CONDICION
PROCESO-E
FORMATO
PERFORM UNTIL condición
Proceso--e
Proceso
END--PERFORM
END
WHILE DO
Ejemplo 1
Buscar la empresa 031 de una
tabla en memoria
N = Número de elementos en la tabla
I = Índice de la tabla
EMP = Número de empresa
I=1
I > N “o”
EMP( I ) = 031
I=I+1
CODIFICACION
SET WS-I TO 1
PERFORM UNTIL (WS-I) > WS-NUM-ELEM
OR (WS-ID-EMP (WS-I) = „O31‟ )
SET WS-I UP BY 1
END-PERFORM
SI
WHILE DO
Ejemplo 2
SI
FIN ?
SI
Calcular el salario
Mensual para
Todos los
trabajadores
Se tiene el primer
Registro leído
ES OBRERO?
SM = 4.3445 * SB
SM = 2 * SB
REPORTA SM
LEE REGISTRO
WHILE DO
Codificación Ejemplo 2
PERFORM
UNTIL WSWS-FIN
FIN--ENT = „1‟
IF ENTENT-TIPO
TIPO--EMP = „O‟
COMPUTE WSWS-SAL
SAL--MENSUAL ROUNDED =
ENT--SAL
ENT
SAL--BASE * 4.3445
ELSE
COMPUTE WSWS-SAL
SAL--MENSUAL ROUNDED =
ENT--SAL
ENT
SAL--BASE * 2
END--IF
END
PERFORM 400400-REPORTA
REPORTA--SALARIO
PERFORM 500500-LEE
LEE--EMP
END--PERFORM.
END
REPEAT UNTIL
PROCESO-F
CONDICION
SI
FORMATO
PERFORM TEST AFTER UNTIL condición
Proceso-f
END-PERFORM
REPEAT UNTIL
Ejemplo
LEE TRABAJADOR
¿Es fin o es
empleado?
SI
CODIFICACION
PERFORM TEST AFTER UNTIL (WS-FIN-ENT = „1‟)
OR ENT-OBRERO-EMP = „E‟
PERFORM 500-LEE-ENT
END-PERFORM
LOOP – EXIT – IF
FORMATO
proceso-g
PERFORM UNTIL
condición
Proceso-h
Proceso-g
END-PERFORM
PROCESO-G
CONDICION
PROCESO-H
SI
LOOP – EXIT - IF
Ejemplo
PROCESO-G
CONDICION
CODIFICACION
PROCESO-H
PERFORM 500-LEE-REGISTRO
PERFORM UNTIL WS-FIN = „1‟
PERFORM 060-LISTA-REGISTRO
PERFORM 500-LEE-REGISTRO
END-PERFORM
SI
Terminación Anormal
SI
CONDICION
MENSAJE
CODIFICACION
IF condición excepción
DISPLAY WS-PROG „mensaje descriptivo‟
PERFORM 980-ABORTA
END-IF
ABORTA
Terminación Anormal - Ejemplo
¿ID leí <
ID ant?
SI
ARCHIVO
MAL
CLASIFICADO
CODIFICACION
IF ENT-ID-LEI < WS-ID-ANT
DISPLAY WS-PROG „ARCH. DE MOVIMIENTOS‟
„FUERA DE SECUENCIA (ASC)‟
DISPLAY „iD. ANT.....‟ WS-ID-ANT
DISPLAY „ID. LEI……„ ENT-ID-LEI
PERFORM 980-ABORTA
END-IF
ABORTA
Indentación
• Codificación de un proceso o parte de un proceso
alineado 4 columnas a la derecha de la alineación
base
• Pretende hacer visible la lógica
• Todos los procesos dentro de un IFIF-THEN
THEN--ELSE,
WHILE--DO, REPEATWHILE
REPEAT-UNTIL, LOOPLOOP-EXIT
EXIT--IF y CASE,
se indentan a partir de la alineación base
• (Observe la indentación de los ejemplos presentados)
• Si una instrucción no cabe en una línea, su
continuación se indentará 4 columnas o más de la
alineación base de la instrucción.
Indentación
PROCEDURE DIVISION.
000000
-CONTROL.
*--*
PROCESO GENERAL DEL PROGRAMA
*--PERFORM 010010-INICIO
INICIO-PROGRAMA
PERFORM 100100-PROCESO
PROCESO-PROGRAMA
PERFORM 990990-TERMINA
TERMINA-PROGRAMA
STOP RUN.
*--*
INICIO DE PROGRAMA
*--010010
-INICIO
INICIO-PROGRAMA.
PERFORM 011011-ABRE
ABRE-ENTRADA
IF WSWS-FILE
FILE-STATUS NOT = 0
PERFORM 980980-ABORTA
ENDEND
-IF.
. . . .
. . . .
. . . .
Modularidad
• Dividir el programa en varios grupos de instrucciones
llamadas módulos
• La instrucciones de Cobol PERFORM, es “Ejecuta
Módulo”
• Un módulo consta de varias instrucciones, algunas de
las cuales pueden a su vez, ser PERFORM
• El programa se procesa, ejecutando el primero de los
módulos (módulo de Control del Programa)
• Un módulo puede ser llamado a ejecución desde uno o
varios módulos (ejecución recursiva).
Modularidad
• Características:
– Cada módulo debe tener una sola función
– La función de cada módulo debe ser completa
– La división en módulos debe ser de acuerdo a la estructura
lógica del problema a resolver
– La división en módulos debe aislar los efectos de posibles
modificaciones al programa
– Un módulo debe ser de un tamaño que sea fácilmente
comprensible
– Si la función es muy extensa se subdivide en sub-funciones,
la función de módulo original no se altera
Modularidad
• ... Características:
– La definición de cada módulo del programa debe especificar
claramente:
• Nombre del módulo
• Cuál es la función que realizará el módulo
• Cuál es su interfaz externa con otros módulos
(Qué espera recibir de entrada y qué regresa como
salida)
• Ejemplo
jemplo::
Módulo:
Función:
Entrada:
Salida:
Valida fecha.
Verificar que una fecha sea válida.
Fecha en formato estándar.
Indicador de fecha válida o inválida
Arbol de Módulos
• Diagrama para representar la jerarquía de los módulos
• Cada módulo se representa como un rectángulo y
tiene conectados hacia abajo los módulos que
dependen de él exclusivamente
• En la parte inferior se representan sin estar
conectados hacia arriba los módulos compartidos
Ejemplo:
CONTROL
000
INICIO
PROCESA POLIZA
010
CARGA TABLAS
011
TERMINA
100
ALTA
CAMBIO
110
120
990
BAJA
130
PROCESA ALTA
110
VALIDA
111
ESCRIBE
MAESTRO
600
CALCULA
112
ESCRIBE
REPORTE
610
LEE
MOVIMIENTO
500
SUMA
113
LEE
MAESTRO
510
ABORTA
980
CIFRAS CONTROL
990
Estructuras de datos
• Agrupaciones de datos con una cierta organización y
objetivo
• Modularizaciones de datos
• Las Estructuras de Datos son muy diversas. Algunas
de las más comunes en problemas típicos para
aplicaciones administrativas son: Identidades,
Acumuladores, Tablas y Encabezados
• Simplifican la referencia a datos
• Permiten organizar los datos por grupos
Identidades
• Es una Estructura de Datos que agrupa todos los
campos necesarios para identificar un registro en sus
distintos niveles.
• Se usan para identificar uno o varios registros de un
archivo, verificar la clasificación de un archivo, hacer
cortes de control, etc
Identidades
• Ejemplo:
– Se tiene un archivo con los siguientes datos:
Organización, Grupo, Sociedad, Empresa, Planta,
Departamento y otra información corporativa
– Obtener las identidades:
• Llave de lectura: Organización, Grupo, Sociedad,
Empresa, Planta y Departamento
• Departamento: Organización, Grupo, Sociedad, Empresa,
Planta y Departamento
• Empresa: Organización, Grupo, Sociedad y Empresa
• Grupo: Organización, Grupo y Sociedad
Identidades
• Solución
ID-Lectura
ID-Departamento
ID-Empresa
ID-Grupo
ORGAN
GRUPO
X
XX
SOC
XX
EMPR PLANTA
XXX
XXX
DEPART
X(4)
Identidades
• Para verificar la clasificación o mover el valor HighHigh-value,
se usa el campo IDID-Leí (nos interesa la identidad sin su
conjunto, sin saber qué es exactamente)
• Para hacer cortes se usan los campos IDID-Grupo, IDIDEmpresa, IDID-Departamento, IDID-Lectura
• Ventajas de la Estructura de Datos IDENTIDAD:
• Facilidad de manejo
• Facilidad de modificación (añadir o eliminar un nivel de
corte es fácil)
Acumuladores
• Es una Estructura de Datos que agrupa todos los campos
requeridos para acumular valores en un nivel de corte.
• La ventaja de ésta estructura está en ver los campos como
una unidad y no en distintos campos. (En la mente
tenemos un solo concepto, por ejemplo: Acumuladores de
Empresa)
Ejemplo:
Conjunto-Oper-Emp.
SALARIOS
CTO-EQUIPO
CTO-PREST
S9(7)V99
S9(7)V99
S9(7)V99
•
CTO-SERMED CTO-ENERGIA CTO-TOTAL
S9(7)V99
S9(7)V99
S9(7)V99
En el diseño de lógica de inicialización y acumulación se hace
referencia a Conjunto-Oper-Emp. aún cuando en realidad
implique los 6 acumuladores
Tablas
• Es una Estructura de datos que agrupa una repetición de
campos, y las variables requeridas para controlar dicha
repetición. Ejemplo:
Fact-Recup
ID-Cve-Riesgo
Se repite hasta
Maximo “Elem”
Veces
XX
XX
XXX
S9V99
S9V99
I(índice). Es utilizado para accesar la tabla
EXI(X).
Switch para detectar existencia de algún elemento
buscado en la tabla
Núm-Elem (s9(9))
Elemento perteneciente a la tabla
Máx-Elem (S9(9), Valor 500)
Elementos que tiene la tabla
Tablas
• Ventajas de la estructura:
– Ver todo el conjunto como una unidad
– Facilidad de manejo
– Facilidad de modificación (ejemplo: Aumentar o
disminuir la capacidad de la tabla)
Ejercicios
Ejercicio 1. Estructuras de control
• Diagrame las estructuras de control apropiadas para manejar
cada una de los procesos siguientes:
– Calcular el salario devengado en un mes por un obrero o
empleado. Los obreros tienen el salario base por semana y
se les paga cada semana, los meses de Marzo, Julio, Octubre
y Diciembre tienen 5 semanas y todos los demás sólo 4. Los
empleados tiene el salario base por quincena.
– Abortar la ejecución si la fecha de movimiento es mayor que
año 2007 y mes 10.
– Copia de todos los registros de un archivo a otro
Ejercicios
• Ejercicio 2. Generar la estructura de Identidades,
acumuladores y tablas que requiere un programa típico
que utilice el siguiente registro de entrada
CAMPO
CARACTERISTICA
Grupo
Empresa
Planta
Departamento X(6)
Número de trab.
Clave ob/emp X
Ordinario
Tiempo extra doble
Tiempo extra triple
(sin uso)
XX
XXX
XXX
X(6)
S9(9)V99 COMPCOMP-3
S9(9)V99 COMPCOMP-3
S9(9)V99 COMPCOMP-3
X(41)
Continúa en la página siguiente
POSICIONES
01-02
0103--05
03
06--08
06
09--14
09
15--20
15
21
22--27
22
28--33
28
34--39
34
40--41
40
Ejercicios
• Ejercicio 2...
– Se requiere hacer corte por:
•
•
•
•
Grupo
Empresa
Planta
Departamento
– Obtener totales por:
•
•
•
•
•
Total de número de empleados
Salario ordinario
Tiempo extra doble
Tiempo extra triple
De cada rubro, por departamento, Planta, Empresa, Grupo
y Total general
Ejercicios
• Elabore el código de Cobol de los siguientes ejercicios
– Genere al código de Cobol para almacenar totales
de cargos, abonos y saldo en un programa típico,
con capacidad para 13 enteros, 2 decimales y signo
– Genere el código de Cobol para definir una tabla de
claves de movimiento con 20 elementos y los
siguientes campos: Clave mov. – 2 posiciones,
Indicador cargo/abono – 1 posición, Descripción –
15 posiciones
Reportes y cortes de control
• Proceso secuencial simple
– Proceso secuencial de un archivo,
desde el primer hasta el último registro
•
•
•
•
•
Función inicial del proceso
Función LEER REGISTRO
WHILE – DO HAYAN REGISTROS
END DO
Función final del proceso
Diagrama del Proceso
INICIO
FUNCION INICIAL
LEER REGISTRO
FIN REGS?
PROCESAR REGISTRO
LEER REGISTRO
FUNCION FINAL
TERMINA
SI
Proceso Secuencial Simple
Código Fuente
IDENTIFICATION DIVISION.
PROGRAMPROGRAM
-ID.
PROGSEC.
REMARKS.
PROGRAMA EJEMPLO DE PROCESO SECUENCIAL
SIMPLE.
--- --- ----- --- --ENVIRONMENT DIVISION.
--- --- ----- --- --INPUTINPUT
-OUTPUT SECTION.
FILEFILE
-CONTROL.
SELECT ARCHARCH-ENT ASSIGN TO POLIZAS.
SELECT REPORTE ASSIGN TO REPORTE.
DATA DIVISION.
FILEFILE
-SECTION.
FD
ARCH-ENT.
ARCH--- --- ----- --- ---
Proceso Secuencial Simple
WORKING-STORAGE SECTION.
WORKING--- --- ----- --- --PROCEDURE DIVISION.
PROCESOPROCESO
-PRINCIPAL.
PERFORM 010010-FUNCION
FUNCION-INICIAL
PERFORM 030030-PROCESAR
PROCESAR-REGISTRO
UNTIL SWSW-FIN
FIN-ARCH = ‘1’
PERFORM 100100-TERMINA
STOP RUN.
010-FUNCION
010FUNCION-INICIAL.
*
Inicializa variables
*
Abrir archivos
PERFORM 020020-LEE
LEE-REGISTRO
020020
-LEE
LEE-REGISTRO.
--- --- ----- --- --030030
-PROCESAR
PROCESAR-REGISTRO.
*
Mover CamposCampos-registro a CamposCampos-reporte
*
Sumar CamposCampos-registro a Totales
Totales-reporte
..... ..... ..... ..... .....
Proceso Secuencial Simple
IF WS
WS-CONREN > 70
PERFORM 500500-IMPRIME
IMPRIME-ENCAB
ENDEND
-IF
WRITE REGREG-REPORTE FROM LINEALINEA-DETALLE AFTER 1
ADD 1 TO WW-CONREN
PERFORM 020020-LEE
LEE-REGISTRO.
100-TERMINA.
100*
Mover totales
totales-reporte a CamposCampos-reporte
*
Imprimir totales en reporte
*
Desplegar totales y cifras de control
*
Cerrar archivos
Proceso secuencial con cortes
•
Proceso de un archivo con grupos de registros que tienen la misma llave
– Función inicial del proceso
– Función LEER REGISTRO
– Función inicial de un grupo (incluye función mover LLAVE DE GRUPO A
ANTERIOR)
– WHILE – DO MIENTRAS HAYA REGISTROS
– IF-THEN Comparación contra llave anterior
– FUNCION PROCESAR CORTE (INCLUYE FUNCION MOVER LLAVE A
ANTERIOR)
– ELSE
– FUNCION PROCESAR REGISTRO LEIDO
– FUNCION LEER REGISTRO
– ENDIF
– ENDDO
– FUNCION FINAL DE UN GRUPO
– FUNCION FINAL DEL PROCESO
Diagrama del proceso en la página siguiente.
Proceso secuencial
con cortes
INICIO
FUNCION INICIAL
LEER REGISTRO
SI
FIN REGS?
FUNCION INICIAL DE GRUPO
SI
LLR <> LLG
PROCESAR REG. LEIDO
LEER REGISTRO
FUNCION FINAL GPO
LLR= Llave de registro
LLG= Llave grupo
FUNCION FINAL PROCESO
TERMINA
Proceso secuencial con cortes
Código fuente
IDENTIFICATION DIVISION.
PROGRAMPROGRAM
-ID.
PROGSEC.
REMARKS.
PROGRAMA EJEMPLO DE PROCESO
SECUENCIAL CON CORTES.
--- --- ----- --- --ENVIRONMENT DIVISION.
--- --- ----- --- --INPUTINPUT
-OUTPUT SECTION.
FILEFILE
-CONTROL.
SELECT ARCHARCH-ENT ASSIGN TO POLIZAS.
SELECT REPORTE ASSIGN TO REPORTE.
DATA DIVISION.
FILE SECTION.
FD
ARCH-ENT
ARCH--- --- ----- --- --WORKINGWORKING
-STORAGE SECTION.
--- --- ----- --- ---
Proceso secuencial con cortes
PROCEDURE DIVISION.
PROCESOPROCESO
-PRINCIPAL.
PERFORM 010010-FUNCION
FUNCION-INICIAL
PERFORM 030030-PROCESO
UNTIL SWSW-FIN
FIN-ARCH = ‘1’
PERFORM 100100-TERMINA
STOP RUN.
010010
-FUNCION
FUNCION-INICIAL.
*
Inicializa variables
*
Abrir archivos
PERFORM 020020-LEE
LEE-REGISTRO
*
Mover llavellave-reg a llavellave-ant
020020
-LEE
LEE-REGISTRO.
--- --- ----- --- --030030
-PROCESO.
IF LLAVE
LLAVE-REG NOT EQUAL LLAVELLAVE-ANT
PERFORM 040040-PROCESA
PROCESA-CORTE
ELSE
*
Mover CamposCampos-registro a CamposCampos-reporte
*
Sumar CamposCampos-registro a TotalesTotales-grupo
..... ..... ..... ..... .....
Proceso secuencial con cortes
IF WS
WS-CONREN > 70
PERFORM 500500-IMPRIME
IMPRIME-ENCAB
ENDEND
-IF
WRITE REGREG-REPORTE FROM LÍNEALÍNEA-DETALLE AFTER 1
ADD 1 TO WW-CONREN
PERFORM 020020-LEE
LEE-REGISTRO.
040-PROCESA
040PROCESA-CORTE.
*
Mueve CamposCampos-totales a CamposCampos-corte
*
Imprime corte
Imprime
*
Inicializa CamposCampos-totales
*
Mover llavellave-reg a llavellave-ant
100-TERMINA.
100*
Mover TotalesTotales-grupo a CamposCampos-reporte
*
Imprimir TotalesTotales-grupo en reporte
*
Mover TotalesTotales-generales a CamposCampos-reporte
*
Imprimir TotalesTotales-generales en reporte
*
Desplegar totales y cifras de control
*
Cerrar archivos
Cortes Múltiples
•
Procesar un solo archivo con grupos de registros que
tienen dos niveles de llave
1. FUNCION INICIAL DEL PROCESO
2. FUNCION LEER REGISTRO
3. FUNCION INICIAL (INCLUYE MOVER LLAVE DEL GRUPO
MAYOR Y MENOR A ANTERIOR)
4. WHILE – DO MIENTRAS HAYAN REGISTROS
5.
IF-THEN Comparación contra llave mayor anterior
6.
FUNCION PROCESAR CORTE LLAVE MAYOR
7.
FUNCION PROCESAR CORTE LLAVE MENOR
8.
ELSE
9.
IF-THEN Comparación contra llave menor anterior
10.
FUNCION PROCESAR CORTE LLAVE MENOR
11.
END.IF
12.
END-IF
Cortes Múltiples...
13.
14.
15.
16.
17.
18.
•
FUNCION PROCESAR REGISTRO LEIDO
FUNCION LEER REGISTRO
ENDDO
FUNCION FINAL DEL GRUPO MENOR
FUNCION FINAL DEL GRUPO MAYOR
FUNCION FINAL DEL PROCESO
Diagrama del proceso en la página siguiente
Cortes Múltiples
Múltiples..
..
INICIO
FUNCION INICIAL
LEER REGISTRO
SI
FUNCION FINAL
GRUPO MAYOR
FIN REGS?
FUNCION INICIALGRUPO MAYOR
SI
LMR <> LMG
FUNCION FINAL
GRUPO MENOR
SI
FUNCION INICIAL
GRUPO MENOR
LMR<>LMG or
LNR<>LNG
Sig. página
Cortes Múltiples
Múltiples..
..
Viene de la página anterior
PROCESAR REG.
LEIDO
LEER
REGISTRO
FUNCION FINAL
PROCESO
TERMINA
Proceso secuencial match entre dos archivos
•
Procesar un archivo maestro en paralelo con su archivo de
movimientos ordenado por la misma llave
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
FUNCION INICIAL DEL PROCESO
FUNCION LEER REGISTRO DEL ARCHIVO MAESTRO
FUNCION LEER REGISTRO DEL ARCHIVO DE MOVIMIENTOS
WHILE – DO HAYAN REGISTROS EN EL ARCHIVO MAESTRO Y EN EL DE MOVIMIENTOS
.
IF LLAVE DEL ARCHIVO MAESTRO ES IGUAL A LLAVE ARCHIVO MOVIMIENTOS THEN
.
.
FUNCION PROCESO INICIAL DE UN MAESTRO CON MOVIMIENTOS
.
.
WHILE – DO MIENTRAS HAYA REGISTROS DE MOVIMIENTOS Y
LLAVE REGISTRO MAESTRO SEA IGUAL A LLAVE REGISTRO MOVIMIENTOS
.
.
.
FUNCION PROCESAR REGISTRO DE MOVIMIENTOS
.
.
.
FUNCION LEER REGISTRO DE MOVIMIENTOS
.
.
ENDDO
.
.
FUNCION PROCESO FINAL DE UN MAESTRO CON MOVIMIENTOS (TOTALES Y/O
REESCRIBIR REGISTRO MAESTRO PARA ACTUALIZARLO)
.
.
FUNCION LEER REGISTRO DEL MAESTRO
.
ELSE
.
.
IF LLAVE DEL REGISTRO MAESTRO ES MENOR A LLAVE REGISTRO DE MOVIMIENTOS
.
.
.
FUNCION PROCESAR MAESTRO SIN MOVIMIENTOS
.
.
.
FUNCION LEER REGISTRO DEL MAESTRO
Proceso secuencial match entre dos archivos
• Continúa
17
18
19
20
21
22
23
24
.
.
ELSE
.
.
.
(*1)FUNCION PROCESO DE UN GRUPO DE MOVIMIENTOS SIN
MAESTRO
.
.
END-IF.
.
END-IF.
ENDDO
WHILE – DO HAYAN REGISTROS DE MOVIMIENTOS
.
(*)FUNCION PROCESO DE UN GRUPO DE MOVIMIENTOS SIN MAESTRO
ENDDO
25
26
27
28
29
WHILE – DO HAYAN REGISTROS EN MAESTRO
.
.
.
FUNCION PROCESAR MAESTRO SIN MOVIMIENTOS
.
.
.
FUNCION LEER REGISTRO DEL MAESTRO
ENDDO
FUNCION FINAL DEL PROCESO
(*1) LA FUNCION PROCESO DE UN GRUPO DE MOVIMIENTOS SIN MAESTRO CONSISTE DE:
30
31
32
33
34
35
FUNCION PROCESO INICIAL DE GRUPO DE MOVIMIENTOS SIN MAESTRO
WHILE – DO HAYAN REGISTROS DE MOVIMIENTOS Y LA LLAVE DEL REGISTRO DE MOVIMIENTOS SEA IGUAL
A LA LLAVE DEL PRIMER MOVIMIENTO DEL GRUPO
.
FUNCION PROCESAR REGISTRO DE MOVIMIENTOS
.
FUNCION LEER REGISTRO DE MOVIMIENTOS
ENDDO
FUNCION PROCESO FINAL DE UN GRUPO DE MOVIMIENTOS SIN MAESTRO
Proceso directo y actualización
• Aplicación de movimientos desordenados contra un maestro
indexado
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
FUNCION INICIAL DEL PROCESO
FUNCION LEER REGISTRO DE MOVIMIENTO
WHILE – DO HAYAN REGISTROS DE MOVIMIENTOS
.
FUNCION VALIDAR MOVIMIENTO
.
IF MOVIMIENTO VALIDO THEN
.
.
FUNCION LEER REGISTRO CORRESPONDIENTE DEL ARCHIVO MAESTRO
.
.
IF REGISTRO CORRESPONDIENTE DEL MAESTRO EXISTE THEN
.
.
.
FUNCION ACTUALIZAR MAESTRO CON SU MOVIMIENTO
.
.
ELSE
.
.
.
FUNCION PROCESAR MOVIMIENTO SIN MAESTRO
.
.
END-IF
.
ELSE
.
.
FUNCION PROCESAR MOVIMIENTO INVALIDO
.
END-IF
.
FUNCION LEER REGISTRO DE MOVIMIENTO
ENDDO
FUNCION FINAL DEL PROCESO
Manejo de arreglo unidimensional (tabla)
Meses del año
MES
DESCRIPCION
Codificación Cobol de la tabla
01
01 ENERO
02 FEBRERO
03 MARZO
04 ABRIL
05 MAYO
06 JUNIO
07 JULIO
01
08 AGOSTO
09 SEPTIEMBRE
10 OCTUBRE
11 NOVIEMBRE
12 DICIEMBRE
•
TABLA-MESES.
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
TAB-MESES
05 ELE-MES
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
REDEFINES
OCCURS
X(10) VALUE ‘ENERO’.
X(10) VALUE ‘FEBRERO’.
X(10) VALUE ‘MARZO’.
X(10) VALUE ‘ABRIL’.
X(10) VALUE ‘MAYO’.
X(10) VALUE ‘JUNIO’.
X(10) VALUE ‘JULIO’.
X(10) VALUE ‘AGOSTO’.
X(10) VALUE ‘SEPTIEMBRE’.
X(10) VALUE ‘OCTUBRE’.
X(10) VALUE ‘NOVIEMBRE’.
X(10) VALUE ‘DICIEMBRE’.
TABLA-MESES.
12
PIC X(10).
Mover mes en el encabezado o fecha editada
MOVE ELE-MES(W-MES) TO E01-MES.
MOVE ELE-MES(W-MES) TO E01-MES-FECHA.
Manejo de arreglo bidimensional (tabla)
• Totales
CONCEPTO
U.MERCADO
CHEQU
ES
CHCHDEVUELTOS
TOTTOTCHEQUES
SUC. 01
150.00
25.30
175.30
SUC. 02
2,750.00
245.00
2,995.00
SUC. 03
48.00
0.00
48.00
SUC. 04
230.00
26.50
256.50
...... SUC 98
1,400.00
34.50
1434.50
GENERAL
4,578.00
331.30
4,909.30
• Codificación Cobol de la tabla
TABLA-TOTALES.
05 SUCURSALES
10 CONCEPTOS
15 W-CHEQUES
OCCURS 99.
OCCURS 03.
PIC S9(13)V99.
Manejo de arreglo bidimensional (tabla)
•
Suma a totales
IF ENT
ENT-CVE
CVE-CHEQUE = ‘D’
ADD ENTENT-IMP
IMP-CHEQUE
CHEQUE-DEV TO W
W-CHEQUES
W-CHEQUES
ELSE
ADD ENTENT-IMP
IMP-CHEQUE
TO WW-CHEQUES
W-CHEQUES
ENDEND
-IF
•
(W(W
-SUCURSAL, 02)
(W-SUCURSAL, 03)
(W-
(W(W
-SUCURSAL, 01)
(W-SUCURSAL, 03)
(W-
Impresión de totales
PERFORM VARYING IND FROM 1 BY 1
UNTIL
IND >
98
MOVE IND TO DET-TOT-SUCURSAL
MOVE W-CHEQUES (IND, 1) TO DET-TOT-CHEQUES
ADD W-CHEQUES (IND, 1) TO W-CHEQUES (99, 1)
MOVE W-CHEQUES (IND, 2) TO DET-TOT-CHEQUES-DEV
ADD W-CHEQUES (IND, 2) TO W-CHEQUES (99, 2)
MOVE W-CHEQUES (IND, 3) TO DET-TOT-CHEQUES-TOT
ADD W-CHEQUES (IND, 3) TO W-CHEQUES (99, 3)
END-PERFORM
MOVE ‘TOTAL GENERAL’ TO DET-TEX-TOTAL
MOVE W-CHEQUES (99, 1) TO DET-TOT-CHEQUES
MOVE W-CHEQUES (99, 2) TO DET-TOT-CHEQUES-DEV
MOVE W-CHEQUES (99, 3) TO DET-TOT-CHEQUES-TOT
Manejo de arreglo tridimensional
•
Planeación Financiera (Estado de Resultados Corporativo)
EMPRESA 3
EMPRESA 2
EMPRESA 1
PERIODO
CONCEPTO
VENTAS
COSTO VENTAS
UTILIDAD BRUTA
G. OPERACIÓN
G.ADMON.
UTILIDAD NETA
•
2007
5,698.45
4,526.70
1,171.75
300.00
200.00
671.75
2008
2009
(+12%)
(+9%)
6,381.76
5,069.90
1,311.86
336.00
224.00
751.86
Codificación Cobol del arreglo
01
ARREGLO.
05 CONCEPTOS
10 PERIODOS
15 EMPRESAS
20 WW-ELEM
OCCURS 06.
OCCURS 03.
OCCURS 03.
PIC S9(13)V99.
6,956.12
5,526.19
1,429.93
366.24
244.16
819.53
Manejo de arreglo tridimensional
•
Rutina de carga inicial de cédula
300300
-CARGA
CARGA-CEDULA
CEDULA-ARREGLO.
MOVE WSWS-VENTAS TO WW-ELEM(1, 1, 1)
MOVE WSWS-COSVEN TO WW-ELEM(2, 1, 1)
*
CALCULA UTILIDAD BRUTA
COMPUTE WW-ELEM(3, 1, 1) = WSWS-ELEM(1, 1, 1) – WS
WS-ELEM(2, 1, 1)
MOVE WSWS-GASOPR TO WW-ELEM(4, 1, 1)
MOVE WSWS-GASADM TO WW-ELEM(5, 1, 1)
*
CALCULA UTILIDAD NETA
COMPUTE WW-ELEM(6, 1, 1) = WSWS-ELEM(3, 1, 1) – WSWS-ELEM(4, 1, 1) WSWS
-ELEM(5, 1, 1)
•
Rutina de cálculo futuro
310310
-PROYECCION.
PERFORM VARYING INDIND-PER FROM 2 BY 1
UNTIL
IND-PER
IND> 3
AFTER
IND-EMP FROM 2 BY 1
INDUNTIL
IND-EMP
IND> 3
AFTER
IND-CON FROM 1 BY 1
INDUNTIL
IND-CON
IND> 6
IF INDIND-PER = 2
MOVE 1.12 TO WW-INFL
ELSE
MOVE 1.09 TO WW-INFL
ENDEND
-IF
COMPUTE WW-ELEM (IND(IND-CON, INDIND-PER, INDIND-EMP) =
W-ELEM (IND(IND-CON, INDIND-PER, INDIND-EMP) * W
W-INFL
ENDEND
-PERFORM.
NOTA: ESTA
RUTINA SE
DEBERA
EJECUTAR POR
CADA EMPRESA,
EN EL PERIODO
BASE QUE ES EL
AÑO 2000.
FIN DE MODULO
Derechos de autor
• Este producto has sido elaborado por
• Jorge Godínez Rodríguez.
• Derechos reservados
– Prohibida su reproducción parcial o total
128
Descargar