Você está na página 1de 207

CURSO DE FORMACION EN

COBOL – CICS – TSO - VTAM

BIENVENIDOS

El objetivo de este curso es desarrollar las competencias y habilidades técnicas


necesarias en cada uno de ustedes, de modo que a su término queden capacitados
para desempeñarse profesionalmente en el ambiente de desarrollo Host propio de
ACME S.A.

El curso ha sido diseñado especialmente para cumplir con el objetivo señalado, a


partir de los programas de formación que el GRUPO ARV imparte desde hace años en
España y en América del Sur, a través de sus empresas filiales.

Como en todo proceso de enseñanza aprendizaje, aquí también es indispensable


contar con la colaboración y la participación activa y comprometida de cada unos de
los alumnos. Más aún cuando en este curso lo que se pretende es formar personas
para que, una vez finalizado, puedan desempeñarse laboralmente en un medio
altamente exigente desde un punto de vista tecnológico, de su productividad y de la
calidad, todo esto inserto en un sector de la economía que se caracteriza por su
elevada competitividad.

Hoy en día, las organizaciones más eficientes son aquellas que más invierten en el
desarrollo de sus recursos humanos. ARV está dando testimonio de su política de RR.
HH. a través de la realización de estos cursos tendientes a formar una fuerza de
desarrollo de alta calidad.

Corresponde, entonces, a ustedes estimados alumnos asumir ahora su rol dentro de


este proceso formador con la mayor dedicación, profesionalismo y entrega, lo que
sumado a ese entusiasmo y empuje natural propio de personas que se están jugando
una opción de futuro profesional, nos augura resultados muy promisorios.

No me cabe ninguna duda que cada uno de ustedes así lo ha entendido, por lo que
solo nos resta iniciar las clases en un ambiente de amplia colaboración y cariño por lo
que todos estamos emprendiendo.

Les deseo mucho éxito en el curso y cuenten con nuestra mejor disposición para
acompañarlos en todo este proceso formativo.

Un saludo cordial,

Aldo Rodríguez Vera


ARV INGENIERIA E INFORMATICA

Página 1 de 207
CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Página 2 de 207
CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

INDICE GENERAL

MODULO I: FUNDAMENTOS DE PROGRAMACION


CAPITULO 1: ENTORNO TSO – ISPF / MVS (O/S 390)

1. ARQUITECTURA DE SISTEMAS

INTRODUCCIÓN 10
ARQUITECTURAS ANTERIORES AL S/360 10
Científicas 10
Decimales 10
De caracteres 10
SISTEMA 360 11
SISTEMA 370 11

2. SISTEMAS OPERATIVOS

INTRODUCCIÓN 12
PRIMEROS SISTEMAS OPERATIVOS 12
Tape Operating System (TOS) 12
Disk Operating System (DOS) 13
TIPOS DE SISTEMAS OPERATIVOS 13
Control primario de programas (PCP) 13
Multiprogramación con número fijo de tareas (MFT) 14
Multiprogramación con número variable de tareas (MVT) 14
SISTEMAS OPERATIVOS VIRTUALES 15
Almacenamiento virtual 1 (OS/VS1) 15
Memoria virtual simple (SVS – OS/VS2) 15
Memoria virtual múltiple (MVS) 16

3. SISTEMA 390

INTRODUCCIÓN 18
Disponibilidad y seguridad 18
Elección de tecnología 18
Servicio al usuario final 18
Gestión de grandes sistemas 18
Productividad 18
COMPONENTES PRINCIPALES 19
TSO 19
ISPF/PDF 19
JES 20
SDSF 20
VTAM 20
RACF 21
OTROS SUBSISTEMAS IMPORTANTES 22
IMS 22
DB2 22
CICS 23

Página 3 de 207
CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

4. CARACTERÍSTICAS GENERALES

INTRODUCCIÓN 24
PANTALLA 24
Línea 0 25
Línea 1 25
Línea 2 25
Línea 3 25
Líneas de detalle 26
Ejemplo de una pantalla 26
TECLADO 26
Teclas estándar 26
Teclas de manejo de pantalla 27
Teclas programables 28
LIBRERIA (FICHERO PARTICIONADO) 30
Directorio 31
Miembro 31
Mantenimiento de librerías 32
FICHERO SECUENCIAL 32

5. SESION DE ISPF

INICIAR LA SESION 34
Pantalla de entrada del Grupo ARV 34
Pantalla de usuario 35
Pantalla de “password” 35
Pantalla LOGON 36
MENU PRINCIPAL 36
Menú principal del ISPF/PDF 38
FINALIZAR LA SESION 39

6. PERSONALIZAR EL USUARIO

OPCIONES 40
CARACTERISTICAS DEL TERMINAL 41
Formato de pantalla 41
Tipo de terminal 41
GENERAL 41
Campo de relleno de entrada 41
Delimitador de comandos 42
TECLAS PROGRAMABLES 42
PF1 - HELP 43
PF2 - SPLIT 43
PF3 - END 43
PF4 - CURSOR o RETURN 43
PF5 - RFIND 43
PF6 - RCHANGE 43
PF7 - UP 43
PF8 - DOWN 43
PF9 - SWAP 44

Página 4 de 207
CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

PF10 - LEFT 44
PF11 - RIGHT 44
PF12 - RETRIEVE 44
KEYS 44
PFSHOW 45

7. VISUALIZAR DATOS

VIEW ENTRY PANEL 46


LISTA DE MIEMBROS 47
SELECCION DE UN MIEMBRO 49
VISUALIZACIÓN DE UN MIEMBRO 49
SCROLL 50
Eliminar mensajes (RESET) 51
COMANDOS PRINCIPALES 52
COLS 52
HEX 53
FIND 53

8. EDITAR DATOS

EDIT ENTRY PANEL 57


EDICIÓN DE UN MIEMBRO 57
PERFIL DE UN MIEMBRO 59
RECOVERY 59
NUMBER 60
CAPS 60
NULLS 60
CREACIÓN DE UN MIEMBRO 61
COPY 62
CREATE 64
COMANDOS GENERALES 65
Comunes a View 65
CHANGE 66
SAVE 67
UNDO 68
SUBMIT 68
SORT 68
CUT 69
PASTE 69
RENUM 69
UNNUMBER 70
COMANDOS DE LINEA 70
Insertar líneas 70
Copiar líneas 72
Mover líneas 73
Repetir líneas 75
Borrar líneas 76
Ocultar líneas 78
Desplazar columnas 79

Página 5 de 207
CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

9. UTILIDADES

MENU DE UTILIDADES 81
OPCIONES PARA LIBRERIAS 82
GESTION DE LIBRERIAS 82
Comprimir la librería 83
Información completa de la librería 83
Información corta de la librería 84
GESTION DE MIEMBROS 85
Lista de miembros 85
Borrar un miembro 86
Renombrar un miembro 87
CREACION DE DATA SET 89
Asignación (creación) 90
RENOMBRAR UN DATA SET 94
BORRAR UN DATA SET 95
COPIAR Y MOVER DATOS 96
LISTA DE DATA SET 99
Información sobre data set 100
Información del VTOC 103

CAPITULO 2: LENGUAJE JCL

1. CARACTERÍSTICAS DEL JCL

INTRODUCCIÓN 106
Diagrama de la ejecución de un trabajo 106
TIPOS DE SENTENCIAS 107
SINTAXIS DE LAS SENTENCIAS 108
COMPONENTES DE LAS SENTENCIAS 109
Nombre 109
Sentencia 109
Parámetros 109
Comentarios 110
CODIFICACIÓN DE LAS SENTENCIAS 110
Columnas 1-2 110
Columnas 3-72 110
Columnas 73-80 111

2. SENTENCIA JOB

INTRODUCCIÓN 112
PARÁMETROS POSICIONALES 112
Información de contabilidad 112
Nombre de programador 113
PARÁMETROS DE PALABRA CLAVE 113
CLASS 113
MSGLEVEL 114
MSGCLASS 114
NOTIFY 115

Página 6 de 207
CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

RESTART 115
TYPRUN 116
COND 116
IF 117
TIME 119
REGION 120
PRTY 120

3. SENTENCIA EXEC

INTRODUCCIÓN 121
PROGRAMAS 121
PROCEDIMIENTOS 121
PARÁMETROS POSICIONALES 122
PGM 122
PROC 122
PARÁMETROS DE PALABRA CLAVE 123
TIME 123
COND 123
PARM 124
REGION 125
SENTENCIA DD 126
INTRODUCCIÓN 126
Concatenar ficheros 126
PARÁMETROS POSICIONALES 126
“asterisco” (*) 127
DATA 127
DLM 127
DUMMY 128
PARÁMETROS DE PALABRA CLAVE 128
“ddname” 128
DSN (“dsname”) 129
Nombres calificados y no calificados 129
Ficheros permanentes 130
Ficheros temporales 130
Ficheros diferidos 131
DISP 131
UNIT 133
VOLUME 133
DCB 134
SPACE 135
COPIES 137
OUTLIM 137
SENTENCIAS DD CON NOMBRES ESPECIALES 138
JOBLIB 138
STEPLIB 139
SYSABEND y SYSUDUMP 139

Página 7 de 207
CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

CAPITULO 3: PROGRAMACION ESTRUCTURADA

1. CONCEPTOS GENERALES

PROGRAMACIÓN NO ESTRUCTURADA 141


PROGRAMACIÓN ESTRUCTURADA 141
ESTRUCTURAS BÁSICAS 142
Secuencia 142
Alternativa 143
Repetitiva 144
RECURSOS ABSTRACTOS 145
RAZONAMIENTO DEDUCTIVO "TOP-DOWN" 145
PROCESO DE CONSTRUCCIÓN 146
Diseño de un programa 147
ORGANIGRAMA 147
Símbolos fundamentales 148
SEUDOCÓDIGO 149
Secuencia 149
Alternativa 150
Repetitiva 151
Recurso abstracto 152
FICHEROS SECUENCIALES: UN EJEMPLO SENCILLO 152
El ejemplo 153
Esquema general de un programa 153
Organigrama propuesto 154
Seudocódigo propuesto 156

2. CONTROL DE RUPTURAS

INTRODUCCIÓN 157
LISTADO 158
Cabeceras (subcabeceras) 158
Detalle 159
Total 159
Contador de líneas 159
PROCESO DE RUPTURA 160
Programa manual 161
Programa informático 161
Tratamiento de cabeceras 163
EJERCICIO 1 164
EJERCICIO 2 165

3. ENFRENTAMIENTO DE FICHEROS

INTRODUCCIÓN 167
PROCESO DE ENFRENTAMIENTO 168
Programa manual 168
Programa informático 170
CONSULTA 172
Modelo básico 172

Página 8 de 207
CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

EJERCICIO 1 174
EJERCICIO 2 175

4. TABLAS

INTRODUCCIÓN 178
DEFINICIÓN DE UNA TABLA 179
TIPOS DE TABLA 180
Por número de elementos 180
Por estructura del elemento 180
Por posición de los elementos 181
Por contenido del elemento 182
Por descomposición del elemento 182
CARGA DE TABLAS 183
Por asignación de memoria 184
Por proceso de programa 184
ACCESO A TABLAS 186
Directo 186
Secuencial 186
Dicotómico 186
EJERCICIO 1 188
EJERCICIO 2 189

ANEXOS

A. PRINCIPALES METODOLOGÍAS

INTRODUCCIÓN 192
BERTINI 193
WARNIER 195
JACKSON 196

B. SOLUCIONES A LOS EJERCICIOS

EJERCICIO 2-1 197


EJERCICIO 2-2 199
EJERCICIO 3-1 201

Página 9 de 207
CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Página 10 de 207
CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

MODULO I
FUNDAMENTOS DE PROGRAMACION

CAPITULO 1
ENTORNO TSO – ISPF / MVS (OS/390)

REALIZADO POR ARV CHILE S.A. POR ENCARGO DE ARV CHILE S.A.
ENERO A MARZO DE 2002
SANTIAGO - CHILE

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 11 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

1. ARQUITECTURA DE SISTEMA

INTRODUCCION

Arquitectura de sistemas es el término utilizado para describir la relación entre las


distintas partes del ordenador y el Sistema Operativo que se va a ejecutar. La
implementación de esa arquitectura es lo que ve el equipo de Desarrollo.

La arquitectura incluye la lista de instrucciones que se pueden ejecutar, la forma de


realizar operaciones de entrada/salida (lectura y escritura de datos), el número de
operaciones que pueden efectuarse al mismo tiempo (multiproceso) y la forma de
acceso a la memoria del ordenador (real o virtual).

La arquitectura se puede dividir en dos partes: hardware y software. El hardware es el


conjunto de elementos físicos del ordenador. El software lo componen programas o
aplicaciones que se introducen en el ordenador a través de un almacenamiento
externo (cintas, discos, etc.).

Toda la información que se incluye en este manual se refiere a arquitecturas de


máquinas I.B.M. (International Business Machines) o de sistemas compatibles.

ARQUITECTURAS ANTERIORES AL S/360

Antes de hablar de los grandes sistemas actuales de I.B.M., conviene hacer un poco
de historia de los primeros ordenadores de esta empresa. Antes de la creación de la
arquitectura 360 había tres tipos de computadoras:

CIENTIFICAS

Diseñadas fundamentalmente para la realización de cálculos con cantidades muy


elevadas. El término informático para este tipo de procesos es de aritmética en coma
flotante y permite trabajar y representar cantidades numéricas muy grandes o muy
pequeñas.

DECIMALES

Diseñadas para efectuar operaciones de tipo financiero (valores monetarios). Los


números pueden ser grandes, pero raramente superan los 15 enteros y 2 decimales.
El término informático para este tipo de procesos es de aritmética decimal.

DE CARACTERES

Diseñadas para efectuar operaciones de tipo general, además de manejar números


pueden trabajar con cadenas de caracteres (nombre, direcciones, etc.).

El problema de estas arquitecturas es que, aunque todas podían manejar cualquier


tipo de datos, cada una se orientaba a una función distinta, obligando a las empresas
a elegir entre una de ellas o tener varias.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 12 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Tanto para las empresas como para los informáticos, los cambios de una arquitectura
a otra eran muy costosos en tiempo y dinero.

SISTEMA 360

Todos los modelos de este sistema tenían un objetivo común: procesar con un único
ordenador cualquier tipo de operación. Esto permitiría cambios y ampliaciones en los
equipos con gran facilidad.

La característica principal ofrecida por el fabricante era que todos los modelos eran
compatibles. Esto suponía que un programa realizado en un modelo del S/360 (o
posterior) se podía ejecutar en otro. En la práctica, esto se puede conseguir con
ciertas limitaciones.

SISTEMA 370

Esta arquitectura se distingue de la 360 en los siguientes aspectos:

1) Traducción dinámica de direcciones. Permite la independencia del programador


con respecto al hardware en el que se ejecutará el programa.

2) Multiproceso. Las aplicaciones pueden trabajar con varias CPU en el mismo


ordenador, trabajando al máximo rendimiento.

3) Protección. Se incorporan mejoras en las facilidades orientadas a la protección de


datos.

4) Direccionamiento real extendido. Se eliminan operaciones sobre memoria central.

5) Canal de direccionamiento indirecto. Más posibilidades diferentes para canales.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 13 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

2. SISTEMAS OPERATIVOS

INTRODUCCION

Se puede definir un sistema operativo como el conjunto de procedimientos que


controlan los recursos en una instalación de proceso de datos. Estos recursos
comprenden el equipo físico (hardware), los programas (software), los datos y los
operadores humanos, realizándose el control por medio de procedimientos manuales
o por soporte lógico.

Para abreviar, un sistema operativo se define como un programa que supervisa el


desarrollo y ejecución de otros programas. El principal objetivo de un sistema
operativo es extraer la mayor productividad y rentabilidad a los elementos de la
instalación.

A la hora de elegir un sistema operativo es fundamental tener en cuenta la máquina en


la que se va a utilizar. También hay que tener en cuenta otras consideraciones como
la:

Disponibilidad. El sistema operativo debe estar compuesto por subsistemas que


garanticen el funcionamiento independiente de cada uno de ellos cuando fallen los
otros.

Seguridad e integridad de la información. Cada usuario puede tener distinto nivel de


acceso a los recursos.

Facilidad de uso del sistema. Esto es muy importante, no sólo en el momento de la


implantación del sistema operativo actual sino en las futuras adaptaciones y
ampliaciones, tanto de hardware como de software.

Actualmente, un sistema operativo tiene que cubrir perfectamente las dos necesidades
principales de los usuarios: óptimo servicio de teleproceso (“on-line”) y procesos
rápidos para lotes de datos (“batch”).

PRIMEROS SISTEMAS OPERATIVOS

Los primeros sistemas operativos estaban diseñados para ejecutarse en ordenadores


mucho más pequeños que los actuales, pero su evolución a permitido llegar a los
sistemas operativos actuales.

TAPE OPERATING SYSTEM (TOS)

Se cargaba desde una cinta y el centro de proceso de datos podía ejecutar los
programas que habían desarrollado. Los programas estaban escritos para
necesidades específicas.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 14 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

DISK OPERATING SYSTEM (DOS)

Diseñado para pequeños ordenadores de la gama 360, se llaman sistemas operativos


en disco porque se soportaban en una especie de plato redondo (“disco”), un
dispositivo de memoria de acceso directo (DASD).

El sistema operativo se cargaba en memoria desde el disco y podía tener dos


aplicaciones ejecutándose al mismo tiempo: Foreground (FG) y Background (BG), de
tal forma que, mientras una de ellas esperaba recursos, se podían ejecutar
instrucciones en la otra.

TIPOS DE SISTEMAS OPERATIVOS (OS)

A medida que los ordenadores aumentaban de tamaño, el hardware empezó a ser


capaz de ejecutar más de dos aplicaciones al mismo tiempo. Se desarrollaron distintos
sistemas operativos para ser utilizados en grandes máquinas.

I.B.M. utilizó el término Operating System (OS) para distinguir este nuevo sistema
operativo del anterior (DOS). El OS estaba soportado en un disco (DASD) y se
cargaba en el ordenador para ejecutar las tareas de proceso de datos.

CONTROL PRIMARIO DE PROGRAMAS (PCP)

Es el primer OS y sólo podía ejecutar programas de uno en uno: se arrancaba un


programa, cuando terminaba entraba otro.

De cualquier forma, introduce los servicios del supervisor, que todavía existen en los
sistemas actuales. Además, permitía el manejo de grandes volúmenes de datos, gran
cantidad de tratamientos y suficiente trabajo para amortizar un ordenador.

La única ventaja de este sistema es que los programas no sufrían retraso ni


interferencia con respecto a otros programas, como sucede en sistemas multitarea.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 15 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

MULTIPROGRAMACION CON NUMERO FIJO DE TAREAS (MFT)

La mayor ventaja de este sistema con respecto al anterior es la posibilidad de ejecutar


más de una aplicación al mismo tiempo.

La denominación “fijo” se debe a que se definían un número de particiones de tamaño


fijo para llevar a cabo los trabajos. Estas particiones se llamaban P0, P1 y así hasta un
máximo de 15. El tamaño de cada partición podía ser variable (por ejemplo, P0 podía
tener 64 Kb y P1 tener 200 Kb).

Mientras un programa esperaba un recurso (por ejemplo, el montaje o lectura de una


cinta magnética), otro programa podía ejecutar una instrucción propia.

MULTIPROGRAMACION CON NUMERO VARIABLE DE TAREAS (MVT)

Con este sistema no hace falta decidir el tamaño de los programas que se van a
ejecutar. El sistema reserva una “región” de memoria adecuada para la ejecución de
cada programa. La diferencia entre partición y región es mínima y, prácticamente,
terminológica.

El MVT es mucho más flexible y utilizable por la mayoría de los grandes ordenadores
de la gama 360 y 370, dando origen al MVS.

El término “tarea” se refiere al bloque de control de tarea (task control block, TCB) que
era utilizado para mantener información sobre el programa que se ejecutaba bajo
MVT. Una tarea es una unidad de trabajo que corre bajo un sistema operativo. En la
mayoría de los sistemas primitivos un trabajo sólo tenía una tarea.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 16 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

SISTEMAS OPERATIVOS VIRTUALES

A pesar de los avances vistos en los anteriores sistemas, los constructores de


hardware habían fabricado ordenadores más grandes y rápidos de lo que los
creadores de software podían utilizar con efectividad. También las compañías usuarias
escribían cada vez aplicaciones más grandes y complejas para ejecutar.

Un primer problema era la cantidad insuficiente de memoria central y su


fragmentación, de tal forma que podían quedar espacios “vacíos” de memoria, en los
que no se podían cargar programas (ver gráfico anterior) porque tenían que hacerlo es
espacios contiguos.

Otro problema era que si el programa necesitaba un determinado espacio y no lo


encontraba no se podía ejecutar.

Esto se resolvió con la creación de los sistemas de memoria virtual: DOS/VS y su


continuador DOS/VSE, que desembocaron en el MVS.

ALMACENAMIENTO VIRTUAL 1 (OS/VS1)

Es muy similar al MFT, pero con memoria virtual. El operador puede redefinir las
particiones dinámicamente. Se pueden utilizar hasta 15 particiones para programas.

Es muy compatible con MVS. Soporta los gestores de teleproceso CICS e IMS.

MEMORIA VIRTUAL SIMPLE (SVS – OS/VS2)

Es un sistema de memoria virtual similar al MVT. El sistema operativo es el encargado


de gestionar dinámicamente la memoria virtual, sin que el operador tenga que
establecer las particiones.

La fragmentación de memoria deja de ser un problema porque el sistema hace que la


memoria para una aplicación sea siempre contigua, aunque en realidad no lo sea.

Es el sistema operativo quien gestiona los recursos. Ningún programa necesita estar
en memoria todo el tiempo, por lo que el sistema divide la memoria en bloques del
mismo tamaño, llamados “páginas”. Sólo las páginas necesarias para un programa en
un momento dado están en memoria, el resto se almacena en disco (DASD).
Cargando y descargando páginas de disco a memoria el sistema hace que parezca
que el programa está permanentemente en la memoria central. Por tanto, el sistema
puede ejecutar más programas al mismo tiempo.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 17 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

MEMORIA VIRTUAL MULTIPLE (MVS)

El MVS introduce el concepto de “espacio de direcciones”, que es el rango completo


de direcciones que puede utilizar un programa dentro del ordenador. Este programa
puede ser de cualquier tipo: batch, teleproceso o una tarea del sistema.

Cada espacio de direcciones o programa de aplicación puede acceder a un máximo


de 16 Mb de memoria, sin tener en cuenta en absoluto el tamaño de la memoria
central. Esta es una gran diferencia con el SVS, donde los 16 Mb eran la suma de
todos los espacios de direcciones. El límite en MVS/XA es de 2 Gb y en MVS/ESA de
16 Tb.

En realidad, nunca se toman los 16 Mb (entre una cuarta parte y la mitad) porque el
sistema operativo reparte la porción más alta y la más baja entre todos los espacios
de direcciones.

Aunque con algunos problemas iniciales (por ejemplo, la necesidad de rearranque,


IPL) en las primeras versiones, el MVS ofrecía grandes ventajas con respecto a los
sistemas anteriores:

1) Tareas (de terminal y programas de aplicación) ilimitadas.

2) Memoria virtual ilimitada, que suponía la eliminación de los problemas de gestión


de particiones y cambios de trabajo.

3) Menor trabajo para el operador.

Con la versión MVS/XA (eXtended Architecture) se proporcionan espacios de


direcciones de 2 Gb. Este aumento de espacio se produjo por la necesidad de acceder
a más datos y de procesos más complejos. Además aumenta en gran medida la

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 18 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

seguridad, disponibilidad y rentabilidad. La implantación de nuevo hardware es muy


sencilla.

La versión MVS/ESA (Enterprise System Architecture) incorpora un máximo de 15


espacios de direcciones exclusivamente para datos.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 19 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

3. SISTEMA 390

INTRODUCCION

El S/390 es el resultado último de la evolución explicada anteriormente, producto de


las grandes mejoras en hardware y software de los últimos años. El sistema operativo
con el que opera es el OS/390 que incluye la infraestructura de cliente/servidor y las
herramientas necesarias para agilizar y flexibilizar el desarrollo de aplicaciones en las
empresas.

Este sistema promete reducir los tiempos de respuesta, aumentar la satisfación de los
clientes y operaciones globales a través de Tecnología de la Información (IT), que
aporta las siguientes soluciones:

DISPONIBILIDAD Y SEGURIDAD

Capacidad de recuperación automática, reconfiguración dinámica y solidez con un


mínimo de infraestructura.

ELECCION DE TECNOLOGIA

La demanda de nuevas tecnologías es cada día más amplia, sobre todo en lo relativo
a lenguajes orientados a objetos y el uso de sistemas cliente/ servidor. Asimismo, se
buscan ciclos de desarrollo de aplicaciones más cortos y mantenimiento más fácil. El
OS/390 proporciona las interfases con dichas tecnologías.

SERVICIO AL USUARIO FINAL

Se incluyen facilidades que resuelven las necesidades para las aplicaciones de


usuario final, así como la disponibilidad continua de esas aplicaciones.

Integración de seguridad, redes y gestión de grandes sistemas empresariales, con la


posibilidad de múltiples sistemas concectados a una red, haciendo posible el manejo
de todos los sistemas desde un punto central.

PRODUCTIVIDAD

Se puede conseguir sin incrementar los recursos disponibles.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 20 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

COMPONENTES PRINCIPALES

TSO

Time Sharing Option (Opción de tiempo compartido) es un componente que permite


acceder a varios usuarios a la vez al sistema, de forma conversacional.

El acceso se realiza a través de comandos con los que es posible realizar cualquier
tarea informática (crear ficheros, ejecución de programas, etc.) de forma interactiva.
Esta es la forma de trabajar con TSO “nativo”.

ISPF/PDF

Para facilitar la comunicación con el sistema a los usuarios informáticos se desarrolló


la Interactive System Productivity Facility/Program Development Facility, que tiene las
siguientes características:

Ofrece la opción de reducir el uso de palabras clave de comando, evitando la


posibilidad de errores, permitiendo incluso el uso de un solo caracter para las
funciones más usuales (por ejemplo, borrar o insertar registros en un fichero).

Facilita la definición de ficheros e impresión de datos.

Genera estadísticas de creación, mantenimiento, contenido y actividad de los ficheros.

Visualiza el contenido de ficheros y listados permitiendo, mediante el uso de


determinadas teclas de función, el desplazamiento en todos los sentidos.

Posibilita la búsqueda rápida y amplia de los datos.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 21 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Permite el trabajo con “doble pantalla” en una sola pantalla física, siendo
independiente el proceso en cada una de ellas.

Ofrece amplias posibilidades para la definición y mantenimiento de librerías, ficheros,


catálogos y volúmenes almacenados en dispositivos magnéticos.

JES

El Job Entry Subsystem (Subsistema de entrada de trabajos), en sus dos versiones


JES2 y JES3 con pequeñas diferencias, controla y gestiona todos los trabajos
introducidos en el sistema.

La comunicación con el JES se realiza a través del Job Control Languaje (Lenguaje de
control de trabajos) que envía una unidad de trabajo al sistema, identificándola con un
nombre, indicando los programas o procedimientos que se van a utilizar y los ficheros
necesarios para la ejecución de esos programas.

Después de enviar el trabajo, se comprueba que no tenga errores, dándole el JES un


número de entrada y le proporciona un “iniciador” para su ejecución, dependiendo de
la “clase de ejecución” que se indicó para el trabajo.

El control de los trabajos se realiza a través del “Spool” que contiene información
sobre “colas” de trabajos de: entrada (esperando memoria para entrar a ejecutarse),
ejecución (activas en memoria) y salida (terminados y en espera de impresión o
borrado).

SDSF

La System Display and Search Facility (Facilidad de búsqueda y visualización del


sistema) permite controlar y visualizar la situación de todos los trabajos del
ordenador, es decir, presenta la situación del “spool” en un momento determinado.

Es un subsistema independiente del PDF, aunque en algunas instalaciones se incluye


dentro de su menú, como una facilidad más del ISPF.

Con esta facilidad se puede ver la “cinta” LOG (rastro de todas las operaciones
realizadas durante una sesión de TSO), los trabajos de entrada (en espera de
memoria para poderse ejecutar), los trabajos activos (en ejecución), los de salida
(pendientes de imprimir o borrar), etc.

VTAM

El Virtual Telecommunication Access Method es un subsistema que permite la


comunicación entre los usuarios, que manejan los terminales, con la información
existente en el ordenador.

Su objetivo fundamental es obtener un tiempo de respuesta óptimo en el momento de


procesar las diferentes peticiones que llegan desde los terminales, tanto en tareas de
teleproceso de usuario (CICS o IMS/DC) como de los operadores del sistema.

Las características del VTAM son:

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 22 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

1) Permitir que los programas de aplicación compartan recursos, dispositivos y líneas


directamente fuera de las colas.

2) Controlar la disposición de recursos.

3) Establecer, controlar y terminar las conexiones entre programas de aplicación y


terminales.

4) Transferir datos entre programas de aplicación y terminales.

5) Permitir la monitorización de operaciones de red.

6) Permitir la reconfiguración dinámica de la red.

7) Utilizar la localización dinámica de memoria.

RACF

La Resource Access Control Facility es un producto externo al sistema operativo y


tiene como objetivos: proteger y asegurar la integridad de los datos, así como
controlar el acceso de los usuarios a los recursos de la instalación

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 23 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

OTROS SUBSISTEMAS IMPORTANTES

IMS

Information Management System (Sistema de gestión de información) es un producto


diseñado para facilitar al usuario la instalación y manejo de un sistema de base de
datos jerárquica.

Esta dividido en dos partes:

Data Base (DB) es la encargada de gestionar la información de las bases de datos,


proporcionando interfases para procesos batch y teleproceso (CICS)

Data Communication (DC) se encarga de la gestión del teleproceso para el usuario

y utiliza el Data Languaje/I (DL/I) como lenguaje de comunicación entre los usuarios (y
sus programas) y las bases de datos.

DB2

Data Base 2 es un gestor de bases de datos de tipo relacional para sistemas grandes
y medianos. Posee alto rendimiento, gran potencia, facilidad de uso y gran seguridad
e integridad de datos.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 24 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Para comunicarse con el usuario final o los programas de aplicación, utiliza el


Structured Query Languaje (Lenguaje de consulta estructurado), cuya principal
característica es el número reducido de sentencias y, por tanto, su fácil aprendizaje y
uso para cualquier usuario.

A través del lenguaje SQL se pueden realizar procesos batch, incluyendo las
sentencias dentro de lenguajes tradicionales (COBOL, PL/I, etc.), o de teleproceso:
IMS/DC, CICS o TSO/ISPF (a través del SPUFI).

También incorpora otros dos subproductos para independizar al usuario final no


informático de los ciclos informáticos habituales: Query Management Facility (Facilidad
de gestión de consultas), que es un potente generador de informes, y Query By
Example (Ejemplo de consulta), que permite otra forma de realizar consultas, de una
manera más gráfica.

CICS

Customer Information Control System (Sistema de control de información de clientes)


es un sistema de comunicación de datos orientado a transacciones y es aplicable a la
mayoría de sistemas grandes y medios, soportando acceso las bases de datos de IBM
(IMS/DB y DB2), así como a ficheros indexados.

Entre sus características destacan: respuesta rápida a los terminales, control de la red
de telecomunicaciones, gestión de las transacciones en forma recurrente, control de
acceso a bases de datos, gestión eficaz de los recursos del sistema y gestión de la
jerarquía de acceso a la unidad central de proceso.

Tiene una interfase con los lenguajes clásicos de los grandes sistemas (COBOL, PL/I,
Ensamblador, etc.) para la realización de aplicaciones de usuario a medida.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 25 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

4. CARACTERISTICAS GENERALES

INTRODUCCION

Para facilitar la comunicación con el sistema a los usuarios informáticos se desarrolló


la Interactive System Productivity Facility/Program Development Facility, que tiene las
siguientes características:

Ofrece la opción de reducir el uso de palabras clave de comando, evitando la


posibilidad de errores, permitiendo incluso el uso de un solo caracter para las
funciones más usuales (por ejemplo, borrar o insertar registros en un fichero).

Facilita la definición de ficheros e impresión de datos.

Genera estadísticas de creación, mantenimiento, contenido y actividad de los ficheros.

Visualiza el contenido de ficheros y listados permitiendo, mediante el uso de


determinadas teclas de función, el desplazamiento en todos los sentidos.

Posibilita la búsqueda rápida y amplia de los datos.

Permite el trabajo con “doble pantalla” en una sola pantalla física, siendo
independiente el proceso en cada una de ellas.

Ofrece amplias posibilidades para la definición y mantenimiento de librerías, ficheros,


catálogos y volúmenes almacenados en dispositivos magnéticos.

PANTALLA

La pantalla utilizada más habitualmentes es de la llamada familia 3270 que tiene un


formato de 24 líneas y 80 columnas, es decir, un total de 1920 caracteres.

La pantalla es el medio por el que se establece la comunicación (“conversación”) entre


el usuario y el ordenador.

Si se trabaja con comandos de TSO “nativo” el diálogo se establece línea a línea, en


una secuencia de preguntas-respuestas del operador al sistema. En la práctica, esto
sólo se hace para la apertura y cierre de la sesión.

Si se trabaja bajo ISPF/PDF, por cada operación a realizar, el sistema envía un “panel”
con información para el usuario, este incluye los datos requeridos, con una tecla
programada, y el sistema envía una respuesta. Las líneas se pueden dividir en:

Cabecera: son las líneas 1 a 3 y llevan información general sobre la pantalla: título,
comando a ejecutar, mensajes sobre los procesos realizados, etc.

Detalle: son el resto de las líneas, donde el usuario incluye sus propios datos.

En cuanto a la información visualizada en la pantalla, se pueden considerar dos tipos


de campos:

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 26 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Literales fijos: son zonas protegidas, donde el usuario no puede teclear. Tienen datos
permanentes (por ejemplo, el título de la pantalla) o variables (por ejemplo, mensajes
de terminación de operaciones).

Campos tecleables: donde el usuario incluye la información con la que desea operar.

LINEA 0

Esta línea no existe en versiones antiguas. Incorpora una serie de submenús


desplegables en forma de ventanas. El contenido de esta línea depende del panel en
el que esté.

La forma de trabajar con los menús de ventana no se tratan en este manual y no se


recomienda su uso a los principiantes.

LINEA 1

Esta línea incluye generalmente el título de la pantalla y, después de un tratamiento,


puede contener un mensaje breve (20 caracteres), indicando el resultado del proceso,
en la zona derecha de la línea.

En algunos procesos (por ejemplo, View o Edit) aparecerá información sobre la


operación que se está realizando: nombre del fichero, línea y columna de
posicionamiento del cursor, etc.

LINEA 2

Consta, como la anterior, de dos partes. En la izquierda aparecerá la palabra OPTION


o COMMAND, dependiendo que en las líneas de detalle esté un menú o sea una
pantalla de campos tecleables o con líneas de detalle. En esta zona se puede teclear
la opción del menú con que se quiere trabajar o un comando general, que se verán
más adelante.

En la parte derecha puede aparecer, dependiendo del panel en el que se trabaje, la


palabra SCROLL y su campo tecleable con un valor por defecto que puede ser: PAGE,
HALF, MAX, CSR o un número de hasta 4 dígitos. Con este valor se indica la forma en
la que ser quieren visualizar los grupos de datos que ocupan más de una pantalla, que
son la mayoría.

LINEA 3

En esta línea se puede visualizar un mensaje del tutor indicando errores detectados al
realizar un proceso o enviados por otro usuario.

En algunos procesos (por ejemplo, View o Edit) indica el comienzo de los datos. En
otros, incluso se puede teclear información.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 27 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

LINEAS DE DETALLE

Son el resto de líneas y sirven para teclear información, a través de campos (paneles),
líneas completas (visualización y edición) o seleccionar algún elemento (listas).

EJEMPLO DE PANTALLA

Como ejemplo de una pantalla típica, en la que se encuentra buena parte de las líneas
descritas, estaría la visualización (View) de un miembro de una librería:

Menu Functions Utilities Help


..............................................................................
VIEW UGOPEXX.CURSO.PRUEBA Row 00001 of 00004
Command ===> Scroll ===> PAGE
Name VV MM Created Changed Size Init Mod ID
. DEJ99A00 01.00 99/10/26 99/10/26 10:40 352 352 0 UGOPEXX
. PAP30E09 01.00 99/10/26 99/10/26 10:39 352 352 0 UGOPEXX
. PJE10E11
. PJE10E22 01.00 99/10/26 99/10/26 10:39 352 352 0 UGOPEXX
**End**

F1=Help F2=Split F3=Exit F7=Backward F8=Forward F9=Swap


F10=Actions F12=Cancel

TECLADO

Las variantes de teclado han sido grandes. En los primeros teclados existían
físicamente teclas que hoy no están y viceversa. La organización y funcionalidad del
teclado dependen del modelo de ordenador y, dentro de un mismo modelo, de las
necesidades de la instalación o las decisiones del responsable del departamento de
Sistemas.

Sin embargo, todas las instalaciones tienen una configuración de teclado similar a la
que se presenta a continuación.

TECLAS ESTANDAR

Esta parte del teclado soporta los caracteres típicos de una máquina de escribir
clásica y con ellos se introduce la mayoría de la información de y para los usuarios:

Letras: de la A a la Z (27 letras), mayúsculas o minúsculas, aunque estas últimas


están muy restringidas y la mayoría de las veces se convierten en mayúslculas.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 28 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Números: del 0 al 9, están físicamente sobre las letras. Tienen además caracteres
especiales (que se obtienen con la tecla “mayúsculas”). También, en la mayoría de los
teclados, existe una “matriz de números” en el extremo derecho del teclado, que se
activa o desactiva con la tecla “Bloq Num” que se incluye en ese bloque. Esas tienen
tienen también doble función.

Signos: son un 35 y están repartidos por el teclado, compartiendo en algunos casos


teclas de otro tipo (por ejemplo, las de los números). Se pueden incluir pulsando la
tecla correspondiente (para los signos de abajo), la tecla “mayúsculas” más la del
signo (para los de arriba) o la tecla “AltGr” más la tecla del signo (cuando hay tres en
la tecla, el de abajo a la derecha).

TECLAS DE MANEJO DE PANTALLA

Algunas de estas teclas no aparecen en los teclados actuales con la forma en que las
utiliza el ISPF/PDF pero, en la mayoría de las instalaciones, están asimiladas a otras.

CLEAR

Elimina el contenido de la pantalla. Generalmente, se recuperan los datos pulsando la


tecla “intro”. Su situación es variable, puede ser la tecla “Pausa Inter”, la tecla “+”
grande del extremo derecho del teclado, etc.

ERASE EOF

Elimina el contenido de una línea desde la posición del cursor hasta el final de la línea.
Suele ser la tecla “Fin” y hay dos a la derecha del teclado estándar, aunque se suele
utilizar la más cercana.

Tabuladores

Sirven para saltar de un campo tecleable a otro. Está arriba a la izquierda del teclado
estándar (se identifican con dos flechas en dirección contraria). Si se pulsa sólo la
tecla el sentido es de arrib-abajo, si se pulsa junto a la tecla “mayúsculas” es de abajo-
arriba.

Bloq Mayús y “mayúsculas”

Fijan las letras mayúsculas o proporcionan los caracteres de arriba, en las teclas de
doble función. Se desactiva pulsando otra vez. Está a la izquierda, en el centro, en el
teclado estándar. No confundir con la tecla “mayúsculas” temporal, que está debajo y
en el lado contrario de la derecha.

RESET

Restaura el bloqueo del teclado producido, por ejemplo, por intentar teclear en zonas
protegidas. Generalmente es la tecla “Ctrl” que está en el extremo inferior izquierda
del teclado estándar.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 29 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

RETURN

Envía el cursor a la primera posición de la pantalla (el punto extremo superior


izquierdo). En los teclados actuales se ha sustituido por la tecla “Inicio” y,
generalmente, hay dos, ambas a la derecha del teclado estándar.

Insert o Ins

Sirven para insertar caracteres, dentro de una cadena existente. Muchas veces hay
que desactivarla, volviéndola a pulsar, porque bloquea determinadas partes de la
pantalla (por ejemplo, la columna de numeración del editor). Hay dos y están a la
derecha del teclado estándar.

Supr

Suprime o elimina un caracter previamente tecleado. Si se mantiene pulsada borra


varios caracteres, hasta que se deja de pulsar. Hay dos y están a la derecha del
teclado estándar.

PA1

Cancela la ejecución de un comando de TSO. Se debe utilizar sólo en casos


excepcionales, porque puede provocar la “caída” del terminal. En teclados actuales es
la tecla “Impr pant PetSis”, que está a la derecha de las teclas programables.

Cursores

Indican la dirección en la que irá el cursor cuando se pulsan. Están indicadas con una
flecha, mostrando la dirección: arriba, abajo, izquierda y derecha. Hay dos juegos de
teclas de cursor a la derecha del teclado estándar, aunque se recomienda el más
cercano.

Enter

Dependiendo de la configuración del teclado puede tener dos funciones: pasar al


siguiente campo inferior tecleable o ejecutar una petición al sistema. Es preferible que
haga la primera función. Es la tecla grande, en el centro en la derecha en el teclado
estándar, en forma de L invertida.

Intro

Sirve para la segunda función explicada en la tecla “Enter”. En la mayoría de las


isntalaciones se puede pulsar la tecla alargada que está en el extremo inferior del
teclado físico o la tecla “Ctrl” que está en la misma posición del teclado estándar.

TECLAS PROGRAMABLES

En la parte superior del teclado y en la mayoría de los teclados actuales hay 12 teclas
marcadas como F1 a F12 (aunque muchos usuarios las llaman teclas “PF”) que sirven
para facilitar el uso de los comandos ISPF/PDF más habituales. Dicho de otra manera,
cada tecla tiene asignado un comando que se ejecutará al pulsarla.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 30 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Aunque cada usuario puede darles el valor que desee, se recomienda


encarecidamente el uso de estas teclas tal como se indica a continuación, ya que esta
configuración es prácticamente universal.

PF1 - HELP

Proporciona ayuda interactiva de mensajes de finalización de una función (línea 3) o


de la pantalla que se está procesando (tutor).

PF2 - SPLIT

Provoca que la pantalla “física” se convierta en dos pantallas “lógicas”, es decir, se


pueden tener dos sesiones desde el mismo terminal.

PF3 - END

Termina la operación que se está ejecutando y devuelve el panel anterior. Si está en el


Menú Principal termina la sesión

PF4 - CURSOR o RETURN

Es una de las pocas teclas modificables, incluso en algunas instalaciones se usa


PRINT.

CURSOR provoca que el cursor se sitúe en la primera posición del campo de la línea
2 (OPTION o COMMAND). En los terminales actuales, esto no es lo mismo que pulsar
la tecla “Inicio”, que deja el cursor en la primera posición de la pantalla.

Si se ha asignado RETURN se consigue ir al Menú Principal desde el panel en el que


se está en el momento de pulsar esta tecla.

PF5 - RFIND

Ejecuta repetidamente el último comando de búsqueda (Repeat FIND). Permite


facilitar la búsqueda de cadenas en un fichero (ver el comando FIND más adelante).

PF6 - RCHANGE

El mismo efecto que la anterior pero con cambio de cadenas (ver el comando
CHANGE más adelante).

PF7 - UP

Visualiza información que está “más arriba” de la posición actual. Se utiliza en listas de
miembros de directorios y en datos de ficheros de usuario que no entran en una sola
pantalla. Más raramente en menús.

La forma y cantidad de líneas visualizadas depende del valor del campo “Scroll” de la
línea 2 (ver el capítulo “Visualización de ficheros”).

PF8 - DOWN

Tiene el efecto contrario que PF7, visualiza información que está “por debajo” de la
posición actual. La demás consideraciones son iguales.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 31 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

PF9 - SWAP

Desplaza la posición del cursor de una pantalla a otra cuando está activada la doble
pantalla (SPLIT). Una operación sólo se puede realizar en la pantalla donde esté
situado el cursor.

PF10 - LEFT

Visualiza información que está “a la izquierda” de la posición actual. Se utiliza


generalmente en ficheros que tienen más de 80 posiciones, porque previamente se ha
desplazado el cursor a la derecha.

PF11 - RIGHT

Visualiza información que está “a la derecha” de la posición actual. Tiene el efecto


contrario que PF10.

PF12 - RETRIEVE

Recupera, en la línea 2, los últimos comandos emitidos, en orden inverso. Esto facilita
la repetición de la ejecución de los comandos, sin tener que volverlos a escribir.

Notas

En algunas versiones, el nombre de algunos comandos no se corresponden con los


indicados arriba (por ejemplo, UP se sustituye por BACKWARD y DOWN por
FORWARD), pero el efecto es el mismo.

La utilización de las teclas de desplazamiento (PF7, PF8, PF10 y PF11) con el


comando “M” provoca las siguientes situaciones:

M + PF7 se visualiza la primera pantalla

M + PF8 se visualiza la última pantalla

M + PF10 se visualiza el extremo izquierdo de los datos

M + PF11 se visualiza el extremo derecho de los datos

(ver capítulo “Visualización de ficheros”).

LIBRERIA (FICHERO PARTICIONADO)

Uno de los métodos de almacenamiento de datos más usados en este entorno de


trabajo son las librerías o ficheros particionados (algunos las llaman bibliotecas).

Es una estructura dividida en dos partes:

Área de Miembros: donde se almacenan conjuntos de datos de las mismas


características.

Área de Directorio: donde se almacenan registros con información referente a los


miembros.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 32 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Una librería se suele denominar, aunque no es obligatorio, por tres niveles de


calificación:

Proyecto: identifica un proyecto general dentro de la instalación, aunque los más


general es que sea el identificador de usuario que crea y mantiene la librería (por
ejemplo, UGOPEXX).

Grupo: identifica un conjunto particular de librerías dentro de un proyecto (por ejemplo,


CONTAB, PERSONAL, CURSO, etc.).

Tipo: identifica un tipo especial de miembro dentro de la librería (por ejemplo, COBOL,
JCL, etc.).

Donde cada nivel de calificación puede tener como máximo 8 caracteres y empezar
por letra.

Además, se puede indicar el nombre del miembro, que tiene las mismas
características que los nombres de los calificadores de la librería, siendo un ejemplo
de denominación completa:

UGOPEXX.CURSO.PRUEBA(PJE10E11)

Es muy importante tener en cuenta que el sistema no lleva control relativo a la


información incluida en un miembro, por tanto, es el usuario el que debe gestionar la
correcta utilización y contenido de las librerías.

DIRECTORIO

Está formado por un conjunto de registros con clave, uno por cada miembro existente
en la librería. La clave contiene el nombre del miembro. El resto del registro lleva
información sobre la dirección física de los datos, fechas, número de registros del
miembro, etc.

El orden habitual de los registros es por orden alfabético ascendente de nombre,


aunque al visualizar la lista de miembros se puede modificar este orden con el
comando SORT (ver capítulo “Edición de ficheros”).

MIEMBROS

Son ficheros independientes entre sí, pero debieran ser de las mismas características.
Por ejemplo, programas en un determinado lenguaje, jcls, etc. Como ya se indicó
anteriormente, el sistema no controla la “mezcla” de miembros en una librería, por eso,
es el usuario el que debe evitar que en una misma librería convivan miembros de
distintos tipos.

Internamente, los registros de los miembros están organizados secuenciamente y su


contenido puede variar tantas veces como sea necesario. En los sistemas actuales, no
hay miembros vacíos.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 33 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

MANTENIMIENTO DE LIBRERIAS

Al dar de alta un miembro se colocará donde haya espacio suficiente, dentro del área
de miembros. En el directorio se crea el registro correspondiente, con su nombre
como clave, y se reorganiza automáticamente.

Cuando se modifica un miembro, después de haberse recuperado previamente, se


vuelve a dar de alta, afectando sólo al área de miembros.

Al dar de baja un miembro se elimina el registro del directorio y se reorganiza, pero el


espacio que ocupaba en área de miembros sigue ocupada, hasta que se reorganiza la
librería.

Una librería se debe reorganizar cuando ya no queda más espacio disponible en el


área de miembros. Consiste, fundamentalmente, en la liberación de las zonas
ocupadas por las bajas. El sistema avisa de la falta de espacio con un código “D37” en
el mensaje breve de la línea 1. La forma más habitual para reorganizar la librería es
“comprimirla” con la opción 3.1 del ISPF/PDF.

Cuando lo que se llena es el área de directorio no sirve la reorganización y hay que


seguir los siguientes pasos:

Crear una nueva librería, con la opción 3.2, con más bloques de directorio y,
opcionalmente, con más espacio en el área de miembros.

Copiar la librería actual en la nueva, con la opción 3.3.

Borrar la librería actual, con la opción 3.2 ó 3.4.

Renombrar la librería nueva con el nombre de la borrada, con la opción 3.2 ó 3.4.

FICHERO SECUENCIAL

Un fichero secuencial es un conjunto de registros colocados físicamente en secuencia


de entrada. Los registros pueden ser de longitud fija (con un máximo de 255
caracteres) o de longitud variable (con un máximo de 259 caracteres). La creación de
un fichero secuencial se realizará a través de la opción 3.2.

El nombre de un fichero consta de 1 a 5 calificadores, de hasta 8 caracteres cada uno


de ellos y tienen que empezar todos por una letra. Aunque no es obligatorio,
normalmente el primer calificador está reservado para el identificador de usuario y, en
muchas instalaciones, se asigna automáticamente.

En algunas instalaciones hay normativa para dar nombre a los ficheros secuenciales y
librerías. Si no la hubiera, se debe dar un nombre al fichero que indique el contenido
del mismo, por ejemplo, si los registros recogen la información diaria de asientros
contables, el nombre podría ser

UGOPEXX.CONTAB

pero esto sólo indicaría que el fichero está relacionado con el departamento de
Contabilidad. Si el nombre del fichero fuese

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 34 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

UGOPEXX.CONTAB.ASIENTOS.DIARIO.D990926

indicaría que son asientos diario contables del 26 de setiembre de 1.999.

La creación, mantenimiento y acceso (copia, visualización, etc.) a los ficheros de cada


usuario depende del nivel de protección establecido a través del RACF. Normalmente,
cualquier usuario puede copiar y visualizar ficheros y librerías de otros usuarios, pero
no puede crear ni mantener esos grupos de datos.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 35 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

5. SESION DE ISPF

INICIAR LA SESION

Antes de empezar con la materia propiamente dicha, hay que tener en cuenta que
todas las instalaciones funcionan igual en el fondo, pero ninguna tiene la misma forma
de presentación de los paneles de entrada. Por ejemplo, en unas la entrada a la
sesión se realiza con un panel de logotipo donde se teclea el identificador de usuario,
en otras, como en el presente manual, se teclea la opción de sesión (TSO, CICS, etc.)
deseada y luego el identificador de usuario en pantalla vacía, etc.

Por lo tanto, en lo referente a la forma de entrar en una sesión ISPF/ PDF, lo indicado
más abajo es una de las muchas formas posibles.

PANTALLA DE ENTRADA DEL GRUPO ARV

* -USSTACRD- << Gesfor Sistemas de Informacion >>Terminal: GLUTN16

/ \
/ / \
/ / / \ *** O P C I O N E S ***
/ / / / / .
/ / / / / /// - A CICS Vacaciones - E TSO Producción
/ / / / / ///////
/___/__/__/_/_///////////. - B DESA Vacaciones - F CICS Formación

-- G E S I -- - C TSO Desarrollo - G DESA Horizontes


- D E S A R R O L L O -
======================= - D CICS Horizontes - T TSPRINT

Teclear letra de opción escogida y pulsar Intro ==> C

se puede observar, la entrada en este caso consiste en un logotipo de la empresa con


un menú de opciones, indicando las diferentes sesiones que soporta el sistema.

Si se desea entrar al TSO de Desarrollo, se teclea la letra “C”.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 36 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

PANTALLA DE USUARIO

IKJ56700A ENTER USERID -


UGOPEXX

De una u otra forma, bien en pantalla inicial o, como en este caso, en pantalla aparte,
hay que indicar el identificador de usuario que desea entrar en la sesión.

En este caso se trata del usuario “UGOPEXX”.

PANTALLA DE “PASSWORD”

------------------------------- TSO/E LOGON -----------------------------------

Enter LOGON parameters below: RACF LOGON parameters:

Userid ===> UGOPEXX

Password ===> New Password ===>

Procedure ===> PLOPE Group Ident ===>

Acct Nmbr ===> CDRSTROPEG

Size ===> 4096

Perform ===>

Command ===>

Enter an 'S' before each option desired below:


-Nomail -Nonotice -Reconnect -OIDcard

PF1/PF13 ==> Help PF3/PF15 ==> Logoff PA1 ==> Attention PA2 ==>

Una vez aceptado el usuario, se presenta la pantalla de “password” o de palabra


clave. Todo usuario tiene asociada una palabra de clave de acceso personal, que sólo
él debe conocer. Esta clave se debe teclear en el campo “Password” de la pantalla
anterior.

En muchas instalaciones, esta clave se “revoca” o se cancela periódicamente


(normalmente cada mes). El sistema avisa desde tres días antes sobre esta situación.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 37 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

LLegado el momento, se deberá dar una nueva clave, en el campo “New password” y,
generalmente, obliga a confirmarla, es decir, a teclearla otra vez.

También se debe tener en cuenta que, en la mayoría de las instalaciones, se permite


un número máximo de intentos de acceso (generalmente tres) para entrar en el
sistema. Si no se pulsa la clave correcta en esos intentos, el usuario queda cancelado
o revocado y se tiene que volver a habilitar en la tabla correspondiente del sistema.

Cuando el usuario se queda “colgado” es posible, algunas veces, volverse a


“reconectar” tecleando la clave y la letra “S” a la izquierda del literal “Reconnect” que
está en la parte inferior de la pantalla.

PANTALLA LOGON

ICH70001I UGOPEXX LAST ACCESS AT 12:51:20 ON TUESDAY, OCTOBER 26, 1999


IKJ56455I UGOPEXX LOGON IN PROGRESS AT 14:46:32 ON OCTOBER 26, 1999
IKJ56951I NO BROADCAST MESSAGES
***

Después de aceptar la clave de acceso es cuando realmente se inicia la sesión.


Técnicamente, se emite el comando LOGON de TSO. Aparecen unas líneas con
información para el usuario.

En la primera línea se indica cuando fue la última fecha y hora en que se accedió al
sistema. En la segunda la fecha y hora del acceso actual. En la tercera se indica que
no hay mensajes pendientes de la sesión anterior o saldrían una o más líneas de
mensajes no visualizados en esa sesión, si los hubiera.

En la última línea aparecen tres asteriscos (“***”) que indican una pausa del sistema,
para que el usuario puede leer cómodamente los mensajes. Para continuar se pulsa la
tecla “Intro”.

MENU PRINCIPAL

Como ya se ha indicado, dependiendo de la instalación, es posible que entre el panel


LOGON y el panel del Menú Principal del ISPF/PDF haya uno o más paneles
intermedios: menús de productos, informativos, etc.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 38 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

En este caso, se muestra el Menú principal de la instalación, desde el que se puede


acceder a direfentes productos, siendo los principales:

SPF/PDF, para realizar el trabajo habitual de desarrollo.

SDSF, para obtener información sobre las colas de trabajo del sistema.

DB/E, para acceder al entorno del DB2 interactivo.

RACF, para crear o modificar acceso a recursos, siempre que esté permitido.

MENU PRINCIPAL DE APLICACIONES DEL AREA DE OPERACION

OPTION ===> P SCROLL ===> PAGE

USERID - UGOPEXX
TIME - 09:42

P PDF - ISPF/Program Development Facility


SD SDSF - System Display and Search Facility
IS ISMF - Interactive Storage Management Facility
VS VSAM - Utilidades VSAM
DB DB/E - Utilidades DB2
OP OPE - Utilidades Operacion
M MIGR - Migraciones Desarrollo - Produccion (MAPAS)
N GENCSP - Generacion de aplicaciones CSP en Produccion
O EXGECSP - Migracion de aplicaciones CSP a Produccion
R RACF - Activar Password de Usuario
S DFSORT - Data Facility Sort
X EXIT - Terminate ISPF using list/log defaults

F1=HELP F2=SPLIT F3=END F4=RETURN F5=RFIND F6=RCHANGE


F7=UP F8=DOWN F9=SWAP F10=LEFT F11=RIGHT F12=RETRIEVE

Si se desea entrar al PDF de Desarrollo, se teclea la letra “P”.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 39 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

MENU PRINCIPAL DEL ISPF/PDF

Al final, el objetivo es llegar al panel que se muestra a continuación, para poder


trabajar en el entorno ISPF/PDF.

Menu Utilities Compilers Options Status Help


------------------------------------------------------------------------------
ISPF Primary Option Menu
Option ===>

0 Settings Terminal and user parameters User ID . : UGOPEXX


1 View Display source data or listings Time. . . : 10:11
2 Edit Create or change source data Terminal. : 3278
3 Utilities Perform utility functions Screen. . : 1
4 Foreground Interactive language processing Language. : ENGLISH
5 Batch Submit job for language processing Appl ID . : PDF
6 Command Enter TSO or Workstation commands TSO logon : PROOPE
7 Dialog Test Perform dialog testing TSO prefix: UGOPEXX
8 LM Facility Library administrator functions System ID : DESA
9 IBM Products IBM program development products MVS acct. : CDRSTROP
10 SCLM SW Configuration Library Manager Release . : ISPF 4.4
11 Workplace ISPF Object/Action Workplace
S SDSF System Display and Search Facility

Enter X to Terminate using log/list defaults

F1=Help F2=Split F3=Exit F7=Backward F8=Forward F9=Swap


F10=Actions F12=Cancel

En este menú se pueden observar 4 zonas o columnas que, prácticamente, es igual


en todas las instalaciones, excepto la última:

1. Opción, aparece un código con un máximo de dos caracteres numéricos o


alfanuméricos.

2. Descripción breve, con las distintas facilidades incoroporadas en el menú,


tanto del ISPF/PDF como externas.

3. Descripción larga.

4. Información general, como identificador de usuario, código del terminal, fecha


y hora, idioma, etc. Esta columna es muy variable, tanto de una instalación a
otra como, dentro de una misma instalación, de un usuario a otro.

Tampoco las opciones de este menú son iguales en todas las instalaciones y algunos
incluso no aparecen o tienen otros códigos de opción distintos. Por eso en este
manual se van a contemplar sólo aquellos que son comunes en todas las empresas:

0 Personalizar o parametrizar el usuario

1 Visualizar datos

2 Crear o cambiar datos

3 Utilidades del sistema

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 40 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

FINALIZAR LA SESION

Para finalizar la sesión se emite un comando LOGOFF del TSO, que genera una
pantalla con la palabra “READY”

READY
LOGOFF

pudiéndose teclear dos respuestas:

LOGOFF, para salir definitivamente del sistema.

ISPF, para volver al Menú principal del ISPF/PDF.

Se puede llegar a la pantalla de LOGOFF de varias formas:

1. Pulsando la tecla PF3 (END) desde el Menú principal de aplicaciones o del


ISPF/PDF, dependiendo de la instalación.

2. Tecleando la opción “X” en el Menú principal del ISPF/PDF.

3. Tecleando los caracteres “=X” desde cualquier campo tecleable de cualquier


panel.

También se debe tener en cuenta que entre la petición de salida de la sesión y el


panel LOGOFF pueden aparecer una o más pantallas solicitando información sobre: la
utilización de la “cinta” LOG (borrarla, imprimirla, etc.), opinión del servicio, etc.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 41 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

6. PERSONALIZAR EL USUARIO

OPCIONES

Pulsando la opción “0” en el Menú principal del ISPF/PDF se presenta una pantalla
con campos para la personalización o parametrización del usuario.

Log/List Function keys Colors Environ Workstation Identifier Help


------------------------------------------------------------------------------
ISPF Settings
Command ===>
More: +
Options Print Graphics
Enter "/" to select option Family printer type 2
Command line at bottom Device name . . . .
/ Panel display CUA mode Aspect ratio . . . 0
Long message in pop-up
/ Tab to action bar choices
Tab to point-and-shoot fields General
/ Restore TEST/TRACE options Input field pad . . N
Session Manager mode Command delimiter . ;
/ Jump from leader dots
Edit PRINTDS Command
/ Always show split line

Terminal Characteristics
Screen format 1 1. Data 2. Std 3. Max 4. Part

Terminal Type 3 1. 3277 2. 3277A 3. 3278 4. 3278A


F1=Help F2=Split F3=Exit F7=Backward F8=Forward F9=Swap
F10=Actions F12=Cancel

Como se puede observar, a la izquierda de los literales aparece, a veces, el caracter


barra (“/”), indicando que esa opción está activa. Si no aparece (está en blanco)
significa que la función esta inactiva, es decir, es la contraria.

En general, sólo hay dos opciones que interesan: la primera y la última,

Command linea at bottom. Si está activada (con “/”) la línea de comandos se situará
en la parte inferior de la pantalla. Si está desactivada la línea de comandos se sitúa en
la parte superior de la pantalla, tal como está en el ejemplo y como se recomienda su
utilización.

Always show split line. Si está activa indica que, cuando hay dos pantallas lógicas
(PF2 – Split), se vea la línea de separación entre las ellas. Si está desactivada, la
pantalla actual “cubre” totalmente a la otra.

El resto de opciones hace referencia a los colores (CUA), longitud de mensajes, etc.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 42 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

CARACTERISTICAS DEL TERMINAL

En la parte inferior de la pantalla se pueden elegir las características del terminal. Esto
viene condicionado más por la pantalla física que se tiene que por los deseos del
usuario. Actualmente se usa una “emulador” que convierte la pantalla de un PC en un
terminal del TSO.

FORMATO DE PANTALLA

Data Formato basado en el tamaño del dato.

Std Formato de 24 líneas por 80 columnas.

Max Formato de 27 líneas por 132 columnas (formato listado).

Part Formato que usa particiones hardware (sólo 3290).

TIPO DE TERMINAL

Los terminales más habituales son de la “familia 3270” y, dentro de ellos el más
general es el modelo 3278. Actualmente ya han desaparecido los terminales clásicos
(no inteligentes) y se han sustituido por PC (terminales inteligentes) por lo que se
requiere un emulador, para que el TSO considere que está trabajando con un terminal
clásico.

GENERAL

Aunque este apartado no es demasiado importante, si es interesante conocer el valor


de los dos campos:

CAMPO DE RELLENO DE ENTRADA

Indica el caracter que se incluye cuando no se teclea nada en los campos de entrada,
sean campos de panel tecleables o líneas de registros de datos de usuario. Esto se
produce por el uso de los cursores para desplazarse por las líneas o campos, en lugar
de utilizar la barra espaciadora.

Se puede utilizar cualquier caracter especial, excepto el que se indica en el campo


siguiente (“Command delimiter”). Habitualmente se usan dos caracteres:

N los espacios vacíos se rellenan con nulos (valor hexadecimal a ceros binarios)

B los espacios vacíos se rellenan con blanco o espacios (valor hexadecimal = 40)

siendo, en general, preferible los blancos, para evitar desplazamientos al escribir los
datos.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 43 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

DELIMITADOR DE COMANDOS

En algunos casos puede ser interesante concatenar una serie de comandos, que se
ejecuten habitualmente y/o que tengan un cierto interés, colocando sucesivos
comandos unidos o separados por el caracter indicado en este campo. Esta forma de
trabajar no suele ser habitual.

Se puede utilizar cualquier caracter especial, excepto el que se indica en el campo


anterior (“Input field pad”). Habitualmente se usa el caracter punto y coma (“;”) y, en
todo caso, se debe procurar que sea “raro”, es decir, poco utilizado para los datos
usuales.

TECLAS PROGRAMABLES

Se muestra en este apartado la pantalla de teclas programables porque era la opción


donde se podía solicitar y modificar sus valores en la primeras versiones del
ISPF/PDF.

PF Key Definitions and Labels


Command ===>
More: +
Number of PF Keys . . 12 Terminal type . . 3278

PF1 . . . HELP
PF2 . . . SPLIT
PF3 . . . END
PF4 . . . RETURN
PF5 . . . RFIND
PF6 . . . RCHANGE
PF7 . . . UP
PF8 . . . DOWN
PF9 . . . SWAP
PF10 . . LEFT
PF11 . . RIGHT
PF12 . . RETRIEVE

PF1 Label . . PF2 Label . . PF3 Label . .


PF4 Label . . PF5 Label . . PF6 Label . .
PF7 Label . . PF8 Label . . PF9 Label . .
PF10 Label . . PF11 Label . . PF12 Label . .
F1=HELP F2=SPLIT F3=END F4=RETURN F5=RFIND F6=RCHANGE
F7=UP F8=DOWN F9=SWAP F10=LEFT F11=RIGHT F12=RETRIEVE

En el primer campo (“Number of PF Keys”) se indica el número de teclas


programables que se desean utilizar (de 1 a 24 teclas), siendo lo más frecuente indicar
24, aunque en la práctica, la mayoría de usuarios, sólo se usan las 12 primeras.

En el siguiente cuerpo de pantalla se pueden asociar uno o más comandos (usando


en este caso el “delimitador de comandos”) para la tecla indicada a la izquierda. Si se
tienen más de 12 teclas, se puede utilizar el comando “UP” (generalmente PF7) para
obtener las anteriores o “DOWN” (generalmente PF8) para obtener las siguientes.

Puesto que los nombres de los comandos hay que indicarlos en inglés, se puede
indicar una etiqueta (“label”) distinta de la original. Esto permite, por ejemplo, visualizar
los nombres de los comandos asociados a las teclas en español, aunque no se
recomienda.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 44 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Aunque ya se ha explicado anteriormente el uso y la importancia de estas teclas, para


mayor comodidad del lector de este manual, se reproducen otra vez a continuación,
insistiendo en evitar cambios en su uso general.

PF1 - HELP

Proporciona ayuda interactiva de mensajes de finalización de una función (línea 3) o


de la pantalla que se está procesando (tutor).

PF2 - SPLIT

Provoca que la pantalla “física” se convierta en dos pantallas “lógicas”, es decir, se


pueden tener dos sesiones desde el mismo terminal.

PF3 - END

Termina la operación que se está ejecutando y devuelve el panel anterior. Si está en el


Menú Principal termina la sesión

PF4 - CURSOR O RETURN

Es una de las pocas teclas modificables, incluso en algunas instalaciones se usa


PRINT.

CURSOR provoca que el cursor se sitúe en la primera posición del campo de la línea
2 (OPTION o COMMAND). En los terminales actuales, esto no es lo mismo que pulsar
la tecla “Inicio”, que deja el cursor en la primera posición de la pantalla.

Si se ha asignado RETURN se consigue ir al Menú Principal desde el panel en el que


se está en el momento de pulsar esta tecla.

PF5 - RFIND

Ejecuta repetidamente el último comando de búsqueda (Repeat FIND). Permite


facilitar la búsqueda de cadenas en un fichero (ver el comando FIND más adelante).

PF6 - RCHANGE

El mismo efecto que la anterior pero con cambio de cadenas (ver el comando
CHANGE más adelante).

PF7 - UP

Visualiza información que está “más arriba” de la posición actual. Se utiliza en listas de
miembros de directorios y en datos de ficheros de usuario que no entran en una sola
pantalla. Más raramente en menús.

La forma y cantidad de líneas visualizadas depende del valor del campo “Scroll” de la
línea 2 (ver el capítulo “Visualización de ficheros”).

PF8 - DOWN

Tiene el efecto contrario que PF7, visualiza información que está “por debajo” de la
posición actual. La demás consideraciones son iguales.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 45 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

PF9 - SWAP

Desplaza la posición del cursor de una pantalla a otra cuando está activada la doble
pantalla (SPLIT). Una operación sólo se puede realizar en la pantalla donde esté
situado el cursor.

PF10 - LEFT

Visualiza información que está “a la izquierda” de la posición actual. Se utiliza


generalmente en ficheros que tienen más de 80 posiciones, porque previamente se ha
desplazado el cursor a la derecha.

PF11 - RIGHT

Visualiza información que está “a la derecha” de la posición actual. Tiene el efecto


contrario que PF10.

PF12 - RETRIEVE

Recupera, en la línea 2, los últimos comandos emitidos, en orden inverso. Esto facilita
la repetición de la ejecución de los comandos, sin tener que volverlos a escribir.

Notas

En algunas versiones, el nombre de algunos comandos no se corresponden con los


indicados arriba (por ejemplo, UP se sustituye por BACKWARD y DOWN por
FORWARD), pero el efecto es el mismo.

La utilización de las teclas de desplazamiento (PF7, PF8, PF10 y PF11) con el


comando “M” provoca las siguientes situaciones:

M + PF7 se visualiza la primera pantalla

M + PF8 se visualiza la última pantalla

M + PF10 se visualiza el extremo izquierdo de los datos

M + PF11 se visualiza el extremo derecho de los datos

(ver capítulo “Visualización de ficheros”).

KEYS

Actualmente, se puede pedir información para visualizar y/o modificar el contenido de


las teclas de función desde cualquier panel, tecleando la palabra “KEYS” en la línea
de comando. Como resultado de esta acción se obtendrá la pantalla explicada
anteriormente.

De hecho, se debe observar que muchos paneles tienen inicialmente distintos


contenidos en estas teclas, por lo que conviene, lo antes posible o a medida que se va
trabajando con ellos, normalizar todos los paneles, para evitar “sorpresas” posteriores.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 46 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

PFSHOW

Otra posibilidad es que se quiera visualizar el contenido de las teclas de forma


permanente o no.

Esto se obtiene tecleando la palabra “PFSHOW” en la línea de comando, obteniendo


dos líneas en la parte inferior de la pantalla con las 12 primeras teclas y sus etiquetas
(sólo aparecen las que tienen contenido). La desventaja de esta forma de trabajar es
que “elimina” dos líneas para otros posibles usos, pero se recomienda a los
principiantes, hasta que estén habituados a su utilización.

La forma de eliminar estas dos líneas es tecleando “PFSHOW OFF” en la línea de


comando de cualquier panel.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 47 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

7. VISUALIZAR DATOS

VIEW ENTRY PANEL

Pulsando la opción “1” en el Menú principal del ISPF/PDF se presenta una pantalla
con campos para la visualización (“View”) de los datos almacenados en ficheros
secuenciales y/o librerías.

Menu RefList RefMode Utilities Workstation Help


------------------------------------------------------------------------------
View Entry Panel
Command ===>
More: +
ISPF Library:
Project . . .
Group . . . . . . . . . . . . .
Type . . . .
Member . . . (Blank or pattern for member selection list)

Other Partitioned or Sequential Data Set:


Data Set Name . . .
Volume Serial . . . (If not cataloged)

Workstation File:
File Name . . . . .

Initial Macro . . . . Options


Profile Name . . . . . / Confirm Cancel/Move/Replace
Format Name . . . . . Browse Mode
Data Set Password . . View on Workstation
F1=Help F2=Split F3=Exit F7=Backward F8=Forward F9=Swap
F10=Actions F12=Cancel

La forma de indicar una librería es a través del primer bloque de campos, debajo de
“ISPF Library”, donde se deben teclear los siguientes datos:

Proyecto: identifica un proyecto general dentro de la instalación, aunque los más


general es que sea el identificador de usuario que crea y mantiene la librería (por
ejemplo, UGOPEXX).

Grupo: identifica un conjunto particular de librerías dentro de un proyecto (por


ejemplo, CONTAB, PERSONAL, CURSO, etc.). Se pueden indicar hasta cuatro
grupos distintos, pero no es aconsejable mezclar miembros de varias librerías.

Tipo: identifica un tipo especial de miembro dentro de la librería (por ejemplo, COBOL,
JCL, etc.).

aunque en situaciones excepcionales podría faltar el último calificador (por ejemplo, en


librerías del sistema).

El campo “Member” se puede rellenar, si se conoce el nombre del miembro concreto


que se desea visualizar, o dejarlo en blanco, con lo que se proporciona la lista de
miembros en la siguiente pantalla.

También se puede indicar el nombre de un fichero rellenando los tres primeros


calificadores, si el fichero no tiene más, pero no conveniente.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 48 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Si el fichero tiene más de tres calificadores (bastante habitual) o si se quiere utilizar


otra librería que la indicada en los campos de “ISPF Library”, se debe utilizar el campo
“Data Set Name” del grupo “Other Partitioned or Sequential Data Set”, teniendo en
cuenta dos situaciones, dependiendo de la instalación:

Puede que se prefije el nombre que se indica con el identificador del usuario.

Puede que se necesite incluir el nombre entre comillas simples (apóstrofes) o que al
hacerlo es evite el efecto anterior.

LISTA DE MIEMBROS

Menu RefList RefMode Utilities Workstation Help


------------------------------------------------------------------------------
View Entry Panel
Command ===>
More: +
ISPF Library:
Project . . . UGOPEXX
Group . . . . CURSO . . . . . . . . .
Type . . . . PRUEBA
Member . . . (Blank or pattern for member selection list)

Other Partitioned or Sequential Data Set:


Data Set Name . . .
Volume Serial . . . (If not cataloged)

Workstation File:
File Name . . . . .

Initial Macro . . . . Options


Profile Name . . . . . / Confirm Cancel/Move/Replace
Format Name . . . . . Browse Mode
Data Set Password . . View on Workstation
F1=Help F2=Split F3=Exit F7=Backward F8=Forward F9=Swap
F10=Actions F12=Cancel

Como se indicó anteriormente, al teclear el nombre de la librería sin nombre de


miembro se proporciona la lista de todos los miembros incluidos en esa librería. En la
línea 1 aparecerá el nombre de la librería y el número del primer y último miembro
visualizados, dentro de la lista.

Por cada miembro se visualiza una línea con las siguientes columnas de información:

Selección. Es la columna más a la izquierda y se identifica con un punto (“.”) (Ver el


apartado “Selección de un miembro”).

Nombre. Indica el nombre del miembro.

VV MM. El sistema lleva un control estadístico en cuanto versiones y modificaciones.

Fecha de creación. Indica la fecha de creación del miembro.

Actualización. Informa sobre la fecha y hora de la última modificación.

Tamaño. Indica el número de registros actuales del miembro.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 49 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Inicial. Indica el número de registros iniciales del miembro, antes de la primera


modificación.

Modificaciones. Informa sobre el número de modificaciones que ha tenido el


miembro.

Usuario. Identifica al usuario que ha realizado la última actualización sobre el


miembro.

Las operaciones que se realicen sobre los miembros pueden afectar, al menos, a
parte de esta información. Cuando un miembro se importa desde otro sistema (por
ejemplo, desde un PC a través del FTP) no tiene inicialmente esta información.

Menu Functions Utilities Help


------------------------------------------------------------------------------
VIEW UGOPEXX.CURSO.PRUEBA Row 00001 of 00004
Command ===> Scroll ===> PAGE
Name VV MM Created Changed Size Init Mod ID
. DEJ99A00 01.00 99/10/26 99/10/26 10:40 352 352 0 UGOPEXX
. PAP30E09 01.00 99/10/26 99/10/26 10:39 352 352 0 UGOPEXX
. PJE10E11
. PJE10E22 01.00 99/10/26 99/10/26 10:39 352 352 0 UGOPEXX
**End**

F1=Help F2=Split F3=Exit F7=Backward F8=Forward F9=Swap


F10=Actions F12=Cancel

Normalmente, aunque no este el caso de la pantalla, la lista de miembros ocupa más


de una pantalla. Para visualizar el resto de la lista se utilizan las teclas PF7 para la
anterior y PF8 para la siguiente, pudiéndose combinar con la palabra “M” en la línea
de comando, para obtener la primera pantalla o la última.

Para saber si se está en la primera pantalla, observar la línea 1 después del literal
“Row”. La última pantalla se identifica con el literal “End”, debajo del último nombre de
miembro.

Normalmente, la clasificación de los miembros de la lista está por orden alfabético


ascendente, que es como están en el directorio. Si se quiere modificar este orden, se
puede utilizar el comando “SORT” indicando la columna por la que se quiere la
clasificación. Por ejemplo,

SORT ID

agruparía los miembros por el usuario que los creó o que ha realizado la última
actualización sobre ellos.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 50 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

SELECCION DE UN MIEMBRO

Para seleccionar un miembro de la lista, basta con situar el cursor en el punto de


selección y pulsar la tecla “Intro” o teclear la letra “S” (no puede ser otro caracter) más
la tecla “Intro”.

Menu Functions Utilities Help


------------------------------------------------------------------------------
VIEW UGOPEXX.CURSO.PRUEBA Row 00001 of 00004
Command ===> Scroll ===> PAGE
Name VV MM Created Changed Size Init Mod ID
. DEJ99A00 01.00 99/10/26 99/10/26 10:40 352 352 0 UGOPEXX
. PAP30E09 01.00 99/10/26 99/10/26 10:39 352 352 0 UGOPEXX
S PJE10E11
. PJE10E22 01.00 99/10/26 99/10/26 10:39 352 352 0 UGOPEXX
**End**

F1=Help F2=Split F3=Exit F7=Backward F8=Forward F9=Swap


F10=Actions F12=Cancel

VISUALIZACIÓN DE UN MIEMBRO

Una vez seleccionado el miembro, aparecerá la primera pantalla con la línea 1


indicado la librería y el miembro visualizado y los límites de las columnas. También se
verán los primeros registros del miembro y, seguramente, algún mensaje de aviso,
identificado por los caracteres “==MSG>” en la zona de numeración de las líneas.

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
VIEW UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.00 Columns 00001 00072
Command ===> Scroll ===> PAGE
****** ***************************** Top of Data *****************************
==MSG> -Warning- The UNDO command is not available until you change
==MSG> your edit profile using the command RECOVERY ON.
000001 000001 ID DIVISION.
000002 000002 PROGRAM-ID. PJE10E11.
000003 000003****************************************************************
000004 000004* PROYECTO CURSO ENTORNO S/390
000005 000005*
000006 000006* PROGRAMA PJE10E11
000007 000007* TIPO BATCH
000008 000008*
000009 000009* AUTOR(ES) FRANCISCO M. RUIZ MATE
000010 000010* FECHA 11-10-1999
000011 000011*
000012 000012* DESCRIPCION
000013 000013* -----------
000014 000014* OBTENER EL LISTADO DE LOS DATOS GENERALES DE LOS PEDIDOS
000015 000015* INTRODUCIDOS POR SYSIN.
F1=Help F2=Split F3=Exit F5=Rfind F6=Rchange F7=Up

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 51 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

SCROLL

Lo más habitual es que el contenido de un miembro tenga más registros de los que
caben en una pantalla, en la zona de líneas de detalle. Como se ha visto en otras
ocasiones similares, se pueden ver los siguientes registros pulsando PF8 o los
anteriores pulsando PF7.

La cantidad y forma de ver los registros se controla con el campo “SCROLL” de la


línea 2 o de comando, que puede tener los siguientes valores:

PAGE

Presenta una pantalla completa de registros. Si se pulsó PF8, los que están a
continuación del último actualmente visualizado. Si se pulsó PF7, los anteriores al
primero visualizado en la pantalla actual.

HALF

Deja la mitad de los registros visualizados en este momento. Si se pulsó PF8, deja la
mitad inferior actual, situándola en la parte superior, y rellena esa mitad inferior con los
siguientes registros. Si se pulsó PF7, pasa la mitad superior actual a la parte inferior y
sitúa en la mitad superior los registros anteriores.

CSR

Es la abreviatura de “Cursor”. La visualización de los datos depende de donde esté


situado el cursor en el momento de pulsar la tecla de desplazamiento. Si se pulsa
PF8, deja la línea donde esté situado el cursor como primera de la nueva pantalla,
rellenando el resto con los siguientes registros. Si se pulsa PF7, deja la línea del
cursor como última de la nueva visualización, rellenando las líneas precedentes con
los registros anteriores.

nnnn

Indica un número de 1 a 9999. Su uso es bastante complicado y se recomienda no


utilizar esta forma.

MAX

Significa al límite máximo. Si se pulsa PF8, se presentarán los últimos registros. Si se


pulsa PF7, se verá la primera pantalla de registros. Se recomienda usar este método
indicando una letra “M” en la zona de comando, en vez del campo “SCROLL”, como
se explicó anteriormente y se ve a continuación.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 52 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
VIEW UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.00 Columns 00001 00072
Command ===> M Scroll ===> PAGE
014154 014154*
014155 014155 CANCELAR.
014156 014156*
014160 014160 DISPLAY ERR-DB2-ASTERISCO.
014200 014200 DISPLAY 'PROGRAMA ' ERR-DB2-PROGRAMA.
014300 014300 DISPLAY 'SENTENCIA ' ERR-DB2-SENTENCIA.
014400 014400 DISPLAY 'TABLA ' ERR-DB2-TABLA.
014500 014500 DISPLAY 'CODIGO ERROR ' ERR-DB2-CODIGO.
014600 014600 DISPLAY 'REG. ACTUAL ' ERR-DB2-AREA.
014700 014700 DISPLAY ERR-DB2-ASTERISCO.
014800 014800 PERFORM TERMINAR.
014900 014900*
015500 015500 TERMINAR.
015600 015600*
015700 015700 CLOSE LPEDIDOS.
015800 015800*
015900 015900 STOP RUN.
****** **************************** Bottom of Data ***************************
F1=Help F2=Split F3=Exit F5=Rfind F6=Rchange F7=Up
F8=Down F9=Swap F10=Left F11=Right F12=Cancel

si se quiere ir a la primera pantalla, habrá que pulsar PF7.

Se puede cambiar tantas veces como se desea el valor de este campo. Para modificar
su valor sólo es necesario teclear la primera letra (por ejemplo, P para PAGE). La
forma más cómoda y usual es cursor (CSR).

ELIMINAR MENSAJES (RESET)

Aunque no tienen ningún efecto sobre el contenido del miembro, los mensajes
enviados por el sistema, antes o mezclados con los registros, se suelen “limpiar”, una
vez leídos.

Este efecto se consigue con el comando

RES[ET] [CHANGE]

[ERROR]

donde, dependiendo de los mensajes que se quieran eliminar, se indica el tipo de


mensaje concreto o simplemente RESET (abreviado RES).

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 53 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

COMANDOS PRINCIPALES

COLS

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
VIEW UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.00 Columns 00001 00072
Command ===> Scroll ===> PAGE
****** ***************************** Top of Data *****************************
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
000001 000001 ID DIVISION.
000002 000002 PROGRAM-ID. PJE10E11.
000003 000003******************************************************************
000004 000004* PROYECTO CURSO ENTORNO S/390
000005 000005*
000006 000006* PROGRAMA PJE10E11
000007 000007* TIPO BATCH
000008 000008*
000009 000009* AUTOR(ES) FRANCISCO M. RUIZ MATE
000010 000010* FECHA 11-10-1999
000011 000011*
000012 000012* DESCRIPCION
000013 000013* -----------
000014 000014* OBTENER EL LISTADO DE LOS DATOS GENERALES DE LOS PEDIDOS
000015 000015* INTRODUCIDOS POR SYSIN.
000016 000016* SE ESCRIBIRA UN TOTAL DEL IMPORTE DE LOS PEDIDOS Y DE LAS
F1=Help F2=Split F3=Exit F5=Rfind F6=Rchange F7=Up
F8=Down F9=Swap F10=Left F11=Right F12=Cancel

El comando COLS proporciona una regleta de numeración que sirve para situar la
columna en la que está un determinado dato. El número de la regla se debe multiplicar
por 10 y el signo más (“+”) indica las medias decenas (por ejemplo, 5, 15, etc.).

En las versiones antiguas o en la versión actual en la forma “BROWSE”, COLS era un


comando general: se indicaba en la línea de comando y sólo aparece una regla fija en
la línea 4 de la pantalla.

En la versión actual, COLS es un comando de línea: se puede poner en cualquier


línea de la pantalla y en cualquier registro del miembro, apareciendo tantas veces
como se desee.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 54 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

HEX

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
VIEW UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.00 Columns 00001 00072
Command ===> HEX Scroll ===> PAGE
****** ***************************** Top of Data ******************************

------------------------------------------------------------------------------
000001 000001 ID DIVISION.
FFFFFF4CC4CCECECDD444444444444444444444444444444444444444444444444444444
000001094049592965B00000000000000000000000000000000000000000000000000000
------------------------------------------------------------------------------
000002 000002 PROGRAM-ID. PJE10E11.
FFFFFF4DDDCDCD6CC44DDCFFCFF444444444444444444444444444444444444444444444
00000207967914094B071510511B00000000000000000000000000000000000000000000
------------------------------------------------------------------------------
000003 000003******************************************************************
FFFFFF555555555555555555555555555555555555555555555555555555555555555555
000003CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
------------------------------------------------------------------------------
000004 000004* PROYECTO CURSO ENTORNO S/390
FFFFFF5444DDDECCED44444CEDED4CDEDDDD4E6FFF444444444444444444444444444444
F1=Help F2=Split F3=Exit F5=Rfind F6=Rchange F7=Up
F8=Down F9=Swap F10=Left F11=Right F12=Cancel

Cuando en un fichero hay caracteres no representables en EBCDIC (por ejemplo,


campos decimales empaquetados) se representan en visualización como un punto
(“.”).

Para ver el contenido hexadecimal de los caracteres visualizados, se utiliza el


comando

HEX [ON] [DATA]

[VERT]

[OFF]

donde la forma por defecto es VERT, que significa que cada línea “normal” tendrá
debajo sus correspondientes valores hexadecimales en columna, que es la forma más
cómoda de ver los datos. La forma DATA es como están situados físicamente en
memoria y hay desplazamiento en la visualización que la dificulta.

Para activar la visualización hexadecimal se teclea “HEX” en la línea de comandos.


Para desactivarla, se teclea “HEX OFF”.

FIND

Una de las actividades más frecuentes en la visualización de datos es buscar


caracteres o cadenas de caracteres (por ejemplo, para ver la utilización de una
variable en un programa).

El comando FIND (abreviado “F”) proporciona distintas y amplias formas de búsqueda,


siendo el formato general

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 55 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

F[IND] cadena [NEXT] [CHARS] [X] [col1 [col2]]

[ALL] [PREFIX] [NX]

[FIRST] [SUFFIX]

[LAST] [WORD]

[PREV]

y en su forma básica se indica la letra “F”, seguida de uno o más blancos y el caracter
o cadena que se desea buscar.

cadena

Es una cadena de caracteres. Si es continua (no incluye el signo espacio ni el


delimitador de comandos) se puede escribir sin comillas. Si la cadena es discontinua o
siempre que se desee, se debe escribir entre comillas.

NEXT

Es la posición de búsqueda por defecto. Indica que se empezará a buscar a partir de


la posición del cursor y hacia el final del fichero.

ALL

Comienza la búsqueda desde el principio de los datos y proporciona información sobre


el número de veces que aparece la cadena en el fichero.

FIRST

Comienza desde el inicio del fichero y proporciona la primera cadena que encuentra.

LAST

Empieza la búsqueda desde el final del fichero y presenta la última cadena.

PREV

Empieza desde la posición del cursor y va buscando hacia el principio de los datos.

CHARS

Es la opción por defecto para la forma de la cadena. Indica que buscará los caracteres
tal como se indica en la cadena.

PREFIX

Busca las cadenas que comiencen por los caracteres indicados.

SUFFIX

Busca las cadenas que terminen por los caracteres indicados.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 56 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

WORD

Localiza cadenas con los caracteres especificados delimitados por blancos o


caracteres especiales.

Busca sólo en las líneas excluidas de visualización.

NX

Busca sólo en las líneas no excluidas de visualización.

col1 col2

Identifica un intervalo de columnas de búsqueda. Si sólo se indica la primera columna,


busca desde esa posición hasta el extremo derecho del fichero. Si se indica el
intervalo completo, sólo busca en esos límites.

Notas
Dado el uso frecuente de este comando, se recomienda la utilización desde el
principio de la forma abreviada: F.

Cuando no se encuentra ninguna línea que contenga la cadena buscada, el sistema


envía un mensaje en la línea 1: No “....” found.

Si se encuentra al menos una cadena, el cursor se sitúa siempre en la primera que


encuentra, dependiendo de las especificaciones de búsqueda, y se enviía un mensaje
a la línea 1: Chars “....” found.

Para seguir buscando la misma cadena, no hace falta volverla a escribir, se utiliza la
tecla PF5 (RFIND, repetir búsqueda).

Cuando se utiliza la opción ALL, el cursor se sitúa en la primera línea donde se


encuentra la cadena y en la línea 1 envía un mensaje indicando el número de veces
que aparece en el fichero.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 57 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

En algunas instalaciones, las cadenas encontradas se ven en video inverso.

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
VIEW UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.00 CHARS 'FILLER' found
Command ===> F FILLER Scroll ===> PAGE
000081 000081 10 DB2-SYA PIC 9(04) VALUE ZEROS.
000082 000082 10 FILLER PIC X(01) VALUE '-'.
000083 000083 10 DB2-MES PIC 9(02) VALUE ZEROS.
000084 000084 10 FILLER PIC X(01) VALUE '-'.
000085 000085 10 DB2-DIA PIC 9(02) VALUE ZEROS.
000086 000086*
000088 000088 01 WS-ERROR-DB2.
000089 000089 05 ERR-DB2-ASTERISCO PIC X(80) VALUE ALL '*'.
000090 000090 05 ERR-DB2-PROGRAMA PIC X(08) VALUE 'PJE10E11'.
000091 000091 05 ERR-DB2-SENTENCIA PIC X(08) VALUE SPACES.
000092 000092 05 ERR-DB2-TABLA PIC X(08) VALUE SPACES.
000093 000093 05 ERR-DB2-CODIGO PIC -999 VALUE ZEROS.
000094 000094 05 ERR-DB2-AREA PIC X(80) VALUE SPACES.
000095 000095*
000096 000096 EXEC SQL
000097 000097 INCLUDE SQLCA
000098 000098 END-EXEC.
000099 000099*
F1=Help F2=Split F3=Exit F5=Rfind F6=Rchange F7=Up
F8=Down F9=Swap F10=Left F11=Right F12=Cancel

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 58 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

8. EDITAR DATOS

EDIT ENTRY PANEL

Pulsando la opción “2” en el Menú principal del ISPF/PDF se presenta una pantalla
con campos para la creación y mantenimiento (“Edit”) de los datos a guardar o
almacenados en ficheros secuenciales y/o librerías.

Menu RefList RefMode Utilities LMF Workstation Help


------------------------------------------------------------------------------
Edit Entry Panel
Command ===>

ISPF Library:
Project . . . UGOPEXX
Group . . . . CURSO . . . . . . . . .
Type . . . . PRUEBA
Member . . . (Blank or pattern for member selection list)

Other Partitioned or Sequential Data Set:


Data Set Name . . .
Volume Serial . . . (If not cataloged)

Workstation File:
File Name . . . . .

Initial Macro . . . . Options


Profile Name . . . . . / Confirm Cancel/Move/Replace
Format Name . . . . . Mixed Mode
Data Set Password . . Edit on Workstation
F1=Help F2=Split F3=Exit F7=Backward F8=Forward F9=Swap
F10=Actions F12=Cancel

Como puede observase, la pantalla es igual a la de visualización de datos (ver


capítulo “Visualizar datos”).

EDICION DE UN MIEMBRO

Para conseguir la edición existente de un miembro, se pueden utilizar las dos formas
indicadas en el capítulo anterior:

Indicar el nombre del miembro: en el campo correspondiente de la zona “ISPF Library”


o con el nombre completo en el campo “Data Set Name”.

No indicar ningún nombre de miembro. El sistema proporciona la lista de miembros de


la librería solicitada y se selecciona el deseado.

En caso de crear un nuevo miembro, se debe indicar obligatoriamente el nombre que


va a tener (ver apartado “Creación de un miembro”, más adelante).

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 59 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Menu RefList RefMode Utilities LMF Workstation Help


------------------------------------------------------------------------------
Edit Entry Panel
Command ===>

ISPF Library:
Project . . . UGOPEXX
Group . . . . CURSO . . . . . . . . .
Type . . . . PRUEBA
Member . . . PJE10E11 (Blank or pattern for member selection list)

Other Partitioned or Sequential Data Set:


Data Set Name . . .
Volume Serial . . . (If not cataloged)

Workstation File:
File Name . . . . .

Initial Macro . . . . Options


Profile Name . . . . . / Confirm Cancel/Move/Replace
Format Name . . . . . Mixed Mode
Data Set Password . . Edit on Workstation

Como resultado de la petición contemplada en esta pantalla, pueden resultar dos


situaciones:

El miembro solicitado no existe en la librería. Aparecerá una pantalla en blanco para


empezar a trabajar en los que se considera un nuevo miembro (ver apartado
“Creación de un miembro”, más adelante).

El miembro requerido existe. Aparecerá una pantalla con los primeros registros de ese
miembro y, muy posiblemente, mensajes de aviso del sistema, como se indicó en la
visualización. Estos mensajes suelen hacer referencia a las características del perfil
del miembro.

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
EDIT UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.00 Columns 00001 00072
Command ===> Scroll ===> PAGE
****** ***************************** Top of Data ******************************
==MSG> -Warning- The UNDO command is not available until you change
==MSG> your edit profile using the command RECOVERY ON.
==MSG> -CAUTION- Profile is set to STATS ON. Statistics did not exist for
==MSG> this member, but will be generated if data is saved.
000001 000001 ID DIVISION.
000002 000002 PROGRAM-ID. PJE10E11.
000003 000003******************************************************************
000004 000004* PROYECTO CURSO ENTORNO S/390
000005 000005*
000006 000006* PROGRAMA PJE10E11
000007 000007* TIPO BATCH
000008 000008*
000009 000009* AUTOR(ES) FRANCISCO M. RUIZ MATE
000010 000010* FECHA 11-10-1999
000011 000011*
000012 000012* DESCRIPCION
000013 000013* -----------
000014 000014* OBTENER EL LISTADO DE LOS DATOS GENERALES DE LOS PEDIDOS
000015 000015* INTRODUCIDOS POR SYSIN.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 60 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

PERFIL DE UN MIEMBRO

Es conveniente leer los mensajes del sistema para comprobar y/o ajustar el perfil (o
características de edición) del miembro a las necesidades específicas deseadas.

Para ver el perfil concreto del miembro que se está editando, se utiliza el comando
PROFILE, cuyo formato básico es

PR[OFILE]

que se puede abreviar PR.

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
EDIT UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.00 Columns 00001 00072
Command ===> PROFILE Scroll ===> PAGE
****** ***************************** Top of Data ******************************
=PROF> ....PRUEBA (FIXED - 80)....RECOVERY OFF WARN....NUMBER ON STD...........
=PROF> ....CAPS ON....HEX OFF....NULLS OFF....TABS OFF.........................
=PROF> ....AUTOSAVE ON....AUTONUM OFF....AUTOLIST OFF....STATS ON..............
=PROF> ....PROFILE UNLOCK....IMACRO NONE....PACK OFF....NOTE ON................
=PROF> ....HILITE OFF CURSOR FIND..............................................
000001 000001 ID DIVISION.
000002 000002 PROGRAM-ID. PJE10E11.
000003 000003******************************************************************
000004 000004* PROYECTO CURSO ENTORNO S/390
000005 000005*
000006 000006* PROGRAMA PJE10E11
000007 000007* TIPO BATCH
000008 000008*
000009 000009* AUTOR(ES) FRANCISCO M. RUIZ MATE
000010 000010* FECHA 11-10-1999
000011 000011*
000012 000012* DESCRIPCION
000013 000013* -----------
000014 000014* OBTENER EL LISTADO DE LOS DATOS GENERALES DE LOS PEDIDOS

Donde se da información sobre el nombre del perfil (PRUEBA), el tipo de registro del
miembro (FIXED, de longitud fija), la longitud del registro lógico (80 caracteres), forma
de visualización de datos (HEX OFF, normal), indicación de perfil desbloqueado o
modificable (PROFILE UNLOCK), etc.

En todos los casos, para cambiar las opciones del perfil no se pueden teclear
directamente sobre el comando correspondiente, sino que se escriben íntegramente
en la línea de comando. Después de pulsar la tecla “Intro”, se verá la modificación
automáticamente sobre la línea correspondiente donde esté el comando.

La características más interesantes del perfil se detallan a continuación.

RECOVERY

Es la opción más importante pues permite la posibilidad de recuperación de datos


cuando hay una caída del sistema o, más frecuentemente, cuando el usuario ha sido
cancelado por cualquier motivo, generalmente por tiempo sin usarlo.

Cuando se ha quedado una edición pendiente, al volver a iniciar la sesión el usuario,


el sistema le avisa que tiene una recuperación pendiente, solicitando la acción a
realizar:

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 61 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Volver a la situación en la que se estaba en el momento de la cancelación y seguir


editando.

Salvar el fichero, tal como estaba en el momento de la cancelación, y seguir con otra
operación.

Cancelar los cambios realizados hasta el momento de la cancelación.

Diferir la recuperación.

Para activar el sistema de recuperación automático, se debe teclear la orden

RECOVERY ON

NUMBER

Esta opción es también bastante importante, porque se refiere a los distintos tipos de
numeración automática que se pueden incluir en un miembro y que controla el propio
editor

NUM[BER ON] [STD]

[OFF] [COB[OL]]

[STD COB[OL]]

La opción por defecto es activada (ON). Para eliminar la numeración automática se


indicaría NUM OFF.

Además de la numeración de línea del editor, la que está a la izquierda,

algunos tipos de miembros pueden considerar otros tipos de numeración.

STD

Es la numeración estándar, que se sitúa entre las columnas 73 y 80. Esta numeración
no tiene ninguna validez actual y se usaba, para las fichas perforadas, como elemento
de clasificación. Actualmente la siguen manteniendo los programas COBOL, JCL, etc.

COB

Es la numeración de líneas de programación COBOL, va de la columna 1 a 6. Sólo se


debe poner en este tipo de miembros, porque el editor ocupa esta zona
automáticamente para esta numeración, “machacando” el contenido que pudiera
haber en esa zona. Actualmente, no tiene ninguna validez.

CAPS

Si está activada (ON) efectúa la conversión automática de los caracteres tecleados


como letras minúsculas en letras mayúsculas. Esto es importante en algunos casos,
como los programas escritos en lenguaje COBOL, porque hay compiladores que no
admiten instrucciones o nombres en letras minúsculas. Si está desactivada (OFF) deja
las letras en el fichero tal como se teclearon.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 62 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

NULLS

Cuando esta activa (ON) elimina los caracteres no tecleados, es decir, aquellos en los
que ha habido desplazamiento por el uso de teclas de cursor (por ejemplo, si se
escribe: “ESTO SE VA A PEGAR” y el recorrido entre la primera y la segunda
palabras se ha hecho con la tecla de cursor a la derecha, el resultado será: “ESTOSE
VA A PEGAR”). Si esta desactivada (OFF) los caracteres de desplazamiento de cursor
los convierte en blancos, por lo que en el ejemplo anterior, el texto quedaría tal como
se escribió.

Se recomienda esta opción. (Ver apartado “General” del capítulo “Personalizar el


usuario”).

File Edit Confirm Menu Utilities Compilers Test Help


sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
EDIT UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.00 Columns 00007 00072
Command ===> Scroll ===> PAGE
****** ***************************** Top of Data ******************************
=PROF> ....PRUEBA (FIXED - 80)....RECOVERY ON....NUMBER ON STD COB.............
=PROF> ....CAPS ON....HEX OFF....NULLS OFF....TABS OFF.........................
=PROF> ....AUTOSAVE ON....AUTONUM OFF....AUTOLIST OFF....STATS ON..............
=PROF> ....PROFILE UNLOCK....IMACRO NONE....PACK OFF....NOTE ON................
=PROF> ....HILITE OFF CURSOR FIND..............................................
000001 ID DIVISION.
000002 PROGRAM-ID. PJE10E11.
000003 ******************************************************************
000004 * PROYECTO CURSO ENTORNO S/390
000005 *
000006 * PROGRAMA PJE10E11
000007 * TIPO BATCH
000008 *
000009 * AUTOR(ES) FRANCISCO M. RUIZ MATE
000010 * FECHA 11-10-1999
000011 *
000012 * DESCRIPCION
000013 * -----------
000014 * OBTENER EL LISTADO DE LOS DATOS GENERALES DE LOS PEDIDOS

CREACIÓN DE UN MIEMBRO

Para crear un nuevo miembro, se le debe dar un nombre en el campo “Member” de la


pantalla “Edit Entry Panel”. Esto proporciona una pantalla vacía, donde se podrán
introducir los datos directamente o, en muchas situaciones, copiar datos desde otro
miembro y modificarlos a continuación.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 63 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

COPY

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
EDIT UGOPEXX.CURSO.PRUEBA(PXX00X00) - 01.00 Columns 00007 00072
Command ===> COPY Scroll ===> PAGE
****** ***************************** Top of Data ******************************
''''''
''''''
''''''
''''''
''''''
''''''
''''''
''''''
''''''
''''''
''''''
''''''
''''''
''''''
''''''
''''''
''''''
''''''

Una vez que se obtiene una pantalla vacía, se puede emitir un comando COPY,
teniendo en cuenta dos posibilidades:

El miembro que se quiere copiar está en la misma librería. La forma más rápida y
cómoda es escribir

COPY nombre-miembro

en la línea de comando. Automáticamente, se obtendrá una copia del miembro


mencionado completo.

El miembro no está en la misma librería o, en cualquiera de los casos, no se quiere


copiar completo. Se debe indicar solamente la palabra COPY en la línea de comando.
En caso contrario, cuando el miembro indicado está en otra librería, enviará a la línea
1 un mensaje de error.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 64 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

En caso correcto, se enviaría la siguiente pantalla:

Menu RefList Utilities Help


------------------------------------------------------------------------------
Edit/View - Copy
Command ===>
More: +
"Current" Data Set: UGOPEXX.CURSO.PRUEBA(PXX00X00)

From ISPF Library:


Project . . . UGOPEXX
Group . . . . CURSO . . . . . . . . .
Type . . . . PRUEBA
Member . . . (Blank or pattern for member selection list)

From Other Partitioned or Sequential Data Set:


Data Set Name . .
Volume Serial . . (If not cataloged)

Data Set Password . . (If password protected)

Line Numbers (Blank for entire member or sequential data set)


First line . . . .
Last line . . . . .
Number type . . . . (Standard, ISPFstd, COBOL, or Relative)

La primera información que proporciona esta pantalla es el miembro en el que se va a


copiar, en el campo “Current Data Set”.

En la siguiente zona, se indica la librería y el miembro que se quiere copiar. Si se


desea, no hace falta indicar el miembro, mostrándose en este caso la lista de
miembros.

Se puede opcionalmente utilizar otro fichero o librería, usando el campo “Data Set
Name”, como se ha visto en otras ocasiones.

Por último, en el bloque final se le indicará cual es la primera línea, la última línea y el
tipo de numeración del miembro original. Se recomienda la numeración “Relative”
(relativa), que es la posición física que ocupan los registros dentro del fichero. En
cualquier caso, es conveniente la renumeración previa del fichero original (ver
comando “RENUM”, más adelante).

Una vez tecleada esta información, el resultado es la copia parcial o total del miembro
origen sobre el destino. A partir de aquí, se puede empezar a modificar o,
simplemente, salvarlo para utilizaciones posteriores.

Si no fuera un nuevo miembro, es decir, el fichero ya contiene registros, se debe


indicar la línea después de la que se quiere copiar (con la letra “A” (after) en la
numeración del editor) o antes de la que se quiere copiar (con la letra “B” (before)).

Esta es la forma más útil de copiar un solo miembro, puesto que deja el nuevo
disponible para su uso inmediato. Si se quisieran copiar más de un miembro, se debe
usar la utilidad 3.3 (ver capítulo “Utilidades”).

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 65 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

CREATE

Otra forma de copiar es la contraria a la vista anteriormente: situarse en el miembro


original y crear un nuevo miembro, copiando total o parcialmente desde el origen.

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
EDIT UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.01 Columns 00007 00072
Command ===> CREATE Scroll ===> PAGE
****** ***************************** Top of Data ******************************
C99999 ID DIVISION.
000002 PROGRAM-ID. PJE10E11.
000003 ******************************************************************
000004 * PROYECTO CURSO ENTORNO S/390
000005 *
000006 * PROGRAMA PJE10E11
000007 * TIPO BATCH
000008 *
000009 * AUTOR(ES) FRANCISCO M. RUIZ MATE
000010 * FECHA 11-10-1999
000011 *
000012 * DESCRIPCION
000013 * -----------
000014 * OBTENER EL LISTADO DE LOS DATOS GENERALES DE LOS PEDIDOS
000015 * INTRODUCIDOS POR SYSIN.
000016 * SE ESCRIBIRA UN TOTAL DEL IMPORTE DE LOS PEDIDOS Y DE LAS
000017 * DEVOLUCIONES, AL FINAL DEL PROCESO.
000023 *
000024 * FICHEROS (L = LECTURA / E = ESCRITURA / M = MODIFICACION)

Para indicar la parte del fichero original que se desea copiar se va a usar un comando
de línea “C” (ver apartado “Comandos de línea”, más adelante), pudiendo haber varias
posibilidades:

Copiar una línea. Se indicaría una sola letra “C” en la zona de numeración de línea a
copiar. Esta forma no es útil.

Copiar un bloque de líneas. Se indicarían dos letras “C” en la primera y última zona de
numeración de las líneas a copiar.

Copiar desde un punto hasta el final. Se colocaría la serie “C99999” en la zona de


numeración de la línea a partir de la que se quiere copiar. Si esa línea es la primera,
se copiará todo el miembro. Es la forma más habitual y útil.

También se puede indicar la letra “M” en lugar de “C”. El efecto es que moverá la(s)
línea(s), desapareciendo del origen y quedando en el destino. Esta forma es de uso
delicado y, en lo posible, se debe evitar.

Si el nuevo miembro se quiere crear en la misma librería, basta indicar el nombre


detrás de la palabra de comando

CREATE nombre-miembro

en la línea de comando. Automáticamente, se obtendrá una copia del miembro


mencionado.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 66 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Si el nuevo miembro se quiere crear en otra librería, se tecleará la palabra CREATE,


pulsando la tecla “Intro”, aparece la siguiente pantalla:

Menu RefList Utilities Help


------------------------------------------------------------------------------
Edit/View - Create
Command ===>

"Current" Data Set: UGOPEXX.CURSO.PRUEBA(PJE10E11)

To ISPF Library:
Project . . . UGOPEXX
Group . . . . CURSO
Type . . . . PRUEBA
Member . . .

To Other Partitioned Data Set Member:


Data Set Name . .
Volume Serial . . (If not cataloged)

Data Set Password . . (If password protected)

Enter "/" to select option


Specify pack option for "CREATE" Data Set

Press ENTER key to create. Enter END command to cancel create.

donde se le indicará el miembro de la librería o el fichero que se quiere crear, con las
consideraciones vistas anteriormente.

La desventaja de este método con respecto a COPY es que para poder trabajar en el
nuevo miembro hay que acceder a él (hay que abrirlo en edición) mientras que en
COPY su utilización era inmediata.

COMANDOS GENERALES

Se debe tener en cuenta que en este manual no se recogen exhaustivamente todos


los comandos, sino aquellos que se han considerado más usuales y útiles. Para una
información más completa, consultar “ISPF/PDF Edit and Edit macros”.

COMUNES A VIEW

Los comandos que se vieron en el capítulo “Visualizar datos”, anteriormente, tienen la


misma validez y uso que se indicó en su momento. Para información sobre ellos,
consultar dicho capítulo.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 67 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

CHANGE

Una actividad bastante frecuente es modificar datos dentro de los ficheros, de forma
individual o múltiple.

El comando CHANGE (abreviado “C”) proporciona distintas y cómodas formas de


cambio, siendo el formato general

C[HANGE] cadena1 cadena2 [NEXT] [CHARS] [X] [col1 [col2]]

[ALL] [PREFIX] [NX]

[FIRST] [SUFFIX]

[LAST] [WORD]

[PREV]

y en su forma básica se indica la letra “C”, seguida de uno o más blancos, con una
cadena origen (cadena1) y otra de cambio (cadena2).

Cadenas

Tiene la misma consideración que en el comando FIND, pero teniendo en cuenta que
las cadenas pueden tener distintas longitudes y que si una de las cadenas necesita
comillas, también la otra las debe llevar, se recomienda siempre el uso de comillas
para las dos cadenas.

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
EDIT UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.00 CHARS 'FILLER' changed
Command ===> C FILLER FILLER99 ALL Scroll ===> PAGE
000081 10 DB2-SYA PIC 9(04) VALUE ZEROS.
==CHG> 10 FILLER99 PIC X(01) VALUE '-'.
000083 10 DB2-MES PIC 9(02) VALUE ZEROS.
==CHG> 10 FILLER99 PIC X(01) VALUE '-'.
000085 10 DB2-DIA PIC 9(02) VALUE ZEROS.
000086 *
000088 01 WS-ERROR-DB2.
000089 05 ERR-DB2-ASTERISCO PIC X(80) VALUE ALL '*'.
000090 05 ERR-DB2-PROGRAMA PIC X(08) VALUE 'PJE10E11'.
000091 05 ERR-DB2-SENTENCIA PIC X(08) VALUE SPACES.
000092 05 ERR-DB2-TABLA PIC X(08) VALUE SPACES.
000093 05 ERR-DB2-CODIGO PIC -999 VALUE ZEROS.
000094 05 ERR-DB2-AREA PIC X(80) VALUE SPACES.
000095 *
000096 EXEC SQL
000097 INCLUDE SQLCA
000098 END-EXEC.
000099 *
000100 * AREAS DE ENTRADA/SALIDA (EXCEPTO LISTADOS).
000101 *

En la pantalla anterior se puede contemplar el resultado de un cambio, donde las


líneas que han sufrido modificación quedan marcada con la serie “==CHG>” en la
zona de numeración de la línea.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 68 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Si, por problemas de longitud, no se ha podido reemplazar la cadena original en


alguna línea, se indicará como “==ERR>”.

Hay dos formas generales de usar este comando y se recomienda un estudio previo
de las necesidades de cada caso, antes de realizar las modificaciones:

Masivo. Se realiza al indicar la opción ALL en la línea del comando. El resultado es el


cambio de la primera cadena por la segunda en cualquier punto del fichero en el que
se encuentre. Es un uso tan cómodo como peligroso, pues puede afectar a cadenas o
partes de cadena que no interesaba modificar. Antes del uso de esta forma, se
recomienda la realización de un FIND previo.

Uno a uno. Se trata de usar las teclas de búsqueda (PF5), para encontrar la cadena
original, y la de cambio (PF6), para reemplazarla por la nueva. Es un método más
lento que el anterior, pero mucho más seguro.

Al cambiar ficheros de datos, hay que tener especial cuidado con las columnas que
ocupa el campo que se quiere modificar, para evitar cambios en campos que no están
involucrados en la modificación deseada. Por ejemplo, si se quiere cambiar una fecha
a ceros por la del día, no se debe indicar

C ‘00000000’ ‘19990926’ ALL

porque se podrían modificar accidentalmente aquellos saldos que contengan 8 dígitos


a cero. En este caso, se debe especificar el intervalo de columnas, para evitar ese
grave error

C ‘00000000’ ‘19990926’ 120 127 ALL

SAVE

Se puede teclear este comando cuando se quieren consolidar los cambios producidos
hasta ese momento, sin tener que “salirse” del miembro editado. De no emitir este
comando, los cambios sólo se producen físicamente cuando se abandona la edición
(generalmente pulsando PF3).

Esta forma de trabajo tiene la ventaja de que, si hubiera que cancelar la edición por
cualquier motivo, sólo se pierden las modificaciones desde la última emisión de este
comando.

También se puede hacer para evitar pérdida de modificaciones ante una caída general
del sistema o de usuario, pero esta posibilidad queda cubierta mejor con el comando
RECOVERY (ver apartado “Perfil de un miembro”, más atrás).

CANCEL

Provoca la anulación de todas las modificaciones que se han realizado en el miembro,


desde el comienzo de la edición o desde la emisión del último comando SAVE, si se
ha hecho alguno.

Si el número y complejidad de los cambios es grande, se recomienda emitir


periódicamente el comando SAVE. Por el contrario, si las modificaciones son escasas
y fáciles de controlar, se debe evitar usar dicho comando.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 69 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Aunque no hay ninguna normativa que lo impida, no es nada recomendable asignar


una tecla programable a este comando, pues una vez que se teclease no habría
manera de recuperar las modificaciones canceladas accidentalmente.

Se puede y se suele abreviar como CAN.

UNDO

Tiene el mismo efecto que el comando CANCEL, pero deshaciendo los cambios de
uno en uno y hacia atrás. También tiene las mismas consideraciones que el comando
CANCEL con respecto al comando SAVE.

Para poder emitir el comando UNDO, debe estar activa la recuperación automática en
caso de caída (RECOVERY ON).

SUBMIT

Provoca la ejecución del contenido del miembro sobre el que se aplica. Por tanto, sólo
se debe emitir este comando cuando se trate de miembros cuyo contenido sean
registros con lenguaje JCL.

En caso de emitirlo con cualquier fichero (por ejemplo, un programa en lenguaje


COBOL), se intentaría ejecutar el trabajo, pero lo rechazaría el convertidor/interprete
del JES.

Se puede y se suele abreviar como SUB.

SORT

Aunque es preferible y más habitual clasificar los ficheros a través de la utilidad SORT
del JCL, a veces puede ser interesante clasificar el contenido de un miembro de una
librería o de un fichero de forma “interactiva” e inmediata. Al modificar la posición de
los registros, el uso de este comando se debe analizar cuidadosamente, antes de
usarlo, ya que puede provocar problemas no deseados con la información original.

SORT [campo1 ..... campo5]

donde cada campo tiene la forma

[A] [col-inicio col-final]

[B]

Si se emite un comando SORT sin más parámetros, la clasificación se hará sobre los
límites del registro, en general, sobre todo el registro.

Se pueden establecer hasta 5 campos de clasificación, con las siguientes


consideraciones:

Por defecto, se considera clasificación ascendente, aunque se puede indicar


explícitamente con la letra “A”. Si se desea realizar una clasificación de alguno o todos

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 70 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

los campos, se debe indicar la letra “B”. El orden de clasificación se puede indicar
antes o después de las columnas de clasificación.

El orden de los campos de clasificación no tiene por que ser ascendente (por ejemplo,
se pueden indicar la secuencia: 25 30 1 6).

Col-inicio representa la primera columna y col-final la última del campo a clasificar. Por
tanto, col-inicio no podrá ser mayor que col-final.

No puede haber solapamiento parcial o total de campos: la columna de un campo no


puede empezar dentro del intervalo de otro campo, ni un campo puede englobar a
otro.

La columna final de un campo no puede superar el valor de la longitud del registro.

Si sólo se indica la columna inicial se asume que la columna final es el límite (final) del
ámbito del registro, generalmente la última posición del registro.

CUT

Es una alternativa interesante y cómoda para copiar o mover datos de un miembro a


otro.

La forma de copiar una parte de un miembro consiste en “marcar” la(s) líneas que se
quieren duplicar con el comando de línea “C” en el texto original. Después escribir el
comando CUT en la línea 2. El sistema enviará un mensaje a la línea 1 como: nnn
lines cutted. Estas líneas se podrán copiar en cualquier fichero y en cualquier
momento, dentro de la sesión.

Si se utiliza el comando de línea “M”, las líneas desaparecen del original en el


momento de “cortarlas”. Esta forma es menos recomendable.

Se puede hacer un “corte” acumulativo incluyendo la opción APPEND, detrás de la


palabra CUT. La acumulación se produce cada vez que se ejecuta este comando. Hay
que se cuidadoso con esta manera de trabajar.

En algunas instalaciones actuales, este comando no está disponible.

PASTE

Es el complemento del comando CUT. Para “pegar” un bloque “cortado” previamente,


en el miembro o fichero destino se debe indicar la línea después de la que se quiere
situar el texto (con una letra “A” (after) en la zona de numeración de la línea) o en la
línea antes de la que se quiere copiar (con la letra “B” (before) de la zona de
numeración de la línea) y escribir la palabra PASTE en la línea de comando.

Se debe tener en cuenta que se copiará o moverá el último bloque que se haya
“cortado”, a no ser que haya acumulación (ver “CUT”, más atrás).

En algunas instalaciones actuales, este comando no está disponible.

RENUM

Aunque, como se explicó en su momento (ver apartado “Perfil de un miembro”, más


atrás), las numeraciones internas en los ficheros no tienen validez, el sistema controla

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 71 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

esas numeraciones si están activas. Por ejemplo, si se han hecho muchas


modificaciones en un programa COBOL, posiblemente se verá, de vez en cuando, en
la línea 1 el mensaje: RENUM recommended.

Este comando se emitirá para mantener la “limpieza” del sistema de numeración que
tenga el miembro o fichero.

UNNUMBER

Si un miembro o fichero se creó con una numeración o se copió de otro fichero que
tenía determinada numeración, esta permanece como parte del fichero siempre y no
se pueden incluir datos en esas zonas.

Para eliminar las numeraciones y poderlas utilizar como parte del registro, se emite
este comando. Hay que tener en cuenta que no elimina los números, sino que permite
que se puedan “machacar”.

Se puede y se suele abreviar como UNNUM.

COMANDOS DE LINEA

Para poder manipular registros dentro de un miembro de una librería o un fichero, son
necesarios determinados comandos especiales, llamados de línea porque se escriben
en la zona de numeración del editor en la línea sobre la que se quiere actuar.

Se escriben con una sola letra, que identifica la operación a realizar, si sólo afecta a
una línea o con dos letras y en dos líneas distintas, si afecta a un bloque de líneas.

Estos comandos permiten realizar las operaciones necesarias para el mantenimiento


de los datos:

Insertar una o más líneas.

Copiar una línea o un bloque de líneas en otro punto del fichero.

Mover una línea o un bloque de líneas en otro punto del fichero.

Repetir una línea o un bloque de líneas detrás de la línea indicada.

Borrar una línea o un bloque de líneas del fichero.

Ocultar un bloque de líneas, para mejorar la visión del fichero.

Desplazar verticalmente los datos, para mejorar la claridad de la información.

Mientras que no se sobrepase la numeración del editor, se puede escribir el comando


a partir de cualquier columna de esa numeración: no es necesario que empiece en la
primera columna.

INSERTAR LINEAS

El comando para la inserción de una o más líneas es la letra “I”. Se coloca en la línea
después de la que se quiere insertar.

Este comando tiene dos posibles utilizaciones:

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 72 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Provoca la inserción de una línea en blanco, detrás de la línea donde se ha escrito el


comando.

In

Provoca la inserción de “n” líneas a continuación de la que se escribió el comando.

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
EDIT UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.01 Columns 00007 00072
Command ===> Scroll ===> PAGE
000056 01 REG-LPEDIDOS PIC X(132).
000057 *
000058 WORKING-STORAGE SECTION.
000059 *
000060 01 VARIABLES.
000061 05 WS-CONT-LIN PIC 9(02) VALUE ZEROS.
000062 05 WS-MAX-LIN PIC 9(02) VALUE 60.
000063 05 WS-CONT-PAG PIC 9(03) VALUE ZEROS.
000067 05 WS-TOT-PEDIDOS PIC 9(15)V99 COMP-3
000068 VALUE ZEROS.
000069 05 WS-TOT-DESCTOS PIC 9(15)V99 COMP-3
I50070 VALUE ZEROS.
000073 *
000075 01 FECHAS.
000076 05 SYS-FECHA.
000077 10 SYS-AAA PIC 9(02) VALUE ZEROS.
000078 10 SYS-MES PIC 9(02) VALUE ZEROS.
000079 10 SYS-DIA PIC 9(02) VALUE ZEROS.
000080 05 DB2-FECHA.
000081 10 DB2-SYA PIC 9(04) VALUE ZEROS.

La ejecución del comando “I5” en la línea 000070 provoca la apertura de un bloque de


cinco líneas, para la introducción de datos.

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
EDIT UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.01 Columns 00007 00072
Command ===> Scroll ===> PAGE
000056 01 REG-LPEDIDOS PIC X(132).
000057 *
000058 WORKING-STORAGE SECTION.
000059 *
000060 01 VARIABLES.
000061 05 WS-CONT-LIN PIC 9(02) VALUE ZEROS.
000062 05 WS-MAX-LIN PIC 9(02) VALUE 60.
000063 05 WS-CONT-PAG PIC 9(03) VALUE ZEROS.
000067 05 WS-TOT-PEDIDOS PIC 9(15)V99 COMP-3
000068 VALUE ZEROS.
000069 05 WS-TOT-DESCTOS PIC 9(15)V99 COMP-3
000070 VALUE ZEROS.
''''''
''''''
''''''
''''''
''''''
000073 *
000075 01 FECHAS.
000076 05 SYS-FECHA.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 73 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Se debe tener especial cuidado en no usar la tecla “Supr” después de escribir la letra
“I” o el número de líneas a insertar: el sistema considera que el resto de la numeración
de línea forma parte del número de líneas a insertar (por ejemplo, si la línea es
003400, se escribe I5 y se pulsa la tecla de supresión de caracteres, el sistema
entiende “I5400”).

Los usuarios expertos deben evitar el uso de este comando.

COPIAR LINEAS

El comando para la copiar una o más líneas en otra posición del fichero es la letra “C”.
Se coloca en la línea que se quiere duplicar en otro lugar.

Este comando tiene tres posibles utilizaciones:

Indica que sólo se va a copiar esa línea.

Cn

Indica que se van a copiar “n” líneas a partir de la incluye el comando.

CC

Indica que se quiere copiar un bloque de líneas: desde la que tiene la primera serie
“CC” hasta la que tiene otra serie “CC”.

Además se debe indicar la posición donde se quiere copiar:

A Después (after) la línea que incluye esta letra.

B Antes (before) la línea que incluye esta letra.

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
EDIT UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.01 Columns 00007 00072
Command ===> Scroll ===> PAGE
000056 01 REG-LPEDIDOS PIC X(132).
000057 *
000058 WORKING-STORAGE SECTION.
000059 *
000060 01 VARIABLES.
CC0061 05 WS-CONT-LIN PIC 9(02) VALUE ZEROS.
000062 05 WS-MAX-LIN PIC 9(02) VALUE 60.
00CC63 05 WS-CONT-PAG PIC 9(03) VALUE ZEROS.
000067 05 WS-TOT-PEDIDOS PIC 9(15)V99 COMP-3
000068 VALUE ZEROS.
000069 05 WS-TOT-DESCTOS PIC 9(15)V99 COMP-3
0000A0 VALUE ZEROS.
000073 *
000075 01 FECHAS.
000076 05 SYS-FECHA.
000077 10 SYS-AAA PIC 9(02) VALUE ZEROS.
000078 10 SYS-MES PIC 9(02) VALUE ZEROS.
000079 10 SYS-DIA PIC 9(02) VALUE ZEROS.
000080 05 DB2-FECHA.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 74 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Se quiere copiar un bloque que va de la línea 000061 a la 000063 después de la línea


000070. El resultado es:

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
EDIT UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.02 COBOL renumbered
Command ===> Scroll ===> PAGE
000056 01 REG-LPEDIDOS PIC X(132).
000057 *
000058 WORKING-STORAGE SECTION.
000059 *
000060 01 VARIABLES.
000061 05 WS-CONT-LIN PIC 9(02) VALUE ZEROS.
000062 05 WS-MAX-LIN PIC 9(02) VALUE 60.
000063 05 WS-CONT-PAG PIC 9(03) VALUE ZEROS.
000067 05 WS-TOT-PEDIDOS PIC 9(15)V99 COMP-3
000068 VALUE ZEROS.
000069 05 WS-TOT-DESCTOS PIC 9(15)V99 COMP-3
000070 VALUE ZEROS.
000071 05 WS-CONT-LIN PIC 9(02) VALUE ZEROS.
000072 05 WS-MAX-LIN PIC 9(02) VALUE 60.
000073 05 WS-CONT-PAG PIC 9(03) VALUE ZEROS.
000074 *
000075 01 FECHAS.
000076 05 SYS-FECHA.
000077 10 SYS-AAA PIC 9(02) VALUE ZEROS.
000078 10 SYS-MES PIC 9(02) VALUE ZEROS.

MOVER LINEAS

El comando para mover una o más líneas a otra posición del fichero es la letra “M”. Se
coloca en la línea que se quiere desplazar a otro lugar. Es muy parecida a la copia,
pero aquí las líneas “desaparecen” de la posición original para “aparecer” en un nuevo
lugar.

Este comando tiene tres posibles utilizaciones:

Indica que sólo se va a mover esa línea.

Mn

Indica que se van a mover “n” líneas a partir de la incluye el comando.

MM

Indica que se quiere mover un bloque de líneas: desde la que tiene la primera serie
“MM” hasta la que tiene otra serie “MM”.

Además se debe indicar la posición a la se quiere mover:

A Después (after) la línea que incluye esta letra.

B Antes (before) la línea que incluye esta letra.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 75 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
EDIT UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.02 Columns 00007 00072
Command ===> Scroll ===> PAGE
000056 01 REG-LPEDIDOS PIC X(132).
000057 *
000058 WORKING-STORAGE SECTION.
000059 *
000060 01 VARIABLES.
MM0061 05 WS-CONT-LIN PIC 9(02) VALUE ZEROS.
000062 05 WS-MAX-LIN PIC 9(02) VALUE 60.
00MM63 05 WS-CONT-PAG PIC 9(03) VALUE ZEROS.
000067 05 WS-TOT-PEDIDOS PIC 9(15)V99 COMP-3
000068 VALUE ZEROS.
000069 05 WS-TOT-DESCTOS PIC 9(15)V99 COMP-3
0000A0 VALUE ZEROS.
000074 *
000075 01 FECHAS.
000076 05 SYS-FECHA.
000077 10 SYS-AAA PIC 9(02) VALUE ZEROS.
000078 10 SYS-MES PIC 9(02) VALUE ZEROS.
000079 10 SYS-DIA PIC 9(02) VALUE ZEROS.
000080 05 DB2-FECHA.
000081 10 DB2-SYA PIC 9(04) VALUE ZEROS.

Se quiere mover un bloque que va de la línea 000061 a la 000063 después de la línea


000070. El resultado es:

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
EDIT UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.02 Columns 00007 00072
Command ===> Scroll ===> PAGE
000056 01 REG-LPEDIDOS PIC X(132).
000057 *
000058 WORKING-STORAGE SECTION.
000059 *
000060 01 VARIABLES.
000067 05 WS-TOT-PEDIDOS PIC 9(15)V99 COMP-3
000068 VALUE ZEROS.
000069 05 WS-TOT-DESCTOS PIC 9(15)V99 COMP-3
000070 VALUE ZEROS.
000071 05 WS-CONT-LIN PIC 9(02) VALUE ZEROS.
000072 05 WS-MAX-LIN PIC 9(02) VALUE 60.
000073 05 WS-CONT-PAG PIC 9(03) VALUE ZEROS.
000074 *
000075 01 FECHAS.
000076 05 SYS-FECHA.
000077 10 SYS-AAA PIC 9(02) VALUE ZEROS.
000078 10 SYS-MES PIC 9(02) VALUE ZEROS.
000079 10 SYS-DIA PIC 9(02) VALUE ZEROS.
000080 05 DB2-FECHA.
000081 10 DB2-SYA PIC 9(04) VALUE ZEROS.

Se debe tener en cuenta que este comando puede descolocar una buena parte del
fichero original. Por tanto, cuando se quiera mover un bloque, utilizar preferentemente
la forma “MM-MM” a la “Mn”.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 76 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

REPETIR LINEAS

El comando para repetir una o más líneas a continuación de la que lleva el comando
es la letra “R”. Se coloca en la línea que se quiere duplicar. Es muy parecida a la
copia, pero en este caso no hace falta indicar donde se quiere repetir, puesto que es
siempre a continuación de la línea que emite el comando.

Este comando tiene tres posibles utilizaciones:

Indica que sólo se va a repetir esa línea a continuación.

Rn

Indica que se van a repetir “n” líneas a partir y después de la incluye el comando.

RR[n]

Indica que se quiere repetir un bloque de líneas: desde la que tiene la primera serie
“RR” hasta la que tiene otra serie “RR” y a continuación de la que tiene la última serie.
Se puede indicar la repetición “n” veces.

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
EDIT UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.02 Columns 00007 00072
Command ===> Scroll ===> PAGE
000056 01 REG-LPEDIDOS PIC X(132).
000057 *
000058 WORKING-STORAGE SECTION.
000059 *
000060 01 VARIABLES.
RR0067 05 WS-TOT-PEDIDOS PIC 9(15)V99 COMP-3
000068 VALUE ZEROS.
000069 05 WS-TOT-DESCTOS PIC 9(15)V99 COMP-3
00RR70 VALUE ZEROS.
000071 05 WS-CONT-LIN PIC 9(02) VALUE ZEROS.
000072 05 WS-MAX-LIN PIC 9(02) VALUE 60.
000073 05 WS-CONT-PAG PIC 9(03) VALUE ZEROS.
000074 *
000075 01 FECHAS.
000076 05 SYS-FECHA.
000077 10 SYS-AAA PIC 9(02) VALUE ZEROS.
000078 10 SYS-MES PIC 9(02) VALUE ZEROS.
000079 10 SYS-DIA PIC 9(02) VALUE ZEROS.
000080 05 DB2-FECHA.
000081 10 DB2-SYA PIC 9(04) VALUE ZEROS.
.

Se quiere repetir el bloque que va de la línea 000067 a la 000070 a continuación de la


línea 000070. El resultado es:

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 77 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
EDIT UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.02 RENUM recommended
Command ===> Scroll ===> PAGE
000056 01 REG-LPEDIDOS PIC X(132).
000057 *
000058 WORKING-STORAGE SECTION.
000059 *
000060 01 VARIABLES.
000067 05 WS-TOT-PEDIDOS PIC 9(15)V99 COMP-3
000068 VALUE ZEROS.
000069 05 WS-TOT-DESCTOS PIC 9(15)V99 COMP-3
000070 VALUE ZEROS.
000071 05 WS-TOT-PEDIDOS PIC 9(15)V99 COMP-3
000072 VALUE ZEROS.
000073 05 WS-TOT-DESCTOS PIC 9(15)V99 COMP-3
000074 VALUE ZEROS.
000075 05 WS-CONT-LIN PIC 9(02) VALUE ZEROS.
000076 05 WS-MAX-LIN PIC 9(02) VALUE 60.
000077 05 WS-CONT-PAG PIC 9(03) VALUE ZEROS.
000078 *
000079 01 FECHAS.
000080 05 SYS-FECHA.
000081 10 SYS-AAA PIC 9(02) VALUE ZEROS.

BORRAR LINEAS

El comando para la borrar una o más líneas del fichero es la letra “D”. Se coloca en la
línea que se quiere borrar. Es, sin duda, el comando que requiere más cuidado en su
uso.

Este comando tiene tres posibles utilizaciones:

Indica que sólo se va a borrar esa línea.

Dn

Indica que se van a borrar “n” líneas a partir de la incluye el comando.

DD

Indica que se quiere borrar un bloque de líneas: desde la que tiene la primera serie
“DD” hasta la que tiene otra serie “DD”.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 78 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
EDIT UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.02 COBOL renumbered
Command ===> Scroll ===> PAGE
000056 01 REG-LPEDIDOS PIC X(132).
000057 *
000058 WORKING-STORAGE SECTION.
000059 *
000060 01 VARIABLES.
000061 05 WS-CONT-LIN PIC 9(02) VALUE ZEROS.
000062 05 WS-MAX-LIN PIC 9(02) VALUE 60.
000063 05 WS-CONT-PAG PIC 9(03) VALUE ZEROS.
000067 05 WS-TOT-PEDIDOS PIC 9(15)V99 COMP-3
000068 VALUE ZEROS.
000069 05 WS-TOT-DESCTOS PIC 9(15)V99 COMP-3
000070 VALUE ZEROS.
DD0071 05 WS-CONT-LIN PIC 9(02) VALUE ZEROS.
000072 05 WS-MAX-LIN PIC 9(02) VALUE 60.
00DD73 05 WS-CONT-PAG PIC 9(03) VALUE ZEROS.
000074 *
000075 01 FECHAS.
000076 05 SYS-FECHA.
000077 10 SYS-AAA PIC 9(02) VALUE ZEROS.
000078 10 SYS-MES PIC 9(02) VALUE ZEROS.

Se quiere borrar un bloque que va de la línea 000071 a la 000073. El resultado es:

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
EDIT UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.02 Columns 00007 00072
Command ===> Scroll ===> PAGE
000056 01 REG-LPEDIDOS PIC X(132).
000057 *
000058 WORKING-STORAGE SECTION.
000059 *
000060 01 VARIABLES.
000061 05 WS-CONT-LIN PIC 9(02) VALUE ZEROS.
000062 05 WS-MAX-LIN PIC 9(02) VALUE 60.
000063 05 WS-CONT-PAG PIC 9(03) VALUE ZEROS.
000067 05 WS-TOT-PEDIDOS PIC 9(15)V99 COMP-3
000068 VALUE ZEROS.
000069 05 WS-TOT-DESCTOS PIC 9(15)V99 COMP-3
000070 VALUE ZEROS.
000074 *
000075 01 FECHAS.
000076 05 SYS-FECHA.
000077 10 SYS-AAA PIC 9(02) VALUE ZEROS.
000078 10 SYS-MES PIC 9(02) VALUE ZEROS.
000079 10 SYS-DIA PIC 9(02) VALUE ZEROS.
000080 05 DB2-FECHA.
000081 10 DB2-SYA PIC 9(04) VALUE ZEROS.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 79 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

El uso de este comando en la forma “Dn” es muy peligroso, porque se pueden borrar,
por error al teclear el número, muchas más líneas que las deseadas. Sólo se
recomienda para borrar desde un punto del fichero hasta el final (por ejemplo, si se
quieren borrar todos los registros se escribiría en la primera línea “D99999”).

OCULTAR LINEAS

El comando para ocultar una o más líneas en la visualización del fichero es la letra “X”.
Se coloca en la línea que se quiere ocultar y no significa que desaparezcan
físicamente del fichero, sino de su visualización. Es útil para agilizar determinados
procesos (por ejemplo, búsqueda “visual”), porque ahorra desplazamientos de
pantalla.

Este comando tiene tres posibles utilizaciones:

Indica que sólo se va a ocultar esa línea. No merece la pena este uso.

Xn

Indica que se van a ocultar “n” líneas a partir de la incluye el comando.

XX

Indica que se quiere ocultar un bloque de líneas: desde la que tiene la primera serie
“XX” hasta la que tiene otra serie “XX”.

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
EDIT UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.02 Columns 00007 00072
Command ===> Scroll ===> PAGE
000056 01 REG-LPEDIDOS PIC X(132).
000057 *
000058 WORKING-STORAGE SECTION.
000059 *
000060 01 VARIABLES.
XX0067 05 WS-TOT-PEDIDOS PIC 9(15)V99 COMP-3
000068 VALUE ZEROS.
000069 05 WS-TOT-DESCTOS PIC 9(15)V99 COMP-3
000070 VALUE ZEROS.
000071 05 WS-TOT-PEDIDOS PIC 9(15)V99 COMP-3
000072 VALUE ZEROS.
000073 05 WS-TOT-DESCTOS PIC 9(15)V99 COMP-3
000074 VALUE ZEROS.
000075 05 WS-CONT-LIN PIC 9(02) VALUE ZEROS.
000076 05 WS-MAX-LIN PIC 9(02) VALUE 60.
00XX77 05 WS-CONT-PAG PIC 9(03) VALUE ZEROS.
000078 *
000079 01 FECHAS.
000080 05 SYS-FECHA.
000081 10 SYS-AAA PIC 9(02) VALUE ZEROS.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 80 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Se desea ocultar un bloque que va de la línea 000067 a la 000067. El resuLtado es:

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
EDIT UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.02 Columns 00007 00072
Command ===> Scroll ===> PAGE
000056 01 REG-LPEDIDOS PIC X(132).
000057 *
000058 WORKING-STORAGE SECTION.
000059 *
000060 01 VARIABLES.
- - - - - - - - - - - - - - - - - 11 Line(s) not Displayed
000078 *
000079 01 FECHAS.
000080 05 SYS-FECHA.
000081 10 SYS-AAA PIC 9(02) VALUE ZEROS.
000082 10 SYS-MES PIC 9(02) VALUE ZEROS.
000083 10 SYS-DIA PIC 9(02) VALUE ZEROS.
000084 05 DB2-FECHA.
000085 10 DB2-SYA PIC 9(04) VALUE ZEROS.
000086 10 FILLER PIC X(01) VALUE '-'.
000087 10 DB2-MES PIC 9(02) VALUE ZEROS.
000088 10 FILLER PIC X(01) VALUE '-'.
000089 10 DB2-DIA PIC 9(02) VALUE ZEROS.
000090 *
000091 01 WS-ERROR-DB2.

Se puede observar como el sistema indica, con una línea rayada, que en esa zona
hay líneas ocultas, no visualizadas.

Para recuperar estas líneas, la forma más cómoda es el uso del comando RESET (ver
apartado “Eliminar mensajes (RESET)” del capítulo “Visualizar datos”, más arriba).

DESPLAZAR COLUMNAS

Hasta ahora se ha visto la forma de realizar desplazamientos “horizontales” o de línea.


Algunas veces es interesante recolocar el texto para mayor claridad y eso puede
implicar el desplazamiento “lateral” o “vertical” dentro de algunos resgistros.

El comando para realizar estas operaciones en una o más líneas del fichero son los
caracteres “(” y “)”. Se coloca en la línea que se quiere desplazar.

Hay que se muy cuidadoso con estos desplazamiento puesto que pueden generar
pérdida de información (por ejemplo, si se desplazan 20 columnas a la derecha, todos
los caracteres que, en este momento, estén a la derecha de la columna 52 se
perderán).

Este comando tiene seis posibles utilizaciones:

Indica que los datos, desde el primer carácter más a la izquierda de la línea, se van a
desplazar 2 columnas a la izquierda, que es el valor por defecto.

(n

Indica que los datos de una línea se van a desplazar “n” columnas a la izquierda.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 81 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

((n

Indica que los datos del bloque seleccionado se despalzarán “n” columnas a la
izquierda. El número de columnas será de 2 si no se indica número y, si se indica, se
puede poner en la primera línea o en la última.

),)n,))n

Utilizan las mismas consideraciones que “(”, pero realizando el desplazamiento hacia
la derecha.

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
EDIT UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.02 RENUM recommended
Command ===> Scroll ===> PAGE
000056 01 REG-LPEDIDOS PIC X(132).
000057 *
000058 WORKING-STORAGE SECTION.
000059 *
000060 01 VARIABLES.
))5067 05 WS-TOT-PEDIDOS PIC 9(15)V99 COMP-3
000068 VALUE ZEROS.
000069 05 WS-TOT-DESCTOS PIC 9(15)V99 COMP-3
000070 VALUE ZEROS.
000071 05 WS-TOT-PEDIDOS PIC 9(15)V99 COMP-3
000072 VALUE ZEROS.
000073 05 WS-TOT-DESCTOS PIC 9(15)V99 COMP-3
000074 VALUE ZEROS.
000075 05 WS-CONT-LIN PIC 9(02) VALUE ZEROS.
000076 05 WS-MAX-LIN PIC 9(02) VALUE 60.
000))7 05 WS-CONT-PAG PIC 9(03) VALUE ZEROS.
000078 *
000079 01 FECHAS.
000080 05 SYS-FECHA.
000081 10 SYS-AAA PIC 9(02) VALUE ZEROS.

Se quieren desplazar los datos de un bloque que va de la línea


000067 a la 000077 cinco columnas a la derecha. El resultado es:

File Edit Confirm Menu Utilities Compilers Test Help


-------------------------------------------------------------------------------
EDIT UGOPEXX.CURSO.PRUEBA(PJE10E11) - 01.02 Columns 00007 00072
Command ===> Scroll ===> PAGE
000056 01 REG-LPEDIDOS PIC X(132).
000057 *
000058 WORKING-STORAGE SECTION.
000059 *
000060 01 VARIABLES.
000067 05 WS-TOT-PEDIDOS PIC 9(15)V99 COMP-3
000068 VALUE ZEROS.
000069 05 WS-TOT-DESCTOS PIC 9(15)V99 COMP-3
000070 VALUE ZEROS.
000071 05 WS-TOT-PEDIDOS PIC 9(15)V99 COMP-3
000072 VALUE ZEROS.
000073 05 WS-TOT-DESCTOS PIC 9(15)V99 COMP-3
000074 VALUE ZEROS.
000075 05 WS-CONT-LIN PIC 9(02) VALUE ZEROS.
000076 05 WS-MAX-LIN PIC 9(02) VALUE 60.
000077 05 WS-CONT-PAG PIC 9(03) VALUE ZEROS.
000078 *

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 82 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

9. UTILIDADES

MENU DE UTILIDADES

Prácticamente ninguno de los procesos anteriores se podrían haber realizado si antes


no se hubiesen creado las librerías y ficheros de datos para su uso.

Para la creación y mantenimiento de los grupos de datos se pueden utilizar distintas


utilidades, que proporcionan herramientas de amplias posibilidades y fácil manejo.

Menu Help
------------------------------------------------------------------------------
Utility Selection Panel
Option ===>

1 Library Compress or print data set. Print index listing. Print,


rename, delete, browse, edit or view members
2 Data Set Allocate, rename, delete, catalog, uncatalog, or display
information of an entire data set
3 Move/Copy Move, copy, or promote members or data sets
4 Dslist Print or display (to process) list of data set names.
Print or display VTOC information
5 Reset Reset statistics for members of ISPF library
6 Hardcopy Initiate hardcopy output
7 ISPF C/S Install ISPF C/S workstation code from MVS to your workstation.
8 Outlist Display, delete, or print held job output
9 Commands Create/change an application command table
* Reserved This option reserved for future expansion.
11 Format Format definition for formatted data Edit/Browse
12 SuperC Compare data sets (Standard Dialog)
13 SuperCE Compare data sets Extended (Extended Dialog)
14 Search-For Search data sets for strings of data (Standard Dialog)
15 Search-ForE Search data sets for strings of data Extended (Extended Dialog)

Donde los principales puntos son:

1. Gestión de librerías: información y comprimir librerías, operaciones sobre los


miembros de la librería.

2. Gestión de grupo de datos: creación y mantenimiento de grupos de datos


(librerías y ficheros).

3. Mover/copiar grupos de datos: Copiar y mover miembros de librerías y


ficheros de datos.

4. Lista de grupos de datos: información sobre todos los grupos de datos


catalogados.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 83 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

OPCIONES PARA LIBRERIAS

Con la opción 1 del submenú de utilidades, se ofrecen una serie de posibilidades para
el tratamiento de toda la librería, como para cada uno de sus miembros.

Menu RefList Utilities Help


------------------------------------------------------------------------------
Library Utility
Option ===>
More: +
blank Display member list E Edit member
C Compress data set V View member
X Print index listing B Browse member
L Print entire data set D Delete member
I Data set information R Rename member
S Short data set information P Print member

ISPF Library:
Project . . . UGOPEXX
Group . . . . CURSO . . . . . . . . .
Type . . . . PRUEBA
Member . . . (If B, D, E, P, R, V, or blank selected)
New name . . (If R selected)

Other Partitioned or Sequential Data Set:


Data Set Name . . .
Volume Serial . . . (If not cataloged)

Enter "/" to select option

donde se pueden ver dos columnas de menú: la izquierda afecta a toda la librería, la
derecha a los miembros de una librería.

GESTION DE LIBRERÍAS

Las funciones que se pueden realizar desde esta pantalla sobre una librería son las
siguientes:

blanco Visualiza la lista de los miembros de la librería

C Comprime el área de datos de la librería

X Imprime la lista de miembros de la librería

L Imprime la librería completa

I Informa sobre la caracteríscas físicas de la librería

S Información más corta sobre la librería

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 84 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

COMPRIMIR LA LIBRERÍA

Según se explicó en su momento, el borrado y modificación de los miembros de las


librerías van generando “huecos” no utilizados en el área de datos. Por precaución o
por aviso del sistema, se debe reorganizar una librería cada cierto tiempo, para
“liberar” el espacio no utilizado y agrupar la informaciónd de los ficheros.

Menu RefList Utilities Help


------------------------------------------------------------------------------
Library Utility Compress successful
Option ===> C
More: +
blank Display member list E Edit member
C Compress data set V View member
X Print index listing B Browse member
L Print entire data set D Delete member
I Data set information R Rename member
S Short data set information P Print member

ISPF Library:
Project . . . UGOPEXX
Group . . . . CURSO . . . . . . . . .
Type . . . . PRUEBA
Member . . . (If B, D, E, P, R, V, or blank selected)
New name . . (If R selected)

Other Partitioned or Sequential Data Set:


Data Set Name . . .
Volume Serial . . . (If not cataloged)

Enter "/" to select option

Después de pedir la compresión correcta de una librería, el sistema envía un mensaje


a la línea 1 de la pantalla: Compress successful. En caso de no poder comprimir la
librería por algún motivo, enviaría el mensaje correspondiente.

INFORMACION COMPLETA DE LA LIBRERIA

Se proporciona información completa sobre las características físicas de la librería:


volumen de almacenamiento, gestión de espacio, cantidad de espacio, características
de los registros, asignación y ocupación actual de la librería o fichero.

Ninguno de los datos presentados son modificables. Para más información sobre las
características de los datos, ver el apartado “Datos de la librería”, más adelante.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 85 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Data Set Information


Command ===>

Data Set Name . . . : UGOPEXX.CURSO.PRUEBA

General Data Current Allocation


Volume serial . . . : GDK2AC Allocated tracks . : 5
Device type . . . . : 3390 Allocated extents . : 1
Organization . . . : PO Maximum dir. blocks : 2
Record format . . . : FB
Record length . . . : 80
Block size . . . . : 24000 Current Utilization
1st extent tracks . : 5 Used tracks . . . . : 3
Secondary tracks . : 1 Used extents . . . : 1
Used dir. blocks . : 1
Creation date . . . : 1999/10/26 Number of members . : 3
Expiration date . . : ***None***

Después de pedir la compresión correcta de una librería, el sistema envía un mensaje


a la línea 1 de la pantalla: Compress successful. En caso de no poder comprimir la
librería por algún motivo, enviaría el mensaje correspondiente.

INFORMACION CORTA DE LA LIBRERIA

Data Set Information


Command ===>

Data Set Name . . . : UGOPEXX.CURSO.PRUEBA

General Data Current Allocation


Volume serial . . . : GDK2AC Allocated tracks . : 5
Device type . . . . : 3390 Allocated extents . : 1
Organization . . . : PO
Record format . . . : FB
Record length . . . : 80
Block size . . . . : 24000 Current Utilization
1st extent tracks . : 5 Used tracks . . . . : 3
Secondary tracks . : 1 Used extents . . . : 1

Creation date . . . : 1999/10/26


Expiration date . . : ***None***

Proporciona la misma información que el apartado anteior, excepto los datos relativos
al directorio de la librería, si este fuera el grupo de datos a considerar.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 86 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

GESTION DE MIEMBROS

Las funciones que se pueden realizar para cada miembro de la librería, bien desde el
panel 3.1 o desde la lista de miembros, son las siguientes:

E Edita el miembro seleccionado (equivalente a la opción 2 del Menú principal)

V Visualiza el miembro seleccionado (equivalente a la opción 1 del Menú


principal)

B Similar a la opción anterior, pero sin posibilidad de cambio de los datos

D Permite borrar un miembro de una librería.

R Permite renombrar un miembro de una librería

P Imprime el contenido de un miembro de una librería

LISTA DE MIEMBROS

La forma más habitual con los miembros de una librería, a través de esta utilidad, es a
partir de la lista de miembros, obtenida con la opción “blanco” de la opción 3.1.

Las operaciones de edición, visualización y “browsing” se dan por conocidas, porque


se corresponde a otras opciones del ISPF/PDF que se han visto anteriormente.

Hay usuarios que suelen trabajar desde esta opción, puesto que contempla
prácticamente todas las posibilidades de manejo de miembros de librerías. Sin
embargo, se aconseja utilizarlo sólo para las funciones que se detallan a continuación.

Menu Functions Confirm Utilities Help


------------------------------------------------------------------------------
LIBRARY UGOPEXX.CURSO.PRUEBA Row 00001 of 00004
Command ===> Scroll ===> PAGE
Name Prompt VV MM Created Changed Size Init Mod ID
_ DEJ99A00 01.00 99/10/26 99/10/26 10:40 352 352 0 UGOPEXX
_ PAP30E09 01.00 99/10/26 99/10/26 10:39 352 352 0 UGOPEXX
_ PJE10E11 01.02 99/10/26 99/10/26 12:25 356 352 114 UGOPEXX
_ PJE10E22 01.00 99/10/26 99/10/26 10:39 352 352 0 UGOPEXX
**End**

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 87 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Para elegir un miembro y la operación que se desea realizar sobre él, basta situar el
cursor en el punto de la izquierda correspondiente al miembro deseado y teclear la
letra que representa la operación.

BORRAR UN MIEMBRO

Menu Functions Confirm Utilities Help


------------------------------------------------------------------------------
LIBRARY UGOPEXX.CURSO.PRUEBA Row 00001 of 00004
Command ===> Scroll ===> PAGE
Name Prompt VV MM Created Changed Size Init Mod ID
D DEJ99A00 01.00 99/10/26 99/10/26 10:40 352 352 0 UGOPEXX
_ PAP30E09 01.00 99/10/26 99/10/26 10:39 352 352 0 UGOPEXX
_ PJE10E11 01.02 99/10/26 99/10/26 12:25 356 352 114 UGOPEXX
_ PJE10E22 01.00 99/10/26 99/10/26 10:39 352 352 0 UGOPEXX
**End**

Se puede realizar el borrado de uno o varios miembros de una librería, simplemente


“marcando” con la letra “D” las líneas de la lista sobre las que se quiere actuar.

Dado lo delicado de esta operación, porque se pueden perder definitivamente los


datos de los miembros borrados, se debe pedir siempre confirmación de borrado.

Menu Functions Confirm Utilities Help


- +-------------------- ISPF Utilities --------------------+ -----------------
L | Confirm Member Delete | ow 00001 of 00004
C | | Scroll ===> PAGE
| Data Set Name: | nit Mod ID
D | UGOPEXX.CURSO.PRUEBA | 352 0 UGOPEXX
_ | | 352 0 UGOPEXX
_ | Member to be Deleted: | 352 114 UGOPEXX
_ | DEJ99A00 | 352 0 UGOPEXX
| |
| Set member delete confirmation off |
| |
| Press ENTER to confirm delete. |
| Press CANCEL or EXIT to cancel delete. |
| |
| |
+--------------------------------------------------------+

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 88 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Después de aceptar o cancelar las peticiones de borrado, el resultado es una pantalla


similar a

Menu Functions Confirm Utilities Help


------------------------------------------------------------------------------
LIBRARY UGOPEXX.CURSO.PRUEBA Row 00001 of 00004
Command ===> Scroll ===> PAGE
Name Prompt VV MM Created Changed Size Init Mod ID
_ DEJ99A00 *Deleted
_ PAP30E09 01.00 99/10/26 99/10/26 10:39 352 352 0 UGOPEXX
_ PJE10E11 01.02 99/10/26 99/10/26 12:25 356 352 114 UGOPEXX
_ PJE10E22 01.00 99/10/26 99/10/26 10:39 352 352 0 UGOPEXX
**End**

RENOMBRAR UN MIEMBRO

Para cambiar el nombre de un miembro sólo existe esta opción. Se puede hacer
directamente en la lista, colocando la letra “R” en la línea correspondiente y el nuevo
nombre a la derecha del actual.

Menu Functions Confirm Utilities Help


------------------------------------------------------------------------------
LIBRARY UGOPEXX.CURSO.PRUEBA Row 00001 of 00003
Command ===> Scroll ===> PAGE
Name Prompt VV MM Created Changed Size Init Mod ID
R PAP30E09 PJE30E15 01.00 99/10/26 99/10/26 10:39 352 352 0 UGOPEXX
_ PJE10E11 01.02 99/10/26 99/10/26 12:25 356 352 114 UGOPEXX
_ PJE10E22 01.00 99/10/26 99/10/26 10:39 352 352 0 UGOPEXX
**End**

o se puede colocar sólo la letra “R” en la línea correspondiente y pulsar la tecla “Intro”,
con lo que se proporcionará una ventana, para incluir el nuevo nombre.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 89 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Menu Functions Confirm Utilities Help


s +---------- ISPF Utilities -----------+ ------------------------------------
L | Member Rename | Row 00001 of 00003
C | | Scroll ===> PAGE
| Enter a new member name: | Changed Size Init Mod ID
R | | 0/26 10:39 352 352 0 UGOPEXX
_ | Old Name . . : PAP30E09 | 0/26 12:25 356 352 114 UGOPEXX
_ | | 0/26 10:39 352 352 0 UGOPEXX
| New Name . . . PJE30E15 |
| |
| |
| Press ENTER to rename member. |
| Press CANCEL to cancel rename. |
| |
| |
| |
+-------------------------------------+

Después de cambiar el nombre a todos los miembros que se desee, aparecerá una
pantalla indicando los cambios realizados.

Menu Functions Confirm Utilities Help


------------------------------------------------------------------------------
LIBRARY UGOPEXX.CURSO.PRUEBA Row 00001 of 00003
Command ===> Scroll ===> PAGE
Name Prompt VV MM Created Changed Size Init Mod ID
_ PAP30E09 *Renamed
_ PJE10E11 01.02 99/10/26 99/10/26 12:25 356 352 114 UGOPEXX
_ PJE10E22 01.00 99/10/26 99/10/26 10:39 352 352 0 UGOPEXX
**End**

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 90 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

CREACION DE DATA SET

La opción 2 del submenú de utilidades es, posiblemente, la más importante, porque


permite crear y mantener las librerías y ficheros del sistema.

Menu RefList Utilities Help


------------------------------------------------------------------------------
Data Set Utility
Option ===>

A Allocate new data set C Catalog data set


R Rename entire data set U Uncatalog data set
D Delete entire data set S Data set information (short)
blank Data set information M Enhanced data set allocation
V VSAM Utilities

ISPF Library:
Project . . UGOPEXX
Group . . . CURSO
Type . . . . PRUEBA

Other Partitioned, Sequential or VSAM Data Set:


Data Set Name . . .
Volume Serial . . . (If not cataloged, required for option "C")

Data Set Password . . (If password protected)

donde se pueden ver dos columnas de menú, que proporcionan una serie de
funciones, de las que las más importantes son:

blanco Visualiza información sobre las características del data set (igual a la
explicada en 3.1)

S Visualiza información corta sobre el data set (igual a la explicada en 3.1)

A Asigna o crea un nuevo data set

R Renombra un data set

D Borra un data set

C Cataloga un data set

U Descataloga un data set

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 91 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

ASIGNACION (CREACION)

Menu RefList Utilities Help


------------------------------------------------------------------------------
Data Set Utility
Option ===> A

A Allocate new data set C Catalog data set


R Rename entire data set U Uncatalog data set
D Delete entire data set S Data set information (short)
blank Data set information M Enhanced data set allocation
V VSAM Utilities

ISPF Library:
Project . . UGOPEXX
Group . . . CURSO
Type . . . . COBOL

Other Partitioned, Sequential or VSAM Data Set:


Data Set Name . . .
Volume Serial . . . (If not cataloged, required for option "C")

Data Set Password . . (If password protected)

Indicando un nombre en la zona “ISPF Library” o en el campo “Data Set Name” y


escribiendo la letra “A” en la línea de comando se pasa a la pantalla para proporcionar
los datos de creación del nuevo data set.

DATOS DE CREACION

Menu RefList Utilities Help


+--------------------------- Allocate New Data Set ----------------------------+
| |
| Command ===> |
| |
| |
| Data Set Name . . . : UGOPEXX.CURSO.COBOL |
| |
| Volume serial . . . . GDK2AC (Blank for authorized default volume) * |
| Generic unit. . . . . (Generic group name or unit address) * |
| Space units . . . . . TRACK (BLKS, TRKS, CYLS, KB, MB or BYTES) |
| Primary quantity. . . 5 (In above units) |
| Secondary quantity. . 1 (In above units) |
| Directory blocks. . . 3 (Zero for sequential data set) |
| Record format . . . . FB |
| Record length . . . . 80 |
| Block size . . . . . 24000 |
| Expiration date . . . (YY/MM/DD, YYYY/MM/DD |
| YY.DDD, YYYY.DDD in Julian form |
| Enter "/" to select option DDDD for retention period in days |
| Allocate Multiple Volumes or blank) |
| |
| ( * Only one of these fields may be specified) |
+------------------------------------------------------------------------------+

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 92 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Para la creación de una librería se debe proporcionar la siguiente información:

Volumen

Código de 6 caracteres, empezando por letra y sin caracteres especiales, que asigna
el Administrador del Sistema para cada conjunto de datos.

Unidad de espacio

Indica la forma de almacenamiento físico de los registros, donde los más usuales son:

TRKS pistas, dependiendo del dispositivo, unos 50.000 caracteres

CYLS cilindros, normalmente 15 pistas

BLKS bloques, un número de caracteres establecido por el usuario

Espacio primario

Expresa, en unidades de espacio, la cantidad de espacio primario, es decir, mínimo.


Tiene que se un valor mayor que cero.

Espacio secundario

Expresa, en unidades de espacio, la cantidad de espacio secuendario, o sea, hasta 15


veces la cantidad que se indique aquí, que se irá asignando a medida que haga falta.
Es opcional, es decir, puede ser cero.

Bloques de directorio

Expresa la cantidad de bloques de directorio que se asigna a la librería. Hay que tener
en cuenta que, dependiendo del dispositivo, un bloque de directorio puede contener 4
ó 5 entradas para miembros.

Formato de registro

Indica el tipo de registros que se van a almacenar en la librería. Los tipos más
habituales son:

F longitud fija

FB longitud fija y bloqueados

FBA longitud fija, bloqueado y con carácter ANSI (listados)

V longitud variable

VB longitud variable Bloqueada

U longitud indfinida

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 93 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Longitud del registro lógico

Indica la longitud de los registros lógicos de la librería.

Longitud de bloque

Indica la longitud del bloque o registro físico, que debe contener un número entero de
registros lógicos.

Fecha de expiración

Se puede indicar una fecha en la que se desea que la librería se borre


automáticamente. No se indica nunca.

Para la creación de un fichero secuencial, se debe incluir la misma información, pero


teniendo en cuenta que Bloques de directorio debe ser Cero

Tiene que ser cero, porque es lo que distingue un fichero de una librería.

Menu RefList Utilities Help


+--------------------------- Allocate New Data Set ----------------------------+
| |
| Command ===> |
| |
| |
| Data Set Name . . . : UGOPEXX.CURSO.FICHERO.PRUEBA |
| |
| Volume serial . . . . GDK2AC (Blank for authorized default volume) * |
| Generic unit. . . . . (Generic group name or unit address) * |
| Space units . . . . . TRACK (BLKS, TRKS, CYLS, KB, MB or BYTES) |
| Primary quantity. . . 1 (In above units) |
| Secondary quantity. . 0 (In above units) |
| Directory blocks. . . 0 (Zero for sequential data set) |
| Record format . . . . FB |
| Record length . . . . 110 |
| Block size . . . . . 22000 |
| Expiration date . . . (YY/MM/DD, YYYY/MM/DD |
| YY.DDD, YYYY.DDD in Julian form |
| Enter "/" to select option DDDD for retention period in days |
| Allocate Multiple Volumes or blank) |
| |
| ( * Only one of these fields may be specified) |
+------------------------------------------------------------------------------+

Si se ha producido un error en la asignación de los datos, el sistema envía en la línea


1 el mensaje correspondiente

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 94 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Menu RefList Utilities Help


+--------------------------- Allocate New Data Set ----------------------------+
| Invalid record length |
| Command ===> |
| |
| |
| Data Set Name . . . : UGOPEXX.CURSO.COBOL |
| |
| Volume serial . . . . GDK2AC (Blank for authorized default volume) * |
| Generic unit. . . . . (Generic group name or unit address) * |
| Space units . . . . . TRACK (BLKS, TRKS, CYLS, KB, MB or BYTES) |
| Primary quantity. . . 5 (In above units) |
| Secondary quantity. . 1 (In above units) |
| Directory blocks. . . 3 (Zero for sequential data set) |
| Record format . . . . FB |
| Record length . . . . 100 |
| Block size . . . . . 23333 |
| Expiration date . . . (YY/MM/DD, YYYY/MM/DD |
| YY.DDD, YYYY.DDD in Julian form |
| Enter "/" to select option DDDD for retention period in days |
| Allocate Multiple Volumes or blank) |
| |
| ( * Only one of these fields may be specified) |
+------------------------------------------------------------------------------+

Cuando todos los datos están correctos, el sistema devuelve la pantalla inicial de la
opción 3.2 uno de estos dos mensajes:

Data set allocated, cuando se ha creado correctamente el data set.

Not space available, cuando no ha encontrado espacio en el volumen para el data set.

Menu RefList Utilities Help


ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
Data Set Utility Data set allocated
Option ===>

A Allocate new data set C Catalog data set


R Rename entire data set U Uncatalog data set
D Delete entire data set S Data set information (short)
blank Data set information M Enhanced data set allocation
V VSAM Utilities

ISPF Library:
Project . . UGOPEXX
Group . . . CURSO
Type . . . . COBOL

Other Partitioned, Sequential or VSAM Data Set:


Data Set Name . . . 'UGOPEXX.CURSO.FICHERO.PRUEBA'
Volume Serial . . . (If not cataloged, required for option "C")

Data Set Password . . (If password protected)

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 95 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

RENOMBRAR UN DATA SET

La opción 2 del submenú de utilidades también permite cambiar el nombre a un data


set. En la pantalla inicial se debe indicar el nombre actual y la letra “R” en la línea de
comando. Al pulsar la tecla “Intro” presenta una pantalla para el cambio del nombre.

+---------------------------- Rename Data Set ----------------------------+


s | |
| Command ===> |
O | |
| Data Set Name: UGOPEXX.CURSO.FICHERO.PRUEBA |
| Volume . . . : GDK2AC |
| |
| Enter new name below: (The data set will be recataloged.) |
b | |
| ISPF Library: |
| Project. . . UGOPEXX |
I | Group. . . . CURSO |
| Type . . . . COBOL |
| |
| Other Partitioned or Sequential Data Set: |
| Data Set Name . . . 'UGOPEXX.CURSO.FICHERO.PRUEBA' |
O | |
| |
| |
| |
D | |
| |
| |
+-------------------------------------------------------------------------+

Una vez indicado el nuevo nombre en la “ventana” anterior, el sistema devuelve un


mensaje en la línea 1 de la pantalla de la opción 3.2 indicando la terminación de la
operación.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 96 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

BORRAR UN DATA SET

La opción 2 del submenú de utilidades también permite borrar librerías y ficheros. En


la pantalla inicial se debe indicar el nombre del data set que se quiere borrar y la letra
“D” en la línea de comando. Al pulsar la tecla “Intro” presenta una pantalla para
confirmar el borrado.

Menu RefList Utilities Help


s +------------------------- Confirm Delete --------------------------+ ------
| |
O | Command ===> |
| |
| Data Set Name. : UGOPEXX.CURSO.FICHERO.PRUEBA.RENOMB |
| Volume . . . . : GDK2AC |
| Creation Date. : 1999/10/26 | t)
b | | on
| |
| Instructions: |
I | |
| Press ENTER key to confirm the delete request. |
| (The data set will be deleted and uncataloged.) |
| |
| Press CANCEL or EXIT to cancel the delete request. |
O | |
| |
| | "C")
| |
D +-------------------------------------------------------------------+

Dada la importancia que puede tener el borrado accidental de un data set, que es
posible no se pueda recuperar, se recomienda precaución al realizar esta acción.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 97 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

COPIAR Y MOVER DATOS

La opción 3 del submenú de utilidades permite copiar y/o mover datos de ficheros y de
librerías de forma masiva.

Para copiar miembros de una librería a otra, se debe indicar el nombre de la librería
original y la letra “C” en la línea de comandos. Dependiendo del valor indicado en el
campo “Member” la copia sera: de un solo miembro, parte de los miembros o todos los
miembros.

Menu RefList Utilities Help


------------------------------------------------------------------------------
Move/Copy Utility
Option ===> C

C Copy data set or member(s) CP Copy and print


M Move data set or member(s) MP Move and print
L Copy and LMF lock member(s) LP Copy, LMF lock, and print
P LMF Promote data set or member(s) PP LMF Promote and print

Specify "From" Data Set below, then press Enter key

From ISPF Library:


Project . . . UGOPEXX (--- Options C, CP, L, and LP only ----)
Group . . . . CURSO . . . . . . . . .
Type . . . . PRUEBA
Member . . . * (Blank or pattern for member list,
"*" for all members)

From Other Partitioned or Sequential Data Set:


Data Set Name . . .
Volume Serial . . . (If not cataloged)

Data Set Password . . (If password protected)

Al haberle indicado un asterisco (“*”) en el campo “Member” significa que se quieren


copiar todos los miembros de esa librería

Menu RefList Utilities Help


------------------------------------------------------------------------------
COPY From UGOPEXX.CURSO.PRUEBA(*)
Command ===>

Specify "To" Data Set Below

To ISPF Library:
Project . . UGOPEXX Replace option:
Group . . . CURSO Enter "/" to select option
Type . . . . COBOL Replace like-named members

To Other Partitioned or Sequential Data Set:


Data Set Name . . .
Volume Serial . . . (If not cataloged)

Data Set Password . . (If password protected)

To Data Set Options:


Sequential Disposition Pack Option SCLM Setting
1. Mod 3 1. Yes 3 1. SCLM
2. Old 2. No 2. Non-SCLM
3. Default 3. As is

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 98 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

El sistema devuelve una pantalla para que se indique la librería destino, es decir, a la
que se quiere copiar. Es interesante observar si el campo “Replace option” está activo

El sistema devuelve una pantalla para que se indique la librería destino, es decir, a la
que se quiere copiar. Es interesante observar si el campo “Replace Option” está activo
(tiene una barra, “/”), porque eso permite que se puedan reemplazar miembros que
tengan el mismo nombre en origen que en destino. Si no esta opción está
desactivada, los miembros de nombres iguales en las dos librerías no se copian.

Una vez realizada la operación, el sistema devuelve la pantalla inicial con un mensaje
en línea 1, indicando el número de miembros copiados.

Menu RefList Utilities Help


------------------------------------------------------------------------------
Move/Copy Utility 3 members copied
Option ===> C

C Copy data set or member(s) CP Copy and print


M Move data set or member(s) MP Move and print
L Copy and LMF lock member(s) LP Copy, LMF lock, and print
P LMF Promote data set or member(s) PP LMF Promote and print

Specify "From" Data Set below, then press Enter key

From ISPF Library:


Project . . . UGOPEXX (--- Options C, CP, L, and LP only ----)
Group . . . . CURSO . . . . . . . . .
Type . . . . PRUEBA
Member . . . (Blank or pattern for member list,
"*" for all members)

From Other Partitioned or Sequential Data Set:


Data Set Name . . .
Volume Serial . . . (If not cataloged)

Data Set Password . . (If password protected)

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 99 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

También se puede realizar una copia selectiva, a través de una máscara, de los
miembros que se quieren copiar.

Menu RefList Utilities Help


------------------------------------------------------------------------------
Move/Copy Utility
Option ===> C

C Copy data set or member(s) CP Copy and print


M Move data set or member(s) MP Move and print
L Copy and LMF lock member(s) LP Copy, LMF lock, and print
P LMF Promote data set or member(s) PP LMF Promote and print

Specify "From" Data Set below, then press Enter key

From ISPF Library:


Project . . . UGOPEXX (--- Options C, CP, L, and LP only ----)
Group . . . . CURSO . . . . . . . . .
Type . . . . PRUEBA
Member . . . PJE* (Blank or pattern for member list,
"*" for all members)

From Other Partitioned or Sequential Data Set:


Data Set Name . . .
Volume Serial . . . (If not cataloged)

Data Set Password . . (If password protected)

donde se puede observar que se desean copiar, en principio, sólo los miembros que
empiecen por “PJE”.

Menu Functions Utilities Help


------------------------------------------------------------------------------
COPY UGOPEXX.CURSO.PRUEBA TO UGOPEXX.CURSO.COBOL Row 00001 of 00003
Command ===> S * Scroll ===> PAGE
Name Prompt VV MM Created Changed Size Init Mod ID
_ PJE10E11 01.02 99/10/26 99/10/26 12:25 356 352 114 UGOPEXX
_ PJE10E22 01.00 99/10/26 99/10/26 10:39 352 352 0 UGOPEXX
_ PJE30E15 01.00 99/10/26 99/10/26 10:39 352 352 0 UGOPEXX
**End**

En este caso, se proporciona una lista de los miembros que cumplen la condición de
la máscara. Se pueden seleccionar los miembros a copiar de dos formas:

Tecleando una letra “S” a la izquierda del nombre del miembro, si no se quieren copiar
todos.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 100 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Tecleando la serie “S *” en la línea de comando, si se quieren seleccionar todos los


miembros.

Una vez realizado la operación, después de haber indicado en la pantalla


correspondiente la librería de destino, se presenta un pantalla indicando, para cada
miembro, el resultado de la acción.

Menu Functions Utilities Help


------------------------------------------------------------------------------
COPY UGOPEXX.CURSO.PRUEBA TO UGOPEXX.CURSO.COBOL Row 00001 of 00003
Command ===> Scroll ===> PAGE
Name Prompt VV MM Created Changed Size Init Mod ID
_ PJE10E11 *REPL 01.02 99/10/26 99/10/26 12:25 356 352 114 UGOPEXX
_ PJE10E22 *COPIED 01.00 99/10/26 99/10/26 10:39 352 352 0 UGOPEXX
_ PJE30E15 *REPL 01.00 99/10/26 99/10/26 10:39 352 352 0 UGOPEXX
**End**

LISTA DE DATA SET

La opción 4 del submenú de utilidades permite visualizar y mantener los data set
catalogados del sistema. Las dos posibilidades que ofrece son:

Información y mantenimiento (borrar, renombrar, etc.) de data set, es la opción


“blanco” de la pantalla siguiente.

INFORMACIÓN SOBRE EL ESPACIO DEL VTOC (VO INFORMACION DEL VTOC

lume Table Of Contents), es la opción “V” de la pantalla siguiente.

Menu RefList RefMode Utilities Help


------------------------------------------------------------------------------
Data Set List Utility
Option ===>

blank Display data set list P Print data set list


V Display VTOC information PV Print VTOC information

Enter one or both of the parameters below:


Dsname Level . . . UGO*
Volume serial . .

Data set list options


Initial View . . . 1 1. Volume Enter "/" to select option
2. Space / Confirm Data Set Delete
3. Attrib / Confirm Member Delete
4. Total

When the data set list is displayed, enter either:


"/" on the data set list command field for the command prompt pop-up,
an ISPF line command, the name of a TSO command, CLIST, or REXX exec, or
"=" to execute the previous command.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 101 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

En esta pantalla se pueden observar tres campos importantes para solicitar


información:

Dsname Level: indica la máscara de los data set que se desean listar. Esta máscara
puede utilizar el caracter “*” para indicar un número cualquiera de caracteres. Se
puede poner por delante o por detrás de otros caracteres de la máscara. Si se pone
por detrás, la lista se resuelve con bastante facilidad. Si se pone por delante, el
sistema puede tardar mucho tiempo en obtener y visualizar la lista. Este valor está
relacionado con la opción “blanco”, con la opción “V” se ignora.

Volume serial: indica el código del volumen que se desea consultar. Con la opción
“blanco” sólo seleccionará aquellos data set que cumplan las condiciones de la
máscara, si se ha especificado, y que estén en el volumen indicado. Con la opción “V”
dará información sobre el VTOC de ese volumen.

Initial View: identifica la información que se desea obtener en la lista de data set,
sobre: el volumen donde están almacenados los data set (1), el espacio que ocupan
(2), los atributos (3) o toda la información anterior (4).

INFORMACION SOBRE DATA SET

Una vez indicada la máscara en el campo “Dsname Level” y, opcionalmente, el


volumen, se puede obtener la información sobre los data set de dos formas:

Indicando la información concreta que se quiere ver en el campo “Initial View” y


devolviendo esta pantalla después de consultada, con PF3.

Empezando siempre con la opción de volumen (1) del campo mencionado y usando la
tecla PF11 para ir recorriendo sucesivamente la información de todas las opciones. Es
la forma más usual y cómoda.

En todas las pantallas hay dos columnas comunes: comando y nombre de data set.
En la columna de comando se puede teclear una letra para ejecutar un comando
“contra” ese data set (la mayoría se han visto ya):

B Visualizar, sin modificar

V Visualizar, con posibilidad de modificar

E Editar

D Borrar

R Renombrar

I Información completa

S Información corta

F Liberar espacio sobrante

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 102 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Menu Options View Utilities Compilers Help


------------------------------------------------------------------------------
DSLIST - Data Sets Matching UGO* Row 1 of 43
Command ===> Scroll ===> PAGE

Command - Enter "/" to select action Message Volume

-------------------------------------------------------------------------------
UGOPEXX *ALIAS
UGOPEXX.CURSO.COBOL GDK2AC
UGOPEXX.CURSO.FICHEROS.PRUEBA GDK2AC
UGOPEXX.CURSO.PRUEBA GDK2AC
UGOPEXX.ISPF.ISPPROF GDK2AC
UGOPE01 *ALIAS
UGOPE01.ISPF.ISPPROF GD2283
UGOPE01.JCL.CNTL GDK2AB
UGOPE01.JCL.DB2 GDK2AA
UGOPE02 *ALIAS
UGOPE02.ISPF.ISPPROF GD2283
UGOPE02.JCL.CARLOS1 GDK2AB
UGOPE03 *ALIAS
UGOPE03.BIEEEN.PDS GDK2AC
UGOPE03.ISPF.ISPPROF GD2283
UGOPE03.JCL.CNTL GDK2AC
UGOPE03.JCL2.SEC GDK2AC

En esta pantalla se proporciona únicamente información sobre el volumen en que está


almacenado cada data set. También incluye una columna de mensaje, para informar
sobre la última operación realizada contra un data set.

Menu Options View Utilities Compilers Help


------------------------------------------------------------------------------
DSLIST - Data Sets Matching UGO* Row 1 of 43
Command ===> Scroll ===> PAGE

Command - Enter "/" to select action Tracks %Used XT Device

-------------------------------------------------------------------------------
UGOPEXX
UGOPEXX.CURSO.COBOL 7 100 3 3390
UGOPEXX.CURSO.FICHEROS.PRUEBA 1 0 1 3390
UGOPEXX.CURSO.PRUEBA 5 60 1 3390
UGOPEXX.ISPF.ISPPROF 2 100 1 3390
UGOPE01
UGOPE01.ISPF.ISPPROF 3 100 2 3390
UGOPE01.JCL.CNTL 15 73 1 3390
UGOPE01.JCL.DB2 21 9 1 3390
UGOPE02
UGOPE02.ISPF.ISPPROF 3 100 2 3390
UGOPE02.JCL.CARLOS1 60 73 1 3390
UGOPE03
UGOPE03.BIEEEN.PDS 15 6 1 3390
UGOPE03.ISPF.ISPPROF 4 100 4 3390
UGOPE03.JCL.CNTL 15 6 1 3390
UGOPE03.JCL2.SEC 15 6 1 3390

En esta pantalla ser proporciona información sobre el espacio (pistas) asignadas, el


tanto por ciento ocupado, el número de extensiones utilizado y el tipo de dispositivo en
el que está el data set.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 103 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Menu Options View Utilities Compilers Help


------------------------------------------------------------------------------
DSLIST - Data Sets Matching UGO* Row 1 of 43
Command ===> Scroll ===> PAGE

Command - Enter "/" to select action Dsorg Recfm Lrecl Blksz


-------------------------------------------------------------------------------
UGOPEXX
UGOPEXX.CURSO.COBOL PO FB 80 24000
UGOPEXX.CURSO.FICHEROS.PRUEBA PS FB 110 22000
UGOPEXX.CURSO.PRUEBA PO FB 80 24000
UGOPEXX.ISPF.ISPPROF PO FB 80 9040
UGOPE01
UGOPE01.ISPF.ISPPROF PO FB 80 23440
UGOPE01.JCL.CNTL PO FB 80 27920
UGOPE01.JCL.DB2 PO FB 80 27920
UGOPE02
UGOPE02.ISPF.ISPPROF PO FB 80 23440
UGOPE02.JCL.CARLOS1 PO FB 80 27920
UGOPE03
UGOPE03.BIEEEN.PDS PO FB 80 27920
UGOPE03.ISPF.ISPPROF PO FB 80 9040
UGOPE03.JCL.CNTL PO FB 80 27920
UGOPE03.JCL2.SEC PO FB 80 27920

En esta pantalla se proporciona información sobre la organización del data set (PS
para librería, PO para fichero secuencial), el tipo de registro, la longitud del registro
lógico y la del bloque o registro físico.

Menu Options View Utilities Compilers Help


------------------------------------------------------------------------------
DSLIST - Data Sets Matching UGO* Row 1 of 43
Command ===> Scroll ===> PAGE

Command - Enter "/" to select action Message Volume


Tracks % XT Device Dsorg Recfm Lrecl Blksz Created Expires Referred
-------------------------------------------------------------------------------
UGOPEXX *ALIAS

-------------------------------------------------------------------------------
UGOPEXX.CURSO.COBOL GDK2AC
7 100 3 3390 PO FB 80 24000 1999/10/26 ***None*** 1999/10/26
-------------------------------------------------------------------------------
UGOPEXX.CURSO.FICHEROS.PRUEBA GDK2AC
1 0 1 3390 PS FB 110 22000 1999/10/26 ***None*** 1999/10/26
-------------------------------------------------------------------------------
UGOPEXX.CURSO.PRUEBA GDK2AC
5 60 1 3390 PO FB 80 24000 1999/10/26 ***None*** 1999/10/26
-------------------------------------------------------------------------------
UGOPEXX.ISPF.ISPPROF GDK2AC
2 100 1 3390 PO FB 80 9040 1999/10/26 ***None*** 1999/10/26
-------------------------------------------------------------------------------
UGOPE01 *ALIAS

En esta pantalla se recoge la información de las otras tres pantallas. Como no entra
en una línea, se utilizan dos líneas para cada data set: en la primera se incluye la
información sobre el volumen (1), en la segunda se aporta la información del espacio
(2) y los atributos (3), además de indicar la fecha de creación, última modificación y
expiración.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 104 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

INFORMACION DEL VTOC

En el VTOC se recoge toda la información referente a los data set almacenados en un


volumen.

Menu RefList RefMode Utilities Help


------------------------------------------------------------------------------
Data Set List Utility
Option ===> V

blank Display data set list P Print data set list


V Display VTOC information PV Print VTOC information

Enter one or both of the parameters below:


Dsname Level . . .
Volume serial . . GDK2AC

Data set list options


Initial View . . . 1 1. Volume Enter "/" to select option
2. Space / Confirm Data Set Delete
3. Attrib / Confirm Member Delete
4. Total

When the data set list is displayed, enter either:


"/" on the data set list command field for the command prompt pop-up,
an ISPF line command, the name of a TSO command, CLIST, or REXX exec, or
"=" to execute the previous command.

Para solicitar información sobre la ocupación de espacio de un volumen, se indica el


código del volumen en el campo “Volume serial” y la letra “V” en la línea de comando.

Menu RefList RefMode Utilities Help


+-------------------------- VTOC Summary Information --------------------------+
| Volume . : GDK2AC |
| Command ===> |
| |
| Unit . . : 3390 |
| |
| Volume Data VTOC Data Free Space Tracks Cyls |
| Tracks . : 50,085 Tracks . : 50 Size . . : 30,783 1,971 |
| %Used . : 38 %Used . . : 32 Largest . : 23,025 1,535 |
| Trks/Cyls: 15 Free DSCBS: 1,722 |
| Free Extents . : 250 |
| |
| |
+------------------------------------------------------------------------------+
3. Attrib / Confirm Member Delete
4. Total

When the data set list is displayed, enter either:


"/" on the data set list command field for the command prompt pop-up,
an ISPF line command, the name of a TSO command, CLIST, or REXX exec, or
"=" to execute the previous command.

donde se pueden observar tres columnas de datos:

Volume data: indica las pistas totales, el tanto por ciento utilizado y las pistas por
cilindro del dispositivo (unidad 3390).

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 105 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

VTOC Data: indica el espacio en pistas, el tanto por ciento usado y los bloques
disponibles del VTOC.

Free Space: indica el espacio total y el más largo en pistas y cilindros, además del
número de extensiones disponibles. Este es el dato más importante, porque sirve para
saber el tamaño máximo de los data set que s nes de usuario a medida.

CAPITULO 1: ENTORNO TSO-ISPF / MVS (OS/390) Página 106 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

MODULO I
FUNDAMENTOS DE PROGRAMACION

CAPITULO 2
LENGUAJE JCL

REALIZADO POR ARV CHILE S.A. POR ENCARGO DE ARV CHILE S.A.
ENERO A MARZO DE 2002
SANTIAGO - CHILE
CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

1. CARACTERISTICAS DEL JCL

INTRODUCCION

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

CAPITULO 2: LENGUAJE JCL Página 108 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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.

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.

CAPITULO 2: LENGUAJE JCL Página 109 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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.
//

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

/* /*

CAPITULO 2: LENGUAJE JCL Página 110 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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.
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

Nombre

Identifica a la sentencia: al trabajo, a un paso o a un grupo de datos. 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.

CAPITULO 2: LENGUAJE JCL Página 111 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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

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:

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

CAPITULO 2: LENGUAJE JCL Página 112 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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.

CAPITULO 2: LENGUAJE JCL Página 113 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

2. SENTENCIA JOB

INTRODUCCION

Indica el principio de un trabajo (job) y, en caso de no existir en la corriente de entrada


sentencias de control nulas, el final de las fichas de control del trabajo anterior.

Esta ficha es única para el trabajo y debe estar en la primera línea.

El nombre del trabajo debe empezar por una carácter 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
carácter 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 carácter 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 carácter coma (“,”) cuando no se
codifica este parámetro.

Ejemplo

//DPRJE10A JOB SUNION

CAPITULO 2: LENGUAJE JCL Página 114 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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 carácter 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 carácter 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”.

Ejemplo

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

CAPITULO 2: LENGUAJE JCL Página 115 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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

//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

CAPITULO 2: LENGUAJE JCL Página 116 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Donde la clase de salida se especifica con un carácter 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),


// MSGCLASS=S,NOTIFY=DPRJE10

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.

CAPITULO 2: LENGUAJE JCL Página 117 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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

4 aviso

8 error recuperable

12 error grave

16 error irrecuperable

CAPITULO 2: LENGUAJE JCL Página 118 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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.

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

CAPITULO 2: LENGUAJE JCL Página 119 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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

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.

CAPITULO 2: LENGUAJE JCL Página 120 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

[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.

[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).

CAPITULO 2: LENGUAJE JCL Página 121 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

REGION

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


trabajo.

REGION={nK | nM}

Donde “n” es un número par que indica el número de kilobytes (1024 octetos) o un
valor de megabites (entre 1 y 16) que se desean reservar para este 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.

CAPITULO 2: LENGUAJE JCL Página 122 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

3. 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-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.

CAPITULO 2: LENGUAJE JCL Página 123 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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.

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.

( *)
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.

CAPITULO 2: LENGUAJE JCL Página 124 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

[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:

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.

CAPITULO 2: LENGUAJE JCL Página 125 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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.

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.

CAPITULO 2: LENGUAJE JCL Página 126 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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.

CAPITULO 2: LENGUAJE JCL Página 127 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

4. 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 carácter 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 cualquier parámetro de palabra
clave, aunque, como se verá más adelante, en algunos casos se consideran a su vez
de palabra clave.

CAPITULO 2: LENGUAJE JCL Página 128 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

“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” (#).

Ejemplo

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

CAPITULO 2: LENGUAJE JCL Página 129 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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 fichero, 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.

CAPITULO 2: LENGUAJE JCL Página 130 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

DSN (“dsname”)

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 carácter especial es un
apóstrofo o comilla, debe codificarse duplicado.

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


admiten calificación.

CAPITULO 2: LENGUAJE JCL Página 131 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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)

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.

CAPITULO 2: LENGUAJE JCL Página 132 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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

//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.

CAPITULO 2: LENGUAJE JCL Página 133 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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 carácter 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)

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.

CAPITULO 2: LENGUAJE JCL Página 134 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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.

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 fichero.

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.

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

CAPITULO 2: LENGUAJE JCL Página 135 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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.

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

CAPITULO 2: LENGUAJE JCL Página 136 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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.

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.

CAPITULO 2: LENGUAJE JCL Página 137 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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.

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 | *}

CAPITULO 2: LENGUAJE JCL Página 138 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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

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.

CAPITULO 2: LENGUAJE JCL Página 139 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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
/*

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

CAPITULO 2: LENGUAJE JCL Página 140 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

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

//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).

CAPITULO 2: LENGUAJE JCL Página 141 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

MODULO I
FUNDAMENTOS DE PROGRAMACION

CAPITULO 3
PROGRAMACION ESTRUCTURADA

REALIZADO POR ARV CHILE S.A. POR ENCARGO DE ARV CHILE S.A.
ENERO A MARZO DE 2002
SANTIAGO - CHILE
CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

1. CONCEPTOS GENERALES

PROGRAMACION NO ESTRUCTURADA

Una programación no estructurada consiste en la utilización de las sentencias de un


lenguaje, en el orden que establezca el programador en ese momento, para la
solución de un problema concreto. Esta forma se utilizó hasta los años 70, con las
siguientes características principales:

 Dependencia de la experiencia: la solución es más rápida y mejor cuanta más


experiencia tiene el programador. Éste sólo puede enseñar a programar según
sus conocimientos.
 Lógica compleja: la ausencia de modelos da lugar a programas muy complejos,
con muchas bifurcaciones, entrecruzamientos de ramas, etc.
 Soluciones (excesivamente) individuales: cada programador tiene sus
"métodos" personales. Este tipo de programación lleva a muy distintas
soluciones entre programadores para un mismo problema, incluso a distintas
soluciones del mismo programador en distintos períodos de tiempo.
 Dificultad en pruebas: hay que afinar enormemente en los procesos de pruebas,
probando exhaustivamente todas las vías, siendo muy fácil olvidarse de algún
"camino".
 Dificultad de mantenimiento: todo lo anterior se puede resumir en una enorme
dificultad de mantenimiento de los programas que, muchas veces, obliga a un
replanteamiento total de las aplicaciones informáticas.

A partir de 1.970, sobre todo en la década de los 80 y en la primera parte de los 90, la
programación estructurada es prácticamente obligatoria en la mayoría de las
empresas, perdiéndose últimamente esta práctica por las siguientes causas:

 Alto coste en la formación de metodologías.


 Excesivo tiempo de análisis y documentación de los programas. Se asume que
lo importante es terminar los programas lo antes posible, sin tener en cuenta
futuros problemas de mantenimiento.

 Resistencia de programadores antiguos, que nunca aceptaron trabajar con


metodologías.

 Resistencia de programadores actuales, formados en lenguajes no clásicos


(orientados a objeto, de 4ª generación, etc.) que utilizan otras técnicas.

PROGRAMACION ESTRUCTURADA

El estructuralismo es una de las grandes corrientes del pensamiento actual, además


de una técnica de investigación. Su aplicación en distintos campos del saber llevó a su
incorporación en una de las últimas ramas de la ciencia: la informática, dando origen a
lo que se conoce como "Programación Estructurada".

De forma resumida, estructurar consiste en aislar elementos básicos que permitan


construir un esquema que resuelva satisfactoriamente cualquier aspecto particular o
global de un problema. La gran ventaja es la utilización de unos pocos conceptos

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 143 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

básicos, aunque esta escasez, algunas veces, empobrece la calidad de las


soluciones.

Aunque varias personas trabajaron en la evolución de los métodos estructurados para


la programación, se considera a Böhm y Jacopini (1966) como los iniciadores de la
programación estructurada actual. Sin embargo, es Djikstra (1968 y siguientes) el
mayor impulsor de estas técnicas, aunque son más conocidos: Warnier (1972), Bertini
(1974) y Jackson (1975).

Sin existir una opinión general, se puede considerar que un programa bien
estructurado y construido debe tener las siguientes propiedades:

 La información necesaria para estudiar, entender y verificar partes simples de


un programa debe estar contenido en el mismo, sin necesidad de otra
información adicional.
 Cualquier parte del programa puede ser modificado sin obligar, necesariamente,
al cambio ni al conocimiento de otras partes del programa.
 Durante la construcción del programa, cada parte se puede desarrollar
independientemente, para luego ensamblar todas las partes sin ningún
problema.

Estas características dan origen a un conjunto de técnicas en las que se van a


incorporar:

 Estructuras básicas
 Recursos abstractos
 Razonamiento deductivo "top-down"

Que se desarrollan a continuación.

ESTRUCTURAS BASICAS

Desde los primeros estudios teóricos, se puede demostrar que todo programa
informático se puede resolver teniendo en cuenta sólo tres estructuras básicas de
instrucciones o sentencias:

 Secuencia (concatenación).
 Alternativa.
 Repetitiva.

SECUENCIA

Una secuencia o concatenación se compone de una serie de acciones (a, b, ….., n)


que se producirán siempre en el mismo orden, una detrás de otra, sin posibilidad de
omitir ninguna.

a b n

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 144 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

ALTERNATIVA

Se supedita la ejecución de una o más acciones (a, b, ….., n) a la verificación previa


de una condición (c).

Esta estructura tiene a su vez tres posibilidades que, en su versión más reducida, se
pueden expresar de la siguiente manera:

Simple

Si se cumple la condición se realiza una acción (a). Si no se cumple, sigue la


secuencia lógica posterior a la verificación.

SI IF condición

THEN acción "a"


C ENDIF
a

Nota.- A la izquierda del gráfico, se indica la forma más habitual de codificación, en


los lenguajes tradicionales.

Completa

Si se cumple la condición se realiza una acción (a). Si no se cumple, se realiza otra


acción distinta (b). Después de ejecutar cualquiera de ellas, sigue la secuencia lógica
del programa.

SI NO IF condición

THEN
C acción "a"

ELSE acción "b"


a b
ENDIF

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 145 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Múltiple

Se establecen distintas acciones (a, b, ……, n) dependiendo del resultado de varias


condiciones dependientes.

valor1 valor2 valor CASE

C variable condición valor1


acción "a"

a b n variable condición valor2


acción "b"

…………………………….
…………………………….

variable condición valor


acción "n"

ENDCASE

REPETITIVA

Permite representar acciones (a, b, ….., n) que se van a repetir un número


determinado de veces. Esta repetición se basa en la verificación de una condición
que, dependiendo del momento en que se realiza, da origen a dos posibilidades:

Anterior

Primero se verifica la condición (c) y se ejecuta la acción (a) si se cumple. Por tanto, la
acción se ejecutará de cero a un número determinado de veces (hasta que deje de
cumplirse la condición).

DO WHILE condición

SI acción "a"
a
C NO
ENDDO

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 146 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Posterior

Primero se ejecuta la acción (a) y después se verifica la condición (c), si se cumple se


volverá a ejecutar. Por tanto, la acción se ejecutará al menos una vez (posteriormente,
hasta que deje de cumplirse la condición).

a REPEAT acción "a"

UNTIL condición

SI

C
NO

Nota general

Con estas estructuras se puede construir cualquier programa, siempre que tenga un
solo punto de entrada y un solo punto de salida.

RECURSOS ABSTRACTOS

Una de las mayores dificultades de la programación consiste en coordinar las


especificaciones del problema con los recursos concretos del lenguaje a utilizar. La
programación no estructurada tiende a traducir directamente dichas especificaciones
en instrucciones de lenguaje.

Ningún lenguaje clásico permite trasladar estructuras a recursos concretos del


lenguaje. Para solucionar este inconveniente, se debe recurrir a recursos abstractos,
que consiste en descomponer una acción compleja en un número de acciones más
simples, que podrían ser interpretadas por un ordenador "ideal" (inexistente), capaz de
ejecutarlas. Puesto que en la práctica estas instrucciones no se pueden ejecutar, se
intenta crear un programa que simule su funcionamiento, descomponiendo cada una
de sus instrucciones en acciones más simples. El proceso continuará hasta que los
elementos obtenidos se correspondan a instrucciones del lenguaje del ordenador del
que se dispone.

RAZONAMIENTO DEDUCTIVO "TOP-DOWN"

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 147 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Este proceso permite concebir un programa a partir de refinamientos consecutivos,


descomponiendo elementos globales ("top") en otros más simples ("down"), hasta
llegar a un último nivel que se pueda convertir en instrucciones del lenguaje a utilizar.

Para pasar de un nivel a otro, se debe tener en cuenta que una estructura sólo tendrá
una entrada y una salida, además de considerar dos "puntos de vista":

 Exterior: se indica la estructura que realiza una acción ("hace algo"), sin entrar
en detalle de "cómo" lo hace.
 Interior: una vez determinada la acción, se especifican los detalles ("cómo lo
hace").

DETERMINAR

TIPO C

SALDO
a b

Nivel n Nivel n+1

Exterior  lo que hace Interior  cómo lo hace

PROCESO DE CONSTRUCCION

La técnica de razonamiento que debe emplearse para plasmar los conceptos vistos
anteriormente sería:

a. Todo problema debe ser considerado como un recurso abstracto y debe


definirse perfectamente su función: "qué hace".
b. Se comprobará si esa función es directamente codificable en instrucciones del
lenguaje que se va a utilizar, en cuyo caso, ha terminado el proceso.
c. Si no es así, se debe introducir un refinamiento y redefinir la función, para que
permita obtener recursos con estructuras básicas.
d. Cada una de estas acciones se considera un recurso abstracto y se repetirá el
proceso completo, tantas veces como sea necesario.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 148 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

En cada nivel de abstracción, las acciones consideradas soportan al nivel superior y


son soportadas por el nivel siguiente.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 149 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Diseño de un programa

Todas las técnicas vistas en los apartados anteriores llevan a un principio fundamental
para conseguir una programación estructurada: antes de comenzar la codificación de
un programa se debe estudiar (analizar) detenidamente la mejor forma de resolverlo.
Para ello, se cuenta con dos grupos de herramientas:

 Metodologías: Warnier, Bertini y Jackson son las más generalizadas.


 Técnicas: son formas de representación más que metodologías (aunque se
pueden apoyar en éstas) y las más usadas son los organigramas (en desuso
actualmente) y el seudocódigo, que se verán a continuación.

ORGANIGRAMA

El organigrama es una forma de representación gráfica que indica el orden de


ejecución de las instrucciones de un programa. Por eso, también se les llama
ordinograma.

Como se ha indicado anteriormente, no es una metodología, pero se puede


estructurar perfectamente un programa a través de esta técnica, teniendo en cuenta
los conceptos de las metodologías, que tienen otras formas de representación propias.

Para conseguir la estructura, lo que se debe hacer es dividir el programa en distintos


procedimientos (utilizando un razonamiento "top-down") y desarrollarlos
independientemente.

Aunque fue la forma más típica de análisis y documentación hasta los años 80,
actualmente no se utiliza (prácticamente) por los siguientes motivos:

 Cada acción (tipo de instrucción) está asociada a un símbolo: un error de


utilización del gráfico lleva a un error de interpretación del programa.
 Un programa complejo tiene una gran cantidad de gráficos: si no se utilizan
correctamente los enlaces (líneas y conectores) puede ser muy difícil el
seguimiento del programa.
 A pesar de que hoy en día existen programas que facilitan el desarrollo y
mantenimiento de los organigramas, un cambio en un programa puede llevar a
la reescritura de varias páginas del gráfico.
 Aunque hay otras menores, por último, la visualización correcta de una
instrucción dentro de la figura correspondiente lleva a distintos tamaños de las
figuras: el resultado, estéticamente hablando, puede ser desalentador.

Sin embargo, dado el uso extendido que tuvo en la época de inicio y expansión de la
programación estructurada (aparecen en multitud de libros técnicos) y como apoyo a
la enseñanza en algunos casos, se indican a continuación el significado de los
símbolos y, posteriormente, se verá un sencillo ejemplo para comprender su
utilización.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 150 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

SIMBOLOS FUNDAMENTALES

Inicio/final de un:
- Programa
- Procedimiento (parte diferenciada de un programa)

Operación de Entrada/Salida:
- Abrir ficheros
- Cerrar ficheros
- Leer datos
- Escribir datos

Alternativa o decisión (bifurcación condicional):


- Simple
- Completa

Operación Secuencial:
- Asignación de variables
- Operación aritmética

Procedimiento:
- Interno (una función dentro del programa)
- Externo (subrutina, subprograma o módulo)

Líneas de enlace:
- Indican el flujo (secuencia) de las instrucciones

Conectores (para evitar cruces de líneas):

-.Dentro de la misma página

- De una página a otra

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 151 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

SEUDOCODIGO

Aunque el uso del seudocódigo, al igual que el organigrama, no asegura una


programación estructurada, esta es una técnica que facilita mucho el diseño de
programas, con las siguientes características:

 No requiere dibujos (conocimientos) de símbolos, ni tiene problemas de


entrecruzamiento de líneas de flujo.
 Cada acción se indica con el idioma o lenguaje del analista o programador, sin
sufrir las limitaciones de espacio de los dibujos en los organigramas.
 Aunque no es obligatorio, algunas funciones específicas se declaran por medio
de "palabras reservadas", aceptadas generalmente.
 Los cambios (mantenimiento) de los programas es muy sencillo.

Como se verá a lo largo del curso, el nombre "seudocódigo" indica que, una vez
escrito el diseño del programa, la traducción a un lenguaje determinado es casi
inmediata, sin tener que realizar cambios en la estructura y sin necesidad de
documentación adicional del programa.

Las acciones secuénciales (por ejemplo, sumar) se indican en el idioma habitual del
programador. Sin embargo otras (por ejemplo, una bifurcación condicional) se
expresan a través de palabras especiales en inglés (IF).

A continuación, se relacionan las formas más habituales en los seudocódigos,


asociándolas a las figuras de los organigramas, para mayor claridad.

Secuencia

Para indicar una operación en secuencia, sólo se escribe la acción y después sus
operandos.

Asignación de variables

ASIGNAR variable1 A variable2

variable1  variable2

variable2 = variable1

Operaciones matemáticas

SUMAR 1 A variable

variable = variable + 1

Como se puede observar, se pueden escribir las acciones en varios formatos. La


elección de uno de ellos depende de las normas de la instalación o de los gustos del
diseñador. También se escriben las acciones en mayúscula y los operandos en
minúsculas o viceversa, todo en mayúsculas o todo en minúsculas, según los criterios
anteriores.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 152 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Alternativa

Para indicar una operación alternativa se suele aceptar universalmente la palabra


inglesa "IF" (si condicional).

IF condición

THEN acción "a"

ELSE acción "b"

ENDIF

Se ha representado la forma completa de una condición elemental. Para escribir una


condición múltiple, hay dos formas:

CASE

Se comprueba si una variable cumple la condición con respecto a determinado valor,


dentro de un grupo de valores, y se realiza la acción correspondiente. La mayoría de
lenguajes que utilizan esta instrucción tienen una opción que se ejecuta cuando no se
cumple ninguna de las condiciones establecidas.

CASE

variable condición valor1


acción "a"

variable condición valor2


acción "b"

………………………………
………………………………
variable condición valorn
acción "n"

ENDCASE

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 153 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

IF "anidado"

Se denomina así porque, como se puede observar en el ejemplo de abajo, cada una
de las opciones de una condición puede ser, a su vez, otra condición.

IF condición1

THEN acción "a"

ELSE

IF condición2

THEN acción "b"

ELSE

IF condición3

……………………
……………………
..………………… .

ENDIF

ENDIF

ENDIF

Repetitiva

Para indicar una operación repetitiva se suele aceptar la palabra inglesa DO (hacer)
seguida de otra palabra que indica el momento en el que se establece la condición de
repetición:

 WHILE: primero se evalúa la condición, si se cumple se realiza la acción


repetitiva, si no se termina la repetición. Por tanto, la acción se puede ejecutar
de 0 a n veces.
 UNTIL: primero se ejecuta la acción repetitiva y después se evalúa la condición,
si se cumple se repite el proceso, si no se termina. Por tanto, la acción se puede
ejecutar de 1 a n veces.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 154 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Es fácil convertir una opción UNTIL en otra WHILE, pero no es tan fácil hacerlo a la
inversa. Por eso, generalmente se utiliza la forma WHILE.

DO WHILE condición DO UNTIL condición

acción "a" acción "a"

ENDDO ENDDO

Recurso abstracto

Como se ha dicho, un recurso abstracto es una parte de un programa que no es


directamente codificable, es decir, se debe desglosar en otros recursos abstractos o
en acciones elementales. La palabra utiliza para indicarlos es: invocar, llamar, realizar,
procedimiento, función, etc. o simplemente se le da un nombre y se incluye entre los
signos menor ("<") y mayor (">").

[INVOCAR] < nombre de procedimiento >

FICHEROS SECUENCIALES: UN EJEMPLO SENCILLO

La programación estructurada se ha utilizado fundamentalmente para el tratamiento


de ficheros secuénciales. Aunque hoy día se puede usar y se usa para cualquier forma
de almacenamiento de datos y para cualquier proceso de programación, en este
manual se realizarán referencias prioritarias a este tipo de ficheros.

Un fichero secuencial es una organización de almacenamiento de datos que tiene las


siguientes características:

 Los registros se encuentran dispuestos (grabados) físicamente uno detrás de


otro. Opcionalmente, pero en la mayoría de los casos, estarán clasificados en
un determinado orden.
 Al abrir el fichero, el gestor apunta al primer registro pero no lo recupera (no lo
lleva a memoria). No se puede abrir un fichero que ya esté abierto.
 Un fichero secuencial puede ser de entrada (se puede leer su información, pero
no introducir datos nuevos) o de salida (se puede escribir nueva información,
pero no leerla al mismo tiempo). No puede ser de los dos tipos al mismo tiempo.
 Cada operación de lectura recupera (envía a memoria) la información de un
solo registro. Esta información se sitúa en el área de memoria determinada en
la instrucción de lectura, "machacando" los datos que están en ese momento en
esa área. Por tanto, la lectura de un registro implica la pérdida de datos del
registro anterior (excepto para el primero del fichero). Después de leer el último
registro, el gestor activa una condición de fin de fichero que puede ser
comprobada en el programa (en algunos lenguajes, por ejemplo el COBOL, el

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 155 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

tratamiento de fin de fichero se puede hacer dentro de la propia instrucción de


lectura).
 Cuando se escribe (graba) en el fichero, un nuevo registro siempre se coloca
detrás del último que exista en ese momento en el fichero.
 Es conveniente, aunque no obligatorio, cerrar los ficheros cuando ya no se
necesiten. No se puede cerrar un fichero que no se haya abierto previamente.

zzzz
El ejemplo

Para ver las formas de documentación (organigrama y seudocódigo) en un caso real y


empezar a establecer principios generales muy importantes en la programación
estructurada, se va a estudiar uno de los ejemplos más sencillos: el listado de un
fichero (con un pequeño cálculo).

Se va a considerar que el fichero de entrada (FVENTAS) tiene los siguientes datos


sobre vendedores (entre paréntesis se propone un nombre de variable para utilizarlo
en la documentación y dentro del programa):

 Código de vendedor (CODVENDR)


 Nombre del vendedor (NOMVENDR)
 Importe total de pedidos vendidos (IMPVENTA)
 Porcentaje de comisión (PORCOMIS)

Y no se van a tener en cuenta tipos ni longitudes de los datos. No importa si el fichero


viene clasificado.

El listado (LISVENT), para simplificar lo más posible el ejemplo y aunque no sea nada
elegante, sólo tendrá líneas con los datos y el total final, de la siguiente forma:

CODVENDR NOMVENDR IMPVENTA PORCOMIS IMPCOMIS


CODVENDR NOMVENDR IMPVENTA PORCOMIS IMPCOMIS
CODVENDR NOMVENDR IMPVENTA PORCOMIS IMPCOMIS
CODVENDR NOMVENDR IMPVENTA PORCOMIS IMPCOMIS

TOTAL……. TOTVENTA TOTCOMIS

Donde, en la línea de total (la última del listado) se escribirá el literal "TOTAL……." y la
suma de todos los importes de venta y de los importes de comisión.

Esquema general de un programa

Antes de empezar a desarrollar la documentación previa a la codificación, se van a


explicar conceptos fundamentales que se usarán en los siguientes capítulos del
manual.

El primer principio es considerar que todo programa se basa en el siguiente esquema


básico:

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 156 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

ENTRADA PROCESO SALIDA

Con una información (datos) de entrada, a través de un proceso (programa), se


obtienen un resultado (salida).

El segundo principio asume que todo proceso tiene una sola entrada y una sola salida
y que se puede dividir en tres subprocesos:

 Inicio: sólo se ejecutará una vez y, aunque no es habitual, puede estar vacío (no
tener instrucciones).
 Tratamiento: se ejecutará de cero a "n" veces porque, salvo rarísimas
excepciones, está condicionado. Se puede dividir en otro tratamiento con el
mismo esquema.
 Final: sólo se ejecutará una vez, al final del proceso.

Inicio
(1)

PROGRAMA Tratamiento
(n)

Final
(1)

El tercer principio que se va a utilizar en este manual, aunque otras metodologías o


técnicas no lo tengan porqué utilizar, es el uso de la lectura adelantada: en el inicio del
programa y antes de iniciar el tratamiento de los registros se realizará una primera
lectura, que dará información para la realización del tratamiento (por ejemplo, si no
hay registros no hay tratamiento).

Organigrama propuesto

Varios diseñadores pueden elaborar distintos organigramas para un mismo programa,


incluso aunque sea tan sencillo como el ejemplo siguiente. Las diferencias más típicas
son:

 Distintos niveles de desglose de los tratamientos (recursos abstractos).


 Mayor o menor amplitud y claridad en los textos, dentro de las figuras.
 Mayor o menor detalle en determinadas operaciones secuenciales (por ejemplo,
indicar todas las asignaciones o hacerlo en bloque. Ver envío de datos al
listado).

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 157 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

INICIO INICIO
PROGRAMA CALCULAR-
ESCRIBIR

ABRRIR
FVENTA CALCULAR
S COMISION
LISVEN
T

LEER ACUMULAR
FVENTA TOTALES
S

RELLENAR
FIN CALCULAR- CAMPOS DE
FICHER ESCRIBIR LINEA
O NO

SI
ESCRIBIR
LINEA
LLEVAR TOTALES DETALLE
A LINEA

ESCRIBI
R LEER
LINEA FVENTA
TOTALES S

CERRAR FINAL
FVENTA PROGRAM
S A
LISVEN
T

FINAL
PROGRAMA

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 158 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Seudocódigo propuesto

ABRIR FVENTAS, LISVENT < CALCULAR-ESCRIBIR >


LEER FVENTAS
COMISION = IMPVENTA *
DO WHILE (hay registros) (PORCOMIS / 100)

< CALCULAR-ESCRIBIR > SUMAR IMPVENTA A TOTAL-VENTAS


SUMAR COMISION A TOTAL-COMIS
ENDDO
CODVENDR --> LIN-CODVENDR
TOTAL-VENTAS --> LIN-TOT-VENT NOMVENDR --> LIN-NOMVENDR
TOTAL-COMIS --> LIN-TOT-COM IMPVENTA --> LIN-IMPVENTA
ESCRIBIR LINEA-TOTAL PORCOMIS --> LIN-PORCOMIS
COMISION --> LIN-COMISION
CERRAR FVENTAS, LISVENT
ESCRIBIR LINEA-DETALLE

LEER FVENTAS

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 159 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

2. CONTROL DE RUPTURAS

INTRODUCCION

Para comprender el proceso que se va a desarrollar en este capítulo, los componentes


necesarios se ven en el siguiente esquema:

ENTRADA

PROGRAMA

LISTADO SALIDA

Donde se pueden distinguir los siguientes elementos:

 Fichero de entrada: se tomará como base para los ejemplos un fichero


secuencial que debe estar clasificado por uno o más campos (si no lo estuviera
no tiene sentido procesarlo con control de ruptura). También se pueden utilizar
otros tipos de "ficheros": cursores de tablas DB2 o colas temporales de CICS
(ver los manuales correspondientes).
 Listado(s): como consecuencia del proceso, lo más frecuente es generar uno o
más listados. Dada la amplitud de la explicación sobre la construcción de
listados se verán en el siguiente apartado. No es obligatorio generar listado.
 Fichero(s) de salida: también se pueden crear ficheros secuénciales de salida,
aunque tampoco es obligatorio.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 160 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

LISTADO

Un listado es un fichero secuencial de salida, cuyos registros no son utilizables para


entrada de otro proceso posterior. Esta es quizá la diferencia fundamental con un
fichero secuencial de datos. Además, aunque algunos lenguajes no hacen distinción
entre un fichero y un listado, tienen una construcción especial, en forma multiregistro
(distintos tipo de registro dentro de un mismo fichero).

La normativa, que generalmente existe en todas las empresas, sobre la forma de


diseñar los listados no es general, pero un modelo típico podría ser el siguiente:

F.R.M., S.A. CURSO ENTORNO S/390 FECHA: DD-MM-AAAA


PAP15E01 LISTADO DE PEDIDOS SOLICITADO EN DD-MM PAG.: ZZ9
***************************************************************************** C
PEDIDO RAZON SOCIAL CLIENTE FEC PEDIDO IMPORTE PEDIDO IMPORTE DESCTO.
------ -------------------- ---------- ---------------- ----------------

XXXXX XXXXXXXXXXXXXXXXXXXX DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99


XXXXX XXXXXXXXXXXXXXXXXXXX DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99
XXXXX XXXXXXXXXXXXXXXXXXXX DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99 D
XXXXX XXXXXXXXXXXXXXXXXXXX DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99
XXXXX XXXXXXXXXXXXXXXXXXXX DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99

TOTAL PEDIDOS .............. ZZ.ZZZ.ZZZ.ZZ9,99 ZZ.ZZZ.ZZZ.ZZ9,99 T

Donde se pueden observar los tres tipos básicos de líneas, que se desarrollan a
continuación.

CABECERAS (SUBCABECERAS)

Con este nombre se conocen, generalmente, a la(s) primera(s) línea(s) de cada


página del listado. Su información puede ser amplia y muy variable, pero su objetivo
fundamental es identificar el listado.

Es la parte del listado que más varía de una empresa a otra. En el ejemplo, la
cabecera tiene cinco líneas con el siguiente contenido:

1) Nombre de la empresa, nombre del departamento receptor del listado (en el


ejemplo identifica el curso del manual), el literal "FECHA" y la fecha de
emisión del listado.
2) Nombre del programa que genera el listado (en algunas ocasiones, nombre
del listado), descripción general del contenido del listado, el literal "PAG." y el
número de página (parcial, general o ambas).
3) Línea de separación son la(s) subcabecera(s): asteriscos ("*"), signo igual
("="), guiones ("-"), etc.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 161 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Siendo conocidas, en algunos entornos, como cabecera general (con una mezcla de
datos fijos y variables), en contraste con las subcabeceras (que suelen contener datos
fijos, aunque pueden ser muy complejas y con datos variables, como se verá en
algunos de los ejemplos del manual):

1) Nombre de los campos o datos que componen las líneas de detalle del listado.
2) Separación de los literales identificativos (línea anterior) con los datos de las
líneas de detalle. Generalmente son guiones ("-").

No se suele dejar líneas de separación entre las líneas que componen la cabecera
general. Entre ésta y la primera subcabecera se deja, al menos, una línea en blanco.
Si hubiera varias subcabeceras (no es frecuente, pero existen casos) se deja, al
menos, una línea en blanco.

Detalle

Son las líneas más importantes del listado, puesto que reflejan la información útil para
el usuario. Esta información se puede generar a partir de los datos grabados en
ficheros o bases de datos y de cálculos matemáticos.

Normalmente, sólo hay un tipo de línea de detalle por listado, pero puede haber tantas
como sea necesario. No se suelen dejar líneas en blanco entre estas líneas, aunque
hay casos (por ejemplo, revisión de datos) en que puede ser interesante dejar una o
más líneas en blanco intercaladas.

Total

Son opcionales, aunque aparecen en la mayoría de listados. Hay dos tipos: subtotales
(totales parciales) y totales generales (finales). En algunas instalaciones se procura
que esta línea esté “resaltada”.

Se suele dejar, al menos, una línea en blanco entre la última línea de detalle y la línea
de total o entre líneas de totales, aunque muchas veces se dejan dos o tres líneas en
blanco, para mayor claridad.

Contador de líneas

En la mayoría de los listados, el número de líneas es muy variable para cada nivel de
ruptura, es decir, las líneas de detalle (por ejemplo, relativas a un vendedor) pueden
ocupar más de una página física del listado.

El sistema considera que el listado es un fichero secuencial de “n” registros y, por lo


tanto, no sabe determinar el final de una página de impresora. Además el número de
líneas por página que se desea imprimir varía por necesidades propias del listado,
instalación, gustos del diseñador, etc.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 162 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Es necesario utilizar una variable de programa que lleve la “cuenta” de las líneas que
se han escrito en una página, para determinar el momento en el que sea necesario
terminar esa página e ir a la siguiente, teniendo en cuenta que una página estándar
tiene 66 líneas.

PROCESO DE RUPTURA

Un listado tiene rupturas cuando la escritura normal de líneas de detalle se ve


interrumpida por líneas de total o salto de página, antes de llegar al final lógico
establecido para las páginas, debido al cambio en el valor de alguno de los campos de
clasificación del fichero.

Por tanto, algunas de las principales características de un proceso de control de


ruptura son las siguientes:

 El fichero tiene que estar clasificado por, al menos, un campo. Esta clasificación
determina el orden de proceso de los niveles de ruptura.
 Hay tantos niveles de ruptura como campos de clasificación, excepto, en la
mayoría de las ocasiones, el último.
 También de pueden determinar los niveles de ruptura a partir de los campos
sobre los que hay que totalizar.

Para ilustrar un caso sencillo, se va a considerar un fichero que tenga sólo dos
campos: número de vendedor e importe de ventas del vendedor. Se quiere obtener un
listado del total de ventas por vendedor, teniendo en cuenta que un vendedor puede
tener varios registros de ventas y que el fichero viene clasificado por vendedor.

Dado el fichero de datos de la izquierda, se tendría que obtener el listado de la


derecha:

VENDEDOR IMPORTE

1 100 LISTADO DE VENTAS


1 200 -------------------------------
1 550
---------------------- ------- VENDEDOR TOTAL VENTAS
5 1000 ---------------- -----------------------
5 400 1 850
------------------------------ 5 1400
11 700 11 700

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 163 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Programa manual

Si este proceso se hace de forma manual (sin ordenador) y suponiendo que cada una
de las líneas del fichero es una ficha de un archivo clásico, los pasos que habría que
dar serían:

3) Abrir el fichero.
4) Leer la primera ficha.
5) Anotar el número de vendedor y el importe aparte.
6) Si no hay más fichas, se termina el proceso.
7) Si hay más fichas, poner la nueva ficha sobre la anterior, con lo que los datos
de vendedor no se verán. Pero como se había escrito aparte el número de
vendedor, se pueden comparar ambos números, para saber si se debe seguir
acumulando en el mismo vendedor o escribir el total en el listado.
8) Si el vendedor es igual en la última ficha que el anotado aparte, sumar el
importe al vendedor y volver al paso (4).
9) Si el vendedor no es igual, escribir el número de vendedor y el importe total en
el listado y volver al punto (3).

Se ha visto el principio fundamental del proceso de ruptura: puesto que sólo se van a
poder tener los datos de la última “ficha” (registro) se deben guardar aparte los datos
(campos) necesarios para comparar y saber si se está en un nivel de ruptura o hay
que pasar al siguiente.

Programa informático

Para resolver este mismo caso con un programa de ordenador, primero se debe
establecer el esquema de el(los) nivel(es) de ruptura. Para ello habrá que saber si el
primer campo de clasificación puede tener varios registros con el mismo dato, es decir,
se puede repetir el mismo valor en una serie de registros. Si es así, se ha detectado
un nivel de ruptura, con su desglose correspondiente. Si al siguiente campo de
clasificación le ocurre lo mismo, se tiene otro nivel y así sucesivamente, hasta que
haya un campo de clasificación que no tenga repeticiones o no haya más campos de
clasificación.

Una vez detectados el(los) nivel(es) de ruptura, para cada nivel, incluido el primero, se
establece la técnica, explicada anteriormente, que determina que todo proceso tiene
tres partes: inicio, proceso repetitivo y final.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 164 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Inicio
(1)

I. Vendedor
(1)

PROGRAMA Vendedor Importe Venta


(n) (n)

F. Vendedor
(1)

Final
(1)

Y el seudocódigo que se puede establecer sería:

ABRIR VENTAS, LISTADO


< CABECERAS > Inicio del programa
LEER VENTAS

DO WHILE (hay registros)

< PROCESAR-VENDEDOR > Proceso de vendedores

ENDDO

CERRAR VENTAS, LISTADO Final del programa

< PROCESAR-VENDEDOR >

TOTAL-VENTAS = 0
VENDEDOR --> VENDEDOR-ANT Inicio de un vendedor
--> DET-VENDEDOR

DO WHILE (VENDEDOR = VENDEDOR-ANT)


Proceso de los importes
< PROCESAR-IMPORTES > de un vendedor

ENDDO

TOTAL-VENTAS --> DET-TOT-VENTAS

IF CONT-LINEAS > máximo

< CABECERAS >


Final de un vendedor
ENDIF

ESCRIBIR LIN-DETALLE
SUMAR 1 A CONT-LINEAS

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 165 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

< PROCESAR-IMPORTES >

TOTAL-VENTAS = TOTAL-VENTAS + IMPORTE // SUMAR IMPORTE A


TOTAL-VENTAS
LEER VENTAS

< CABECERAS >

ESCRIBIR LIN-CAB1 después de saltar página


ESCRIBIR LIN-CAB2 después de saltar 3 líneas
ESCRIBIR LIN-CAB3

CONT-LINEAS = 5

Tratamiento de cabeceras

Hay dos momentos, en cualquier programa, en los que hay que escribir las cabeceras
del listado:

 Antes de escribir la primera línea de detalle.


 Cada vez que se rebase el número máximo de líneas establecido para cada
página.

Para resolver el primer punto, se puede hacer de dos formas:

1) En el Inicio del programa: como se ha visto arriba. De esta forma, aunque no


haya ningún registro en el fichero, se escribirá siempre al menos una hoja con
las cabeceras (normalmente, además se escribe una línea indicando esta
situación: “NO HAY DATOS”). El escribir las cabeceras antes de leer el primer
registro puede ser indiferente, a no ser que en las cabeceras haya algún dato
de los campos de ruptura (bastante frecuente), en cuyo caso se debe primero
leer.
2) Antes de escribir la primera línea de detalle. Sólo se escribe el listado cuando
hay por lo menos un registro. Para usar esta técnica, se debe dar un valor
mayor que el máximo de líneas por página en el Inicio del programa, de tal
forma que, cuando se va a escribir la primera línea de detalle, el contador de
líneas es mayor que el máximo y se “fuerza” la impresión de las cabeceras de la
primera página.

Para el segundo punto, con cualquiera de los métodos vistos, siempre que se escriban
líneas se deben ir “acumulando” al contador, de tal forma que, cuando sea mayor que
el máximo de líneas establecido, se controla el final de una página y se inicia otra. El
hecho de realizar el control de final de página antes o después de escribir las líneas
no suele ser demasiado significativo, salvo casos excepcionales.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 166 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

EJERCICIO 1

Obtener un listado de pedidos, a partir del fichero de pedidos de entrada, tal como se
indica en el siguiente gráfico:

FPEDIDOS

PEJRUP01

LPEDIDOS

Teniendo en cuenta que la estructura del fichero de entrada es:

FPEDIDOS Fichero de Pedidos

Campo Descripción del campo Tipo Long.

DCPEDIDO Código de pedido C 5


DCCLIENT Código de cliente C 5
DFPEDIDO Fecha del pedido C 10
aaaa-mm-dd
DFENTREG Fecha de entrega final C 10 aaaa-mm-dd
DIPEDIDO Importe del pedido DEC 13e2d
DIDEVLTO Importe de devoluciones DEC 13e2d
DIDESCTO Importe de descuento DEC 13e2d
DNFORPAG Forma de pago (en días) DEC 3e

Y está clasificado por: Código de cliente (DCCLIENT) y Código de pedido


(DCPEDIDO). No hay registros repetidos (no puede haber dos o más registros con el
mismo número de cliente y de pedido).

El listado mostrará todos los pedidos de un cliente, obteniendo el total del cliente,
cuando se terminen sus pedidos.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 167 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

LPEDIDOS Listado de Pedidos por Cliente

F.R.M., S.A. CURSO ENTORNO S/390 FECHA: DD-MM-AAAA


PEJRUP01 LISTADO DE PEDIDOS POR CLIENTE PAG.: ZZ9
**************************************************************************************

CLIENTE PEDIDO FEC PEDIDO IMPORTE PEDIDO IMPORTE DESCTO. IMPORTE NETO
------- ------ ---------- ---------------- ---------------- ----------------
XXXXX XXXXXX DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99
XXXXXX DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99
XXXXXX DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99
XXXXXX DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99
XXXXXX DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99

TOTAL CLIENTE ....ZZ.ZZZ.ZZZ.ZZ9,99 ZZ.ZZZ.ZZZ.ZZ9,99 ZZ.ZZZ.ZZZ.ZZ9,99

XXXXX XXXXXX DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99


XXXXXX DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99
XXXXXX DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99
XXXXXX DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99
XXXXXX DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99

TOTAL CLIENTE ....ZZ.ZZZ.ZZZ.ZZ9,99 ZZ.ZZZ.ZZZ.ZZ9,99 ZZ.ZZZ.ZZZ.ZZ9,99

EJERCICIO 2

Obtener un listado de ventas por vendedor, a partir del fichero de ventas de entrada,
tal como se indica en el siguiente gráfico:

FVENTAS

PEJRUP02

LVENTVEN

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 168 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Teniendo en cuenta que la estructura del fichero de entrada es:

FVENTAS Fichero de Ventas del año anterior

N. Campo Tipo Long. Descripción

CODVENDR AN 4 Código de Vendedor


CODPROVC N 2 Código de provincia de venta
NUMPEDID AN 5 Número de pedido
FECPEDID AN 8 Fecha del pedido (formato: AAAAMMDD)
IMPPEDID N 7 Importe del pedido
FILLER AN 24 Vacío
---
50

Clasificado por: Código de Vendedor, código de provincia y número de pedido.

Sin repetidos (no puede haber más de un pedido con la misma provincia y el mismo
vendedor).

LVENTVEN Listado de Ventas por Vendedor

FRMSA DEPARTAMENTO DE VENTAS FECHA: DD-MM-AAAA


PEJRUP02 LISTADO DE VENTAS DEL VENDEDOR: XXXXX PAG.: ZZ9

PROV PEDIDO FEC. VENTA IMP VENTA


------- ------------ ------------------ ----------------
99 XXXXX DD-MM-AAAA Z.ZZZ.ZZ9
XXXXX DD-MM-AAAA Z.ZZZ.ZZ9
XXXXX DD-MM-AAAA Z.ZZZ.ZZ9
XXXXX DD-MM-AAAA Z.ZZZ.ZZ9

TOTAL PROVINCIA ............................ ZZ.ZZZ.ZZ9

99 XXXXX DD-MM-AAAA Z.ZZZ.ZZ9


XXXXX DD-MM-AAAA Z.ZZZ.ZZ9
XXXXX DD-MM-AAAA Z.ZZZ.ZZ9
XXXXX DD-MM-AAAA Z.ZZZ.ZZ9

TOTAL PROVINCIA ............................ ZZ.ZZZ.ZZ9

TOTAL VENDEDOR ............................ ZZZ.ZZZ.ZZ9

El código de vendedor irá en cabecera principal, por tanto, cada vendedor empezará
en página aparte, con contador de página propio.

Se obtendrá un total de los pedidos por provincia y un total general por vendedor.
Cada página tendrá 55 líneas, sin contar los totales.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 169 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

3. ENFRENTAMIENTO DE FICHEROS

INTRODUCCION

Uno de los procesos informáticos más típicos es el enfrentamiento o confrontamiento


de ficheros. Para ello debe haber dos ficheros de entrada, a uno se le considera
principal o “maestro” y al otro se le llama de “movimientos”.

En los primeros tiempos, cuando sólo existían ficheros secuenciales, este proceso se
utiliza principalmente para la actualización de los ficheros maestros importantes de las
empresas (cuentas bancarias, clientes, etc.). Esta faceta se ha perdido porque
aquellos ficheros se han convertido en bases de datos.

Hoy día, esta técnica se utiliza frecuentemente, pero para otros fines adicionales:

 Añadir o modificar información de un fichero desde otro.


 Fundir la información de dos o más ficheros, para tener una gran cantidad de
datos que permitan la realización de varios listados, simplemente clasificándolos
en distinto orden.
 Consultas, quizás el más utilizado, de un fichero con un gran volumen de
información, a través de “claves” guardadas en otro fichero.

MAESTRO
MOVIMIENTO

PROGRAMA

SALIDA LISTADO

Y para conseguir este propósito se debe dar una característica común en los dos
ficheros de entrada: tiene que estar clasificados por los mismos campos, para poder
compararlos y determinar la situación del registro de un fichero con respecto al otro.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 170 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

PROCESO DE ENFRENTAMIENTO

Como se vio en el capítulo anterior, se va a resolver primero un caso de forma


“manual”, para luego hacerlo de una manera “informática”.

Se parte de dos ficheros clasificados por uno o más campos, de igual concepto y en el
mismo orden, que se van a comparar, para establecer el tratamiento a realizar,
dependiendo de la situación de esta comparación. Hay tres posibilidades:

 Clave Maestro < Clave Movimientos. La clave del maestro no se encuentra


en el fichero de movimientos, se lleva el registro del fichero maestro a la salida,
tal como está, y se lee otro registro del fichero maestro. Este proceso se llama
“salvar el maestro”, porque si no se perdería esta información para tratamientos
posteriores.
 Clave Maestro > Clave Movimientos. La clave de movimientos no se
encuentra en el fichero maestro, se lleva el registro del fichero de movimientos a
la salida, tal como está, y se lee otro registro del fichero de movimientos. Este
proceso se llama “alta” o “inclusión”, porque el registro de movimientos no
existía en el fichero maestro pero, a partir de este momento, queda incluido
para tratamientos posteriores como parte de ese fichero.
 Clave Maestro = Clave Movimientos. Las claves son iguales en ambos
ficheros, se sustituye el registro maestro por el de movimientos y se lee otro
registro de cada fichero. Este proceso se llama “modificación”, porque el registro
actual del maestro queda modificado por los datos del registro de movimientos.

Nota

Cuando este proceso servía para la actualización de “maestros puros”, el fichero de


movimientos tenía, además de los campos comunes con el fichero maestro, un campo
adicional que identificaba el tratamiento o proceso que se deseaba realizar. Este
campo tomaba un valor para el proceso de:

 alta o inclusión (A, I, etc.)


 modificación (M, 2, etc.)
 baja o supresión (B, S, etc.)

Teniendo que realizar, además de la comparación de campos de enfrentamiento, el


control de este campo, para confirmar el tratamiento a realizar.

En este manual, no se verá este tipo de técnica, por ser nada o muy poco frecuente en
la actualidad.

Programa manual

Se parte de dos ficheros tradicionales de fichas, ordenadas por un dato común a los
dos ficheros, y se “trasladarán” las fichas de uno u otro, dependiendo del resultado de
la comparación de una ficha de cada uno de los ficheros.

Para no alargar excesivamente el texto, se reflejan a continuación los valores de los


ficheros “Maestro”, “Movimientos” y “Resultado” (con la operación realizada),
explicando posteriormente el proceso, paso a paso.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 171 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Maestro Movimientos Resultado – Operación

1 2 1 Salvar
4 5 2 Alta
7 7 4 Salvar
12 11 5 Alta
20 88 7 Modificar
75 FF 11 Alta
FF 12 Salvar
20 Salvar
75 Salvar
88 Alta

Donde se supone que “FF” es un valor mayor que cualquier clave posible. Se va a
desarrollar paso a paso el proceso:

1) Se lee el primer registro maestro (1) y de movimientos (2) y se compara: el


maestro es menor que movimientos. Esto significa que, por mucho que se
busque en el fichero de movimientos, esta clave no se encuentra en
movimientos. Por tanto, se debe trasladar la ficha del maestro al resultado,
porque sino se perdería para procesos posteriores, puesto que este fichero de
resultado pasará a ser el “nuevo maestro”. Se selecciona otra ficha del fichero
que se ha procesado (el de clave menor: el maestro).
2) El maestro (4) es ahora mayor que movimientos (2). La clave de movimientos
no existe en el maestro, porque todas las claves que queda en el maestro son
mayores. Se traslada la ficha de movimientos al resultado, quedando incluida
esta nueva clave para procesos posteriores. Se selecciona otra ficha del
fichero que se ha procesado (el de clave menor: el de movimientos).
3) El maestro (4) es menor que movimientos (5), por lo que se actuará como en
el punto 1.
4) El maestro (7) es mayor que movimientos (5), por lo que se actuará como en
el punto 2.
5) El maestro (7) es igual a movimientos (7), por lo que se produce una nueva y
último tipo de situación. Esto significa que el movimiento existe en el maestro
y, al no tener otra referencia (un campo de acción que indique el tipo de
proceso que se quiere realizar), se debe suponer que la información de los
campos del fichero de movimientos sustituirá a la información del registro
maestro, trasladando la ficha de movimientos al resultado. Como se ha
“procesado” una ficha de cada fichero, se selecciona otra ficha de cada
fichero.
6) El maestro (12) es mayor que movimientos (11), por lo que se actuará como
en el punto 2.
7) El maestro (12) es menor que movimientos (88), por lo que se actuará como
en el punto 1.
8) El maestro (20) es menor que movimientos (88), por lo que se actuará como
en el punto 1.
9) El maestro (75) es mayor que movimientos (88), por lo que se actuará como
en el punto 1.
10) El maestro (FF) es mayor que movimientos (88), por lo que se actuará como
en el punto 2.
11) El maestro (FF) es igual que movimientos (FF), por lo que, al no haber más
fichas en ninguno de los dos ficheros, se ha terminado el proceso.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 172 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Después de haber visto detenidamente este proceso, se pueden sacar las siguientes
conclusiones:

 El proceso no termina mientras haya fichas (registros) en alguno de los ficheros,


excepto en el caso de la consulta, que se verá en el apartado correspondiente.
 Si termina primero el fichero maestro, todos los movimientos serán altas.
 Si termina primero el fichero de movimientos, habrá que salvar el resto del
maestro.

Programa informático

El seudocódigo general para este tipo de tratamientos a través de un programa


informático sería:

ABRIR MAESTRO, MOVTOS, SALIDA


LEER MAESTRO
LEER MOVTOS

DO WHILE (hay registros en MAESTRO o MOVTOS)

< COMPARAR-CLAVES >

ENDDO

CERRAR MAESTRO, MOVTOS, SALIDA

< COMPARAR-CLAVES >

IF CLAVE-MAESTRO < CLAVE-MOVTOS

< SALVAR-MAESTRO >


LEER MAESTRO

ELSE

IF CLAVE-MAESTRO > CLAVE-MOVTOS

< PROCESAR-ALTA >


LEER MOVTOS

ELSE

< PROCESAR-MODIFICACION >


LEER MAESTRO
LEER MOVTOS

ENDIF

ENDIF

< SALVAR-MAESTRO >

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 173 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

[ campos-MAESTRO --> campos-SALIDA ]


ESCRIBIR SALIDA [ desde registro-MAESTRO ]

< PROCESAR-ALTA >

[ campos-MOVTOS --> campos-SALIDA ]


ESCRIBIR SALIDA [ desde registro-MOVTOS ]

< PROCESAR-MODIFICACION >

[ campos-MOVTOS --> campos-SALIDA ]


ESCRIBIR SALIDA [ desde registro-MOVTOS ]

Notas

 Es bastante habitual escribir la comparación dentro del bucle principal. Se ha


elegido esta forma para mayor claridad.
 Otra manera de resolver la comparación sería:

< COMPARAR-CLAVES >

DO WHILE (CLAVE-MAESTRO < CLAVE-MOVTOS)

< SALVAR-MAESTRO >


LEER MAESTRO

ENDDO

DO WHILE (CLAVE-MAESTRO > CLAVE-MOVTOS)

< PROCESAR-ALTA >


LEER MOVTOS

ENDDO

DO WHILE (CLAVE-MAESTRO = CLAVE-MOVTOS y


CLAVE-MAESTRO  FF)

< PROCESAR-MODIFICACION >


LEER MAESTRO
LEER-MOVTOS

ENDDO

Donde hay dos inconvenientes con respecto a la primera forma propuesta:

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 174 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

 es más fácil llegar a un “bucle indefinido” de programa


 esta situación se agrava y se ve más clara en la comparación por igual, que
además necesita comprobar el final de fichero de, al menos, uno de los ficheros
de entrada.
 El paso de los campos de los ficheros de entrada a los campos de salida es
opcional, siempre que el número y orden de ambos ficheros sea el mismo.
 Dependiendo del lenguaje, se puede escribir directamente el registro de salida
desde el área (leída) del registro de entrada.

CONSULTA

Dentro del enfrentamiento, quizás el proceso más utilizado actualmente es la consulta.


Consiste en obtener una serie de registros, en un fichero de salida o en un listado, del
fichero “maestro” a partir de la información (en forma de campo(s) clave(s)) que está
en otro fichero, llamado de “consulta”.

Como se indicó en su momento, el(los) campo(s) de clasificación de ambos ficheros


tienen que tener el mismo concepto y estar en el mismo orden.

Hay dos formas básicas de consulta:

 La clave de consulta puede tener una sola clave igual en el maestro: el


tratamiento es exactamente igual al enfrentamiento visto anteriormente.
 La clave de consulta puede tener más de una clave igual en el maestro (es el
caso más usual, por ejemplo, movimientos de una cuenta bancaria, pedidos de
un cliente, etc.): el tratamiento tiene algunas diferencias, que se presenta a
continuación.

Modelo básico

ABRIR MAESTRO, CONSULTA, SALIDA


LEER MAESTRO
LEER CONSULTA

DO WHILE (hay registros en CONSULTA)

< COMPARAR-CLAVES >

ENDDO

CERRAR MAESTRO, CONSULTA, SALIDA

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 175 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

< COMPARAR-CLAVES >

IF CLAVE-MAESTRO < CLAVE-CONSULTA

LEER MAESTRO

ELSE

IF CLAVE-MAESTRO > CLAVE-CONSULTA

< PROCESAR-ERROR >


LEER CONSULTA

ELSE

< PROCESAR-CONSULTA >


LEER MAESTRO

ENDIF

ENDIF

Notas

 El proceso se realiza mientras el fichero de consulta tenga registros: una vez


terminados estos, no tiene sentido seguir leyendo el maestro (un error grave y
que se da con alguna frecuencia es hacerlo).
 Cuando el maestro es menor que la consulta significa que esa clave no se
desea consultar, por lo tanto, se lee el siguiente registro sin hacer ninguna
operación adicional.
 Cuando el maestro es mayor que la consulta significa que esa clave no se
encuentra en el maestro. Se puede hacer opcionalmente un “tratamiento de
error”, generalmente, escribir el registro de consulta en un fichero o en un
listado.
 También se escribe en un fichero de salida el resultado correcto de la consulta,
es decir, cuando se encuentra la clave en el maestro. En el modelo propuesto,
se considera que la clave de consulta puede tener varias iguales en el maestro,
por eso, se seguirá leyendo del maestro hasta que se encuentre una clave
diferente a la que inició la consulta.
 El fichero maestro no sufre modificaciones, si se quiere hacer otra consulta será
sobre los mismos registros (hasta que no se modifican por un proceso de
actualización).

EJERCICIO 1

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 176 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Actualizar el fichero maestro de Artículos con los registros de movimientos, teniendo


en cuenta las siguientes consideraciones:

 Cuando se escribe un alta, se hace con el registro tal como está en


movimientos.
 Cuando el artículo existe en el maestro y tiene un movimiento, sólo se
modificarán los campos que tengan contenido en el registro de movimientos.
 No puede haber más de un movimiento para el maestro.

FMAESART
FMOVIART

PEJENF01

FMARTACT

Teniendo en cuenta que la estructura de los tres ficheros es la misma y que los dos
ficheros de entrada están clasificados por Código de Artículo.

FMAESART Maestro de Artículos

Campo descripción del campo Tipo Long.

DCARTICO Código de artículo C 4


DLDESART Descripción del artículo C 30
DIARTICO Importe unitario del artículo DEC 11e2d
DPDESCTO Porcentaje de descuento DEC 2e2d

EJERCICIO 2

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 177 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Listar los clientes con todos sus pedidos, según se especifica en el proceso.

FPEDIDOS
FCLIENTE

PEJENF02

LPEDCLTE

Teniendo en cuenta que la estructura de los ficheros de entrada es:

FPEDIDOS Fichero de Pedidos

Campo Descripción del campo Tipo Long.

DCPEDIDO Código de pedido C 5


DCCLINTE Código de cliente C 5
DFPEDIDO Fecha del pedido C 10 (aaaa-mm-dd)
DFENTREG Fecha de entrega final C 10 (aaaa-mm-dd)
DIPEDIDO Importe del pedido DEC 13e2d
DIDEVLTO Importe de devoluciones DEC 13e2d
DIDESCTO Importe de descuento DEC 11e2d
DNFORPAG Forma de pago (en días) DEC 3e

Clasificado por: Código de cliente y Código de pedido.

Sin repetidos (un cliente no puede tener más de un pedido con el mismo código de
pedido).

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 178 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

FCLIENTE Fichero de Clientes

Campo Descripción del campo Tipo Long.

DCCLINTE Código de cliente C 5


DLRAZSOC Razón social del cliente C 30
DLDOMICL Domicilio C 30
DLPOBLAC Población C 20
DLPROVIN Provincia/Departamento C 15
DLTELFNO Teléfono C 11

Clasificado por: Código de cliente.

Sin repetidos (no puede haber dos registros con el mismo código de cliente).

LPEDCLTE Listado de Pedidos por Cliente

FRMSA DEPARTAMENTO DE VENTAS FECHA: DD-


MM-AAAA
PEJENF02 LISTADO DE PEDIDOS POR CLIENTE
PAG.: ZZ9
******************************************************************************

CLIENTE XXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXX (1)


XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (2)
XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX (3)

PEDIDO FEC. PEDID FEC. ENTRG IMPORTE PEDIDO IMPORTE DEVUELTO IMPORTE
DESCUENT

XXXXX DD-MM-AAAA DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99


Z.ZZZ.ZZZ.ZZ9,99
XXXXX DD-MM-AAAA DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99
Z.ZZZ.ZZZ.ZZ9,99
XXXXX DD-MM-AAAA DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99
Z.ZZZ.ZZZ.ZZ9,99
XXXXX DD-MM-AAAA DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99
Z.ZZZ.ZZZ.ZZ9,99

TOTAL CLIENTE......ZZ.ZZZ.ZZZ.ZZ9,99 ZZ.ZZZ.ZZZ.ZZ9,99


ZZ.ZZZ.ZZZ.ZZ9,99

1) Código de cliente, Razón Social y Teléfono


2) Dirección
3) Población y Provincia

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 179 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

PROCESO

 Listar todos los pedidos de los clientes existentes en el fichero de Clientes.


 Cada cliente empezará en página nueva.
 Los datos del cliente irán en todas las páginas.
 Al final del cliente se escribirá el importe total del pedido, de las devoluciones y
del descuento.
 Si un cliente no tiene pedidos, se escribirán todas las cabeceras y, como única
línea de detalle, el literal “*** CLIENTE SIN PEDIDOS ***”.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 180 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

4. TABLAS

INTRODUCCION

El manejo del concepto de tabla (matriz o “array”) es muy importante en la


programación, aunque no absolutamente necesario. Sin embargo, realizar
determinados tratamientos con otras técnicas, aunque posible, lleva a unos gastos de
proceso enormes.

Para ilustrar esta necesidad, se va a contemplar un ejemplo sencillo. Se va a suponer


un fichero de Clientes donde, entre otros campos, se encuentra la provincia de
residencia del cliente. Este fichero está clasificado por código de cliente. Se quiere
obtener un listado de clientes (por código de cliente) con el nombre de la provincia de
residencia. Para ello se necesita un fichero con las provincias, clasificado por número
de provincia.

CLIENTES PROVINCIAS

Código Provincia Número Nombre

0001 01 01 Álava
0014 07 02 Albacete
0153 39 ……………………………………….
1275 28 ……………………………………….
……………………………………… 50 Zaragoza
FF FF

Como se puede observar, en los tres primeros registros de clientes no hay problema,
puesto que las provincias también están en el orden del fichero de provincias.

El problema se presenta en el cuarto registro, cuya provincia es anterior a la última


leída del fichero de provincias (39). Puesto que en un fichero secuencial no se puede
leer “hacia atrás”, no quedaría más solución que cerrar el fichero de provincias,
volverlo a abrir y leer desde el principio hasta la provincia que se desea recuperar
(28). Así para cada situación en la que la provincia del cliente esté “descolocada” que,
muy probablemente, será la mayoría de las veces.

Este proceso, aunque realizable como se ha visto, provoca un derroche de recursos y


un retardo en el programa que lo convierte en inviable.

Solución: sustituir el fichero de provincias por una tabla interna de programa con
dichas provincias (en muchos programas, en el inicio, se “carga” un fichero de este
tipo en una tabla interna, como se verá en el primer ejercicio de este capítulo).

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 181 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

DEFINICION DE TABLA

Una tabla es un conjunto de variables homogéneas, es decir, del mismo tipo y


longitud, colocadas en espacios consecutivos de memoria y que están bajo un solo
nombre: el de la tabla.

Cada una de las variables que compone la tabla se llama “elemento”. Se puede hacer
referencia a un elemento concreto a través de un “índice”, que es un valor numérico
que representa la posición del elemento dentro de la tabla. El índice puede ser una
constante numérica (un valor fijo) o, más frecuentemente, una variable numérica, que
tomará distintos valores en distintos momentos del programa. El índice se escribe
entre paréntesis.

Por tanto, para definir una tabla en los lenguajes tradicionales, se necesitan los
siguientes componentes:

 Nombre de la tabla: que agrupa o referencia a todos los elementos que la


componen.
 Número de elementos: puede ser un número fijo o variable (esto depende del
lenguaje en el que se defina).
 Nombre del elemento: que sirve para referirse individualmente a cada uno de
los elementos de la tabla.
 Estructura (composición) del elemento: donde se indica el (los) campo(s) que
integran el elemento, el tipo de dato y la longitud.

Ejemplo

Para definir una tabla con los nombres de las provincias, para solucinar el problema
que se explicó en el apartado anterior, se podría hacer:
- Nombre de la tabla TABLA-PROVINCIAS
- Número de elementos (para España) 50
- Nombre del elemento ELE-PROVINCIA
- Estructura del elemento Tipo: alfabético (o alfanumérico)
Long.: 15

y una vez definida y rellenada la tabla (ya se verán distintas formas de hacer esto,
dependiendo del caso y del lenguaje), su colocación en memoria sería:

TABLA-PROVINCIAS

15 15 longitud
15
ALAVA ALBACETE .............................................................. ZARAGOZA

(1) (2) posición (índice)


(50)

ELE-PROVINCIA

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 182 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

y para, por ejemplo, enviar la provincia “ZARAGOZA” a una línea de listado se podría
hacer:

ELE-PROVINCIA(50) --> DET-PROVINCIA

si se conoce el valor fijo del índice o, más frecuentemente

ELE-PROVINCIA(COD-PROVINC) --> DET-PROVINCIA

donde el índice toma el valor de un campo del fichero (o de otra variable cualquiera
del programa).

TIPOS DE TABLA

Hasta ahora se ha visto un tipo básico de tablas, pero hay varios maneras de construir
tablas, dependiendo de las necesidades de cada momento, de la experiencia del
analista o programador, del lenguaje a utilizar, etc.

Por número de elementos

Dependiendo del número de elementos que va a contener la tabla y siempre que los
permita el lenguaje a utilizar, puede ser con un número de elementos:

Fijo

Se establece, en la creación de la tabla, un número fijo de elementos, que no podrá


ser aumentado.

Variable

Se establece el número de elementos de la tabla como una variable que tendrá que
tomar un valor antes de utilizar la tabla. En algunos lenguajes, se puede establecer un
intervalo de elementos, es decir, un número mínimo y otro máximo. En lenguajes de
PC, se pueden ir añadiendo elementos a medida que se van necesitando.

Por estructura del elemento

Dependiendo del número de campos que contiene el elemento y siempre que el


lenguaje lo permita, la estructura del elemento puede ser:

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 183 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Simple

Cada elemento está compuesto de un solo campo y del mismo tipo, o sea, tendrá un
valor solamente. Todos los lenguajes soportan este tipo de tablas (que se ha usado
para la introducción a este tema), pero algunos lenguajes permiten que el campo sea
de tipo distinto (por ejemplo, un elemento puede ser numérico y el siguiente
alfabético).

Compuesto

Un elemento está subdivido en varios campos, que pueden ser de disinto tipo, por
ejemplo, el elemento de la tabla de Provincias visto anteriormente podría tener dos
campos: nombre de la provincia y número de habitantes.

ALAVA |000283116 ……ALBACETE |000356045.........................................ZARAGOZA |001100769

Para manejar este tipo de tablas, sólo hace falta un índice para dirigirser a cada uno
de los campos:

ELE-PROVINCIA(1) o ELE-HABITANTES(50)

pudiendo ser el valor del índice fijo o variable, como ya se indicó más arriba.

Por posición de los elementos

Dependiendo de la forma en la que están situados los elementos dentro de la tabla,


puede estar:

Ordenada

Cada elemento está en una determinada posición dependiendo de un criterio de


clasificación (por ejemplo, el orden que ocupa el mes en el calendario, por orden
alfabético del nombre de la provincia, etc.).

También puede estar ordenada por valor de índice, es decir, el elemento ocupa una
posición que es exactamente la del valor del índice necesario para acceder a él (por
ejemplo, el número de la provincia es el del elemento dentro de la tabla).

Desordenada

Un elemento se sitúa en el lugar que estaba libre en el momento de su inclusión en la


tabla. Suelen ser tablas que se cargan durante la ejecución del programa y que, la
finalizar el proceso, se suelen clasificar para su descarga.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 184 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Por contenido del elemento

Dependiendo del número y valor de los elementos de la tabla y de su posibilidad de


modificación (en cuanto al contenido, no al número de elementos) puede haber una
tabla:

Completa

Tanto el número de elementos como su contenido (el valor que tienen) se conoce al
principio del programa y es siempre el mismo, independientemente de los datos que
procese el programa en cada momento (por ejemplo, los nombres de los meses:
siempre serán 12, con los nombres correspondientes y en el mismo orden).

Incompleta

El número de elementos puede ser fijo o variable, pero faltan parte o todos los datos
(puede y es lo más general que al principio del programa esté vacía). Se carga
durante el proceso del programa, a partir de los datos de ficheros, operaciones
aritméticas, etc.

En estos casos, el tratamiento de los elementos se realiza hasta encontrar el primer


elemento sin datos (vacío) y no hasta el último elemento de la tabla.

Por descomposición del elemento

No siempre las tablas son tan sencillas como se ha visto hasta ahora. Hay casos en
los que los elementos pueden contener, a su vez, otra tabla (subtabla) y en varios
niveles de descomposición. Cada nivel necesita un índice propio y se llama
“dimensión”, por eso, una tabla puede ser:

Unidimensional

Son las tablas que se han visto hasta ahora: parte (si son compuestas) o todo el
elemento se puede referenciar con un solo índice.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 185 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Bidimensional

Es un tipo de tabla muy utilizado. Parte o todo el elemento está formado por otra tabla
(por ejemplo, se quieren tener la ventas mensuales por provincia): el elemento tendría
esta forma:

ELE-PROVINCIA

ALAVA |000550000|001239200|003800000|........................|025000000

ELE-NOMBRE
ELE-IMP-VENTA

donde se accederá al nombre de la provincia utilizando

ELE-NOMBRE(IND-PROV)

pero, para obtener cada uno de los importes mensuales de venta, se tendrá que
utilizar un índice adicional, para indicar el que se quiere obtener:

ELE-IMP-VENTA(IND-PROV,IND-MES)

Multidimensional

Aunque el caso anterior se puede considerar dentro de este tipo, se considera que
una tabla es multidimensional a partir de tres niveles o índices. Cuantas más
dimensiones tenga una tabla, más complejo es su diseño y utilización.

El número de dimensiones permitidas depende del lenguaje y versión utilizados (por


ejemplo, el COBOL II permite hasta 12 índices) pero, en la práctica, es muy raro
encontrar tablas de más de 4 dimensiones.

CARGA DE TABLAS

La carga de una tabla depende, ante todo, del tipo y de las posibilidades del lenguaje.
Por tanto, existen variantes a la hora de realizar este tratamiento. Aquí se van a indicar
dos de las formas más habituales en la programación con lenguajes clásicos y para
grandes sistemas.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 186 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Por asignación de memoria

Para poder realizar este tratamiento se deben dar algunas condiciones para la tabla:

 El número de elementos es fijo.


 El elemento será simple (aunque no es absolutamente necesario, este tipo de
carga con elementos compuestos es más compleja).
 Lo más normal es que sea completa, es decir, que todos los elementos tengan
un valor fijo y no haya elementos vacíos.
 También suele ser habitual, aunque no obligatorio, que esté ordenada.
 Sólo lo permiten los lenguajes clásicos (COBOL, PL/I, etc.).

En definitiva, el proceso consiste en asignar los valores de la tabla en la propia


construcción de la tabla, es decir, antes de utilizarla en el proceso del programa.

Por ejemplo, una tabla con los nombres de los meses, se puede construir en COBOL
en el área de datos de la siguiente manera:

01 TABLA-MESES
05 FILLER PIC X(10) VALUE 'ENERO'.
05 FILLER PIC X(10) VALUE 'FEBRERO'.
05 FILLER PIC X(10) VALUE 'MARZO'.
05 FILLER PIC X(10) VALUE 'ABRIL'.
05 FILLER PIC X(10) VALUE 'MAYO'.
05 FILLER PIC X(10) VALUE 'JUNIO'.

05 FILLER PIC X(10) VALUE 'JULIO'.


05 FILLER PIC X(10) VALUE 'AGOSTO'.
05 FILLER PIC X(10) VALUE 'SEPTIEMBRE'.
05 FILLER PIC X(10) VALUE 'OCTUBRE'.
05 FILLER PIC X(10) VALUE 'NOVIEMBRE'.
05 FILLER PIC X(10) VALUE 'DICIEMBRE'.

01 TAB-MESES REDEFINES TABLA-MESES.


05 ELE-MES PIC X(10) OCCURS 12.

Por proceso de programa

En este caso, la tabla estará parcial o totalmente vacía, teniendo que ir rellenándose a
lo largo del proceso del programa. Hay dos casos típicos:

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 187 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

En el inicio del programa

Se realiza un proceso que consiste en leer el contenido de un fichero y cargar, con


cada registro, un elemento de la tabla. Se utiliza para tablas de códigos (países,
artículos, etc.), que se necesitarán posteriormente para el tratamiento del programa.

IND = 1

LEER FICHERO

DO WHILE (hay registros)

CAMPO --> ELEMENTO(IND)


Sumar 1 a IND

LEER FICHERO

ENDDO

A lo largo del proceso

Se recoge información de uno o más ficheros y con datos internos del programa, se
van creando y actualizando los elementos de la tabla. Suelen ser típicos en procesos
estadísticos (venta por provincia y mes, sueldos por departamento, etc.)

Para ello, se busca el elemento en la tabla: si no existe se crea nuevo y si existe se


realiza el tratamiento oportuno (por ejemplo, acumular el importe del registro al mes
correspondiente del elemento de la tabla).

IND = 1

DO WHILE (IND <= máximo)

IF CAMPO = ELEMENTO(IND)

< TRATAR-ELEMENTO >


IND = máximo

ELSE

IF ELEMENTO(IND) = vacío

< CREAR-ELEMENTO >


IND = máximo

ENDIF

ENDIF

IND = IND + 1

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 188 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

ENDDO
ACCESO A TABLAS

Para acceder a los elementos de las tablas, bien en el proceso de carga o de lectura
(recuperación), se pueden establecer varios métodos, dependiendo del tipo de tabla y
del lenguaje a utilizar.

Directo

Como su nombre indica, se accede directamente al elemento buscado, sin necesidad


de acceder a los anteriores. Para esto, como se indicó anteriormente, hay dos
posibilidades:

 Se conoce la posición exacta del elemento dentro de la tabla: el índice se


representa como una constante numérica (es poco habitual este caso).

ELE-IMPORTE(13)

 Se tiene una variable (campo de registro o variable de programa) que contiene


el valor del índice para el elemento buscado (es lo más habitual para esta
situación, por ejemplo, se tiene un campo de registro que indica el mes para
acceder a una tabla o subtabla de meses).

ELE-IMPORTE-MES(FECHA-MES)

Secuencial

En este caso, se hace un “recorrido” completo o parcial (hasta que se cumpla una
condición) de los elementos de la tabla.

IND = 1

DO WHILE (IND <= máximo)

<PROCESAR-ELEMENTO(IND) >

IND = IND + 1

ENDDO

Dicotómica

El acceso secuencial obliga, como se ha visto, a empezar la búsqueda siempre desde


el principio de la tabla.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 189 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Para reducir los accesos, se puede utilizar una búsqueda dicotómica (dividir en dos
partes), teniendo en cuenta que la tabla debe estar ordenada por el campo de
búsqueda:

1) Se accede al elemento central de la tabla.


2) Si el valor de la clave es mayor, se accederá a los elementos anteriores. Si es
menor, se accederá a los posteriores.
3) Se accede al elemento central de la parte de la tabla elegida, según el punto
anterior.
4) Se repiten los dos puntos anteriores, hasta encontrar o no la clave buscada.

Nota

Algunos lenguajes (por ejemplo, COBOL) tienen algunas instrucciones especiales (por
ejemplo, SEARCH) que realizan este tipo de búsqueda fácilmente, sin necesidad de
codificar el seudocódigo propuesto.

EXISTE = 0
PRIMER = 0
ULTIMO = 0

DO WHILE (PRIMER <= ULTIMO)

IND = (PRIMER + ULTIMO) / 2 se toma la parte entera

IF ELEMENTO(IND) = clave

EXISTE = 1
PRIMER = ULTIMO + 1

ELSE

IF ELEMENTO(IND) < clave

PRIMER = IND + 1 se limita por arriba

ELSE

ULTIMO = IND – 1 se limita hacia abajo

ENDIF

ENDIF

ENDDO

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 190 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

IF EXISTE = 1

< PROCESAR-ELEMENTO(IND) >

ELSE

< PROCESAR-NO-EXISTE >

ENDIF

EJERCICIO 1

Obtener un listado de los artículos del fichero de entrada, previamente cargados en


forma de tabla interna.

FARTICUL

PEJTAB01

LARTICUL

Teniendo en cuenta que la estructura de la tabla es la misma que la del fichero de


entrada:

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 191 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

FARTICUL Fichero de Artículos

Campo Descripción del campo Tipo Long.

DCARTICO Código de artículo C 4


DLDESART Descripción del artículo C 30
DIARTICO Importe unitario del artículo DEC 11e2d
DPDESCTO Porcentaje de descuento DEC 2e2d

LARTICUL Listado de Artículos

F.R.M., S.A. CURSO DB2-COBOL ENTORNO S/390 FECHA: DD-MM-AAAA


PEJTAB01 LISTADO DE ARTICULOS PAG.: ZZ9
******************************************************************************************************

DESCRIPCION DEL ARTICULO PREC.UNID %DCTO PREC.NETO


-------------------------------------------- ----------------- ---------- ------------------
XXXX XXXXXXXXXXXXXXXXXXXX Z.ZZZ.ZZ9 Z9,99 Z.ZZZ.ZZ9
XXXX XXXXXXXXXXXXXXXXXXXX Z.ZZZ.ZZ9 Z9,99 Z.ZZZ.ZZ9
XXXX XXXXXXXXXXXXXXXXXXXX Z.ZZZ.ZZ9 Z9,99 Z.ZZZ.ZZ9

EJERCICIO 2

Obtener un listado de pedidos y un resumen de ventas por vendedor y mes, a partir


del fichero de ventas de entrada, tal como se indica en el siguiente grático:

FVENTAS

PEJTAB02

LPEDIDOS LVENDMES

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 192 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Teniendo en cuenta que la estructura del fichero de entrada es:

FVENTAS Fichero de Ventas del año anterior

N. Campo Tipo Long. Descripción

CODVENDR AN 4 Código de Vendedor


CODPROVC N 2 Código de provincia de venta
NUMPEDID AN 5 Número de pedido
FECPEDID AN 8 Fecha del pedido (formato: AAAAMMDD)
IMPPEDID N 7 Importe del pedido
FILLER AN 24 Vacío
---
50

Clasificado por: Número de pedido.

Sin repetidos (no puede haber más de un pedido con el mismo número).

LPEDIDOS Listado de Pedidos

FRMSA DEPARTAMENTO DE VENTAS FECHA: DD-MM-AAAA


PEJTAB02/1 LISTADO DE PEDIDOS PAG.: ZZ9
**************************************************************************************

PEDIDO FEC. VENTA IMP VENTA VENDEDOR


------------ ------------------ ----------------- -----------------
XXXXX DD-MM-AAAA Z.ZZZ.ZZ9 XXXX
XXXXX DD-MM-AAAA Z.ZZZ.ZZ9 XXXX
XXXXX DD-MM-AAAA Z.ZZZ.ZZ9 XXXX
XXXXX DD-MM-AAAA Z.ZZZ.ZZ9 XXXX

TOTAL PEDIDOS...... ZZ.ZZZ.ZZ9

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 193 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

LVENDMES Listado de ventas por Vendedor y Mes

FRMSA DEPARTAMENTO DE VENTAS FECHA: DD-MM-AAAA


PEJTAB02/2 LISTADO DE VENTAS POR VENDEDOR Y MES PAG.: ZZ9
**************************************************************************************

VENDEDOR: XXXX

MES IMPORTE VENTA


---------- -------------
ENERO Z.ZZZ.ZZZ.ZZ9

FEBRERO Z.ZZZ.ZZZ.ZZ9

...... Z.ZZZ.ZZZ.ZZ9

DICIEMBRE Z.ZZZ.ZZZ.ZZ9

TOTAL VENDEDOR ZZ.ZZZ.ZZZ.ZZ9

Cada vendedor irá en página aparte. Las líneas de los meses llevan una en blanco
entre ellas, el total de vendedor dos en blanco. El orden de los vendedores no tiene
importancia.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 194 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

ANEXOS

A. PRINCIPALES METODOLOGIAS

INTRODUCCION

Como ya se indicó en su momento, no hay un acuerdo general a la hora de aceptar


una metodología concreta como la óptima. Incluso a la hora de clasificar las utilizadas
con más frecuencia, surgen dos tendencias:

 Dependiendo de la forma en la que orientan el proceso lógico: deductivas e


inductivas.
 Dependiendo del objeto principal que consideran en la solución del problema:
funcionales y basadas en los datos.

Deductivos e inductivos

Los métodos deductivos se pueden considerar como “analíticos”, porque se realizan


partiendo de los niveles más altos en complejidad y se van descomponiendo en otros
más sencillos.

Los métodos inductivos se pueden considerar como “constructivos”, porque parten de


la solución de los componentes más sencillos del problema, que se organizan
posteriormente para la solución global.

En la práctica, cualquier proceso tiene parte de ambos componentes, por lo que el


diseño final se obtiene aplicando ambas métodos, aunque, dependiendo de la
metodología a emplear, exista una orientación predominante hacia uno de ellos.

Funcionales y basados en los datos

Aunque las funciones y los datos son inseparables en cualquier proceso informático,
hay que tener en cuenta ciertas consideraciones.

Un método se considerará funcional si orienta al diseñador a contemplar primero las


funciones, considerando los datos como subordinados.

Un método se considerará basados en los datos si se realiza el diseño basándose en


el análisis de los datos, considerando las funciones como algo subordinado.

Como sucedía en la anterior clasificación, para obtener un diseño funcional siempre


hay que tener en cuentas los datos que participan en el proceso y para obtener un
diseño de datos, en algún momento se tendrán que tener en cuenta las funciones.

Nota

Todos las metodologías que se van a contemplar aquí (muy brevemente) se crearon
en la primera mitad de los años 70 y se desarrollaron en la segunda mitad. En la

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 195 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

década de los 80 eran obligatorios en la mayoría de las grandes empresas. Decaen


poco a poco en los años 90 y cada vez son menos utilizadas.

BERTINI

El método ideado por María Teresa BERTINI tiene como principales características:

 Es deductivo.
 Fue muy importante porque asentó las bases teóricas de la programación
estructurada.
 No profundiza mucho en los problemas generales del diseño y sólo resulta muy
adecuado y orientado a la codificación en lenguaje COBOL.
 Se limita a los problemas de gestión empresarial, siendo de difícil o imposible
utilidad en otro tipo de entornos y lenguajes.

Tiene el mérito de ser uno de los primeros métodos que prescindió del organigrama,
como forma de representación gráfica y de documentación, para sustituirlo por otro
lenguaje, también gráfrico, pero más orientado a las estructuras básicas de la
programación estructurada.

Sin embargo, esta simplicidad le llevó a verse pronto superado por los métodos de
Warnier y Jackson.

En cuanto al proceso funcional y de datos, aplica ambos criterios, según el siguiente


esquema:

 Analiza los datos de entrada, eligiendo una estructura, entre todas las posibles,
teniendo en cuenta las funciones. También puede dar preferencia a la estructura
funcional.
 Aconseja el proceso basado en datos en los primeros niveles del diseño. La
estructura física de los datos (almacenamiento externo) es muy importante para
la solución del problema.
 En los niveles más bajos del diseño, donde la estructura de datos es más
flexible, se debe dar más importancia a las funciones.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 196 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Árbol programático

Con este nombre se conoce la estructura de tratamiento conseguido con este método.
Un ejemplo de la estructura principal podría ser:

PROG

RAMA

Nombre
fichero Primer
registro

REGI
INICIO FINAL
STRO

CONDICIÓN FIN
REPETITIVA

CONDICIÓN
ALTERNATIVA

INICIO FINAL
TIP TIP
REGISTRO REGISTRO
O
O
“A”
“B”

TRATAR TRATAR
“A” “B”

Nota

En los enlaces entre los elementos del árbol programático se reflejarán las entradas
que recibe y las salidas que proporciona cada elemento.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 197 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

WARNIER

El método de diseño de Jean Dominique WARNIER (llamado LCP o Leyes de


Construcción de Programas) consigue un proceso deductivo y basado en el análisis
de datos.

Respecto a la propuesta de Bertini, avanza al contemplar por separado las estructuras


de datos de entrada y salida, para luego adaptarlas entre sí. De esta forma, la función
se considera de forma “implícita”, siguiendo un análisis orientado únicamente a los
datos.

Se introduce el concepto de ficheros “lógicos”, dando más posibilidad de soluciones


para la estructura del conjunto de datos. También adapta mejor los datos de entrada a
los de salida.

El diseño se formaliza en un modelo matemático, con un lenguaje gráfico que utiliza


llaves, para definir conjuntos (aplicando la teoría de conjuntos).

El método es más general y potente que el de Bertini, más adaptable a cualquier


lenguaje, pero tiene algunos problemas que no cubre y tiene que recurrir a
consideraciones y herramientas particulares, que evitan la pretendida aplicación
general.

Para realizar el diseño, se basa en considerar los datos de entrada o FLE (fichero
lógico de entrada), organizados en entidades que se comprenden o excluyen unas a
otras. También se consideran los resultados, organizados en un FLS (fichero lógico de
salida). A continuación, se obtiene un diagrama de llaves (cuadro de descomposición
de tratamientos), que representa la estructura general del programa. Por último, se va
realizando un desglose de operaciones (tratamientos) hasta llegar a los elementos
básicos (proceso inductivo).

Inicio
(1)
I. Registro
(1)
Tipo “A”
(0-1)
PROGRAMA Registro
(n) Tipo “B”
(0-1)

F. Registro
(1)
Final
(1)

Los caracteres entre paréntesis indican el número de veces que se produce (ocurre) la
entidad de datos, cuando hay dos (0,1) se quiere indicar una alternativa. Las llaves
expresan la relacionan de pertenencia de unas entidades a otras.

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 198 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

JACKSON

Por último, la idea de Michael A. JACKSON coincide en muchos aspectos con


Warnier, perdiendo formalización matemática y ganando en la solución de problemas
complejos que aparecen en los sistemas, siendo, en conjunto, este método más
potente, además de poderse implantar en cualquier sistema informático, además del
ámbito de gestión empresarial.

No se supedita la estructura de salida a la de entrada, sino que se consideran al


mismo nivel, reconociendo la posibilidad de conflictos de estructura entre los datos de
entrada y salida. Para solucionar este problema, aporta una técnica de “inversión” de
programas.

Otra aportación es la técnica de “backtracking”, dando la posibilidad de realizar un


proceso cuando todavía no se dispone de algún que indica si debe realizarse o no
(con el problema de deshacer el proceso realizado si, cuando se disponga de esa
información, se observa que era inadecuado).

El diseño consiste en la obtención de una estructura de programa conseguido a partir


de la fusión entre la estructura de datos de entrada y de salida. A continuación se
establece una lista de operaciones, que se reparten en la estructura obtenida.

El lenguaje usado para la representación es gráfico, pero sólo considera un símbolo:


el rectángulo. Dentro de esta figura, además de la descripción de la operación, pueden
aparecer dos símbolos en el extremo superior derecho:

 asterisco (“*”): representa un elemento repetitivo.


 círculo (“o”): representa un elemento alternativo.

FICHERO

INICIO CUERPO FINAL

REGISTRO

INICIO CUERPO FINAL

TIPO “A” TIPO “B”

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 199 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

B. SOLUCIONES A LOS EJERCICIOS

EJERCICIO 2-1

Obtener un listado de pedidos, por cliente, a partir del fichero de pedidos de entrada.

Inicio
(1)

I. Cliente
(1)

PROGRAMA CLIENTE PEDIDOS


(n) (n)

F. Cliente
(1)

Final
(1)

ABRIR FPEDIDOS, LPEDIDOS

OBTENER FECHA DEL SISTEMA


FECHA-SISTEMA --> CAB1-FECHA
< CABECERAS > // CONT-LINEAS = 61

LEER FPEDIDOS

DO WHILE (hay registros)

< PROCESAR-CLIENTE >

ENDDO

CERRAR FPEDIDOS, LPEDIDOS

< PROCESAR-CLIENTE >

TOTAL-PEDIDO = 0
TOTAL-DESCTO = 0

DCCLIENT --> CLIENTE-ANT


--> DET-DCCLIENT

DO WHILE (DCCLIENT = CLIENTE-ANT)

< PROCESAR-PEDIDOS >

ENDDO

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 200 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

TOTAL-PEDIDO --> TOT-PEDIDO


TOTAL-DESCTO --> TOT-DESCTO
TOTAL-NETO = TOTAL-PEDIDO - TOTAL-DESCTO
TOTAL-NETO --> TOT-NETO

ESCRIBIR LIN-TOTAL después de saltar 2 líneas


ESCRIBIR LIN-BLANCO después de saltar 3 líneas
SUMAR 5 A CONT-LINEAS

< PROCESAR-PEDIDOS >

TOTAL-PEDIDO = TOTAL-PEDIDO + DIPEDIDO


TOTAL-DESCTO = TOTAL-DESCTO + DIDESCTO
IMP-NETO = DIPEDIDO - DIDESCTO

DCPEDIDO --> DET-DCPEDIDO


DFPEDIDO --> DET-DFPEDIDO <-- dando vuelta a la fecha
DIPEDIDO --> DET-DIPEDIDO
DIDESCTO --> DET-DIDESCTO
IMP-NETO --> DET-IMPONETO

IF CONT-LINEAS > máximo

< CABECERAS >

ENDIF

ESCRIBIR LIN-DETALLE
SUMAR 1 A CONT-LINEAS
LIMPIAR LIN-DETALLE

LEER FPEDIDOS

< CABECERAS >

SUMAR 1 A CONT-PAGINA
CONT-PAGINA --> CAB2-PAGINA

ESCRIBIR LIN-CAB1 después de saltar página


ESCRIBIR LIN-CAB2
ESCRIBIR LIN-CAB3
ESCRIBIR LIN-CAB4 después de saltar 2 líneas
ESCRIBIR LIN-CAB5

CONT-LINEAS = 6

EJERCICIO 2-2

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 201 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Obtener un listado de ventas por vendedor y provincia, a partir del fichero de ventas.

Inicio
(1)

I. Vendedor I. Provincia
(1) (1)

PROGRAMA VENDEDOR PROVINCIAS PEDIDOS


(n) (n) (n)

Vendedor F. Provincia
(1) (1)

Final
(1)

ABRIR FVENTAS, LVENTVEN

OBTENER FECHA DEL SISTEMA


FECHA-SISTEMA --> CAB1-FECHA

LEER FVENTAS

DO WHILE (hay registros)

< PROCESAR-VENDEDOR >

ENDDO

CERRAR FVENTAS, LVENTVEN

< PROCESAR-VENDEDOR >

TOTAL-VENDEDOR = 0
CONT-PAGINA = 0

CODVENDR --> VENDEDOR-ANT


--> CAB2-CODVENDR

< CABECERAS >

DO WHILE (CODVENDR = VENDEDOR-ANT)

< PROCESAR-PROVINCIAS >

ENDDO
TOTAL-VENDEDOR --> TOT-VENDEDOR
ESCRIBIR LIN-TOTAL-VENDEDOR después de saltar 3 líneas

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 202 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

< PROCESAR-PROVINCIAS >

TOTAL-PROVINC = 0

CODPROVC --> PROVINCIA-ANT


--> DET-CODPROVC

DO WHILE (CODPROVC = PROVINCIA-ANT)

< PROCESAR-PEDIDOS >

ENDDO

TOTAL-PROVINC --> TOT-PROVINCIA


SUMAR TOTAL-PROVINC A TOTAL-VENDEDOR

ESCRIBIR LIN-TOTAL-PROVINC después de saltar 2 líneas


ESCRIBIR LIN-BLANCO después de saltar 2 líneas
SUMAR 4 A CONT-LINEAS

< PROCESAR-PEDIDOS >

SUMAR IMPPEDID A TOTAL-PROVINC


NUMPEDID --> DET-NUMPEDID
FECPEDID --> DET-FECPEDID <-- dando vuelta a la fecha
IMPPEDID --> DET-IMPPEDID

IF CONT-LINEAS > 55

< CABECERAS >

ENDIF

ESCRIBIR LIN-DETALLE
SUMAR 1 A CONT-LINEAS
LIMPIAR LIN-DETALLE

LEER FVENTAS

< CABECERAS >

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 203 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

SUMAR 1 A CONT-PAGINA
CONT-PAGINA --> CAB2-PAGINA

ESCRIBIR LIN-CAB1 después de saltar página


ESCRIBIR LIN-CAB2
ESCRIBIR LIN-CAB3
ESCRIBIR LIN-CAB4 después de saltar 2 líneas
ESCRIBIR LIN-CAB5

CONT-LINEAS = 6

EJERCICIO 3-1

Actualizar el fichero maestro de Artículos con los registros de movimientos.

ABRIR FMAESART, FMOVIART, FMARTACT

LEER FMAESART
LEER FMOVIART

DO WHILE (hay registros en FMAESART o FMOVIART)

< COMPARAR-CLAVES >

ENDDO

CERRAR FMAESART, FMOVIART, FMARTACT

< COMPARAR-CLAVES >

IF FMAESART-DCARTICO < FMOVIART-DCARTICO

< DEJAR-ARTICULO >


LEER FMAESART

ELSE

IF FMAESART-DCARTICO > FMOVIART-CDARTICO

< ALTA-ARTICULO >


LEER FMOVIART

ELSE

< MODIFICAR-ARTICULO >


LEER FMAESART
LEER FMOVIART

ENDIF
ENDIF
< DEJAR-ARTICULO >

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 204 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

ESCRIBIR FMARTACT desde REG-FMAESART

< ALTA-ARTICULO >

ESCRIBIR FMARTACT desde REG-FMOVIART

< MODIFICAR-ARTICULO >

REG-FMAESART --> REG-FMARTACT

IF FMOVIART-DLDESART no vacío

FMOVIART-DLDESART --> FMARTACT-DLDESART

ENDIF

IF FMOVIART-DIARTICO no vacío

FMOVIART-DIARTICO --> FMARTACT-DIARTICO

ENDIF

IF FMOVIART-DPDESCTO no vacío

FMOVIART-DPDESCTO --> FMARTACT-DPDESCTO

ENDIF

ESCRIBIR FMARTACT desde REG-FMARTACT

Listar los clientes con todos sus pedidos, según se especifica en el proceso.

FPEDIDOS FCLIENTE

PEJENF02

LPEDCLTE

Teniendo en cuenta que la estructura de los ficheros de entrada es:

FPEDIDOS Fichero de Pedidos

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 205 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Campo Descripción del campo Tipo Long.

DCPEDIDO Código de pedido C 5


DCCLINTE Código de cliente C 5
DFPEDIDO Fecha del pedido C 10 (aaaa-mm-dd)
DFENTREG Fecha de entrega final C 10 (aaaa-mm-dd)
DIPEDIDO Importe del pedido DEC 13e2d
DIDEVLTO Importe de devoluciones DEC 13e2d
DIDESCTO Importe de descuento DEC 11e2d
DNFORPAG Forma de pago (en días) DEC 3e

Clasificado por: Código de cliente y Código de pedido.

Sin repetidos (un cliente no puede tener más de un pedido con el mismo código de
pedido).

FCLIENTE Fichero de Clientes

Campo Descripción del campo Tipo Long.

DCCLINTE Código de cliente C 5


DLRAZSOC Razón social del cliente C 30
DLDOMICL Domicilio C 30
DLPOBLAC Población C 20
DLPROVIN Provincia/Departamento C 15
DLTELFNO Teléfono C 11

Clasificado por: Código de cliente.

Sin repetidos (no puede haber dos registros con el mismo código de cliente).

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 206 de 207


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

LPEDCLTE Listado de Pedidos por Cliente

FRMSA DEPARTAMENTO DE VENTAS FECHA: DD-MM-AAAA


PEJENF02 LISTADO DE PEDIDOS POR CLIENTE PAG.: ZZ9
****************************************************************************************************************************

CLIENTE XXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXX (1)


XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (2)
XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX (3)

PEDIDO FEC. PEDID FEC. ENTRG IMPORTE PEDIDO IMPORTE DEVUELTO IMPORTE DESCUENT
----------- ----------------- ------------------ --------------------------- ------------------------------ -------- -----------------------
XXXXX DD-MM-AAAA DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99
XXXXX DD-MM-AAAA DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99
XXXXX DD-MM-AAAA DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99
XXXXX DD-MM-AAAA DD-MM-AAAA Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99

TOTAL CLIENTE...... ZZ.ZZZ.ZZZ.ZZ9,99 Z.ZZZ.ZZZ.ZZ9,99 ZZ.ZZZ.ZZZ.ZZ9,99

(1) Código de cliente, Razón Social y Teléfono


(2) Dirección
(3) Población y Provincia

PROCESO

 Listar todos los pedidos de los clientes existentes en el fichero de Clientes.


 Cada cliente empezará en página nueva.
 Los datos del cliente irán en todas las páginas.
 Al final del cliente se escribirá el importe total del pedido, de las devoluciones y
del descuento.

Si un cliente no tiene pedidos, se escribirán todas las cabeceras y, como única línea
de detalle, el literal “***

CAPITULO 3: PROGRAMACION ESTRUCTURADA Página 207 de 207

Você também pode gostar