Está en la página 1de 50

MANUAL JCL

MODULO JCL’S

Elaborado por Sergio Oswaldo Rojas Bernal Página 1


MANUAL JCL

INTRODUCCION

El Lenguaje de Control de Trabajos (Job Control Languaje ,JCL) es una de las


formas de comunicación con el sistema operativo del ordenador. El sistema
operativo está constituido por un conjunto de programas especializados. El
objetivo de un sistema operativo es conseguir una utilización los más eficiente
posible del ordenador y de los dispositivos asociados a él.

Además, el JCL es el único sistema que permite la ejecución de los programas de


aplicación de usuario. Cada programa será el paso de una cadena de aplicación y
habrá que indicar los ficheros que utiliza.

Elaborado por Sergio Oswaldo Rojas Bernal Página 2


MANUAL JCL

DIAGRAMA DE LA EJECUCIÓN DE UN TRABAJO

LEER
TRABAJOS INTERPRETAR
BUSCAR FICHEROS

TRABAJOS COLAS DE
TRABAJO

(1) JOB
contabilidad (1) SELECCIONAR UN TRABAJO
programador
CLASS
PRTY
(2) SELECCIONAR UN PASO
TYPRUN
MSGCLASS
MSGLEVEL
BUSCAR ESPACIO F. SALIDA
(3) ASIGNAR FICHEROS
(2) EXEC CARGAR PROGRAMAS
nombre de paso

(3) DD (4) EJECUTAR PROGRAMAS

DSNAME
DCB
UNIT SALIDA DEL PROGRAMA:
VOLUME - IMPRESA (SPOOL)
SPACE - FICHEROS
DISP (5)

(4) GUARDAR O BORRAR FICHEROS


EXEC
PGM=nombre-programa

(5)
DD SI
MAS PASOS
DISP=....

NO
BORRAR INFORMACION
DEL TRABAJO

Elaborado por Sergio Oswaldo Rojas Bernal Página 3


MANUAL JCL

TIPOS DE SENTENCIAS

El JCL está compuesto por sentencias identificadas por un nombre. Además, cada
sentencia puede incorporar una serie de parámetros para su correcta ejecución.

JOB

Identifica un trabajo para el sistema, es la primera sentencia y sólo puede haber


una.

EXEC

Identifica un paso de trabajo a ejecutar, habrá una por cada programa o


procedimiento y puede haber un máximo de 256

DD

Identifica un grupo de datos (data set), que va a manejar un programa o


procedimiento y, en general, puede haber un máximo de 256, aunque la práctica
habitual y las restricciones de los lenguajes reducen este número
considerablemente.

PROC

Indica el comienzo de un procedimiento “in-stream” o catalogado. Hay


instalaciones donde no se utiliza esta forma de trabajo y no se trata en este curso.

PEND

Indica el final de un procedimiento “in-stream”.

//*

Identifica una línea de comentarios (línea no ejecutable). Sirve para documentar


internamente el JCL. Puede haber tantas como se desee y pueden estar en
cualquier lugar, excepto en la primala línea del job.

Elaborado por Sergio Oswaldo Rojas Bernal Página 4


MANUAL JCL

//

Indica el final del job (sentencia nula). No es necesario indicar esta sentencia y se
suele utilizar en pruebas para realizar “cortes” temporales en una cadena, que
permite la ejecución paso a paso o de un bloque de pasos determinados, sin
necesidad de ejecutar el resto, es decir, de llegar al final del job.

/*

No es una sentencia propiamente dicha, sino que identifica el final de un fichero


“interno” (ver sentencia “DD *”, más adelante).

SINTAXIS DE LAS SENTENCIAS

--------------- columnas ---------------


Sent. 1-2 3 12 16-72

JOB // nombre JOB parámetros y comentarios

EXEC // nombre EXEC parámetros y comentarios

DD // nombre DD parámetros y comentarios

PROC // nombre PROC parámetros y comentarios

PEND // nombre PEND comentarios

// //

//* //*comentarios

/* /*

Notas

Entre las dos barras, que identifican una línea de sentencia JCL, y el nombre no
puede haber ningún blanco.
Entre el nombre y la sentencia y entre la sentencia y sus parámetros debe haber al
menos un blanco.

Elaborado por Sergio Oswaldo Rojas Bernal Página 5


MANUAL JCL

Entre los parámetros dentro de una sentencia no puede haber blancos. Si los
hubiera, el resto de la línea se considera como comentarios.

Una línea de continuación no puede empezar en la columna 3, ni los parámetros


pueden empezar después de la columna 16.

COMPONENTES DE LAS SENTENCIAS DE CONTROL

Nombre

Identifica a la sentencia: al trabajo, a un paso o a un grupo de da- tos. Tiene un


máximo de 8 caracteres, el primer caracter debe ser alfabético (se consideran
alfabéticos los siguientes caracteres: $, # y @) y los siguientes pueden ser letras o
números.

Nota: En algunas versiones se acepta la letra “Ñ” para el nombre de job, pero se
recomienda no utilizarla.

Sentencia

Indica el nombre de la sentencia de control. Debe de estar separado del nombre


por, al menos, un blanco.

Parámetros

Pueden ser de dos tipos:

Posiciónales

El significado del párametro depende de la posición que ocupe. Cuando no


se codifican, se debe indicar su ausencia poniendo una coma, para indicar
su ausencia.

Nota: En las primeras versiones esto era obligatorio. En algunas versiones


es opcional. Se recomienda seguir usando el criterio inicial.

Elaborado por Sergio Oswaldo Rojas Bernal Página 6


MANUAL JCL

De palabra clave

El significado se determina a partir de una palabra clave que identifica al


parámetro. Pueden estar en cualquier orden y se pueden omitir porque, por
lo general, tienen valores por defecto.

A su vez, el parámetro puede estar compuesto de una serie de


subparámetros que pueden ser posiciónales o de palabra clave. Los
subparámetros deberán ir encerrados, en muchos casos, entre paréntesis.

Cuando un parámetro o subparámetro contiene caracteres especiales se debe


escribir entre comillas.

Comentarios

Sirven para documentar las fichas de control. Deben de estar separados del último
parámetro por, al menos, un blanco. Su utilización no es general.

CODIFICACION DE LAS SENTENCIAS DE CONTROL

Puesto que el primer soporte que se utilizó para escribir JCL fueron fichas
perforadas, las sentencias de control se codifican en líneas de 80 columnas y
todavía se denominan fichas o tarjetas. Cada “ficha” se divide en tres zonas:

Columnas 1-2

Todas las fichas comienzan con dos barras (//). La única excepción es
la ficha que identifica el final de un fichero interno de JCL, que contiene
barra-asterisco (/*) o delimitadores especiales (ver apartado “DLM” de
la sentencia “DD”, más adelante).

Columnas 3-72

Su contenido será el nombre, la sentencia y los parámetros necesarios


para poder ejecutar el trabajo. Estos campos deben estar separados
entre sí por al menos un blanco.

Si una ficha no fuese suficiente para codificar la sentencia de control


completamente, situación bastante frecuente:

Elaborado por Sergio Oswaldo Rojas Bernal Página 7


MANUAL JCL

se interrumpe la codificación incluyendo una coma, como máximo en la


columna 72.

si se deja un blanco después de la coma, el resto de la línea se


considera como comentario.
en la ficha siguiente se codifican barras (//) en las columnas 1-2 y los
parámetros de continuación deben empezar como mínimo en la
columna 4 y como máximo en la columna 12. La columna 3 no se debe
utilizar porque el sistema entendería que comienza otra ficha con otro
nombre.

Columnas 73-80

Contiene la numeración de las fichas. En un primer momento servía


para la clasificación de las fichas perforadas, en caso de que se
descolocasen. Actualmente no tiene ninguna utilidad.

Elaborado por Sergio Oswaldo Rojas Bernal Página 8


MANUAL JCL

SENTENCIA JOB

INTRODUCCION

Indica el principio de un trabajo (job). Esta ficha es única para el trabajo y debe
estar en la primera línea.

El nombre del trabajo debe empezar por una caracter alfabético, en la columna 3,
y puede tener hasta 8 caracteres alfanuméricos.

En algunas instalaciones este nombre está normalizado (por ejemplo, los jobs de
desarrollo tienen que empezar por el identificador del usuario que lo ejecuta).

La palabra JOB deberá comenzar en la columna 12. El nombre del trabajo y la


palabra clave JOB son obligatorios.

Nota: En algunas versiones, la palabra JOB no tiene que empezar


obligatoriamente en la columna 12.

PARAMETROS POSICIONALES

Información de contabilidad

Especifica toda la información de contabilidad exigida por la instalación. Debe ser


el primer parámetro y comenzar en la columna 16.

Si hay más de un subparámetro deben codificarse entre paréntesis. Si dentro de


los subparámetros existe algún caracter especial, debe encerrarse ese
subparámetro o toda la información entre apóstrofos o comillas (todo lo que esté
así encerrado se considera como un solo subparámetro).

Como excepción a los caracteres especiales está el caracter guión (-), que no se
considera especial. Este campo puede tener un máximo de 142 caracteres.

En algunas instalaciones, este parámetro no se codifica, al no llevar control de


contabilidad, por lo que se debe indicar una coma (parámetro posicional vacío).

Nota: En algunas versiones, no hace falta indicar el caracter coma (“,”) cuando no
se codifica este parámetro.

Elaborado por Sergio Oswaldo Rojas Bernal Página 9


MANUAL JCL

Ejemplo

//DPRJE10A JOB SUNION

Nombre de programador

Debe ir a continuación de la información de contabilidad e identifica al responsable


del trabajo. Hay instalaciones donde este parámetro no tiene contenido, pero se
incluye una coma para indicar parámetro posicional vacío. Puede tener una
longitud máxima de 20 caracteres.

Si tiene caracteres especiales, excepto el “guión” (-) y el “punto” (.), debe ir


encerrado entre apóstrofos o comillas y, si alguno de aquellos caracteres es
apóstrofo o comilla, deben ir duplicadas.

Nota: En algunas versiones, no hace falta indicar el caracter coma (“,”) cuando no
se codifica este parámetro.

Ejemplo

//DPRJE10A JOB SUNION,’F.R.M’

PARAMETROS DE PALABRA CLAVE

CLASS

Asigna una clase de entrada al trabajo. El JES lo colocará en la cola de entrada de


trabajos adecuada

CLASS=clase-ejecución

Donde las clases van especificadas por un caracter alfanumérico (A-Z,0-9).

Cada instalación define y asigna las clases a distintas actividades. Si no se indica,


generalmente, por defecto asume “A”.

Elaborado por Sergio Oswaldo Rojas Bernal Página 10


MANUAL JCL

Ejemplo

//DPRJE10A JOB SUNION,’F.R.M’,CLASS=D

MSGLEVEL

Indica los tipos de mensajes y de sentencias de control, relacionados con el


trabajo, que se quiere imprimir en el sistema.

MSGLEVEL=(sentencias,mensajes)

Sentencias

0
Sólo se imprime la sentencia JOB.

1
Se imprimen todas las sentencias fuente más las que resultan de
expandir los procedimientos catalogados en los pasos, si los hubiera.

2
Sólo se imprimen las sentencias fuente.

Mensajes

0
Se imprimen los mensajes de asignación/terminación sólo cuando el
trabajo termina anormalmente (con error).

1
Se imprimen siempre los mensajes de asignación/terminación.

Si se omite este parámetro, se toman por defecto los valores que se


hayan especificado por la instalación (generalmente, (1,1)).

Ejemplo

Elaborado por Sergio Oswaldo Rojas Bernal Página 11


MANUAL JCL

//DPRJE10A JOB SUNION,’F.R.M’,CLASS=D,MSGLEVEL=(1,1)

MSGCLASS

Especifica la clase de salida para la impresión de la información solicitada por el


parámetro MSGLEVEL (sentencias y/o mensajes).

MSGCLASS=clase-
salida

Donde la clase de salida se especifica con un caracter alfanumérico (A-Z,0-9) y


cada instalación define y asigna las distintas clases de salida que precise.

Ejemplo

//DPRJE10A JOB SUNION,’F.R.M’,CLASS=D,MSGLEVEL=(1,1),


// MSGCLASS=S

Por defecto se asume la clase asignada en generación al dispositivo de entrada


por el que se leen las sentencias de control.

NOTIFY

Provoca el envío de un mensaje de sistema, cuando termina el trabajo, al usuario


de TSO que se indica.

NOTIFY=identificador-usuario

Donde el identificador del usuario tiene de 1 a 7 caracteres alfabéticos o numéricos


(no se aceptan especiales), siendo el primero una letra.

Ejemplo

//DPRJE10A JOB SUNION,’F.R.M’,CLASS=D,MSGLEVEL=(1,1),

Elaborado por Sergio Oswaldo Rojas Bernal Página 12


MANUAL JCL

// MSGCLASS=S,NOTIFY=DPRJE10

TYPRUN

Indica la forma en la que el sistema va a considerar el trabajo, con vistas a su


ejecución.

TYPRUN={SCAN | HOLD}

Cuando no se especifica este parámetro, el sistema entiende que el trabajo es de


ejecución inmediata.

Se pueden indicar otras dos opciones, aunque sólo para pruebas y situaciones
excepcionales,

SCAN

Solicita que el sistema sólo compruebe los errores sintácticos que haya en las
fichas de control del trabajo, pero que no lo ejecute.

HOLD

El trabajo se coloca en la cola indicada por la clase de entrada, pero no se puede


ejecutar hasta que el operador lo libere.

COND

Cuando termina un paso se envía un código de retorno al planificador de trabajos.


Hay algunos valores preestablecidos que permiten saber en que “condición” ha
finalizado el paso:

0 correcto

Elaborado por Sergio Oswaldo Rojas Bernal Página 13


MANUAL JCL

4 aviso

8 error recuperable

12 error grave

16 error irrecuperable

El parámetro COND especifica las condiciones con las que los siguientes pasos de
un trabajo se ejecutarán o no. Si se cumplen las condiciones fijadas no se ejecutan
los siguientes pasos al que ha devuelto el código y el trabajo se da por terminado.

COND=((código,operador),(código,operador),.....)

Código

Debe ser un número decimal del 0 al 4095. Es el valor con el que se va


a comparar el código de retorno de los pasos ejecutados.

Operador

Indica el tipo de operación lógica a realizar con el código de retorno


devuelto por los pasos ejecutados:

GT mayor que
GE mayor o igual que
LT menor que
LE menor o igual que
EQ igual a
NE no igual a

Se pueden codificar hasta ocho condiciones distintas. Si sólo se


especifica una no hace falta codificar los paréntesis. Si se omite este
parámetro no se lleva a cabo ninguna comprobación del código de
retorno y, por tanto, se ejecutarán todos los pasos del trabajo.

Elaborado por Sergio Oswaldo Rojas Bernal Página 14


MANUAL JCL

IF

Facilita la ejecución condicionada, al eliminar el “IF inverso” que supone el


parámetro COND, realizando un IF como cualquier lenguaje de programación.

IF (condición) THEN

paso(s)

ELSE

paso(s)

ENDIF

Condición

Es una expresión que se va a evaluar. Si es verdadera se ejecuta la


parte del trabajo después de la palabra “THEN”, si es falsa se hace la
parte después de la palabra “ELSE”.

Si se especifica un nombre de paso como parte de la condición,


primero se determina si el paso fue ejecutado. Si no ha sido ejecutado,
el resulta- do de la condición será “falso”.

Los operadores utilizados son los mismos que en el parámetro COND


con algunas incorporaciones y la posibilidad de usar signos especiales,
en lugar de letras:

GT > mayor que


GE >= mayor o igual que
LT < menor que
LE <= menor o igual que
EQ = igual a
NE ¬= no igual a
NG ¬> no igual a
NL ¬< no igual a

Pudiéndose negar cualquiera de ellas con el operador

NOT ¬ no igual a

Elaborado por Sergio Oswaldo Rojas Bernal Página 15


MANUAL JCL

Además de la posibilidad de establecer condiciones complejas o


múltiples a través de los operadores lógicos

AND & AND


OR | OR

La forma general de codificar una condición sería

palabra-clave [operador codigo-condición]

Donde la palabra clave puede tener uno de los siguientes valores


reconocidos:

[nombre-paso.]RC

Indica que en la condición se va a evaluar un código de retorno. Si se


omite el nombre del paso, RC se refiere al código de retorno más alto
que se haya producido en el trabajo.

[nombre-paso.]ABEND

Indica que se compruebe una condición ABEND. Si se omite el nombre


del paso, ABEND se refiere a todos los pasos anteriores.

[nombre-paso.]ABENDCC

Indica que en la condición se va a evaluar un código de error del


sistema (Sxxx) o un código de error de usuario (Uxxx), donde “xxx”
será un valor alfanumérico de tres posiciones, para el caso de error de
sistema, o de cuatro posiciones numéricas, para el caso de error de
usuario.

Elaborado por Sergio Oswaldo Rojas Bernal Página 16


MANUAL JCL

[nombre-paso.]RUN

Indica que en la condición compruebe si un paso se ha ejecutado. Los


valores de comparación son: TRUE (para preguntar si se ha ejecutado)
o FALSE (para preguntar si no se ha ejecutado)

TIME

Permite fijar el tiempo de utilización de la CPU para un trabajo. Si se excede el


tiempo establecido se cancela la ejecución del trabajo.

TIME=([minutos][,segundos])

Minutos

Es el número de minutos de utilización (de 1 a 1440).

Segundos

Es el número de segundos de utilización (de 0 a 59).

OTROS PARAMETROS

REGION

Indica el número de posiciones contiguas de memoria necesarias para ejecutar el


trabajo.

REGION={nK | nM}

Elaborado por Sergio Oswaldo Rojas Bernal Página 17


MANUAL JCL

Donde “n” es un número par que indica el número de kilobytes (1024 octetos) o un
valor d e megabites (entre 1 y 16) que se desean reservar para este trabajo.

RESTART

Indica el paso desde el que se desea comenzar la ejecución del trabajo, en el caso
de un rearranque diferido.

RESTART={* | nombre-paso}

Donde el signo “asterisco” (*) indica que se debe comenzar desde el primer paso
del trabajo.

PRTY

Especifica la prioridad de selección que se le asigna al trabajo, dentro de una clase


de entrada determinada.

PRTY=prioridad

Donde la prioridad puede variar de 0 a 15, siendo mayor la prioridad cuanto mayor
sea el valor.

Elaborado por Sergio Oswaldo Rojas Bernal Página 18


MANUAL JCL

SENTENCIA EXEC

INTRODUCCION

La sentencia de control EXEC identifica un paso de trabajo dentro del JOB. Indica
el programa que se quiere ejecutar o un procedimiento que se debe llamar o
expandir.

La ficha EXEC puede ejecutar varios tipos de programas o procedimientos, que


son:

PROGRAMAS

Utilidades

Son programas desarrollados por empresas de software (o por el


fabricante de hardware) que realizan determinados procesos habituales
en un sistema informático: creación y mantenimiento de ficheros,
clasificación de ficheros, etc.

Son independientes del sistema operativo y su inclusión en el sistema


es opcional.

De aplicación o usuario

Son los programas “a medida” que desarrolla cada instalación para


cubrir las necesidades de sus usuarios.

PROCEDIMIENTOS

Un procedimiento es una serie de fichas de JCL que cumplen


determinadas funciones generales y, por tanto, se pueden llamar desde
cualquier parte de un trabajo. Dependiendo de la situación “física” del
procedimiento, pueden ser:

Internos

Son partes del propio trabajo que tienen un nombre de procedimiento y


se pueden llamar desde distintos puntos del JOB. Se llaman “in-

Elaborado por Sergio Oswaldo Rojas Bernal Página 19


MANUAL JCL

stream” porque están dentro del propio trabajo (están físicamente en el


JOB)

Catalogados

Son procedimientos externos que se llaman cuando se necesitan.


Suelen estar incluidos en una librería de procedimientos del sistema:
SYS1.PROCLIB o en las que establezca el departamento de Sistemas.

Estos procedimientos se llaman desde cualquier trabajo y se


“expanden” antes de ejecutar el JOB.

Los únicos campos obligatorios son el código de sentencia (EXEC), el


parámetro indicando si es un programa o un procedimiento (excepto un
procedimiento catalogado) y el nombre de programa o procedimiento
que se quiere ejecutar. El campo nombre de paso es opcional, pero se
debe codificar si se quiere hacer referencia a algo definido en ese paso
de trabajo o si se quiere modificar algún operando de la ficha EXEC, en
el caso de ser un paso dentro de un procedimiento catalogado.

También en la ficha EXEC existen operandos posiciónales, que indican


si se hace referencia a un programa (PGM) o a un procedimiento
(PROC). Sólo podrá llevar uno de estos parámetros a la vez.

PARAMETROS POSICIONALES

PGM

Indica que la sentencia EXEC va a ejecutar un programa. El programa deberá ser


miembro de una librerías”, que pueden ser del sistema, de usuario (o aplicación) o
temporal (de trabajo). Las librerías de usuario (*) tienen, generalmente, como tercer
calificador la palabra “LOAD”, para indicar que son programas ejecutables.

(*)
Para obtener más información sobre librerías de programas de
usuario, ver apartado “Sentencias DD con nombres especiales” del
capítulo “Sentencia DD”, más adelante.

Elaborado por Sergio Oswaldo Rojas Bernal Página 20


MANUAL JCL

PGM={programa |
*.nombre-paso.nombre-DD |
*.nombre-paso.nombre-paso-proc.nombre-DD}

Donde la primera posibilidad es la más utilizada.

El nombre del programa puede tener de 1 a 8 caracteres no, alfabéticos o


numéricos (no se admite ningún caracter especial), el primero de los cuales
debe ser alfabético.

Ejemplo

//DPRJE10A JOB SUNION,’F.R.M’,CLASS=D,MSGLEVEL=(1,1),


// MSGCLASS=S,NOTIFY=DPRJE10
//PASO010 EXEC PGM=PBCON026

PROC

Mediante este parámetro se invoca a un procedimiento: “in-stream”


para ejecutarlo o catalogado para que se expanda y ejecute.

[PROC=]nombre-proc

Donde el nombre de parámetro PROC es opcional, siempre que se


haga referencia a un procedimiento catalogado.

PARAMETROS DE PALABRA CLAVE

TIME

Todo lo que se indicó para el parámetro TIME en la sentencia JOB es válido aquí,
pero a nivel del paso. Su codificación es:

Elaborado por Sergio Oswaldo Rojas Bernal Página 21


MANUAL JCL

TIME[.nombre-paso-

proc]=([minutos][,segundos])
Si se codifica en una sentencia EXEC que llama a un procedimiento sin poner
nombre de paso, el tiempo indicado es el máximo para la ejecución de todo el
procedimiento, ignorándose los parámetros TIME que pudieran llevar las
sentencias EXEC internas del procedimiento.

Si se codifica el parámetro TIME en la sentencia JOB y en las distintas EXEC, no


habrá prioridades entre unas y otras: cada una tiene validez en su entorno.

Un paso que excede del tiempo indicado provoca la terminación anormal de todo
el trabajo.

COND

Un programa ejecutado en un paso de trabajo finaliza dejando, en un campo del


sistema, un valor determinado: el código de retorno,

STEP WAS EXECUTED - COND CODE nnnn

y este valor puede ser revisado, bien desde la sentencia JOB (como se
explicó) o bien desde la sentencia EXEC.

El parámetro COND especifica las condiciones bajo las que no se ejecutará


el paso, dependiendo de los códigos de retorno devueltos por uno o más
pasos anteriores.

COND[nombre-paso-proc]={[{código,operador |
código,operador,
nombre-paso.nombre-paso-
proc]
....[,{EVEN | ONLY}])

Donde código y operador tienen el mismo significado que en la sentencia


JOB. El nombre de paso o nombre de paso dentro de un procedimiento
indica el paso cuyo código de retorno se quiere probar. Si no se especifica
el nombre de paso (primer caso) se prueban todos los pasos anteriores.

Elaborado por Sergio Oswaldo Rojas Bernal Página 22


MANUAL JCL

EVEN

Indica que este paso se tiene que ejecutar aunque algún paso anterior
haya terminado anormalmente, es decir, siempre.

ONLY

Indica que este paso se ejecutará sólo si algún paso anterior ha


terminado anormalmente.

Si se codificó el parámetro COND en la sentencia JOB se ignoran los


parámetros COND que puedan aparecer en las sentencias EXEC.

PARM

Sirve para pasar algún tipo de información al programa o procedimiento antes y


para iniciar su ejecución. Mediante este parámetro, pueden asignarse alternativas
para el uso de programa.

PARM[nombre-paso-proc]=lista-parámetros

Donde la lista de parámetros es la información que se pasa al programa en


ejecución (como máximo 100 caracteres).

Si es una sentencia EXEC de procedimiento y no se especifica nombre de paso se


aplica sólo al primero de los pasos del procedimiento y, además, se ignorarán los
posibles parámetros PARM que lleven los demás pasos del procedimiento.

REGION

Tiene el mismo significado y funcionamiento que en la sentencia JOB, pero


además se puede hacer referencia a un paso de un procedimiento.

Elaborado por Sergio Oswaldo Rojas Bernal Página 23


MANUAL JCL

SENTENCIA DD

INTRODUCCION

DD son las iniciales de “DATA DEFINITION” (definición de datos). Permite


referenciar los ficheros con los que se va a trabajar en cada paso del trabajo e
indicarle al sistema su situación y características: si se van a crear en el momento,
el espacio que necesitarían en ese caso, el tipo de dispositivo, si el fichero ya
existía, su organización, si puede ser utilizado por más de un programa
simultáneamente, el número de serie del volumen, etc.

Cada sentencia DD tiene un nombre, con un máximo de 8 caracteres, alfabéticos o


numéricos (no admite ningún caracter especial), teniendo que ser el primero
alfabético, que sirve para enlazar con el nombre que se ha dado a ese fichero en
el programa y con el nombre real (físico) indicado en el parámetro DSN, dentro de
la definición del fichero, que se verá más adelante.

El nombre físico de la DD puede estar formado por más de un nombre (hasta un


máximo de 5 y con un máximo de 8 caracteres cada uno) separados por un punto.

Concatenar ficheros

Consiste en codificar una sentencia DD por cada fichero que se necesite,


colocándolas todas consecutivas y dándole el nombre del conjunto a la primera de
ellas. El sistema asume como norma que todos los ficheros que se van definiendo
sin nombre son prolongación del que define la primera sentencia DD con nombre.

Ejemplo

//SYSIN DD DSN=.........
// DD DSN=.........
// DD DSN=.........
//SYSOUT DD DSN=.........

PARAMETROS POSICIONALES

Se van a ver siguiendo un orden lógico de utilización, es decir, los que


están más relacionados entre sí. Se tienen que codificar antes de

Elaborado por Sergio Oswaldo Rojas Bernal Página 24


MANUAL JCL

cualquier parámetro de palabra clave, aunque, como se verá más


adelante, en algunos casos se consideran a su vez de palabra clave.

“asterisco” (*)

Indica que el fichero que define la sentencia DD va a continuación, por


eso se llama fichero interno de JOB.

El fin de fichero estará indicado por los signos “barra-asterisco” (/*) o


“dos barras” (//) en las columnas 1-2 o por el delimitador definido por el
parámetro DLM (que se verá más adelante).

No puede aparecer dentro de un procedimiento. Si se necesita hay que


añadirla en la llamada al procedimiento.

Aunque se le puede dar cualquier nombre, lo más habitual es verlo con


el nombre “SYSIN”, que en COBOL se lee con la instrucción ACCEPT.

Ejemplo

//SYSIN DD *
1999-09-26
/*

DATA

Tiene la misma utilidad que el parámetro “asterisco” (*), pero con la


diferencia que no considera como fin de fichero las “dos barras” (//) en
las columnas 1-2, se debe indicar necesariamente la ficha de final de
fichero (/*). Por lo tanto, es útil cuando entre los datos del fichero haya
sentencias de control. Tiene la misma restricción que la sentencia
“asterisco” (*).

DLM

Sirve para definir un delimitador distinto del estándar, es decir,


caracteres que no formen la combinación “barra-asterisco” (/*). Si el
delimitador contiene caracteres especiales tendrá que ir entre
apóstrofos o comillas. No se consideran especiales los caracteres:
“dólar” ($), “arroba” (@) y “sostenido” (#).

Elaborado por Sergio Oswaldo Rojas Bernal Página 25


MANUAL JCL

Ejemplo

//SYSIN DD *,DLM=FINAL
1999-09-26
FINAL

Elaborado por Sergio Oswaldo Rojas Bernal Página 26


MANUAL JCL

DUMMY

Sirve para definir un fichero “ficticio”. Se simulará la lectura o escritura


de un conjunto de datos sin que el programa que los utilice termine
anormalmente.

Si hubiera varias sentencias DD concatenadas, si una de ellas está


definida como DUMMY, todas las que vayan detrás serán consideradas
no reales.
para eliminar el efecto de una DUMMY previa.

PARAMETROS DE PALABRA CLAVE

Aunque el JCL no indica ninguna norma a la hora de incluir los distintos


parámetros de definición de un ficheros, en este manual se utilizará siempre un
orden concreto de asignación:

//ddname DD DSN=nombre-fichero,DISP=...,
// UNIT=unidad,VOL=SER=volumen,
// DCB=(..........),
// SPACE=(......)

Aunque, como se verá más adelante, no todos los ficheros necesitan todos los
parámetros. Por ejemplo, un fichero de entrada (que ya debe existir) no necesitará
información DCB, un fichero en cinta no necesitará SPACE, etc.

“ddname”

Se llama nombre lógico o nombre de enlace, porque es el nombre que


se utiliza dentro del programa, independientemente del nombre físico
(dsname) al que se le asigne. Por ejemplo, en lenguaje COBOL estaría
en la declaración SELECT...... ASSIGN TO nombre-enlace.

DSN (“dsname”)

Elaborado por Sergio Oswaldo Rojas Bernal Página 27


MANUAL JCL

Indica el nombre con el que el sistema debe localizar (si ya existe) o


crear (si es nuevo) el fichero definido por la sentencia de control DD.
Este nombre se puede escribir de varias formas, en función del tipo de
fichero de que se trate:

{DSNAME |
DSN} ={nombre-fichero |
nombre-fichero(nombre-miembro) |
nombre-fichero(número-GDG) |
nombre-fichero(nombre-área) |

nombre-fichero-temporal |
nombre-fichero-temporal(nombre-miembro) |
nombre-fichero-temporal(nombre-área) |

*.nombre-DD |
*.nombre-paso.nombre-DD |
*.nombre-paso.nombre-paso-proc.nombre-DD}

Donde las distintas posibilidades se han dividido en tres grupos:


ficheros permanentes, ficheros temporales (se borran al terminar el
trabajo) y la forma de dar el mismo nombre de un fichero definido en
una sentencia DD anterior.

Nombres calificados y no calificados

Un nombre no calificado está compuesto de un máximo de 8


caracteres, alfabéticos y numéricos, no admitiendo caracteres
especiales (excepto el guión).

Un nombre calificado está compuesto por varios nombres no


calificados, separados, cada uno de ellos, por un punto. Su longitud
máxima será de 44 caracteres, incluyendo los puntos de separación
(excepto los grupos de generación, que son 35 caracteres).

Si un nombre de fichero incluye caracteres especiales, que no sean el


punto y el guión, deben ir encerrados entre apóstrofos o comillas, y si
el caracter especial es un apóstrofo o comilla, debe codificarse
duplicado.

Elaborado por Sergio Oswaldo Rojas Bernal Página 28


MANUAL JCL

Los nombres calificados se aplican sólo a ficheros permanentes. Los


temporales no admiten calificación.

Ficheros permanentes

Son ficheros que permanecerán en el sistema hasta que se borren


explícitamente en un paso de un trabajo o con las utilidades del
ISPF/PDF.

Secuénciales

Un fichero secuencial es una colección de registros, colocados en un


orden físico concreto, que es por el que se procesarán.
Ejemplo

//FASTCONT DD
DSN=SUNION.CONTAB.ASTOS.DIARIO.D990926

Librerías

Una librería es una colección de ficheros con las mismas


características, que se agrupan bajo un mismo nombre. Están
formados por un directorio y un grupo de miembros. (Ver manual
“Introducción al ISPF/PDF)”).

Ejemplo

//FDATTEMP DD
DSN=SUNION.LIBDATOS.PRUEBAS(FDATTEMP)

Elaborado por Sergio Oswaldo Rojas Bernal Página 29


MANUAL JCL

Elaborado por Sergio Oswaldo Rojas Bernal Página 30


MANUAL JCL

Grupos de generación

Un grupo de generación es una colección de versiones de un fichero.


La versión actual se considera como cero (“0”) y las versiones
anteriores se numeran en forma negativa (-1, -2, etc.): cuanto más alto
es el número más antigua es la versión.

Ejemplo

//FRESHACI DD DSN=SUNION.HACIENDA.RESUMEN.ANUAL(-5)

Ficheros temporales

Son ficheros que se crean en un trabajo y sólo permanecen mientras


dura ese trabajo que los creó. Tienen dos características que los
identifican: uno o dos ampersand (“&”) por delante de un solo
calificador.

La forma de nombrarlos el sistema, para evitar posibles equivocaciones


entre los mismos nombre de distintos pasos es

nombre-trabajo.nombre-paso.nombre-dd.nombre-temporal

Si el nombre de fichero se deja en blanco o no se especifica el


parámetro DSN el sistema asume que es un fichero temporal y le da un
nombre in- terno (como se ha explicado).

Ejemplo

//DD1 DD DSN=&&SALDOS

Ficheros diferidos

Son ficheros que se usan en algún punto del trabajo y a los que se
hace referencia en otro lugar mencionando ese uso anterior.

Ejemplo

Elaborado por Sergio Oswaldo Rojas Bernal Página 31


MANUAL JCL

//PASO010 EXEC ......


//FASTCONT DD
DSN=SUNION.CONTAB.ASTOS.DIARIO.D990926
..................................
..................................
//PASO040 EXEC ......
//FCONTAST DD DSN=*.PASO010.FASTCONT

DISP

Indica la situación del fichero antes de ejecutar el paso y la situación en


la que quedará cuando termine

DISP=(estado-inicial,estado-final-normal,estado-final-error)

Donde el estado inicial especifica la situación del fichero cuando


empieza el paso, el estado final normal indica la situación del fichero si
el paso termina normalmente y estado final con error es lo que hará el
sistema con el fichero si el paso termina anormalmente.

NEW (estado inicial)

El fichero no existe, se crea en este paso de trabajo. Si hay


subparámetros detrás se puede omitir, indicando un caracter coma
(“,”).

OLD (estado inicial)

El fichero existe ya y, mientras lo utiliza este paso, ninguna otra tarea


puede acceder a él (utilización exclusiva).

SHR (estado inicial)

Elaborado por Sergio Oswaldo Rojas Bernal Página 32


MANUAL JCL

El fichero ya existe y puede ser compartido por otras tareas. Si no se


indica SHR, el sistema supone que el programa lo va a utilizar en
exclusiva.

MOD (estado inicial)

Es similar a OLD, pero obliga al sistema a posicionarse tras el último


registro que exista en el fichero, añadiendo registros a partir de ese
punto. Si no existe en este momento, se considera como nuevo.

DELETE (estado final)

Indica que el fichero no se va a utilizar en adelante y el espacio que


ocupa en el volumen debe quedar libre al final del paso.

KEEP (estado final)

Indica que el fichero puede ser utilizado en pasos posteriores, pero


codificando toda la información del fichero (UNIT, VOLUME, etc.).

PASS (estado final)

Indica que el fichero puede ser utilizado en pasos posteriores, pero no


hace falta volverlo a codificar porque el sistema guarda la información.
No se utiliza para el caso de terminación anormal.

CATLG (estado final)

Además de guardar el fichero, se guarda la información en el catálogo


del sistema o del usuario, que se proporciona en la creación.

UNCATLG (estado final)

El fichero se guarda, pero se borran las entradas del catálogo. Se


eliminan las referencias al número de serie del volumen y tipo de
dispositivo, pero el conjunto de datos no se borra, ni la entrada en la
VTOC.

Elaborado por Sergio Oswaldo Rojas Bernal Página 33


MANUAL JCL

En el estado inicial, si no se codifica este subparámetro se asume


NEW. En el estado final normal, si se omite se asume DELETE si el
estado inicial es NEW y KEEP si el estado inicial es OLD. En el estado
final anormal, si se omite se asume el mismo estado que tendrá para
una terminación normal.

En los ficheros temporales se debe codificar (si fuese necesario)


disposición PASS y no KEEP.

En un fichero particionado (librería), lo que se indique con el parámetro


DISP se aplica a toda la librería y no sólo a un miembro concreto.

UNIT

Se utiliza para especificar la unidad o tipo de dispositivo en la que se


va a almacenar un nuevo ficheros.

UNIT=unidad

Unidad

Es un nombre de 1 a 8 caracteres alfanuméricos que identifican una


serie de dispositivos. Esto se hace para facilitar aún más la asignación
de espacio a un conjunto de datos. Por ejemplo, a los dispositivos
3330, 3350, 3380 y 3390 se les puede agrupar bajo el nombre
“SYSDA”. Estos nombres se especifican en generación.

También se puede especificar una tipo de unidad concreto. Por


ejemplo, 3380, 3390, etc.

VOLUME

Identifica el volumen donde se almacenará el nuevo fichero. Se puede


abreviar como “VOL”. La información de volumen no es necesaria si los
ficheros ya están catalogados.

Elaborado por Sergio Oswaldo Rojas Bernal Página 34


MANUAL JCL

{VOLUME | VOL}=SER=número-serie

SER

Especifica el número de serie (nombre) del volumen que se desea. Es


un nombre de hasta 6 caracteres, alfabéticos y numéricos (sin
caracteres especiales), que asigna el Administrador del Sistema.

A la hora de crear un nuevo fichero, se debe consultar el volumen-serie


donde se puede incluir.

DCB

El parámetro DCB (Data Control Block) describe internamente el


fichero, es decir, especifica las características físicas que va a tener.
Su codificación es muy variable, dependiendo del método de acceso y
de la organización del fichero.

DCB=(RECFM=tipo,LRECL=n,BLKSIZE=n,DSORG=tipo)

RECFM (RECord ForMat)

Indica el tipo o formato de los registros del fichero. Los tipos más
habituales son:

F longitud fija
FB longitud fija bloqueados

V longitud variable
VB longitud variable bloqueados

LRECL (Logical RECord Length)

Indica la longitud, en octetos, del registro lógico.

Elaborado por Sergio Oswaldo Rojas Bernal Página 35


MANUAL JCL

BLKSIZE (BLocKSIZE)

Indica la longitud, en octetos, del registro físico (bloque). Si el factor de


bloqueo es el numero de registros lógicos en un registro físico y se
calcula

factor de bloqueo = BLKSIZE / LRECL

DSORG (Data Set ORGanization)

Indica el tipo de organización del fichero:

PS secuencial
IS secuencial indexado
DA organización directa
PO particionado

y, si no se especifica este subparámetro, que es lo más habitual, se


asume PS.

Si se especifica IS o DA se deben incluir una serie de parámetros


adicionales, que no se incluyen en este manual porque, en la mayoría
de las instalaciones, la creación de ficheros indexados se realiza a
través de la utilidad IDCAMS.

SPACE

Específica el espacio se quiere asignar a un nuevo fichero.

SPACE=({TRK | CYL | nn},(cant-prim,cant-sec,directorio),


RLSE,CONTIG,ROUND)

TRK

Indica espacio en pistas.

Elaborado por Sergio Oswaldo Rojas Bernal Página 36


MANUAL JCL

CYL

Indica espacio en cilindros.

nn

Indica espacio en bloques y “nn” será el número de octetos por bloque.

Cantidad primaria

Indica la cantidad de espacio que debe asignarse en principio para el


fichero. Es el espacio mínimo a asignar y se considera la primera
extensión del fichero.

Cantidad secundaria

Indica la cantidad que se debe añadir a la cantidad primaria, si se


necesita más espacio. Es opcional (puede ser cero). El espacio
máximo que ocupará es de 15 veces la cantidad que se indique aquí.
Es decir, puede haber hasta 15 extensiones adicionales del fichero.

Directorio o índice

Para un fichero particionado, indica el número de bloques, de 256


octetos, que contendrá el directorio del fichero. Para un fichero
secuencial-indexado, indica el número de cilindros que debe ocupar el
área de índices del fichero; el espacio siempre se pedirá en cilindros
(CYL). El sistema operativo distingue la finalidad de este subparámetro
consultando el subparámetro DSORG del parámetro DCB. Si no se
especifica nada se asume particionado.

RLSE

Especifica que el espacio que no se haya utilizado en la creación del


fichero debe liberarse cuando se termine el paso.

CONTIG

Indica que el espacio primario que se pidió debe ser contiguo.

Elaborado por Sergio Oswaldo Rojas Bernal Página 37


MANUAL JCL

ROUND

Si el espacio se pidió en unidades de longitud de bloque, obliga al


sistema a que redondee a un número entero de cilindros.

SYSOUT

Se utiliza para indicar un listado.

SYSOUT={clase-salida | *}

Clase de salida

Será la clase por la que se desea obtener el listado. Cada clase de


salida está asociada a un dispositivo determinado y se indica de
acuerdo con una lista consistente en letras (A-Z) y dígitos (0-9).

Indica que el listado saldrá por la clase que se indicó en el parámetro


MSGCLASS de la sentencia JOB.

COPIES

Se utiliza para especificar el número total de copias que se desea


obtener de un listado. Sólo se puede indicar con un parámetro
SYSOUT, ignorándose en cualquier otro caso.

COPIES=n

Elaborado por Sergio Oswaldo Rojas Bernal Página 38


MANUAL JCL

Donde “n” es un número de 1 a 255. Si no se codifica o se codifica mal,


asume 1.

OUTLIM

Especifica el número de máximo de líneas que se desea tenga un


listado. Si se alcanza el límite el trabajo termina anormalmente.

OUTLIM=n

Donde “n” puede tomar un valor de 1 a 16.777.215 de registros. Si no


se codifica se supone el límite máximo.

Ejemplo

//DPRJE10A JOB SUNION,’F.R.M’,CLASS=D,MSGLEVEL=(1,1),


// MSGCLASS=S,NOTIFY=DPRJE10
//PASO010 EXEC PGM=PBCON026
//VMAECONT DD DSN=SUNION.CONTAB.MAESTRO,DISP=SHR
//FASTCONT DD
DSN=SUNION.CONTAB.ASTOS.DIARIO.D990926,DISP=OLD
//FASTERRO DD DSN=SUNION.CONTAB.ASTOS.ERRORES,
// DISP=(,CATLG,DELETE),
// UNIT=3390,VOL=SER=CONT01,
// DCB=(RECFM=FB,LRECL=100,BLKSIZE=27900),
// SPACE=(TRK,(1,1),RLSE)
//LASTOSER DD SYSOUT=*
//LASTACEP DD SYSOUT=L,COPIES=3
//SYSIN DD *
1999-09-26
/*

Elaborado por Sergio Oswaldo Rojas Bernal Página 39


MANUAL JCL

SENTENCIAS DD CON NOMBRES ESPECIALES

JOBLIB

Normalmente, el sistema cuando encuentra una sentencia EXEC que llama a un


programa lo busca en la librería estándar del sistema (SYS1.LINKLIB), pero puede
ocurrir que al responsable de Explotación (o Producción) le interese que existan
librerías distintas en la instalación.

Cuando todos los programas de usuario del trabajo están en la misma librería o
cuando se desea indicar una sola vez el grupo de librerías donde están los
programas, se utilizará el nombre JOBLIB.

Existen dos restricciones: debe ser la primera sentencia DD del programa y no se


debe usar dentro de un procedimiento catalogado.

Si no encuentra el programa en la(s) librería(s) indicada(s) en la ficha JOBLIB,


busca en la estándar. Si no encuentra algún programa, el trabajo termina
anormalmente o dependiendo de las condiciones establecidas.

Ejemplo

//DPRJE10A JOB SUNION,’F.R.M’,CLASS=D,MSGLEVEL=(1,1),


// MSGCLASS=S,NOTIFY=DPRJE10
//JOBLIB DD DSN=SUNION.CONTAB.LOAD,DISP=SHR

STEPLIB

Su función y utilidad es la misma que la de JOBLIB, pero indicándola en cada


paso.

Si se codifica STEPLIB se ignora la JOBLIB, si existe.

STEPLIB si puede estar en un procedimiento catalogado y, dentro del paso, puede


ocupar cualquier posición.

Ejemplo

Elaborado por Sergio Oswaldo Rojas Bernal Página 40


MANUAL JCL

//DPRJE10A JOB SUNION,’F.R.M’,CLASS=D,MSGLEVEL=(1,1),


// MSGCLASS=S,NOTIFY=DPRJE10
//PASO010 EXEC PGM=PBCON026
//STEPLIB DD DSN=SUNION.CONTAB.LOAD,DISP=SHR

SYSABEND y SYSUDUMP

Definen unos listados donde se va a efectuar el volcado de memoria, en caso de


que el trabajo termine anormalmente.

La diferencia entre ambas reside en la parte de la memoria que se vuelca al


fichero: SYSUDUMP sólo vuelca el área del programa problema (suele usarse por
el Área de Aplicaciones) y SYSABEND vuelca el núcleo del sistema, el área del
programa problema y la tabla de “trace” (interesa más al Área de Sistemas).

Elaborado por Sergio Oswaldo Rojas Bernal Página 41


MANUAL JCL

EJEMPLO DE UN JCL SORT/ OUTFILE

//DHAADPP1 JOB CLASS=B,TIME=999,REGION=68M,MSGCLASS=H,MSGLEVEL=(1,1)


//JOBLIB DD DSN=COB$E.ALTAMIRA.LOADLIB.BATCH,DISP=SHR
//* %%SET %%FECHA = %%$ODATE
//* %%SET %%ANO = %%SUBSTR %%FECHA 1 4
//* %%SET %%MES = %%SUBSTR %%FECHA 5 2
//* %%SET %%DIA = %%SUBSTR %%FECHA 7 2
//* %%SET %%FECHACOM = %%ANO-%%MES-%%DIA
//*===================================================================
//* POSICION PROPIA FASE II LIQUIDACION DIARIA *
//*===================================================================
//*===================================================================
//**BORRADO DE LOS ARCHIVOS DE SALIDA DE LOS PASOS SIGUIENTES *
//*===================================================================
//HAPP1100 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DELETE ( COB$E.HA.FWSD1.HAADPP1.HAP1090.HADT006 -
COB$E.HA.FISD1.HAADPP1.HAPP1080.CAD -
COB$E.HA.FISD1.HAADPP1.HAPP1080.CHF -
COB$E.HA.FISD1.HAADPP1.HAPP1080.USD -
COB$E.HA.FISD1.HAADPP1.HAPP1080.SEK -
COB$E.HA.FISD1.HAADPP1.HAPP1080.GBP -
COB$E.HA.FISD1.HAADPP1.HAPP1080.JPY -
COB$E.HA.FISD1.HAADPP1.HAPP1080.EUR -
COB$E.HA.FISD1.HAADPP1.HAPP1070.TOTAL -
COB$E.HA.FISD1.HAADPP1.HAPP1060.TOTAL.CPY -
COB$E.HA.FISD1.HAADPP1.HAPP1050.DOLARES -
COB$E.HA.FISD1.HAADPP1.HAPP1040.SORT -
COB$E.HA.FWSD1.HAADPP1.HAPP1020.HADTPP4 ) NONVSAM
SET MAXCC=00
SET LASTCC=00
//*

Elaborado por Sergio Oswaldo Rojas Bernal Página 42


MANUAL JCL

//*===================================================================*
//* DESCARGA DE LA TABLA HADT006 *
//* CONDICIONES: *
//* NCTA = 199095011 Y 199095004 *
//* CODDIV <> ' ' ---> VACIO *
//* CODUDU <> 'HA4C1402' ---> CARGA MASIVA *
//* FECON = '%%FECHACOM' *
//*===================================================================*
//HAPP1090 EXEC UNLOAD,
// PARM='$DB2,$EHAADPP1HAPP1090,NEW/RESTART,,MSGLEVEL(1)'
//* PARM='$DB2,$EHAADPP1HAPP1090,TERM,,MSGLEVEL(1)'
//SYSREC DD DSN=COB$E.HA.FWSD1.HAADPP1.HAPP1090.HADT006,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,SPACE=(CYL,(400,200),RLSE),
// DCB=(RECFM=FB,BLKSIZE=0)
//SYSIN DD *
UNLOAD SHRLEVEL CHANGE CONSISTENT NO
SELECT * FROM $ET³³.HADT006
WHERE ( FECON = '%%FECHACOM' AND
NUCTA IN ('199095011','199095004') AND
CODUSU <> 'HA4C1402' AND
CODDIV <> '')
//*
//*===================================================================*
//* SORT POR CODDIV SE SACAN 7 ARCHIVOS, UNO POR CADA TIPO DE *
//* DIVISA Y SE TOTALIZAN LOS IMPORTES DEBE Y HABER EN DIVISAS *
//*===================================================================*
//HAPP1080 EXEC PGM=ICEMAN,COND=(4,LT)
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(80,40),RLSE)
//SORTWK02 DD UNIT=SYSDA,SPACE=(CYL,(80,40),RLSE)
//SORTWK03 DD UNIT=SYSDA,SPACE=(CYL,(80,40),RLSE)
//SORTWK04 DD UNIT=SYSDA,SPACE=(CYL,(80,40),RLSE)
//SORTWK05 DD UNIT=SYSDA,SPACE=(CYL,(80,40),RLSE)
//SORTWK06 DD UNIT=SYSDA,SPACE=(CYL,(80,40),RLSE)
//SORTWK07 DD UNIT=SYSDA,SPACE=(CYL,(80,40),RLSE)
//SORTIN DD DSN=COB$E.HA.FWSD1.HAADPP1.HAPP1090.HADT006,
// DISP=SHR
//CAD DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1080.CAD,
// BLKSIZE=0,DISP=(NEW,CATLG,DELETE),
// SPACE=(CYL,(200,100),RLSE),
// UNIT=SYSDA
//CHF DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1080.CHF,
// BLKSIZE=0,DISP=(NEW,CATLG,DELETE),
// SPACE=(CYL,(200,100),RLSE),
// UNIT=SYSDA
//EUR DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1080.EUR,

Elaborado por Sergio Oswaldo Rojas Bernal Página 43


MANUAL JCL

// BLKSIZE=0,DISP=(NEW,CATLG,DELETE),
// SPACE=(CYL,(200,100),RLSE),
// UNIT=SYSDA
//GBP DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1080.GBP,
// BLKSIZE=0,DISP=(NEW,CATLG,DELETE),
// SPACE=(CYL,(200,100),RLSE),
// UNIT=SYSDA
//JPY DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1080.JPY,
// BLKSIZE=0,DISP=(NEW,CATLG,DELETE),
// SPACE=(CYL,(200,100),RLSE),
// UNIT=SYSDA
//SEK DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1080.SEK,
// BLKSIZE=0,DISP=(NEW,CATLG,DELETE),
// SPACE=(CYL,(200,100),RLSE),
// UNIT=SYSDA
//USD DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1080.USD,
// BLKSIZE=0,DISP=(NEW,CATLG,DELETE),
// SPACE=(CYL,(200,100),RLSE),
// UNIT=SYSDA
//SYSIN DD *
SORT FIELDS=(59,3,CH,A,56,3,CH,A)
OUTFIL FNAMES=CAD,
INCLUDE=(59,3,CH,EQ,C'CAD')
SUM FIELDS=(87,8,PD,95,8,PD)
OUTFIL FNAMES=CHF,
INCLUDE=(59,3,CH,EQ,C'CHF')
SUM FIELDS=(87,8,PD,95,8,PD)
OUTFIL FNAMES=EUR,
INCLUDE=(59,3,CH,EQ,C'EUR')
SUM FIELDS=(87,8,PD,95,8,PD)
OUTFIL FNAMES=GBP,
INCLUDE=(59,3,CH,EQ,C'GBP')
SUM FIELDS=(87,8,PD,95,8,PD)
OUTFIL FNAMES=JPY,
INCLUDE=(59,3,CH,EQ,C'JPY')
SUM FIELDS=(87,8,PD,95,8,PD)
OUTFIL FNAMES=SEK,
INCLUDE=(59,3,CH,EQ,C'SEK')
SUM FIELDS=(87,8,PD,95,8,PD)
OUTFIL FNAMES=USD,
INCLUDE=(59,3,CH,EQ,C'USD')
SUM FIELDS=(87,8,PD,95,8,PD)
//*

Elaborado por Sergio Oswaldo Rojas Bernal Página 44


MANUAL JCL

//*===================================================================*
//* UNE LOS ARCHIVOS ANTERIORES EN UNO *
//*===================================================================*
//HAPP1070 EXEC PGM=SORT,COND=(4,LT)
//SYSPRINT DD SYSOUT=(*,,)
//SYSOUT DD SYSOUT=(*,,)
//SORTWK01 DD SPACE=(CYL,(80,30,),RLSE),UNIT=SYSDA
//SORTWK02 DD SPACE=(CYL,(80,30,),RLSE),UNIT=SYSDA
//SORTWK03 DD SPACE=(CYL,(80,30,),RLSE),UNIT=SYSDA
//SORTWK04 DD SPACE=(CYL,(80,30,),RLSE),UNIT=SYSDA
//SORTWK05 DD SPACE=(CYL,(80,30,),RLSE),UNIT=SYSDA
//SORTWK06 DD SPACE=(CYL,(80,30,),RLSE),UNIT=SYSDA
//SORTWK07 DD SPACE=(CYL,(80,30,),RLSE),UNIT=SYSDA
//SORTIN DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1080.CAD,
// DISP=(SHR),BUFNO=30
// DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1080.CHF,
// DISP=(SHR),BUFNO=30
// DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1080.EUR,
// DISP=(SHR),BUFNO=30
// DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1080.GBP,
// DISP=(SHR),BUFNO=30
// DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1080.JPY,
// DISP=(SHR),BUFNO=30
// DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1080.SEK,
// DISP=(SHR),BUFNO=30
// DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1080.USD,
// DISP=(SHR),BUFNO=30
//SORTOUT DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1070.TOTAL,
// DISP=(NEW,CATLG,DELETE),
// SPACE=(CYL,(400,200),RLSE),
// UNIT=SYSDA,DCB=(RECFM=FB,BLKSIZE=0)
//SYSIN DD *
MERGE FIELDS=COPY
//*

Elaborado por Sergio Oswaldo Rojas Bernal Página 45


MANUAL JCL

//*===================================================================
//* SORT PARA QUITAR PUNTOS SOBRANTES EN EL ARCHIVO Y QUEDE IGUAL
//* AL TAMA#O DEL COPY DE ENTRADA DEL PROGAMA: 226
//*===================================================================
//HAPP0060 EXEC PGM=ICEMAN,COND=(4,LT)
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1070.TOTAL,
// DISP=SHR
//SORTOUT DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1060.TOTAL.CPY,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,SPACE=(CYL,(400,200),RLSE),
// DCB=(RECFM=FB,BLKSIZE=0)
//SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(80,40),RLSE)
//SORTWK02 DD UNIT=SYSDA,SPACE=(CYL,(80,40),RLSE)
//SORTWK03 DD UNIT=SYSDA,SPACE=(CYL,(80,40),RLSE)
//SORTWK04 DD UNIT=SYSDA,SPACE=(CYL,(80,40),RLSE)
//SORTWK05 DD UNIT=SYSDA,SPACE=(CYL,(80,40),RLSE)
//SYSIN DD *
SORT FIELDS=COPY
OUTREC FIELDS=(1,3,4,4,8,4,12,10,23,10,34,1,
35,15,50,3,53,3,56,3,59,3,62,1,
63,4,67,4,71,8,79,8,87,8,95,8,
103,1,104,1,105,8,113,1,114,12,
126,3,129,14,143,1,144,1,145,4,
149,30,179,30,209,8,217,4,221,8)
//*
//**==================================================================*
//* CONVIERTE TODOS LOS VALORES DE DIVISAS (DEBE Y HABER) EN *
//* DOLARES AMERICANOS DEL DIA. * 00920000
//* DEBE: VENTAS * 00920000
//* HABER: COMPRAS * 00920000
//**==================================================================*
//HAPP1050 EXEC PGM=IKJEFT01,DYNAMNBR=20,COND=(4,LT)
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSDBOUT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//S1DQ0000 DD SYSOUT=*
//QRLSDB2 DD SYSOUT=(*,,)
//TCDF0000 DD DSN=COB$E.TC.FV01.TCDF0001,DISP=(SHR),
// AMP=('AMORG,BUFND=90,BUFNI=2')
//ENTRADA DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1060.TOTAL.CPY,
// DISP=SHR
//SALIDA DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1050.DOLARES,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,SPACE=(CYL,(400,200),RLSE),
// DCB=(RECFM=FB,BLKSIZE=0)

Elaborado por Sergio Oswaldo Rojas Bernal Página 46


MANUAL JCL

//SYSTSIN DD *
DSN SYSTEM($DB2)
RUN PROGRAM (HA4CPP02) PLAN(BV$EHAPB) PARM('%%FECHACOM')
END
//*
//*===================================================================*
//* SORT PARA REALIZAR LA SUMATORIA DE LAS COMPRAS (HABER) Y *
//* VENTAS (DEBE) EN DOLARES AMERICANOS Y EN PESOS *
//*===================================================================*
//HAPP1040 EXEC PGM=ICEMAN,COND=(4,LT)
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1050.DOLARES,
// DISP=SHR
//SORTOUT DD DSN=COB$E.HA.FISD1.HAADPP1.HAPP1040.SORT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,SPACE=(CYL,(400,200),RLSE),
// DCB=(RECFM=FB,BLKSIZE=0)
//SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(80,40),RLSE)
//SORTWK02 DD UNIT=SYSDA,SPACE=(CYL,(80,40),RLSE)
//SORTWK03 DD UNIT=SYSDA,SPACE=(CYL,(80,40),RLSE)
//SORTWK04 DD UNIT=SYSDA,SPACE=(CYL,(80,40),RLSE)
//SORTWK05 DD UNIT=SYSDA,SPACE=(CYL,(80,40),RLSE)
//SYSIN DD *
SORT FIELDS=(53,3,CH,A)
SUM FIELDS=(59,8,PD,67,8,PD,75,8,PD,83,8,PD)
//**==================================================================*
//* PROGRAMA QUE ARMA EL REGISTRO POR FECHA Y CENTRO PARA CARGAR EN
//* LA TABLA HADTPP4, INCLUYENDO LA POSICION PROPIA AJUSTADA DEL DIA *
//* ANTERIOR Y LA TRM DEL DIA. * 00920000
//**==================================================================*
//HAPP1030 EXEC PGM=IKJEFT01,DYNAMNBR=20,COND=(4,LT)
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSDBOUT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//S1DQ0000 DD SYSOUT=*
//QRLSDB2 DD SYSOUT=(*,,)
//TCDF0000 DD DSN=COB$E.TC.FV01.TCDF0001,DISP=(SHR),
// AMP=('AMORG,BUFND=90,BUFNI=2')
//ENTRH006 DD DISP=SHR,DSN=COB$E.HA.FISD1.HAADPP1.HAPP1040.SORT
//RECHAZOS DD DSN=$GOF.S0203.HAADPP1.F%%ODATE.TD001.NOFIND,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,SPACE=(CYL,(400,200),RLSE),
// DCB=(RECFM=FB,BLKSIZE=0)
//SYSTSIN DD *
DSN SYSTEM($DB2)
RUN PROGRAM (HA4CPP06) PLAN(BV$EHAPB) PARM('%%FECHACOM')
END

Elaborado por Sergio Oswaldo Rojas Bernal Página 47


MANUAL JCL

//*
//*===================================================================*
//* DESCARGA DE LA TABLA HADTPP4 * *
//* DESCARGA LOS REGISTROS CARGADOS EN EL PROGRAMA HA4CPP06 PARA
//* REALIZAR EL INFORME 079 SIB DIARIO. *
//*===================================================================*
//HAPP1020 EXEC UNLOAD,
// PARM='$DB2,$EHAADPP1HAPP1020,NEW/RESTART,,MSGLEVEL(1)'
//* PARM='$DB2,$EHAADPP1HAPP1020,TERM,,MSGLEVEL(1)'
//SYSREC DD DSN=COB$E.HA.FWSD1.HAADPP1.HAPP1020.HADTPP4,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,SPACE=(CYL,(400,200),RLSE),
// DCB=(RECFM=FB,BLKSIZE=0)
//SYSIN DD *
UNLOAD SHRLEVEL CHANGE CONSISTENT YES
SELECT *
FROM $ET³³.HADTPP4
WHERE TPP4_FECHA_LIQ = '%%FECHACOM'
//*==================================================================*
//* PROGRAMA QUE GENERA INFORME 079 SIB DIARIO * 00001200
//*==================================================================*
//HAPP1010 EXEC PGM=HA3CPP03,COND=(4,LT),PARM='%%FECHACOM'
00001500
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSDBOUT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//S1DQ0000 DD SYSOUT=*
//QRLSDB2 DD SYSOUT=(*,,)
//ENTRADA DD DSN=COB$E.HA.FWSD1.HAADPP1.HAPP1020.HADTPP4,
// DISP=SHR 00002010
//INFORME DD DSN=$GOF.S0012.HAADPP1.F%%ODATE.TD001.FTO079,
// DISP=(NEW,CATLG,DELETE), 00002200
// UNIT=SYSDA,SPACE=(CYL,(300,150),RLSE), 00002300
// DCB=(RECFM=FB,BLKSIZE=0) 00002400
//*===================================================================
//* FINAL DEL HAADPP1 *
//*===================================================================

Elaborado por Sergio Oswaldo Rojas Bernal Página 48


MANUAL JCL

EJEMPLO DE UN JCL CON REPRO

//QHAADPP3 JOB CLASS=2,TIME=999,REGION=4M,MSGCLASS=H


00000100
//JOBLIB DD DSN=COBQ.ALTAMIRA.LOADLIB.BATCH,DISP=SHR 00000200
//******************************************************************* * 00001001
//* %%SET %%FECHA = %%$ODATE
//* %%SET %%ANO = %%SUBSTR %%FECHA 1 4
//* %%SET %%MES = %%SUBSTR %%FECHA 5 2
//* %%SET %%DIA = %%SUBSTR %%FECHA 7 2
//* %%SET %%FECHACOM = %%ANO-%%MES-%%DIA
//*===================================================================
//* POSICION PROPIA CONTABILIDAD QH *
//*===================================================================
//* BORRADO DE LOS ARCHIVOS DE SALIDA DE LOS PASOS SIGUIENTES *
//*===================================================================
//HADPP330 EXEC PGM=IDCAMS
//SYSOUT DD SYSOUT=(*,,)
//SYSPRINT DD SYSOUT=(*,,)
//SYSIN DD *
DELETE (COBQ.HA.FWSD1.HADPP320.HADTPP3 ) NONVSAM
DELETE (COBQ.QH.FISD1.B1.INTF.HADTPP3.F%%ODATE ) NONVSAM
SET MAXCC=0
//*-------------------------------------------------------------------*
//* EJECUTA EL PROGRAMA HA4CPP12 QUE CONTABILIZA QH LA TABLA *
//* HADTPP4 *
//*-------------------------------------------------------------------*
//HADPP320 EXEC PGM=IKJEFT1A,DYNAMNBR=20,COND=(0,LT)
//QRLSDB2 DD SYSOUT=(*,,)
//SYSTSPRT DD SYSOUT=(*,,)
//SYSOUT DD SYSOUT=(*,,)
//SYSPRINT DD SYSOUT=(*,,)
//TCDF0000 DD DSN=COBQ.TC.FV01.TCDF0001.COP1,
// DISP=(SHR),
// AMP=('AMORG,BUFND=90,BUFNI=20')
//QHARCON DD DSN=COBQ.HA.FWSD1.HADPP320.HADTPP3,
// DISP=(NEW,CATLG,DELETE),
// DCB=(RECFM=FB,LRECL=360,BLKSIZE=0),
// SPACE=(CYL,(500,250),RLSE),UNIT=SYSDA,BUFNO=30
//SYSTSIN DD *
DSN SYSTEM(DB2D)
RUN PROGRAM(HA4CPP12) PLAN(BVQHAPB) PARM('%%FECHACOM')

Elaborado por Sergio Oswaldo Rojas Bernal Página 49


MANUAL JCL

//*-------------------------------------------------------------------*
//* COPIA EL ARCHIVO CONTABLE PARA DARLE NOMBRE DE QH *
//*-------------------------------------------------------------------*
//HADPP310 EXEC PGM=IDCAMS,COND=(0,LT)
//CSDI DD DSN=COBQ.HA.FWSD1.HADPP320.HADTPP3,
// DISP=(SHR),BUFNO=30
//CSDO DD DSN=COBQ.QH.FISD1.B1.INTF.HADTPP3.F%%ODATE,
// DISP=(NEW,CATLG,DELETE),
// DCB=(RECFM=FB,LRECL=360,BLKSIZE=0),
// SPACE=(CYL,(500,250),RLSE),BUFNO=30,UNIT=SYSDA
//SYSPRINT DD SYSOUT=(*,,)
//SYSIN DD *
REPRO INFILE(CSDI) OUTFILE(CSDO)
//*

FIN

Elaborado por Sergio Oswaldo Rojas Bernal Página 50

También podría gustarte