Sei sulla pagina 1di 10

N

IDENTIFICATION DIVISION
1
2
3

IDENTIFICATION DIVISION
4
5

DATA DIVISION
6

WORKING STORAGE SECTION


7

10

11

12
13
14
15

16

17
18
19
20

LINKAGE SECTION
21

PROCEDURE DIVISION
22

23
24
25
26
27
28

29
30
31
32
33
34
35

36
37
38
39
40
41
42
43

44
45

46
47
48
49
50
51

52
53

54

55
56
57
58
59

60

61

62
63
64

65
66
67
68
69
70
71
72
73

Validaciones
IDENTIFICATION DIVISION
El nombre del programa (externo) ser el mismo que el codificado en la clusula PROGRAM-ID.
Completar siempre el apartado de AUTHOR.(Valor Everis)
Siempre debe incluirse el encabezado estndar de Zurich

IDENTIFICATION DIVISION
SPECIAL-NAMES. Se pondr siempre la sentencia:
DECIMAL-POINT IS COMMA.
Las instrucciones SELECT llevarn sus clusulas sangradas respecto a SELECT, de forma que aparezcan
cuatro columnas a la derecha.
Ejemplo:
SELECT [nombre interno de fichero]
ASSIGN TO [nombre externo del fichero]
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL

DATA DIVISION
Tomar las definiciones de ficheros y registros, a travs de la sentencia COPY.

WORKING STORAGE SECTION


Todos los campos de la Corning se agruparan bajo un nivel 01 por cada funcin que cumplan. Por ejemplo:
01 SW-SWITHCES
01 WS-VARIABLES
01 WC-CONSTANTES-ALFANUMERICAS

Los campos agrupados en ellos debern comenzar con unos caracteres especficos que se utilizarn en todas
las variables que pertenezcan a dicho bloque lgico. Los caracteres a usar sern los siguientes:
Auxiliares
WS
Indicadores(switches)
SW
Contadores
CN
ndices
WI
Tablas
WT
Constantes alfanumricas WC
Constantes numricas
WN
File status
FS
Parmetros rutinas
WL
Linkage
LK

La subordinacin de niveles, ser : 01..05..10.. con escritura escalonada, de tal manera que comiencen en la
misma columna. Se realizara un sangrado de 4 columnas a la derecha. Entre el nmero de nivel y el nombre
del grupo o de variable se dejarn dos espacios de separacin, de forma que aparezcan situados en columnas
comunes nmeros de nivel y nombres de datos.
La subordinacin de niveles deber ser mltiplo de 5 y no mayores de 45. Excepcin hecha de los niveles 88.

Tablas.

Poner las tablas juntas al final de la Corning.

Como norma general se utilizarn subndices asociados a la tabla en lugar de nmeros enteros usados
como subndices. Una opcin es utilizar INDEXED BY, pero si no se van a efectuar bsquedas en la tabla no es
necesario.

Se debe definir un nivel por encima del que contiene la clusula OCCURS para poder referenciar la tabla
como un todo.
Ejemplo:
05 TABLAS.
10 TABLA-tt..
15 TB-EL-tt.

OCCURS n
INDEXED BY IN-tt.
20 TB-tt.-xxxx
PIC X.

Las clusulas OCCURS e INDEXED BY se posicionarn en la columna 44 o en 36 de la lnea siguiente.

Los nombres de los campos pertenecientes a un fichero debern llevar un prefijo que los identifique con l.
Los campos idnticos de diferentes ficheros debern tener el mismo nombre, distinguindose entre ellos por el
prefijo del fichero al que pertenecen.
El nombre del campo debe ser siempre significativo (prefijo excluido). Se deben evitar los nombres poco claros.

El nombre del campo debe ser siempre significativo (prefijo excluido). Se deben evitar los nombres poco claros.
Las constantes deben evitar los nombres idnticos al valor que contengan, nombrndolas segn el significado
de dicho valor. Se definirn tantas constantes como significados distintos tenga el valor correspondiente.
Por ejemplo:
Se evitarn:
10 CT-F
PIC X VALUE F.
Se sustituir por:
10 CT-FIJO
PIC X VALUE F
10 CT-FINAL PIC X VALUE F

Se deben usar siempre las constantes figurativas en lugar de los literales correspondientes, tanto en VALUEs
como en MOVEs.
INCORRECTO o 0
CORRECTO SPACES o ZEROS
La utilizacin de niveles 77 en WORKING estn prohibidos.
Se utilizarn siempre nombres de condicin (nivel 88) para definir los posibles valores de indicadores, cdigos
identificativos o valores de campos que se usen para tomar alguna decisin en el programa.
La clusula PIC debe comenzar en la columna 44.
La clusula VALUE se pondr en la columna 56 o en la 36 de la lnea siguiente.

LINKAGE SECTION
En la LINKAGE SECTION deben declararse los campos a nivel 01 en la misma secuencia en que se pasan los
parmetros en la lista USING en la CALL del programa invocante y de la PROCEDURE DIVISIN del mdulo
llamado.

PROCEDURE DIVISION
Se codificar un nico nombre de prrafo principal desde el cual se invocarn todos los dems.

Cada prrafo empezar con una serie de comentarios donde se definir el nombre del mismo, y una sucinta
descripcin de las funciones que realiza.
Primero se debe codificar el ncleo principal. Al ncleo principal le seguirn los prrafos de inicio, proceso y fin,
y, a continuacin el resto de prrafos desde el nivel ms general hasta el de mayor detalle en el orden en que
se van llamando.
Todos los prrafos deben tener un nombre descriptivo y un nmero secuencial como prefijo. Este nmero debe
estar ordenado en el programa, es decir, no debe ponerse nunca el prrafo 2300- antes del 2100-, por ejemplo.
Dejar una lnea en blanco, entre los diferentes prrafos que componen el programa, para claridad en lectura.
Aplicar tambin a sentencias PERFORM.
Ningn prrafo debe sobrepasar 60 lneas de cdigo, debindose fraccionar stos mediante llamadas a otros
prrafos.
Se evitar en lo posible que un prrafo llame a otro con un prefijo numrico menor que el suyo. Para ello los
prrafos comunes deben comenzar por un numero alto anterior al 8000, por ejemplo 7771. No se tendr en
cuenta este punto, si se va a producir una acumulacin excesiva de prrafos comunes al final del programa, lo
que llevara a una gran confusin en el seguimiento del mismo.
Se escribir siempre una instruccin por lnea.
Al inicializar varias variables con un mismo valor, el valor asignado aparecer una sola vez.
Eliminar cualquier registro o tem independiente en la Corning-Storage, siempre que no est referenciado en la
Procedure Divisin.
Acabar los programas BATCH con GOBACK.
Incluir un nico punto solo al final de cada prrafo.
Utilizar la sentencia INITIALIZE para inicializar los campos de working, en especial los de nivel 01. Es necesario
utilizarla cuando se inicializan campos de grupo y, en especial, si alguno de los campos de nivel inferior es
numrico.
Utilizar la sentencia EVALUATE siempre que el sustituirla por IF anidados aumente de forma considerable la
complejidad del programa (cuando haya ms de cinco niveles de anidamiento de IF sobre la misma variable).
Debe terminarse en END-EVALUATE. Evitar las opciones EVALUATE WHEN TRUE, EVALUATE WHEN FALSE
ya que en estos casos es ms fcil el uso de IF.
La clusula WHEN se sangrar 4 posiciones sobre la sentencia EVALUATE, y las sentencias a cada WHEN se
sangrarn 4 posiciones sobre ste.
Siempre existir la opcin WHEN OTHER.
Hay que procurar colocar las opciones ms probables en los WHENs ms altos.
No utilizar la sentencia GO TO.
Las sentencias INSPECT, STRING, UNSTRIG, son sentencias bastante costosas, por lo que se recomienda
utilizarlas slo cuando sean necesarias.
En el caso del STRING, considerar si se puede utilizar la instruccin MOVE VAR1(Posicin: Desplazamiento)
TO ..., en cualquiera de sus modalidades.
En las sentencias STRING y UNSTRING, definir el carcter delimitador en Corning o utilizar BY SIZE.
Si se accede a variables del sistema como DATE, DAY, TIME, CURRENT-DATE o TIME-OF-DAY, obtener el
valor de la variable una sola vez en la rutina de inicializacin, y ponerlo en un campo de la WORKINGSTORAGE para posteriormente ser referenciado.
IF NUMERIC e IF ALPHABETIC, son muy costosos, por lo que debe restringirse su uso.
Terminar los IF, con su correspondiente END-IF, de este modo se consigue que el programa quede
perfectamente estructurado y se facilita la comprensin y el mantenimiento del mismo.

Indentacin de sentencias IF con 4 espacios, separando con una lnea la sentencia ELSE y END-IF.
Las sentencias condicionales complicadas o las sentencias IF anidadas deben tratar de desdoblarse en
sentencias simples.
En el caso de IF anidados, ponerlos en orden ms probable, al menos probable.
Deben evitarse las condiciones NOT, especialmente si van combinadas con OR, dado que tienden a compilar la
lgica del programa.
Se procurar no utilizar conjuntamente condiciones AND y OR, ya que conducen a malentendidos.

No es recomendable la utilizacin de IF anidados cuando las condiciones se han de verificar sobre distintas
variables. En caso de se imprescindible la utilizacin IF anidados sobre distintas variables, se debern utilizar
sentencias PERFORM, de forma que no se utilicen ms de 3 niveles de anidamientos de los IF.
ndices.
Los campos con ndices que se referencien frecuentemente deben moverse a un rea de trabajo para efectuar
clculos, devolviendo el resultado al campo original.
Se deben emplear campos del tipo S9(4) COMP como ndices para mejorar el rendimiento.
Rutinas.
Se debern inicializar los parmetros de llamada al comienzo del programa, ya que sino puede causar
problemas si hay mltiples llamadas al subprograma. Esto es debido a que una copia del programa, incluyendo
su Corning Storage, es retenida en memoria. Se recomienda usar la sentencia CANCEL inmediatamente
despus de la sentencias CALL, con lo que el subprograma es siempre devuelto a su estado inicial.

Usar SEARCH si la tabla tiene 50 elementos o menos.


Usar SEARCH ALL, si la tabla est clasificada y contiene ms de 50 elementos.
Para cualquier tamao de tabla poner los datos ms frecuentes en los primeros elementos de la tabla, si es
posible.
Si un dato de una tabla es procesado muchas veces (esto es, varias referencias al mismo dato en el mismo
camino lgico o bucle), moverlo a un dato fijo declarado al principio de la WORKING-STORAGE, y tomar este
mismo campo como referencia.
En la sentencia SEARCH, debe controlarse la clusula AT END, y debe terminar en END-SEARCH.

No usar DEPENDING ON.


1. Usar bsqueda secuencial con ndices literales para tablas de hasta 15 registros.
2. Utilizar bsqueda binaria para grandes tablas. La bsqueda binaria puede reducir drsticamente la
cantidad de tiempo necesitado para realizarla. SEARCH ALL genera una bsqueda binaria si la tabla est
ordenada (ascendente o descendentemente) y es unidimensional.
3. No usar nunca bsquedas secuenciales con ndice variable.
4. Para realizar bsquedas binarias en una tabla parcialmente cargada, cargar el resto de la tabla con HIGHVALUE o LOW-VALUE, dependiendo de si la clave est en orden ascendente o descendente.
Por ejemplo, una tabla con 10,000 elementos requiere una media de 5,000 comparaciones por bsqueda con
bsqueda secuencial, mientras que una bsqueda binaria requiere un mximo de 14 comparaciones.
Manipular tablas con ndice en lugar de subscripts siempre que sea posible.

En las lecturas de datos para construir tablas internas:


1. Al informar la tabla hay que controlar que no se supere el mximo nmero de elementos definidos en el
OCCURS. Este dato se puede incluir en la definicin de la propia tabla (a nivel 15).
2. Si se trata de una tabla interna de un mdulo BATCH y (por cuestiones de rendimiento) es necesario
conservarla entre llamadas hay que procurar no inicializarla al principio del programa.

Bucles
Reducir o minimizar el nmero de ejecuciones del bucle.
Mover todos los clculos que sean posibles fuera del bucle.
Operaciones de Clculo.
Ejecutar operaciones aritmticas con COMPUTE, exceptuando los contadores, ndices, ..., que se realizarn
con ADD (es decir no utilizar COMPUTE con operaciones simples). Se deber utilizar con expresiones
complicadas porque generalmente es ms eficiente debido a que el compilador guarda reas de trabajo
internas y no tiene que almacenar los resultados de los clculos intermedios. Es responsabilidad del
programador asegurar que los datos han sido definidos con el adecuado nmero de dgitos significativos.
Utilizar siempre a menos que se necesite el resto de una divisin.

Para optimizar las operaciones aritmticas: si los datos no estn en el formato ideal, es preferible moverlos
antes a un campo de WORKING con el formato ideal, antes de realizar las operaciones.
No utilizar la clusula ON SIZE ERROR.
Utilizar la clusula ROUNDED, lo menos posible.
Es preferible redefinir un campo en vez de multiplicar o dividir por 10 o potencia de 10.
Asegurarse, antes de ejecutar la instruccin DIVIDE, que el divisor sea distinto de cero.
Se debe evitar el uso de MOVE CORRESPONDING al ocultar tratamientos individuales de campos.
Se debe evitar el uso de WS-A(99:99) para cortar variables. Es mejor la utilizacin de REDEFINES.
No debe existir cdigo muerto.
Cuando se realizan modificaciones en el cdigo del programa se deber marcar el comienzo y el fin del cdigo
modificado. Adems, no se deber eliminar lneas de cdigo, sino que se comentarn las lneas no necesarias
y se aadir la modificacin.

Potrebbero piacerti anche