Escolar Documentos
Profissional Documentos
Cultura Documentos
BIENVENIDOS
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.
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,
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
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
8. EDITAR DATOS
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
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
1. CONCEPTOS GENERALES
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
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
1. ARQUITECTURA DE SISTEMA
INTRODUCCION
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
DECIMALES
DE CARACTERES
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
2. SISTEMAS OPERATIVOS
INTRODUCCION
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”).
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.
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.
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.
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.
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.
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.
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.
3. SISTEMA 390
INTRODUCCION
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
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.
PRODUCTIVIDAD
COMPONENTES PRINCIPALES
TSO
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
Permite el trabajo con “doble pantalla” en una sola pantalla física, siendo
independiente el proceso en cada una de ellas.
JES
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.
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
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
RACF
IMS
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.
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).
CICS
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.
4. CARACTERISTICAS GENERALES
INTRODUCCION
Permite el trabajo con “doble pantalla” en una sola pantalla física, siendo
independiente el proceso en cada una de ellas.
PANTALLA
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.
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
LINEA 1
LINEA 2
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.
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:
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:
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.
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
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.
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.
RETURN
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
PA1
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
Intro
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.
PF1 - HELP
PF2 - SPLIT
PF3 - END
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.
PF5 - RFIND
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.
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
PF11 - RIGHT
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
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)
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.
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.
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.
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.
Renombrar la librería nueva con el nombre de la borrada, con la opción 3.2 ó 3.4.
FICHERO SECUENCIAL
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
UGOPEXX.CONTAB.ASIENTOS.DIARIO.D990926
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.
/ \
/ / \
/ / / \ *** O P C I O N E S ***
/ / / / / .
/ / / / / /// - A CICS Vacaciones - E TSO Producción
/ / / / / ///////
/___/__/__/_/_///////////. - B DESA Vacaciones - F CICS Formación
PANTALLA DE USUARIO
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.
PANTALLA DE “PASSWORD”
Perform ===>
Command ===>
PF1/PF13 ==> Help PF3/PF15 ==> Logoff PA1 ==> Attention PA2 ==>
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.
PANTALLA LOGON
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
SDSF, para obtener información sobre las colas de trabajo del sistema.
RACF, para crear o modificar acceso a recursos, siempre que esté permitido.
USERID - UGOPEXX
TIME - 09:42
3. Descripción larga.
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:
1 Visualizar datos
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
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.
Terminal Characteristics
Screen format 1 1. Data 2. Std 3. Max 4. Part
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.
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
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
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.
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.
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.
TECLAS PROGRAMABLES
PF1 . . . HELP
PF2 . . . SPLIT
PF3 . . . END
PF4 . . . RETURN
PF5 . . . RFIND
PF6 . . . RCHANGE
PF7 . . . UP
PF8 . . . DOWN
PF9 . . . SWAP
PF10 . . LEFT
PF11 . . RIGHT
PF12 . . RETRIEVE
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.
PF1 - HELP
PF2 - SPLIT
PF3 - END
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.
PF5 - RFIND
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.
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
PF11 - RIGHT
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
KEYS
PFSHOW
7. VISUALIZAR DATOS
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.
Workstation File:
File Name . . . . .
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:
Tipo: identifica un tipo especial de miembro dentro de la librería (por ejemplo, COBOL,
JCL, etc.).
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
Workstation File:
File Name . . . . .
Por cada miembro se visualiza una línea con las siguientes columnas de información:
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.
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.
SORT ID
agruparía los miembros por el usuario que los creó o que ha realizado la última
actualización sobre ellos.
SELECCION DE UN MIEMBRO
VISUALIZACIÓN DE UN MIEMBRO
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.
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
nnnn
MAX
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).
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.
RES[ET] [CHANGE]
[ERROR]
COMANDOS PRINCIPALES
COLS
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.).
HEX
------------------------------------------------------------------------------
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
[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.
FIND
[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
NEXT
ALL
FIRST
Comienza desde el inicio del fichero y proporciona la primera cadena que encuentra.
LAST
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
SUFFIX
WORD
NX
col1 col2
Notas
Dado el uso frecuente de este comando, se recomienda la utilización desde el
principio de la forma abreviada: F.
Para seguir buscando la misma cadena, no hace falta volverla a escribir, se utiliza la
tecla PF5 (RFIND, repetir búsqueda).
8. EDITAR DATOS
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.
ISPF Library:
Project . . . UGOPEXX
Group . . . . CURSO . . . . . . . . .
Type . . . . PRUEBA
Member . . . (Blank or pattern for member selection list)
Workstation File:
File Name . . . . .
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:
ISPF Library:
Project . . . UGOPEXX
Group . . . . CURSO . . . . . . . . .
Type . . . . PRUEBA
Member . . . PJE10E11 (Blank or pattern for member selection list)
Workstation File:
File Name . . . . .
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.
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]
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.
RECOVERY
Salvar el fichero, tal como estaba en el momento de la cancelación, y seguir con otra
operación.
Diferir la recuperación.
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
[OFF] [COB[OL]]
[STD COB[OL]]
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
CAPS
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ó.
CREACIÓN DE UN MIEMBRO
COPY
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
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.
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”).
CREATE
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.
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.
CREATE nombre-miembro
To ISPF Library:
Project . . . UGOPEXX
Group . . . . CURSO
Type . . . . PRUEBA
Member . . .
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
COMUNES A VIEW
CHANGE
Una actividad bastante frecuente es modificar datos dentro de los ficheros, de forma
individual o múltiple.
[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.
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:
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
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
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.
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.
[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.
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.
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
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.
PASTE
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).
RENUM
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”.
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.
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.
In
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”).
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.
Cn
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”.
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.
Mn
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”.
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”.
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.
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.
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.
Dn
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”.
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.
Indica que sólo se va a ocultar esa línea. No merece la pena este uso.
Xn
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”.
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
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).
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.
((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.
9. UTILIDADES
MENU DE UTILIDADES
Menu Help
------------------------------------------------------------------------------
Utility Selection Panel
Option ===>
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.
ISPF Library:
Project . . . UGOPEXX
Group . . . . CURSO . . . . . . . . .
Type . . . . PRUEBA
Member . . . (If B, D, E, P, R, V, or blank selected)
New name . . (If R selected)
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:
COMPRIMIR LA LIBRERÍA
ISPF Library:
Project . . . UGOPEXX
Group . . . . CURSO . . . . . . . . .
Type . . . . PRUEBA
Member . . . (If B, D, E, P, R, V, or blank selected)
New name . . (If R selected)
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.
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.
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:
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.
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.
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
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.
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.
Después de cambiar el nombre a todos los miembros que se desee, aparecerá una
pantalla indicando los cambios realizados.
ISPF Library:
Project . . UGOPEXX
Group . . . CURSO
Type . . . . PRUEBA
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)
ASIGNACION (CREACION)
ISPF Library:
Project . . UGOPEXX
Group . . . CURSO
Type . . . . COBOL
DATOS DE CREACION
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:
Espacio primario
Espacio secundario
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
V longitud variable
U longitud indfinida
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
Tiene que ser cero, porque es lo que distingue un fichero de una librería.
Cuando todos los datos están correctos, el sistema devuelve la pantalla inicial de la
opción 3.2 uno de estos dos mensajes:
Not space available, cuando no ha encontrado espacio en el volumen para el data set.
ISPF Library:
Project . . UGOPEXX
Group . . . CURSO
Type . . . . COBOL
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.
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.
To ISPF Library:
Project . . UGOPEXX Replace option:
Group . . . CURSO Enter "/" to select option
Type . . . . COBOL Replace like-named members
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.
También se puede realizar una copia selectiva, a través de una máscara, de los
miembros que se quieren copiar.
donde se puede observar que se desean copiar, en principio, sólo los miembros que
empiecen por “PJE”.
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.
La opción 4 del submenú de utilidades permite visualizar y mantener los data set
catalogados del sistema. Las dos posibilidades que ofrece son:
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).
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):
E Editar
D Borrar
R Renombrar
I Información completa
S Información corta
-------------------------------------------------------------------------------
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
-------------------------------------------------------------------------------
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 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.
-------------------------------------------------------------------------------
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.
Volume data: indica las pistas totales, el tanto por ciento utilizado y las pistas por
cilindro del dispositivo (unidad 3390).
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.
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
INTRODUCCION
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
DSNAME
DCB
UNIT SALIDA DEL PROGRAMA:
VOLUME - IMPRESA (SPOOL)
SPACE - FICHEROS
DISP (5)
(5)
DD SI
MAS PASOS
DISP=....
NO
BORRAR INFORMACION
DEL TRABAJO
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.
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
DD
PROC
PEND
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.
/*
// //
/* /*
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.
Nombre
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
Posiciónales
De palabra clave
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.
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
Columnas 73-80
2. SENTENCIA JOB
INTRODUCCION
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.
PARAMETROS POSICIONALES
Información de contabilidad
Nota: En algunas versiones, no hace falta indicar el carácter coma (“,”) cuando no se
codifica este parámetro.
Ejemplo
Nombre de programador
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
CLASS
CLASS=clase-ejecución
Ejemplo
MSGLEVEL
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
MSGCLASS
MSGCLASS=clase-salida
Ejemplo
NOTIFY
NOTIFY=identificador-usuario
Ejemplo
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.
TYPRUN
TYPRUN={SCAN | HOLD}
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
COND
0 correcto
4 aviso
8 error recuperable
12 error grave
16 error irrecuperable
El parámetro COND especifica las condiciones con las que los siguientes pasos de un
trabajo se ejecutarán o no. Si se cumplen las condiciones fijadas no se ejecutan los
siguientes pasos al que ha devuelto el código y el trabajo se da por terminado.
COND=((código,operador),(código,operador),.....)
Código
Debe ser un número decimal del 0 al 4095. Es el valor con el que se va a comparar el
código de retorno de los pasos ejecutados.
Operador
Indica el tipo de operación lógica a realizar con el código de retorno devuelto por los
pasos ejecutados:
GT mayor que
GE mayor o igual que
LT menor que
LE menor o igual que
EQ igual a
NE no igual a
Se pueden codificar hasta ocho condiciones distintas. Si sólo se especifica una no
hace falta codificar los paréntesis. Si se omite este parámetro no se lleva a cabo
ninguna comprobación del código de retorno y, por tanto, se ejecutarán todos los
pasos del trabajo.
IF
IF (condición) THEN
paso(s)
ELSE
paso(s)
ENDIF
Condición
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:
NOT ¬ no igual a
Donde la palabra clave puede tener uno de los siguientes valores reconocidos:
[nombre-paso.]RC
[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
[nombre-paso.]RUN
TIME
TIME=([minutos][,segundos])
Minutos
Segundos
REGION
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
PRTY=prioridad
Donde la prioridad puede variar de 0 a 15, siendo mayor la prioridad cuanto mayor sea
el valor.
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
De aplicación o usuario
Son los programas “a medida” que desarrolla cada instalación para cubrir las
necesidades de sus usuarios.
PROCEDIMIENTOS
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
PARAMETROS POSICIONALES
PGM
PGM={programa |
*.nombre-paso.nombre-DD |
*.nombre-paso.nombre-paso-proc.nombre-DD}
Ejemplo
PROC
( *)
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.
[PROC=]nombre-proc
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.
Un paso que excede del tiempo indicado provoca la terminación anormal de todo el
trabajo.
COND
y este valor puede ser revisado, bien desde la sentencia JOB (como se explicó) o bien
desde la sentencia EXEC.
El parámetro COND especifica las condiciones bajo las que no se ejecutará el paso,
dependiendo de los códigos de retorno devueltos por uno o más pasos anteriores.
COND[nombre-paso-proc]={[{código,operador |
código,operador,
nombre-paso.nombre-paso-
proc]
....[,{EVEN | ONLY}])
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.
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
REGION
4. SENTENCIA DD
INTRODUCCION
Concatenar ficheros
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.
“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).
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
DUMMY
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.
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}
Ficheros permanentes
Secuénciales
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
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.
nombre-trabajo.nombre-paso.nombre-dd.nombre-temporal
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
DISP
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.
El fichero existe ya y, mientras lo utiliza este paso, ninguna otra tarea puede acceder a
él (utilización exclusiva).
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.
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.
Indica que el fichero puede ser utilizado en pasos posteriores, pero codificando toda la
información del fichero (UNIT, VOLUME, etc.).
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.
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 los ficheros temporales se debe codificar (si fuese necesario) disposición PASS y
no KEEP.
UNIT
UNIT=unidad
Unidad
También se puede especificar una tipo de unidad concreto. Por ejemplo, 3380, 3390,
etc.
VOLUME
{VOLUME | VOL}=SER=número-serie
SER
DCB
DCB=(RECFM=tipo,LRECL=n,BLKSIZE=n,DSORG=tipo)
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
BLKSIZE (BLocKSIZE)
PS secuencial
IS secuencial indexado
DA organización directa
PO particionado
SPACE
TRK
CYL
nn
Cantidad primaria
Cantidad secundaria
Directorio o índice
RLSE
Especifica que el espacio que no se haya utilizado en la creación del fichero debe
liberarse cuando se termine el paso.
CONTIG
ROUND
SYSOUT
SYSOUT={clase-salida | *}
Clase de salida
Será la clase por la que se desea obtener el listado. Cada clase de salida está
asociada a un dispositivo determinado y se indica de acuerdo con una lista
consistente en letras (A-Z) y dígitos (0-9).
Indica que el listado saldrá por la clase que se indicó en el parámetro MSGCLASS de
la sentencia JOB.
COPIES
COPIES=n
OUTLIM
OUTLIM=n
Ejemplo
JOBLIB
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.
Ejemplo
STEPLIB
Ejemplo
SYSABEND y SYSUDUMP
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
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:
PROGRAMACION ESTRUCTURADA
Sin existir una opinión general, se puede considerar que un programa bien
estructurado y construido debe tener las siguientes propiedades:
Estructuras básicas
Recursos abstractos
Razonamiento deductivo "top-down"
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
a b n
ALTERNATIVA
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 IF condición
Completa
SI NO IF condición
THEN
C acción "a"
Múltiple
…………………………….
…………………………….
ENDCASE
REPETITIVA
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
Posterior
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
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
PROCESO DE CONSTRUCCION
La técnica de razonamiento que debe emplearse para plasmar los conceptos vistos
anteriormente sería:
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:
ORGANIGRAMA
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:
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.
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
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
SEUDOCODIGO
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).
Secuencia
Para indicar una operación en secuencia, sólo se escribe la acción y después sus
operandos.
Asignación de variables
variable1 variable2
variable2 = variable1
Operaciones matemáticas
SUMAR 1 A variable
variable = variable + 1
Alternativa
IF condición
ENDIF
CASE
CASE
………………………………
………………………………
variable condición valorn
acción "n"
ENDCASE
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
ELSE
IF condición2
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:
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.
ENDDO ENDDO
Recurso abstracto
zzzz
El ejemplo
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:
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.
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)
Organigrama propuesto
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
Seudocódigo propuesto
LEER FVENTAS
2. CONTROL DE RUPTURAS
INTRODUCCION
ENTRADA
PROGRAMA
LISTADO SALIDA
LISTADO
Donde se pueden observar los tres tipos básicos de líneas, que se desarrollan a
continuación.
CABECERAS (SUBCABECERAS)
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:
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.
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
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.
VENDEDOR IMPORTE
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.
Inicio
(1)
I. Vendedor
(1)
F. Vendedor
(1)
Final
(1)
ENDDO
TOTAL-VENTAS = 0
VENDEDOR --> VENDEDOR-ANT Inicio de un vendedor
--> DET-VENDEDOR
ENDDO
ESCRIBIR LIN-DETALLE
SUMAR 1 A CONT-LINEAS
CONT-LINEAS = 5
Tratamiento de cabeceras
Hay dos momentos, en cualquier programa, en los que hay que escribir las cabeceras
del listado:
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.
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
El listado mostrará todos los pedidos de un cliente, obteniendo el total del cliente,
cuando se terminen sus pedidos.
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
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
Sin repetidos (no puede haber más de un pedido con la misma provincia y el mismo
vendedor).
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.
3. ENFRENTAMIENTO DE FICHEROS
INTRODUCCION
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:
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.
PROCESO DE ENFRENTAMIENTO
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:
Nota
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.
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:
Después de haber visto detenidamente este proceso, se pueden sacar las siguientes
conclusiones:
Programa informático
ENDDO
ELSE
ELSE
ENDIF
ENDIF
Notas
ENDDO
ENDDO
ENDDO
CONSULTA
Modelo básico
ENDDO
LEER MAESTRO
ELSE
ELSE
ENDIF
ENDIF
Notas
EJERCICIO 1
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.
EJERCICIO 2
Listar los clientes con todos sus pedidos, según se especifica en el proceso.
FPEDIDOS
FCLIENTE
PEJENF02
LPEDCLTE
Sin repetidos (un cliente no puede tener más de un pedido con el mismo código de
pedido).
Sin repetidos (no puede haber dos registros con el mismo código de cliente).
PEDIDO FEC. PEDID FEC. ENTRG IMPORTE PEDIDO IMPORTE DEVUELTO IMPORTE
DESCUENT
PROCESO
4. TABLAS
INTRODUCCION
CLIENTES PROVINCIAS
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.
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).
DEFINICION DE 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:
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
ELE-PROVINCIA
y para, por ejemplo, enviar la provincia “ZARAGOZA” a una línea de listado se podría
hacer:
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.
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
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.
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.
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.
Ordenada
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
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.
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.
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
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.
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.
Para poder realizar este tratamiento se deben dar algunas condiciones para la tabla:
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'.
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:
IND = 1
LEER FICHERO
LEER FICHERO
ENDDO
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.)
IND = 1
IF CAMPO = ELEMENTO(IND)
ELSE
IF ELEMENTO(IND) = vacío
ENDIF
ENDIF
IND = IND + 1
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
ELE-IMPORTE(13)
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
<PROCESAR-ELEMENTO(IND) >
IND = IND + 1
ENDDO
Dicotómica
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:
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
IF ELEMENTO(IND) = clave
EXISTE = 1
PRIMER = ULTIMO + 1
ELSE
ELSE
ENDIF
ENDIF
ENDDO
IF EXISTE = 1
ELSE
ENDIF
EJERCICIO 1
FARTICUL
PEJTAB01
LARTICUL
EJERCICIO 2
FVENTAS
PEJTAB02
LPEDIDOS LVENDMES
Sin repetidos (no puede haber más de un pedido con el mismo número).
VENDEDOR: XXXX
FEBRERO Z.ZZZ.ZZZ.ZZ9
...... Z.ZZZ.ZZZ.ZZ9
DICIEMBRE Z.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.
ANEXOS
A. PRINCIPALES METODOLOGIAS
INTRODUCCION
Deductivos e inductivos
Aunque las funciones y los datos son inseparables en cualquier proceso informático,
hay que tener en cuenta ciertas consideraciones.
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
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.
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.
Á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.
WARNIER
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.
JACKSON
FICHERO
REGISTRO
EJERCICIO 2-1
Obtener un listado de pedidos, por cliente, a partir del fichero de pedidos de entrada.
Inicio
(1)
I. Cliente
(1)
F. Cliente
(1)
Final
(1)
LEER FPEDIDOS
ENDDO
TOTAL-PEDIDO = 0
TOTAL-DESCTO = 0
ENDDO
ENDIF
ESCRIBIR LIN-DETALLE
SUMAR 1 A CONT-LINEAS
LIMPIAR LIN-DETALLE
LEER FPEDIDOS
SUMAR 1 A CONT-PAGINA
CONT-PAGINA --> CAB2-PAGINA
CONT-LINEAS = 6
EJERCICIO 2-2
Obtener un listado de ventas por vendedor y provincia, a partir del fichero de ventas.
Inicio
(1)
I. Vendedor I. Provincia
(1) (1)
Vendedor F. Provincia
(1) (1)
Final
(1)
LEER FVENTAS
ENDDO
TOTAL-VENDEDOR = 0
CONT-PAGINA = 0
ENDDO
TOTAL-VENDEDOR --> TOT-VENDEDOR
ESCRIBIR LIN-TOTAL-VENDEDOR después de saltar 3 líneas
TOTAL-PROVINC = 0
ENDDO
IF CONT-LINEAS > 55
ENDIF
ESCRIBIR LIN-DETALLE
SUMAR 1 A CONT-LINEAS
LIMPIAR LIN-DETALLE
LEER FVENTAS
SUMAR 1 A CONT-PAGINA
CONT-PAGINA --> CAB2-PAGINA
CONT-LINEAS = 6
EJERCICIO 3-1
LEER FMAESART
LEER FMOVIART
ENDDO
ELSE
ELSE
ENDIF
ENDIF
< DEJAR-ARTICULO >
IF FMOVIART-DLDESART no vacío
ENDIF
IF FMOVIART-DIARTICO no vacío
ENDIF
IF FMOVIART-DPDESCTO no vacío
ENDIF
Listar los clientes con todos sus pedidos, según se especifica en el proceso.
FPEDIDOS FCLIENTE
PEJENF02
LPEDCLTE
Sin repetidos (un cliente no puede tener más de un pedido con el mismo código de
pedido).
Sin repetidos (no puede haber dos registros con el mismo código de cliente).
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
PROCESO
Si un cliente no tiene pedidos, se escribirán todas las cabeceras y, como única línea
de detalle, el literal “***