0% encontró este documento útil (0 votos)
555 vistas456 páginas

COBOL - 400 Guía Del Usuario PDF

Cargado por

cacho tirau
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
555 vistas456 páginas

COBOL - 400 Guía Del Usuario PDF

Cargado por

cacho tirau
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 456

AS/400 SC10-9424-00

COBOL/400 Guía del usuario

Versión 3 Release 1.0


IBM AS/400 SC10-9424-00

COBOL/400 Guía del usuario

Versión 3 Release 1.0


¡Nota!

Antes de utilizar esta información y el producto al que le da soporte, asegúrese de leer la información general que
aparece en el apartado “Avisos” en la página ix.

Primera Edición (septiembre 1994)

Esta publicación es la traducción del original en inglés COBOL/400 User's Guide, SC09-1812-00.

Esta edición se aplica al programa bajo licencia IBM ILE* COBOL/400* (Programa 5763-CB1), Versión 3 Release 1 Modificación 0, y
a todas los releases posteriores y modificaciones hasta que se indique lo contrario en nuevas ediciones. Asegúrese de que está
utilizando la edición adecuada para el nivel del producto.

Solicite sus publicaciones a través de su representante o sucursal IBM de su localidad. En la dirección que figura a continuación no
se pueden adquirir publicaciones.

Al final de esta publicación se incluye un impreso para los comentarios del lector. Si falta dicho impreso puede enviar sus comenta-
rios a:

IBM, S.A.
Centro de Traducción y Publicaciones
Avda. Diagonal, 571
08029 Barcelona
España

También puede enviar sus comentarios por fax:


Desde España: (93) 209 11 16
Desde otros países: 34 3 209 11 16

Si tiene acceso a Internet, puede enviar sus comentarios por correo electrónico a [email protected].

Al enviar información a IBM se cede a dicha firma el derecho no exclusivo de utilizar o distribuir dicha información de la manera que
crea más conveniente, sin incurrir por ello en ninguna obligación hacia el lector.

 Copyright International Business Machines Corporation 1994. Reservados todos los derechos.
Contenido
Avisos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix
Información acerca de la Interfaz de Programación . . . . . . . . . . . . . . . . . ix
Marcas Registradas y Marcas de Servicio . . . . . . . . . . . . . . . . . . . . . . x

Acerca de este manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi


A Quién Va Dirigido Este Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
Estándares Industriales Utilizados en el Diseño del Compilador . . . . . . . . . xiii

Capítulo 1. Introducción al Lenguaje de Programación COBOL/400 . . . . 1


Extensiones al Estándar ANSI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Características del Compilador COBOL/400 . . . . . . . . . . . . . . . . . . . . . 2
Utilización de la Notación de Sintaxis COBOL/400 . . . . . . . . . . . . . . . . . 2
Lectura de los Diagramas de Sintaxis . . . . . . . . . . . . . . . . . . . . . . . . . 3
Lectura de las Ampliaciones IBM . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Códigos de Entrada del Lenguaje de Control . . . . . . . . . . . . . . . . . . . . . 5
Visión General de la Programación en COBOL/400 . . . . . . . . . . . . . . . . . 6

Capítulo 2. Instalación del Programa Fuente en el Sistema AS/400 . . . . . 9


Diseño del Programa COBOL/400 . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Instalación del Fuente Mediante el SEU . . . . . . . . . . . . . . . . . . . . . . 11

Capítulo 3. Compilación de un Programa COBOL/400 . . . . . . . . . . . . 15


Utilización del Mandato Crear Programa COBOL (CRTCBLPGM) . . . . . . . . 15
Utilización de las Pantallas de Solicitud CRTCBLPGM . . . . . . . . . . . . 16
Entrada del Mandato CRTCBLPGM desde la Línea de Mandatos . . . . . . 29
Entrada del Mandato CRTCBLPGM desde un Programa CL . . . . . . . . . 29
Sintaxis del Mandato CRTCBLPGM . . . . . . . . . . . . . . . . . . . . . . . 30
Compilación del Programa Fuente para el Release Anterior . . . . . . . . . . . 32
Uso de la Instrucción PROCESS para Especificar las Opciones del Compilador 33
Explicación de la Salida del Compilador . . . . . . . . . . . . . . . . . . . . . . 38
Especificación del Formato del Listado . . . . . . . . . . . . . . . . . . . . . . 39
Visualización del Listado del Compilador Utilizando el SEU . . . . . . . . . . 40
Programa y Listado Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

Capítulo 4. Ejecución del Programa en COBOL . . . . . . . . . . . . . . . . 53


Respuesta a Mensajes de Consulta en Tiempo de Ejecución . . . . . . . . 54

Capítulo 5. Depuración del Programa . . . . . . . . . . . . . . . . . . . . . . 57


Cómo Evitar Errores de Códigos Comunes . . . . . . . . . . . . . . . . . . . . . 58
Utilización de Puntos de Interrupción . . . . . . . . . . . . . . . . . . . . . . . . 59
Ejemplo de un Programa que Utiliza Puntos de Interrupción . . . . . . . . . 60
Cambio de Variables de Programa . . . . . . . . . . . . . . . . . . . . . . . . 65
Consideraciones para la Utilización de Puntos de Interrupción . . . . . . . . 65
Utilización de un Rastreo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Ejemplo de Utilización de un Rastreo . . . . . . . . . . . . . . . . . . . . . . 66
Consideraciones para la Utilización de un Rastreo . . . . . . . . . . . . . . . 68
Utilización de un Conmutador para Depuración en Tiempo de Ejecución . . . 69
Utilización de un Vuelco con Formato COBOL . . . . . . . . . . . . . . . . . . . 69

Capítulo 6. Manejo de Errores y Excepciones COBOL/400 . . . . . . . . . 71

 Copyright IBM Corp. 1994 iii


Manejo de Errores Estándar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Visión General del Manejo de Errores . . . . . . . . . . . . . . . . . . . . . . 71
Utilización de las Interfaces del Programa de Aplicación (API) para el
Manejo de Errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Estado de archivo Interno y Externo . . . . . . . . . . . . . . . . . . . . . . . 73
Detección de Errores Generales . . . . . . . . . . . . . . . . . . . . . . . . . 75
Estado del Archivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Generación del Supervisor de Mensajes . . . . . . . . . . . . . . . . . . . . . 76
Finalización de un Programa COBOL . . . . . . . . . . . . . . . . . . . . . . 78
Códigos de Retorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Modelos Estándar y no Estándar de Manejo de Errores . . . . . . . . . . . . 79
Efectos de *STDERR y *NOSTDERR en el Estado de Archivos . . . . . . . 83
Proceso de Verbos de E/S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Excepciones Comunes y Algunas de sus Causas . . . . . . . . . . . . . . . . . 85
Recuperación de una Anomalía . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

Capítulo 7. Gestión de Archivos y Datos . . . . . . . . . . . . . . . . . . . . 93


Dependencia e Independencia de Dispositivo . . . . . . . . . . . . . . . . . . . 93
Spooling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Spool de Salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Spool de Entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Consideraciones acerca de la Alteración Temporal del Sistema . . . . . . . . . 97
Bloqueo de Archivos y Registros por COBOL . . . . . . . . . . . . . . . . . . . 97
Bloqueo y Liberación de Registros . . . . . . . . . . . . . . . . . . . . . . . . 98
Posibilidad de Compartir una Vía de Datos Abierta . . . . . . . . . . . . . . 99
Consideraciones sobre Control de Compromiso . . . . . . . . . . . . . . . . . . 99
Desbloqueo de Registros de Entrada y Bloqueo de Registros de Salida . . . 107
Estado de Archivos y Áreas de Realimentación . . . . . . . . . . . . . . . . . 108
Descripciones de Archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Archivos Descritos por Programa . . . . . . . . . . . . . . . . . . . . . . . . . 110
Archivos Descritos Externamente . . . . . . . . . . . . . . . . . . . . . . . . . 110
Especificaciones de Descripción de Datos (DDS) . . . . . . . . . . . . . . 112
Instrucción COPY de Formato 2 (Opción DD, DDR, DDS o DDSR) . . . . . 118
Indicadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Estructuras de Datos Generadas . . . . . . . . . . . . . . . . . . . . . . . . 121
Ejemplos de Generación de Claves . . . . . . . . . . . . . . . . . . . . . . 127
Declaración de Ítems de Datos utilizando Tipos de Datos de CVTOPT . . . 137
Campos Gráficos DBCS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Campos Gráficos DBCS de Longitud Variable . . . . . . . . . . . . . . . . 140
Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Consideraciones acerca de los Datos de Sistemas Cruzados . . . . . . . . . 143

Capítulo 8. Archivos Transaction . . . . . . . . . . . . . . . . . . . . . . . . 145


Archivos Transaction Descritos por Programa . . . . . . . . . . . . . . . . . . 145
Archivos Transaction Descritos Externamente . . . . . . . . . . . . . . . . . . 145
La instrucción COPY con el Formato 2 . . . . . . . . . . . . . . . . . . . . 145
Especificaciones de Descripción de Datos (Data Description Specifications) 146
Proceso de un Archivo Transaction Descrito Externamente . . . . . . . . . 149
Utilización de Indicadores con Archivos Transaction . . . . . . . . . . . . . . 149
Indicadores en un Área de Indicadores Separada . . . . . . . . . . . . . . 150
Indicadores en el Área de Registro . . . . . . . . . . . . . . . . . . . . . . . 150
Cláusula ASSIGN y Atributo de Área de Indicadores Separada . . . . . . 150
Entrada de Descripción de Datos–Datos Booleanos . . . . . . . . . . . . . 151
Frase INDICATORS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

iv COBOL/400 Guía del usuario


Indicadores en un Área de Indicadores Separada . . . . . . . . . . . . . . 153
Indicadores en el Área de Registro . . . . . . . . . . . . . . . . . . . . . . . 153
Programas Ejemplo con Indicadores . . . . . . . . . . . . . . . . . . . . . . 154
Subarchivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Utilización de Subarchivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Archivos de Múltiples Dispositivos y Archivos de Dispositivo Único . . . . 170
División de Entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Entrada de Control de Archivo . . . . . . . . . . . . . . . . . . . . . . . . . 180
División de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
Entrada de Descripción de Archivos . . . . . . . . . . . . . . . . . . . . . . 184
Ítems de Datos Booleanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
División de Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Conceptos de División de Procedimiento . . . . . . . . . . . . . . . . . . . 185
Instrucción ACCEPT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Instrucción ACQUIRE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Instrucción CLOSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Instrucción DROP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Instrucción OPEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Recursos Comunes de Proceso . . . . . . . . . . . . . . . . . . . . . . . . . 190
Instrucción READ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Instrucción REWRITE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Instrucción WRITE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Instrucción USE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Programas Ejemplo de Estación de Trabajo . . . . . . . . . . . . . . . . . . . 210
Programa Básico de Consulta . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Programas de Consulta de Pedidos que utilizan Subarchivos . . . . . . . 216
Un Programa de Actualización de Pagos . . . . . . . . . . . . . . . . . . . 227

Capítulo 9. Archivos de Impresora . . . . . . . . . . . . . . . . . . . . . . . 243


Párrafo SPECIAL-NAMES y Frase ADVANCING . . . . . . . . . . . . . . . 243
Cláusula LINAGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Archivos FORMATFILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244

Capítulo 10. Archivos DISK y DATABASE . . . . . . . . . . . . . . . . . . 251


Archivos DATABASE frente a Archivo DISK . . . . . . . . . . . . . . . . . . 251
Métodos de Proceso para Archivos DISK y DATABASE . . . . . . . . . . 251
Archivos Indexados COBOL . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Referencia a una Clave Parcial . . . . . . . . . . . . . . . . . . . . . . . . . 253
Consideraciones Sobre Archivos Lógicos . . . . . . . . . . . . . . . . . . . 257
Archivos Relativos COBOL . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Archivos Secuenciales COBOL . . . . . . . . . . . . . . . . . . . . . . . . . 261
Consideraciones sobre la Organización de Archivos COBOL y la Vía de
Acceso del Archivo AS/400 . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Métodos de Proceso de Archivos . . . . . . . . . . . . . . . . . . . . . . . . . 262
Consideraciones sobre el Archivo Descendente . . . . . . . . . . . . . . . . . 265

Capítulo 11. Consideraciones de Programación en COBOL/400 . . . . . 267


Emisión de un Mandato CL desde un Programa COBOL . . . . . . . . . . . . 267
Utilización de la Frase CORRESPONDING . . . . . . . . . . . . . . . . . . . . 268
Cláusula LIKE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Modificación de Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Modificación de Referencias con Tablas de Longitud Variable . . . . . . . 275
Modificación de Referencias Utilizando los Nombres de Datos . . . . . . . 276
Modificación de Referencias con Subíndices . . . . . . . . . . . . . . . . . 277

Contenido v
Deseditar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Ejemplos de Deseditar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Manejo de Errores de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Consideraciones acerca del Rendimiento . . . . . . . . . . . . . . . . . . . . . 280
Cláusulas PICTURE para Ítems Numéricos . . . . . . . . . . . . . . . . . . 280
Ítems Binarios de Ocho Bytes . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Segmentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Llamadas a un Programa COBOL desde un Programa que no es COBOL 281
Depuración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Opción *NORANGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Opción *DUPKEYCHK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Archivos Relativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Indicadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Control de Compromiso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Lectura sin Bloqueos de Registros . . . . . . . . . . . . . . . . . . . . . . . 283
Inicialización de Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Bloqueo de Registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Bucles en un Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Rastreo de un Bucle en un Programa . . . . . . . . . . . . . . . . . . . . . 284
Errores que Pueden Causar un Bucle . . . . . . . . . . . . . . . . . . . . . 284

Capítulo 12. Comunicaciones entre Programas . . . . . . . . . . . . . . . 285


Transferencia de Control a Otro Programa . . . . . . . . . . . . . . . . . . . . 285
Programas Principales y Subprogramas . . . . . . . . . . . . . . . . . . . . 286
Devolución de Control desde un Programa Llamado . . . . . . . . . . . . . . 286
Inicialización de Almacenamiento . . . . . . . . . . . . . . . . . . . . . . . . . 291
Llamada a Otro Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Paso de Datos Utilizando BY REFERENCE o BY CONTENT . . . . . . . 291
En la Sección de Enlace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Agrupación de Datos a Pasar . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Llamada por Identificador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Utilización de Punteros en un Programa COBOL/400 . . . . . . . . . . . . . . 295
Definición y Alineación de Punteros . . . . . . . . . . . . . . . . . . . . . . 296
Los Punteros y la Cláusula REDEFINES . . . . . . . . . . . . . . . . . . . 297
Lectura y Grabación de Punteros . . . . . . . . . . . . . . . . . . . . . . . . . 298
Inicialización de Punteros Utilizando la Constante Figurativa NULL . . . . . . 299
Longitud (LENGTH OF) de Registro Especial . . . . . . . . . . . . . . . . . . 299
Configuración de la Dirección de Ítems de Enlace . . . . . . . . . . . . . . . . 300
Utilización de ADDRESS OF y de ADDRESS OF del Registro Especial . 300
Utilización de Punteros en una Instrucción MOVE . . . . . . . . . . . . . . . . 301
Utilización de Punteros en una Instrucción CALL . . . . . . . . . . . . . . . . 303
Utilización de Punteros y API para Acceder a Espacios de Usuario . . . . . 305
Proceso de una Lista Encadenada . . . . . . . . . . . . . . . . . . . . . . . . . 316
Áreas de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Área de Datos Local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Área de Datos PIP (Parámetros de Inicialización de Programas) . . . . . 320
Consideraciones de Archivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

Apéndice A. Características de segmentación . . . . . . . . . . . . . . . . 323


Conceptos referentes a la segmentación . . . . . . . . . . . . . . . . . . . . . 323
Segmentos de Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Lógica de segmentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Control de Segmentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Consideraciones sobre el Programa Fuente COBOL . . . . . . . . . . . . . 325

vi COBOL/400 Guía del usuario


Segmentación–Consideraciones Especiales . . . . . . . . . . . . . . . . . . 326

Apéndice B. Características de Depuración . . . . . . . . . . . . . . . . . 329


Depuración del Lenguaje Fuente COBOL . . . . . . . . . . . . . . . . . . . . . 329
Conmutador de Tiempo de Compilación . . . . . . . . . . . . . . . . . . . . 329
Conmutador en Tiempo de Ejecución . . . . . . . . . . . . . . . . . . . . . 330
Sentencia Declarativa USE FOR DEBUGGING . . . . . . . . . . . . . . . . 332
Registro Especial DEBUG-ITEM . . . . . . . . . . . . . . . . . . . . . . . . 335
Líneas de depuración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337

Apéndice C. Nivel de Soporte del Lenguaje . . . . . . . . . . . . . . . . . 339


Estándar ANSI X3.23-1985 COBOL . . . . . . . . . . . . . . . . . . . . . . 339
Nivel de Soporte del Lenguaje COBOL/400 . . . . . . . . . . . . . . . . . . 340
Soporte SAA de la Interfaz de Programación Común (CPI) . . . . . . . . . 341

Apéndice D. Mensajes COBOL/400, Señalizador FIPS y Señalización


SAA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Mensajes COBOL/400 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Mensajes Interactivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Mensajes de Compilación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Respuestas a Mensajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Descripciones de Mensajes COBOL . . . . . . . . . . . . . . . . . . . . . . . . 346
El señalizador Federal Information Processing Standard (FIPS) . . . . . . . . 347
Señalización SAA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

Apéndice E. Diferencias entre el COBOL ANSI 74 COBOL y el COBOL


ANSI 85 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
Migración de Programas COBOL ANSI 74 a COBOL ANSI 85 . . . . . . . . 351

Apéndice F. Soporte del Juego de Caracteres de Idiomas


Internacionales de Doble Byte . . . . . . . . . . . . . . . . . . . . . . . . . 355
Utilización de Caracteres DBCS en Literales . . . . . . . . . . . . . . . . . 355
División de Identificaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
División de Entornos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
División de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
División de Procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
SORT/MERGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Instrucciones Dirigidas al Compilador . . . . . . . . . . . . . . . . . . . . . 368
Comunicaciones entre programas . . . . . . . . . . . . . . . . . . . . . . . 368
Distintivo FIPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Listados de Programa COBOL . . . . . . . . . . . . . . . . . . . . . . . . . 369

Apéndice G. Ejemplos de Procesos de Archivos AS/400 . . . . . . . . . 371


Creación de Archivos Secuenciales . . . . . . . . . . . . . . . . . . . . . . 371
Actualización y Ampliación de Archivos Secuenciales . . . . . . . . . . . . 373
Creación de Archivos Indexados . . . . . . . . . . . . . . . . . . . . . . . . 376
Actualización de Archivos Indexados . . . . . . . . . . . . . . . . . . . . . . 378
Creación de Archivo Relativos . . . . . . . . . . . . . . . . . . . . . . . . . . 382
Actualización de Archivos Relativos . . . . . . . . . . . . . . . . . . . . . . 384
Recuperación de Archivos Relativos . . . . . . . . . . . . . . . . . . . . . . 386
Archivos de Fusión y Clasificación . . . . . . . . . . . . . . . . . . . . . . . 389

Apéndice H. Ejemplo de Vuelco con Formato COBOL . . . . . . . . . . . 393

Contenido vii
Bibliografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405

Glosario de Abreviaturas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407

Índice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411

viii COBOL/400 Guía del usuario


Avisos
Las referencias hechas en esta publicación a productos, programas o servicios IBM
no implican que IBM tenga la intención de hacerlos disponibles en todos los países
en los que opera. Cualquier referencia a un programa bajo licencia IBM en esta
publicación no implica ni establece que sólo puedan utilizarse programas bajo
licencia IBM. Cualquier producto, programa o servicio funcionalmente equivalente
que no vulnere ninguno de los derechos de la propiedad intelectual de IBM puede
ser utilizado en lugar de dicho producto, programa o servicio IBM. La evaluación y
| la verificación de la operativa conjunta con otros productos, a excepción de aqué-
| llos expresamente designados por IBM, es responsabilidad del usuario.

IBM puede tener patentes o solicitudes de patentes pendientes que cubren el tema
tratado en este documento. El hecho de que esté en posesión de este documento
no le otorga ninguna licencia sobre dichas patentes. Puede enviar las solicitudes
| de licencia, por escrito, al IBM Director of Licensing, IBM Corporation, 208 Harbor
| Drive, Stamford, Connecticut, USA 06904-2501

Los cambios relevantes o las actualizaciones en el texto vienen indicadas mediante


una línea horizontal (|) a la izquierda del cambio o adición en cuestión.

Esta publicación contiene ejemplos de datos e informes utilizados en operaciones


de gestión ordinarias. Para ilustrarlos de la forma más completa posible, los ejem-
plos incluyen nombres de personas, empresas, marcas y productos. Todos estos
nombres son ficticios y cualquier parecido con los nombres y direcciones que
utilice una empresa de gestión real es pura coincidencia.

Información acerca de la Interfaz de Programación


La presente publicación tiene la intención de proporcionar ayuda al cliente para
escribir programas COBOL/400.

En esta publicación también aparece información de asesoramiento asociado y de


la interfaz de programación de uso general.

Las interfaces de programación de uso general permiten que el cliente escriba pro-
gramas que reciban servicios del compilador COBOL/400.

La información de la interfaz de programación de uso general y el asesoramiento


asociado se identifica de manera explícita allí donde se produce, ya sea mediante
una instrucción introductoria a un capítulo o sección, o bien mediante el enmarcado
siguiente:

Interfaz de Programación de Uso General

Información de asesoramiento asociado y de la interfaz de programación de uso


general...

Fin de Interfaz de Programación de Uso General

 Copyright IBM Corp. 1994 ix


Marcas Registradas y Marcas de Servicio
Los términos siguientes, marcados con un asterisco (*) en esta publicación, son
marcas registradas de IBM Corporation en los Estados Unidos y/o en el resto de
los países:

Application System/400 AS/400 CICS/400


| COBOL/400 IBM ILE
Operating System/2 Operating System/400 OS/2
OS/400 RPG/400 SAA
SQL/400 System/370 Systems Application
Architecture
400

x COBOL/400 Guía del usuario


Acerca de este manual
Este manual proporciona toda la información que un programador necesita para
escribir, compilar, comprobar, depurar y ejecutar programas COBOL/400* en el
sistema Application System/400* (AS/400*) IBM*.

Este manual hace referencia a otras publicaciones IBM. Estas publicaciones se


listan en el apartado “Bibliografía” en la página 405 con el título completo y el
número de orden de base. Cuando se hace referencia a ellas en el texto, se utiliza
una versión abreviada del título.

A Quién Va Dirigido Este Manual


Este manual se ha concebido para programadores que tienen algunos cono-
cimientos sobre el lenguaje de programación COBOL y para los operadores que
ejecutan los programas. Es una guía completa que enseña a los usuarios del
sistema AS/400 el lenguaje COBOL/400. El usuario debe tener un conocimiento
base sobre los conceptos referentes al proceso de datos, sobre el lenguaje de pro-
gramación COBOL y sobre el Operating System/400* (OS/400*) de IBM.

Cuando utilice este manual, el usuario podrá:


Ÿ Diseñar programas COBOL/400
Ÿ Codificar programas COBOL/400
Ÿ Introducir, compilar y ejecutar programas COBOL/400
Ÿ Comprobar y depurar programas COBOL/400
Ÿ Estudiar ejemplos codificados COBOL/400.
Nota: Es preciso efectuar una lectura profunda de los cuatro primeros capítulos
antes de proceder a la lectura del resto del manual.

Utilice este manual junto con la publicación COBOL/400 Reference, SC09-1813,


que describe cada componente y característica del lenguaje COBOL/400. La publi-
cación COBOL/400 User’s Guide, SC09-1812 y el manual COBOL/400 Reference
describen pormenorizadamente el lenguaje y el compilador COBOL/400.

Para obtener información sobre toda la biblioteca de documentos AS/400, consulte


el manual Guía de Publicaciones, GC10-9237 (GC41-9678), que contiene una des-
cripción resumida del contenido de cada publicación AS/400.

Antes de proceder a la lectura de este manual, es preciso que se familiarice con la


siguiente información:
Ÿ El uso de los controles e indicadores de la pantalla de visualización, así como
la utilización de todas las teclas del teclado, como por ejemplo:
– Teclas de movimiento del cursor
– Teclas de función
– Teclas de salida de campo
– Teclas de Inserción y Supresión
– Teclas de Restauración de errores.
Para obtener información acerca de la estación de pantalla, consulte:
– Guía para Nuevos Usuarios, SC10-8881 (SC41-8211).

 Copyright IBM Corp. 1994 xi


Ÿ El funcionamiento de la estación de pantalla si está enlazada con el sistema
AS/400 de IBM, así como la ejecución del software AS/400. Ello implica tener
conocimientos sobre el uso del sistema operativo OS/400 y sobre el Lenguaje
de Control (CL) para poder llevar a cabo las siguientes operaciones:
– Iniciar y finalizar la sesión en la estación de pantalla
– Interactuar con pantallas
– Utilizar la Ayuda
– Introducir mandatos CL
– Utilizar las Herramientas para el Desarrollo de Aplicaciones
– Responder a mensajes
– Realizar gestión de archivos.
Ÿ La publicación Programación: Lenguaje de Control Guía del Programador,
SC10-8977 (SC41-8077), que contiene los conceptos fundamentales de las
funciones CL de OS/400.
Para ampliar el conocimiento sobre el sistema operativo y el lenguaje de
control, consulte las siguientes publicaciones IBM:
– Programming: Control Language Reference, SC41-0030 (manual en tres
tomos).
– Programación: Guía para la Gestión de Trabajos, SC10-8978 (SC41-8078)
– Advanced Backup and Recovery Guide, SC41-8079
Ÿ La publicación Guía para la Gestión de Datos, SC10-9008 (SC41-9658), que
proporciona información acerca de la utilización del soporte de gestión de
datos que permite que una aplicación trabaje con archivos.
Además, el manual incluye información sobre:
– La estructura y los conceptos fundamentales del soporte de gestión de
datos en el sistema
– El soporte de gestión de datos para estaciones de pantalla, impresoras,
cintas y disquetes, así como soporte de spool
– La redirección de alteraciones temporales de archivos (eventualmente reali-
zando cambios en los archivos cuando se ejecuta una aplicación)
– La copia de archivos mediante mandatos del sistema para copiar datos de
un lugar a otro
– La adaptación de un sistema utilizando datos de doble byte.
Ÿ El uso de las siguientes Herramientas para el Desarrollo de Aplicaciones:
– El Programa de Utilidad para la Ayuda del Diseño de Pantallas (SDA), que
se utiliza para diseñar y codificar pantallas. En la publicación Application
Development Tools: Screen Design Aid User’s Guide and Reference,
SC09-1340 aparece más información referente a este producto.
– El Programa de Utilidad para la Entrada del Fuente (SEU), que es un
editor de pantalla completa que puede utilizarse para introducir y actualizar
los miembros fuente. En la publicación Programa de Utilidad para Entrada
del Fuente (SEU) Guía del Usuario y Manual de Consulta, SC10-9018
(SC09-1338) aparece más información referente a este producto.
Ÿ El Lenguaje de Consulta Estructurada (SQL), que permite insertar instrucciones
SQL en los programas COBOL/400. En las publicaciones SAA* Lenguaje de
Consulta Estructurada SQL/400 Manual de Consulta, SC10-8997 (SC41-9608)

xii COBOL/400 Guía del usuario


y SAA* Lenguaje de Consulta Estructurada SQL/400 Guía del Programador,
SC10-8998 (SC41-9609) aparece más información referente a este producto.
Ÿ El programa bajo licencia Customer Information Control System/400
(CICS/400*), que permite introducir transacciones en estaciones de trabajo
remotas y procesarlas simultáneamente mediante programas de aplicaciones
escritas por el usuario. El programa bajo licencia incluye funciones para crear,
utilizar y efectuar un mantenimiento de bases de datos y para poder establecer
comunicación con CICS con otros sistemas operativos.
| En la Guía de Programación de Aplicaciones CICS/400, SC33-0822 aparece
| más información sobre cómo utilizar este producto para la programación de
| aplicaciones.

Estándares Industriales Utilizados en el Diseño del Compilador


El compilador COBOL/400 se ha diseñado de acuerdo con los estándares indus-
triales siguientes interpretados por IBM, como en septiembre de 1987:
Ÿ El subconjunto intermedio estándar del American National Standards Institute
(ANSI X3.23-1985).
Ÿ La International Standards Organization (ISO) 1989-1985.
Ÿ El nivel intermedio de la Federal Information Processing Standards Publication
(FIPS PUB 21-2) de marzo de 1986. Se ofrece soporte adicional para muchos
dispositivos de nivel superior.

Algunos fragmentos de este manual se han copiado del American National


Standard Programming Language COBOL, ANSI X3.23-1985, ISO 1989-1985 y se
han reproducido con la autorización del American National Standard Programming
Language COBOL, ANSI X3.23-1985, ISO 1989-1985 (copyright 1985 de American
National Standards Institute). Estas copias pueden adquirirse en el American
National Standard Institute, sito en 1430 Broadway, New York, New York, 10018.

La Conference On DAta SYstems Languages (CODASYL) se encarga del mante-


nimiento del lenguaje COBOL.

Acerca de este manual xiii


xiv COBOL/400 Guía del usuario
Capítulo 1. Introducción al Lenguaje de Programación
COBOL/400
COmmon Business Oriented Language (COBOL) es un lenguaje de programación
que se parece al inglés. Como su propio nombre indica, COBOL es especialmente
eficiente para el proceso de problemas de gestión. Pone énfasis en la descripción
y el manejo de ítems de datos y de registros de entrada/salida; de esta manera, se
adapta bien a la gestión de grandes archivos de datos.

El lenguaje COBOL/400 proporciona muchos elementos de la Interfaz de Progra-


mación Común COBOL (CPI) de la Arquitectura de Aplicación de Sistemas IBM *
(SAA*) y es el producto implantado en el sistema AS/400.

El compilador y la biblioteca COBOL/400 es un programa con licencia IBM que


acepta y ejecuta programas COBOL que sigan el estándar ANSI X3.23-1985 (Ame-
rican National Standard Programming Language COBOL, ANSI X3.23-1985, ISO
1989-1985). ANSI es una organización formada por fabricantes, consumidores y
grupos de intereses comunes y generales, que establece los procedimientos por
los que las organizaciones acreditadas crean y mantienen unos estándares indus-
triales voluntarios en los Estados Unidos.

Extensiones al Estándar ANSI


Para ayudar al usuario en la utilización del COBOL en el sistema AS/400, el pro-
grama con licencia COBOL/400 incluye asimismo una serie de ampliaciones IBM
al estándar ANSI X3.23-1985. Entre las ampliaciones más significativas se
incluyen:
Ÿ TRANSACTION I/O: puede enviar y recibir registros de una estación de
trabajo.
Ÿ COPY: puede utilizar archivos descritos externamente.
Ÿ DATABASE I/O: puede utilizar entradas estándar de División de Datos y de
Entorno COBOL para especificar la identificación de archivos, las definiciones
de campos y las estructuras de datos. Se han añadido cláusulas en los verbos
READ, WRITE, REWRITE, DELETE y START para dar soporte a la base de
datos del AS/400.
Ÿ Tipos de datos ampliados: da soporte a datos computational-3 (decimales
internos o decimales empaquetados) y computational-4 (binarios).
Ÿ Se da soporte a los tipos de datos booleanos y puntero.
Ÿ Tiene la opción de utilizar el apóstrofe en lugar de comillas.
Ÿ Se da soporte a las instrucciones dirigidas al compilador SKIP1/2/3, EJECT y
TITLE.
Ÿ ACCEPT/DISPLAY Ampliado: proporciona soporte para la E/S de la estación
de trabajo a nivel de campo.
Ÿ Cláusula LIKE: puede definir las características de un nombre de datos
copiándolos de un nombre de datos definido anteriormente.

 Copyright IBM Corp. 1994 1


Ÿ Supresión del listado del compilador: puede suprimir de forma selectiva las
partes del listado del compilador utilizando la instrucción *CBL o *CONTROL o
la frase SUPPRESS de la instrucción COPY.
Ÿ Se da soporte a literales no numéricos hexadecimales.

Características del Compilador COBOL/400


Las siguientes características independientes del lenguaje están disponibles con el
compilador COBOL/400:
Ÿ Comprobación de sintaxis:
El Programa de Utilidad para la Entrada del Fuente (SEU) proporciona un com-
probador de sintaxis COBOL que comprueba los errores en líneas de código
mientras el usuario los entra o los cambia. Se visualizan los mensajes de
error, lo que le permite corregirlos antes de la compilación.
Ÿ Opción de referencia cruzada:
– Ofrece un listado de cada nombre de División de Datos y nombre de
párrafo de División de Procedimientos.
– Indica los números de instrucción de cada referencia para el ítem.
Ÿ Supresión de mensajes de diagnósticos por debajo del nivel especificado por el
usuario.
Ÿ El distintivo del Federal Information Processing Standard (FIPS) emite men-
sajes que identifican elementos del lenguaje obsoletos o que no están con-
formes en el programa fuente COBOL. Un programa fuente es un conjunto
de instrucciones que se escribe en un lenguaje de programación y que debe
convertirse en lenguaje de máquina antes de que se ejecute el programa.
Ÿ El distintivo SAA se utiliza para destacar las funciones del programa que no se
pueden transportar a otros entornos COBOL de SAA.

Utilización de la Notación de Sintaxis COBOL/400


En COBOL, los formatos básicos se presentan en un sistema uniforme de notación
de sintaxis que se define en los párrafos siguientes. Esta notación está diseñada
para ayudarle a escribir instrucciones fuente COBOL.
Ÿ Las palabras clave COBOL aparecen en letras mayúsculas; por ejemplo:
PARM1
Deben escribirse tal y como se muestra. Si no se escribe alguna palabra clave
necesaria, el compilador lo considera un error.
Ÿ Las variables que representan nombres o valores suministrados por el usuario
aparecen en letras minúsculas; por ejemplo:
parmx
Ÿ Para una consulta más fácil del texto, algunas palabras aparecen seguidas de
un guión y un dígito o una letra; por ejemplo:
identifier-1
Este sufijo no cambia la definición sintáctica de la palabra.

2 COBOL/400 Guía del usuario


Ÿ Los operadores aritméticos y lógicos (+, -, *, /, **, >, <, =, >=, y <=) que apa-
recen en formatos de sintaxis son necesarios. Estos operadores son palabras
reservadas como caracteres especiales. Para obtener un listado completo de
palabras COBOL/400 reservadas, consulte la sección “Palabras Reservadas”
de la publicación Consulta COBOL/400
Ÿ Todos los signos de puntuación y demás caracteres especiales que aparecen
en el diagrama son requeridos por la sintaxis del formato cuando se muestran;
si no los incluye, el programa dará un error.
Ÿ Deberá escribir las cláusulas necesarias y las cláusulas opcionales (cuando
proceda) en el orden que muestra el diagrama, a menos que las reglas aso-
ciadas indiquen lo contrario de manera explícita.

Lectura de los Diagramas de Sintaxis


En este manual, la sintaxis se describe utilizando la estructura definida a conti-
nuación.
Ÿ Lea los diagramas de sintaxis de izquierda a derecha y de arriba a abajo,
siguiendo la línea:
55─── Indica el inicio de una instrucción. Los diagramas de unidades sintác-
ticas que no sean instrucciones, como pueden ser las cláusulas,
frases y párrafos, también se inician con este símbolo.
───5 Indica que la sintaxis de la instrucción continúa en la línea siguiente.
5──── Indica que una instrucción viene de la línea anterior.
───5% Indica el final de una instrucción. Los diagramas de unidades sintác-
ticas que no sean instrucciones, como pueden ser las cláusulas,
frases y párrafos, también terminan con este símbolo.
Nota: Las instrucciones dentro de un diagrama de un párrafo completo no
comenzarán con 55─── ni terminarán con ───5% a menos que su comienzo y
final coincida con el del párrafo.
Ÿ Los ítems necesarios aparecen en la línea horizontal (la vía principal). Los
ítems opcionales aparecen por debajo de la línea principal:
55────STATEMENT───────ítem necesario─────┬───────────────┬────────────5%
└─ítem opcional─┘

Ÿ Cuando pueda escoger entre dos o más ítems, aparecerán verticalmente, en


una pila. Si debe escoger uno de los dos ítems, aparecerá un ítem de la pila
en la línea principal. Si la elección de un ítem es opcional, aparecerá la pila
entera por debajo de la línea principal:
55───STATEMENT───┬─elección necesaria 1──┬─────┬────────────────────┬────5%
└─elección necesaria 2──┘ ├─elección opcional 1┤
└─elección opcional 2┘

Ÿ Una flecha que vuelve hacia la izquierda por encima de un ítem indica que
dicho ítem puede repetirse:
┌────────────────┐
6 │
55───STATEMENT─────ítem repetible ──┴─────────────────────────────────5%

Capítulo 1. Introducción al Lenguaje de Programación COBOL/400 3


Ÿ Un flecha de repetición por encima de una pila de elecciones necesarias u
opcionales indica que puede realizar más de una elección en los ítems api-
lados, o repetir una sola elección:
┌───────────┐ ┌───────────┐
6 │ 6 │
55───STATEMENT────────┬───────────┼──────────┬─elección3─┼────────────5%
├─elección1─┤ └─elección4─┘
└─elección2─┘

El ejemplo siguiente muestra cómo se utiliza la sintaxis:

Formato
.3/
┌──────────┐
.1/ .2/ 6 │
55───STATEMENT──┬─identificador-1┬──────┬──────────┼───────────────────5
└──literal─1─────┘ └──ítem─1──┘

5─┬────┬identificador-3┬───────────┬─┬─────────────────────────────────5 ±
└─TO─┘ └──ROUNDED──┘ │ ┌────────────────────────┐ .5/
│ 6 .4/ │
└identificador4┬───────────┼──────5 ²
└──ROUNDED──┘

± 5──────────────────────────────────────────────┬─┬─────────────────┬──5%
.6/ │ └──END─STATEMENT──┘
² 5─┬─────────────────────────────────────────┬──┘ .7/
└─┬────┬SIZE ERROR sentencia imperativa ─┘
└─ON─┘

donde ítem-1 es:


55───┬──identificador-2──────────┬──────────────────────────────────5%
├──literal─2────────────────┤
└──expresión aritmética-─1──┘

.1/ La palabra clave STATEMENT debe especificarse y codificarse tal y como se


muestra.
.2/ Este operando es necesario. Debe codificarse el identificador-1 o el literal-1.
.3/ El operando ítem-1 es opcional. Puede codificarse o no, según sea requerido
o no por la aplicación. Si se codifica, debe repetirse, con cada entrada sepa-
rada por uno o más espacios en blanco. Las selecciones de entrada permi-
tidas para este operando se describen al final del diagrama.
.4/ El operando identificador-4 es opcional. Si se especifica, debe repetirse con
uno o más espacios en blanco separando cada entrada. A cada entrada se le
puede asignar la palabra clave ROUNDED.
.5/ En los casos en los que varias líneas deban continuar más allá del margen
derecho, se preserva el orden de línea de arriba a abajo.
.6/ La palabra clave ON es opcional para la palabra clave SIZE ERROR, que es
opcional por sí misma. Si se codifica SIZE ERROR, entonces es necesario el
operando sentencia imperativa.
.7/ La palabra clave END-STATEMENT puede codificarse al final de la instruc-
ción. No es un delimitador necesario.

4 COBOL/400 Guía del usuario


Lectura de las Ampliaciones IBM
Una ampliación IBM generalmente añade o contradice una regla o restricción que
la precede inmediatamente. Primero se presenta el estándar, porque algunos pro-
gramadores utilizan el lenguaje COBOL/400 sin ampliaciones IBM. Después se
presenta la ampliación para aquellos que sí las utilizan.

Las ampliaciones IBM dentro de figuras o tablas se muestran en recuadros a


menos que se identifiquen explícitamente como ampliaciones.

Las cláusulas e instrucciones que aparecen dentro de diagramas de sintaxis que


sean ampliaciones del lenguaje COBOL/400 para ANSI X3.23-1985 COBOL se
incluyen en líneas dobles, tal y como se muestra a continuación:

╔══════════════════════════╗
5────RECORD─┬─────┬──┬────┬──┬──╫─EXTERNALLY-DESCRIBED-KEY─╫──┬─────────5
└─KEY─┘ └─IS─┘ │ ╚══════════════════════════╝ │
└────nomb-fech-2─────────────────┘

Ampliación de IBM

Las ampliaciones del lenguaje COBOL/400 para ANSI X3.23-1985 COBOL que
forman parte de la descripción de texto están encerradas en líneas de Ampliación
IBM, como en este párrafo.

Fin de Ampliación de IBM

Las cláusulas e instrucciones COBOL que aparecen en los diagramas que se com-
prueban por sintaxis, pero que el compilador COBOL/400 trata como documen-
tación, están encerradas dentro de asteriscos, de la manera siguiente:

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
5────┬──────────────────────────────────────────┬─────────────────────────────5
\ └──RESERVE────entero ────┬────────────┬────┘ \
\ ├────AREA────┤ \
\ └────AREAS───┘ \
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Códigos de Entrada del Lenguaje de Control


El recuadro que aparece en la parte inferior derecha de cada diagrama de sintaxis
CL contiene los códigos de entrada que especifican el entorno en el que puede
entrarse el mandato. Los códigos indican si el mandato:
Ÿ puede utilizarse en un trabajo interactivo o de proceso por lotes (fuera de un
programa compilado; Trabajo:B o I)
Ÿ Puede utilizarse en un programa compilado interactivo o de proceso por lotes
(Pgm:B o I)
Ÿ Puede utilizarse en un procedimiento REXX interactivo o de proceso por lotes
(REXX:B o I)

Capítulo 1. Introducción al Lenguaje de Programación COBOL/400 5


Ÿ Puede utilizarse como parámetro para el mandato CL CALL, o para pasar
como serie de caracteres al programa de sistema QCMDEXC (Exec).

Visión General de la Programación en COBOL/400


El usuario sigue cuatro pasos o fases principales para crear el programa
COBOL/400:
Ÿ Introducción del programa fuente.
Ÿ Compilación del programa fuente.
Ÿ Depuración del programa.
Ÿ Ejecución del programa compilado.

Introducción del Programa COBOL


El Programa de Utilidad para la Entrada del Fuente (SEU) proporciona una pantalla
especial que se corresponde con la codificación estándar COBOL para ayudarle a
entrar un programa fuente COBOL adecuado en el sistema. El SEU proporciona
también un comprobador de sintaxis COBOL que comprueba los errores de cada
línea mientras el usuario los entra o los cambia. Para obtener más información
sobre la introducción del programa fuente COBOL/400, consulte el Capítulo 2, “Ins-
talación del Programa Fuente en el Sistema AS/400”. Para obtener más infor-
mación sobre la utilización del SEU, consulte la SEU Guía del Usuario y Manual de
Consulta.

Compilación del Programa COBOL


Una vez entrado el programa fuente en el sistema, el usuario deberá compilar
dicho programa fuente utilizando el mandato Create Programa COBOL
(CRTCBLPGM). El compilador se llama para crear un programa objeto COBOL y
un listado. Un programa objeto es un conjunto de instrucciones que la máquina
puede utilizar. Un compilador produce el programa objeto desde un programa
fuente.

El usuario puede especificar varias opciones del compilador utilizando el mandato


CRTCBLPGM o utilizando la instrucción PROCESS con las opciones deseadas.
Cualquier opción especificada en la instrucción PROCESS altera temporalmente
las opciones correspondientes al mandato CRTCBLPGM. Este proceso se explica
detalladamente en el Capítulo 3, “Compilación de un Programa COBOL/400”.

Depuración del Programa COBOL


El sistema operativo OS/400 proporciona las funciones siguientes, que el usuario
puede utilizar para probar y depurar programas:
Ÿ Biblioteca de prueba
Ÿ Puntos de interrupción
Ÿ Rastreos.

El compilador COBOL/400 ofrece las funciones siguientes para la comprobación y


depuración de programas:
Ÿ Características de depuración
Ÿ Vuelco con formato.

Estas características le permiten supervisar las operaciones de programas especí-


ficos durante el tiempo de ejecución. Debe decidir qué es lo que debe supervisar y
qué información recuperar para los propósitos de depuración.

6 COBOL/400 Guía del usuario


Consulte el Capítulo 5, “Depuración del Programa” para obtener más información
sobre las características de la depuración.

Ejecución del Programa COBOL


Podrá ejecutar el programa COBOL de muchas maneras, siempre en función de la
persona que lo haya escrito, de la manera de escribirlo y del usuario. Podrá eje-
cutar un programa COBOL llamándolo desde un programa CL, desde un programa
de aplicación, desde otro programa de lenguaje de alto nivel o desde un mandato
creado por el usuario.

Cuando se acaba el programa, el sistema devuelve el control al que lo ha llamado.

Para más información acerca de la ejecución del programa, consulte el Capítulo 4,


“Ejecución del Programa en COBOL”.

Capítulo 1. Introducción al Lenguaje de Programación COBOL/400 7


8 COBOL/400 Guía del usuario
Capítulo 2. Instalación del Programa Fuente en el Sistema
AS/400
Este capítulo proporciona la información necesaria para instalar el programa. Este
capítulo también describe brevemente las herramientas y la metodología que nece-
sarias para completar la instalación.

Hay dos formas de instalar un programa fuente COBOL en el sistema:


Ÿ Utilizando el Programa de Utilidad para la Entrada del Fuente (SEU). Este
método se explica con detalle en este capítulo.
Ÿ Desde un disquete o cinta utilizando la función de copia del OS/400.
Consulte la publicación CL Reference para obtener información adicional sobre
cómo utilizar la función COPY para la entrada del programa fuente desde
disquete o cinta.

Para instalar el programa fuente COBOL utilizando el SEU, especifique el mandato


Arrancar Programa de Utilidad para la Entrada del Fuente (STRSEU) y especifique
CBL para el parámetro TYPE. Consulte la publicación SEU Guía del Usuario y
Manual de Consulta para obtener más información sobre el mandato STRSEU y
sobre el uso del SEU.

Diseño del Programa COBOL/400


Se puede utilizar la estructura de programa de la Figura 1 en la página 10 como
modelo para desarrollar programas COBOL legibles y eficientes. Observe que
todas las entradas que aparecen a continuación no son necesarias; la mayoría sólo
se proporcionan con finalidades informativas.

 Copyright IBM Corp. 1994 9


IDENTIFICATION DIVISION. .1/
Identification Division .1/ es la única división
PROGRAM-ID. nombre de programa.
AUTHOR. entrada de comentarios.
que debe incluirse; todas las otras divisiones
INSTALLATION. entrada de comentarios. son opcionales.
DATE-WRITTEN. entrada de comentarios.
DATE-COMPILED. entrada de comentarios.
SECURITY. Environment Division .2/ consta de dos sec-
\
\
EL párrafo SECURITY puede contener el prólogo del
programa. El prólogo contiene una descripción del programa
ciones: Configuration Section .3/, que des-
\
\
y puede ser tan descriptivo o breve como recomienden las
directrices de instalación. Se recomienda utilizar las
cribe las las especificaciones generales de los
\ minúsculas para los comentarios; no obstante, puesto que sistemas objeto y fuente y Input-Output
\ algunas impresoras pueden imprimir sólo letras en
\ mayúsculas, los comentarios pueden escribirse en Section .4/, que define cada archivo y especi-
\ mayúsculas. El subrayado sirve para resaltar los
\ comentarios. fica la información que se necesita para trans-
ENVIRONMENT DIVISION. .2/
mitir los datos entre un medio externo y el
CONFIGURATION SECTION. .3/ programa COBOL.
SOURCE-COMPUTER. IBM-AS4ðð.
OBJECT-COMPUTER. IBM-AS4ðð.
SPECIAL-NAMES. REQUESTOR IS CONSOLE. Data Division .5/ describe los archivos que se
INPUT-OUTPUT SECTION. .4/
FILE-CONTROL. deben utilizar en el programa, así como los
SELECT nombre de archivo ASSIGN TO DISK nombre de archivo
ORGANIZATION IS SEQUENTIAL
registros que contienen. También describe
ACCESS MODE IS SEQUENTIAL cualquier ítem de datos del almacenamiento
FILE STATUS IS nombre de datos.
de trabajo que sea necesario.
DATA DIVISION. .5/
FILE SECTION.
FD nombre de archivo Procedure Division .6/ se compone de decla-
BLOCK CONTAINS 2 RECORDS
RECORD CONTAINS 8ð CHARACTERS
rativas opcionales, procedimientos que con-
LABEL RECORDS ARE STANDARD tienen secciones y/o párrafos, sentencias e
DATA RECORD IS nombre de registro
ð1 nombre de registro PIC X(132). instrucciones.
WORKING-STORAGE SECTION.
77 nombre de datos PIC XX.
LINKAGE SECTION.

PROCEDURE DIVISION. .6/


DECLARATIVES
END DECLARATIVES.
proceso principal SECTION.
párrafo principal.
instrucciones COBOL.
STOP RUN.

Figura 1. Ejemplo de la Estructura del Programa


COBOL/400

Formato del Archivo Fuente


La longitud de registro estándar de los archivos fuente es de 92 caracteres. Estos
92 caracteres están compuestos por un número de secuencia de 6 caracteres, un
área de fecha de última modificación de 6 caracteres y un campo de datos de 80
caracteres.

El compilador COBOL/400 soporta una longitud de registro adicional de 102; al


final del registro (posiciones 92-102), se coloca un campo de 10 caracteres que
contiene información suplementaria. El compilador COBOL no utiliza esta infor-
mación, pero se coloca en el extremo derecho del listado del compilador. El
usuario es el responsable de situar la información en este campo. Si quiere utilizar
este campo adicional, cree un archivo fuente con una longitud de registro de 102.

IBM proporciona un archivo fuente en el que se pueden almacenar registros fuente


si es que no desea crear su propio archivo. Este archivo, denominado QLBLSRC,
se encuentra en la biblioteca QGPL y su longitud de registro es de 92 caracteres.

10 COBOL/400 Guía del usuario


Instalación del Fuente Mediante el SEU
El SEU proporciona unos formatos de pantalla especiales para COBOL. Corres-
ponden al Formulario de Codificación COBOL que se ha diseñado para facilitar la
instalación del programa fuente COBOL. La Figura 2 muestra un formato de pan-
talla, la relación entre los encabezamientos en el Formulario de Codificación
COBOL y las etiquetas de la pantalla; también indica el lugar en el que se debe
entrar el código fuente.
Columnas. . . : 1 71 Editar QGPL/QLBLSRC
SEU==> XMPLE1
┌──5 FMT CB ......-A+++B+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
El SEU puede visualizar una│ \\\\\\\\\\\\\\\ Principio de datos \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
línea de formato para │ ððð1.ðð ENVIRONMENT DIVISION.
ayudar a hacer cambios %─┘ ððð2.ðð CONFIGURATION SECTION.
o teclear entradas, ððð3.ðð SOURCE-COMPUTER. IBM-AS4ðð.
posición por posición. ððð4.ðð INPUT-OUTPUT SECTION.
ððð5.ðð FILE-CONTROL.
'''''''
ððð6.ðð SELECT FILE-1 ASSIGN TO DATABASE-MASTER.
ððð7.ðð SELECT FILE-2 ASSIGN TO DATABASE-MASTER.
\\\\\\\\\\\\\\\\\\ Fin de datos \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Tipo de solicitud . CB Número de secuencia . ððð5.ðð

Continuación

Área-A Área-B
FILE -CONTROL.

F3=Salir F4=Solicitud F5=Renovar F11=Registro anterior


F12=Cancelar F23=Seleccionar solicitud F24=Más teclas

Figura 2. Formato de Pantalla SEU

Para obtener una descripción completa sobre la instalación del programa mediante
el SEU, consulte el manual SEU Guía del Usuario y Manual de Consulta.

Utilización en el SEU del Comprobador de Sintaxis COBOL


Para utilizar el comprobador de sintaxis COBOL en el SEU, especifique el pará-
metro TYPE(CBL) del mandato STRSEU. El comprobador de sintaxis COBOL
comprueba cada línea en busca de errores mientras introduce líneas nuevas o
cambia líneas existentes. Se identifican las instrucciones fuente incorrectas y se
visualizan mensajes de error, lo que permite corregir los errores antes de compilar
el programa. Puesto que el comprobador de sintaxis COBOL sólo comprueba una
instrucción a la vez, independientemente de las instrucciones que la preceden o la
siguen, sólo pueden detectarse los errores de sintaxis dentro de los datos fuente.
No se detectan errores interrelacionales como por ejemplo los nombres no defi-
nidos y las referencias incorrectas dirigidas a nombres. El compilador COBOL
detecta estos errores cuando se compila el programa.

Cada vez que se entra o modifica una línea fuente, se puede comprobar la sintaxis
de 496 líneas de código fuente como una unidad. La longitud de una sola unidad
de comprobación de sintaxis viene determinada por la ampliación de una línea
entrada o modificada:
Una unidad de comprobación de sintaxis se extiende hacia el comienzo de un
miembro fuente hasta la primera línea fuente, o hasta que se encuentra una
línea que finalice en un punto.

Capítulo 2. Instalación del Programa 11


Una unidad de comprobación se extiende hacia el final del miembro fuente
hasta la última línea fuente, o hasta que se encuentra una línea que finalice en
punto.
Si esta unidad tiene más de 496 líneas fuente (sin incluir las líneas de comen-
tarios) el sistema responde con un mensaje adecuado.
Si se produce un error en una unidad de comprobación de sintaxis, toda la unidad
se presenta en contraste invertido. El mensaje del final de la pantalla hace refe-
rencia al primer error de la unidad.

La comprobación de sintaxis se produce línea a línea mientras se introduce el


código fuente. Las líneas que constan de instrucciones incompletas generan men-
sajes de error. Estos mensajes desaparecen cuando se completan las instruc-
ciones, tal como sucede en el siguiente ejemplo:

ADD A
TO BCD.

Un mensaje de error se genera una vez que se especifica la primera línea y des-
aparece cuando se especifica la segunda línea, una vez completada la instrucción.
Una instrucción COBOL puede extenderse en un máximo de 496 líneas. Asi-
mismo, si una línea fuente se especifica o se modifica, puede comprobarse la sin-
taxis de hasta 496 líneas de códigos fuente como una unidad.

Las siguientes regulaciones se aplican a la comprobación de sintaxis de las fun-


ciones fuente COBOL:
Ÿ No se comprueba la sintaxis en el código fuente de una línea con un asterisco
(*) o una barra (/) en la columna 7. Un asterisco indica una línea de comenta-
rios; una barra inclinada indica una línea de comentarios y un salto de página.
Ÿ No se acepta ninguna opción del compilador durante la comprobación de sin-
taxis.
Por ejemplo, el comprobador de sintaxis acepta las comillas dobles o simples
como delimitadores no numéricos, siempre y cuando no se mezclen dentro de
una unidad de comprobación de sintaxis. El comprobador de sintaxis perma-
nece inactivo si el delimitador es el mismo que se especificará en el mandato
CRTCBLPGM para compilar instrucciones fuente COBOL o en la instrucción
PROCESS.
Ÿ La primera sentencia que sigue a cualquier encabezamiento de párrafo que se
lista a continuación debe empezar en la misma línea que el encabezamiento
del párrafo.
PROGRAM-ID.
AUTHOR.
INSTALLATION.
DATE-WRITTEN.
DATE-COMPILED.
SECURITY.
SOURCE-COMPUTER.
OBJECT-COMPUTER.
SPECIAL-NAMES.
Ÿ La sustitución especificada por las cláusulas CURRENCY y DECIMAL-POINT
del párrafo SPECIAL-NAMES no se aceptan durante la comprobación de sin-
taxis interactiva.

12 COBOL/400 Guía del usuario


Ÿ Cuando se utiliza la cláusula REPLACING Identificador-1 BY Identificador-2 de
la instrucción COPY y cuando alguno de los identificadores incluye modifi-
cación de referencias, SEU comprueba únicamente que los paréntesis coin-
cidan. Para obtener más información sobre la modificación de referencias,
consulte el Capítulo 11, “Consideraciones de Programación en COBOL/400”.

Sintaxis de las Instrucciones del Lenguaje de Consulta


Estructurada (SQL)
La sintaxis de las instrucciones SQL en un programa fuente COBOL es la
siguiente:

5 EXEC SQL ─instrucc. sql──END-EXEC.─────────────────────────────5%

Si el tipo de miembro del programa fuente es SQLCBL o CICSSQLCBL, cuando el


comprobador de sintaxis COBOL detecta una instrucción SQL, la instrucción se
pasa al comprobador de sintaxis SQL. Si se detecta un error, se devuelve un
mensaje.

Si se detecta una instrucción SQL y el tipo de miembro no es SQLCBL ni


CICSSQLCBL, se devuelve un mensaje COBOL que indica que una instrucción
COBOL es errónea.

Si hay errores en la instrucción SQL incluida además de errores en las anteriores


instrucciones COBOL, el mensaje de error SQL sólo se visualizará después de
corregir los errores COBOL anteriores.

Para obtener más información sobre las instrucciones SQL, consulte el manual
SQL/400* Manual de Consulta.

Sintaxis de las Instrucciones del Sistema de Control de


Información del Cliente (CICS)
La sintaxis de las instrucciones CICS incluidas de un programa fuente COBOL es
la siguiente:

5──EXEC CICS──instrucción-cics──END-EXEC.─────────────────────────────5%

Si el tipo de miembro del programa fuente es CICSCBL o CICSSQLCBL, cuando el


comprobador de sintaxis COBOL detecta una instrucción CICS, el comprobador de
sintaxis busca únicamente los errores de sintaxis elementales.

Si se detecta una instrucción CICS y el tipo de miembro no es CICSCBL ni


CICSSQLCBL, se devuelve un mensaje COBOL que indica que la instrucción
COBOL es errónea.

Para obtener más información sobre las instrucciones CICS/400 consulte la publi-
cación CICS/400 Application Programming Guide.

Capítulo 2. Instalación del Programa 13


14 COBOL/400 Guía del usuario
Capítulo 3. Compilación de un Programa COBOL/400
Es preciso compilar el programa fuente COBOL/400 para producir un programa
objeto que se pueda ejecutar. Esto se realiza con el mandato Crear Programa
COBOL (CRTCBLPGM). El resultado de la compilación es un programa objeto
COBOL y un listado.

Se pueden especificar diferentes opciones de compilador mediante el mandato


CRTCBLPGM, o utilizando la instrucción PROCESS en el propio programa. Cual-
quier opción especificada en la instrucción PROCESS prevalce sobre las opciones
correspondientes del mandato CRTCBLPGM. La instrucción PROCESS se trata
más adelante en el apartado “Uso de la Instrucción PROCESS para Especificar las
Opciones del Compilador” en la página 33.

┌───────────┐ ┌─────────┐
│ Programa │ │ Programa│
│ Fuente ├──────────5Compilador COBOL ─┬─────5│ objeto │
│ COBOL │ & & & │ │ COBOL │
└───────────┘ │ │ │ │ └─────────┘
│ │ 6 │
┌───────────┐ │ │ Sistema │
│ Archivos │ │ │ Operativo │ ┌────────────────────────┐
│ Descritos ├───────────┘ │ OS/4ðð └─────5│ Listado │
│ Externam. │ │ │ - Resumen de mandatos │
└───────────┘ │ │ - Opciones compilador │
& │ │ - Listado fuente │
│ │ │ - Utilización de verbos│
│ │ │ - Correl. Div. Datos │
┌─────┴─────┐ │ │ - Mensajes FIPS │
│ DDS para │ ┌──────┴─┐ │ - Mensajes SAA │
│ Archivos │ │ Copiar │ │ - Referencia Cruzada │
│ Descritos │ │ Texto │ │ - Mensajes │
│ Externam. │ │ Fuente │ └────────────────────────┘
└───────────┘ └────────┘

Durante la compilación, el compilador comprueba tanto la sintaxis del programa


fuente COBOL línea a línea como las relaciones entre líneas.

Utilización del Mandato Crear Programa COBOL (CRTCBLPGM)


Para compilar un programa fuente COBOL/400 a un programa objeto, debe entrar
el mandato CRTCBLPGM. Este mandato llama al compilador COBOL/400. Se
puede utilizar el mandato CRTCBLPGM interactivamente o en trabajos por lotes, o
bien desde otros programas del sistema AS/400.

Nota de Programación: El número de entradas de la Tabla de Definición de


Objetos (ODT) y la cantidad de almacenamiento que necesita un programa
COBOL, varían según la cantidad y tipo de instrucciones COBOL que se utilicen en
el programa. La combinación de estos factores puede provocar un aumento de los
límites del tamaño interno del AS/400 para el programa. Si se produce esta
anomalía, utilice la opción *NOUNREF del parámetro GENOPT. Si el problema
persiste, el programa debe escribirse de nuevo.

 Copyright IBM Corp. 1994 15


Cuando se especifica la opción *NOUNREF, sólo se definen los nombres que
estén referenciados o que sean necesarios para la estructuración de datos. Esta
opción es útil cuando el programa contiene muchos identificadores sin referencia.

Si no se ha especificado CBL como el tipo de miembro fuente, el compilador emite


un aviso.

Si se utiliza la instrucción COPY de Formato 2 en el programa para acceder a los


archivos descritos externamente, el sistema operativo proporciona información al
programa referente a dichos archivos.

Si el compilador COBOL se detiene, se emite el mensaje LBL9001


Compilación anómala. Programa no creado.
Se puede utilizar un programa de lenguaje de control que puede supervisar esta
excepción utilizando el mandato Supervisar Mensaje (MONMSG).

Utilización de las Pantallas de Solicitud CRTCBLPGM


Para introducir el mandato CRTCBLPGM desde las pantallas de solicitud
CRTCBLPGM, escriba CRTCBLPGM y pulse F4 (Solicitud) para que aparezca la
primera pantalla. Los parámetros y opciones se describen a medida que aparecen
por pantalla, de la página 18 a la 28. Los valores por omisión, que aparecen sub-
rayados, se definen en primer lugar.

Cada parámetro de esta pantalla muestra un valor por omisión. Desplace el cursor
más allá de los ítems en los que desee aplicar los valores por omisión. Escriba
encima de cualquier ítem para establecer los distintos valores u opciones. Si no
está seguro acerca del valor del parámetro, teclee un interrogante (?) en la
primera posición del campo y pulse Intro o F4 (Solicitud), para recibir más infor-
mación detallada. El signo de interrogación debe ir seguido de un espacio en
blanco.

La Figura 3 muestra las pantallas de solicitud CRTCBLPGM. Cuando se visualiza


la primera pantalla de solicitud CRTCBLPGM, tan sólo aparecen los parámetros
necesarios que se han solicitado. Para visualizar los parámetros adicionales, pulse
F10. Observe la primera pantalla de la Figura 3. Para consultar el recordatorio de
los parámetros, tal como se muestra en la segunda y tercera pantalla de la
Figura 3, avance página.

16 COBOL/400 Guía del usuario


à Crear Programa COBOL (CRTCBLPGM)
ð
Escriba la elección, pulse Intro.

Programa . . . . . . . . . . . . \PGMID Nonbre, \PGMID


Biblioteca . . . . . . . . . . \CURLIB Nombre, \CURLIB
Archivo fuente . . . . . . . . . QLBLSRC Nombre
Biblioteca . . . . . . . . . . \LIBL Nombre, \LIBL, \CURLIB
Miembro fuente . . . . . . . . . \PGM Nombre, \PGM
Nivel de gravedad de generación. 29 ð-29
Texto 'descripción'. . . . . . . \SRCMBRTXT

Parámetros Adicionales

Opciones de listado fuente . . . \SOURCE, \NOSOURCE, \SRC...


+ para más valores
Opciones de generación . . . . . \NOLIST, \LIST, \NOXREF...
+ para más valores

Más...
F3=Salir F4=Solicitud F5=Renovar F12=Cancelar F13=Cómo util. esta pantalla
F24=Más teclas

á ñ
à Crear Programa COBOL (CRTCBLPGM)
ð
Escriba la elección, pulse Intro.

Opciones de conversión . . . . . \NOVARCHAR, \VARCHAR...

Límite de Mensaje:
Número de mensajes . . . . . . \NOMAX 1-9999, \NOMAX
Gravedad límite de mensaje . . 29 ð-29
Imprimir archivo . . . . . . . . QSYSPRT Nombre
Biblioteca . . . . . . . . . . \LIBL Nombre, \LIBL, \CURLIB
Señalización FIPS. . . . . . . .
+ para más valores
Señalización SAA . . . . . . . . \NOFLAG \NOFLAG, \FLAG
Opciones de pantalla ampliada. . \DFRWRT, \NODFRWRT...
+ para más valores
Gravedad de señalización . . . . ð ð-99
Sustituir programa . . . . . . . \YES \NO, \YES
Release destino. . . . . . . . . \CURRENT \CURRENT, \PRV, V2R1Mð...
Perfil usuario . . . . . . . . . \USER \USER, \OWNER
Más...
F3=Salir F4=Solicitud F5=Renovar F12=Cancelar F13=Cómo util. esta pantalla
F24=Más teclas

á ñ
à Crear Programa COBOL (CRTCBLPGM)
ð
Escriba la elección, pulse Intro.

Autorización . . . . . . . . . . \LIBCRTAUT Nombre, \LIBCRTAUT, \ALL...


Vuelco depuración compilador:
1 1-65535, \
65535 1-65535
Vuelco texto intermedio. . . . . ð ð-31

Final
F3=Salir F4=Solicitud F5=Renovar F12=Cancelar F13=Cómo util. esta pantalla
F24=Más teclas

á ñ
Figura 3. Pantallas de Solicitud CRTCBLPGM

Capítulo 3. Compilación de un Programa 17


Parámetros de los Mandatos CRTCBLPGM
A continuación se muestra una descripción de los parámetros para el mandato CRTCBLPGM. Primero se
definen los valores por omisión que están subrayados para su identificación. Los parámetros y opciones
se describen en el orden en que aparecen en la pantalla de solicitud.

Todos los nombres de objetos especificados para el mandato CRTCBLPGM deben respetar los convenios
de denominación de AS/400: deben ser nombres básicos, de 10 caracteres de longitud, estar com-
puestos por caracteres alfanuméricos, el primero de los cuales debe ser alfabético; o bien pueden ser
nombres entrecomillados de 8 caracteres de longitud.

Si desea relacionar estas descripciones de parámetros con el diagrama de sintaxis CRTCBLPGM, con-
sulte la Figura 4 en la página 30.
QLBLSRC
Especifica que el archivo fuente,
Parámetro PGM:
QLBLSRC, contiene el fuente COBOL a
Especifica el nombre del programa así como
compilar.
el nombre de biblioteca para el objeto pro-
grama COBOL que se está creando. Los nombre-archivo-fuente
valores posibles son: Entre el nombre del archivo fuente que
contiene el fuente COBOL que se debe
*PGMID
compilar. Este archivo fuente debe tener
El nombre del objeto programa se obtiene
92 caracteres de longitud de registro.
del párrafo PROGRAM-ID del programa
fuente COBOL. Los valores posibles de la biblioteca son:

nombre-programa *LIBL
Entre un nombre para identificar el pro- Si no especifica ningún nombre de biblio-
grama COBOL compilado. Si especifica teca, el sistema busca en la lista de biblio-
un nombre de programa para este pará- tecas la biblioteca en la que se ubica el
metro, y la compilación se ejecuta por archivo fuente.
lotes, el primer programa del trabajo por
*CURLIB
lotes utilizará este nombre; cualquier otro
Se utiliza la biblioteca actual. Si no ha
programa utilizará el nombre especificado
asignado una biblioteca como biblioteca
en el párrafo PROGRAM-ID del programa
actual, se utiliza QGPL.
fuente.

Los posibles valores de la biblioteca:


nombre-biblioteca
Entre el nombre de la biblioteca que con-
*CURLIB tiene el archivo fuente.
Si no especifica un nombre de biblioteca,
Parámetro SRCMBR:
se utilizará la biblioteca actual. Si no ha
Especifica el nombre del miembro que con-
asignado una biblioteca como biblioteca
tiene el fuente COBOL que se debe compilar.
actual, se utiliza QGPL.
Este parámetro sólo se puede especificar si el
nombre-biblioteca archivo fuente que se referencia en el pará-
Entre el nombre de la biblioteca que metro SRCFILE es un archivo de base de
deberá contener el objeto programa datos: Los valores posibles son:
creado.
*PGM
Parámetro SRCFILE: Si ha especificado un nombre de pro-
Especifica el nombre del archivo fuente que grama para el parámetro PGM, el compi-
contiene el fuente COBOL a compilar. Los lador busca el programa fuente en un
valores posibles son: miembro que tenga el mismo nombre que
el programa, y crea un programa objeto
con el mismo nombre que el programa y
miembro.

18 COBOL/400 Guía del usuario


Si no ha especificado ningún nombre de descripción-texto
programa para el parámetro PGM, el com- Introduzca el texto que describe bre-
pilador busca el programa fuente en el vemente el programa y sus funciones. La
primer miembro del archivo fuente de la longitud del texto no puede superar los 50
base de datos, y crea un programa objeto caracteres y debe ir entre comillas
que utiliza el nombre especificado en el simples. Las comillas simples no forman
párrafo PROGRAM-ID. parte de la serie de 50 caracteres.

nombre-miembro-archivo-fuente Parámetro OPTION:


Entre el nombre del miembro que con- Especifica las opciones que se deben utilizar
tiene el fuente COBOL. cuando se compila el fuente COBOL. Los
valores posibles son:
Parámetro GENLVL:
Especifica el nivel de gravedad que determina *SOURCE o *SRC
si un objeto programa se crea. El nivel de El compilador produce un listado fuente
gravedad se corresponde al nivel de gravedad compuesto por las las entradas fuente
de los mensajes que se han producido COBOL y por los mensajes de error en
durante la compilación del programa. Si el tiempo de compilación.
nivel de gravedad de los mensajes de error es
*NOSOURCE o *NOSRC
mayor que el valor que ha especificado, no se
El compilador no produce la parte fuente
crea ningún objeto programa. Por ejemplo, si
del listado. Si no se necesita un listado
especifica 19 para este parámetro, no se
fuente, utilice esta opción, ya que de este
creará ningún objeto programa si el nivel de
modo la compilación se efectuará con
gravedad de alguno de los mensajes es 20 o
más rapidez.
mayor.
Los valores posibles son:
*NOXREF
29 Si se produce un error con un nivel de
El compilador no produce un listado de
gravedad mayor que 29, no se creará
referencias cruzadas para el programa
ningún objeto programa.
fuente.
Nivel-gravedad
*XREF
Especifique un número de uno o dos
El compilador produce un listado de refe-
dígitos del 0 al 29. Si se produce un error
rencias cruzadas para el programa fuente.
con un nivel de gravedad mayor que este
nivel, no se creará ningún objeto pro-
grama.
*GEN
Parámetro TEXT: El compilador crea un objeto programa
Permite introducir el texto que describe bre- una vez compilado el programa.
vemente el programa y su función.
*NOGEN
*SRCMBRTXT El compilador no crea un objeto programa
Utilice el mismo texto para el objeto pro- una vez compilado el programa. Especi-
grama que describe el miembro del fique esta opción si sólo desea obtener
archivo de base de datos que contiene el listados de error.
fuente COBOL. Si el fuente proviene de
un dispositivo o de un archivo incorpo-
rado, el especificar *SRCMBRTXT tiene el *NOSEQUENCE
mismo efecto que especificar *BLANK. Los números de referencia no se com-
prueban para errores de secuencia.
*BLANK
No se especifica ningún texto. *SEQUENCE
Los números de referencia se com-
prueban para errores de secuencia. Los

Capítulo 3. Compilación de un Programa 19


errores de secuencia no se producen si *QUOTE
se especifica la opción *LINENUMBER. Especifica que el delimitador comillas (")
se utiliza para literales no numéricos y
para literales booleanos. También especi-
*NOVBSUM fica que el valor de la constante figurativa
El número total de utilizaciones del verbo QUOTE posee el valor EBCDIC de una
no se imprime. comilla.

*VBSUM Nota: Los datos booleanos son una


El número total de utilizaciones del verbo categoría de ítems de datos que están
se imprime. limitados a valores 1 ó 0. Un literal
booleano está compuesto por caracteres
booleanos entrecomillados y precedidos
*NONUMBER por una B; por ejemplo: B"1".
Los números de secuencia del archivo *APOST
fuente se utilizan para los números de Especifica que el delimitador apóstro (')
referencia. se utiliza para literales no numéricos y
*NUMBER para literales booleanos. También especi-
Los números de secuencia suministrados fica que el valor de la constante figurativa
por el usuario (columnas 1 a 6) se utilizan QUOTE posee el valor EBCDIC de un
para números de referencia. apóstrofo.

*LINENUMBER
Los números de secuencia que el compi- *NOSECLVL
lador crea se utilizan para los números de No se lista un texto de mensaje de
referencia. Esta opción combina el código segundo nivel para esta compilación.
fuente del programa y el código fuente
introducido mediante instrucciones COPY *SECLVL
en una secuencia numerada consecuti- Se lista un texto de mensaje de segundo
vamente. Utilice esta opción si especifica nivel para esta compilación junto con el
la señalización FIPS (Federal Information texto de error de primer nivel.
Processing Standards) o la señalización Nota: Se imprime el texto de error de
SAA. * primer nivel cada vez que se
produce un error.

*NOMAP
El compilador no lista la correlación de *PRTCORR
División de Datos. El compilador inserta líneas de comenta-
*MAP rios en los listados del compilador que
El compilador lista la correlación de Divi- indican los ítems elementales que se han
sión de Datos. incluido como resultado de utilizar la frase
CORRESPONDING.

*NOPRTCORR
*NOOPTIONS El compilador no inserta líneas de comen-
No se listan las opciones en activo para tario en el listado del compilador cuando
esta compilación. se utiliza la frase CORRESPONDING.
*OPTIONS
Se listan las opciones en activo para esta
compilación. *NOSRCDBG
Esta opción determina el tipo de infor-
mación que se visualiza en la estación de
trabajo programable cuando se utiliza el
CoOperative Development

20 COBOL/400 Guía del usuario


Environment/400 para compilar programas No es posible especificar *SRCDBG y
COBOL. Véase la nota de la página 21 *LSTDBG a la vez. Especifique una de
para obtener más información. las dos.
El compilador no produce información de | Nota: Sólo es posible utilizar las
depuración a nivel de fuente. Si | opciones *NOSRCDBG,
*NOLSTDBG también está activa, el com- | *SRCDBG, *NOLSTDBG y
pilador tampoco produce información de | *LSTDBG si se utiliza el producto
error a nivel de fuente. | AD/Cycle CoOperative
| Development Environment/400
*SRCDBG
| para compilar los programas. Si
Esta opción determina el tipo de infor-
| especifica una de estas opciones
mación que se visualiza en la estación de
| o más, pero no tiene instalado el
trabajo programable cuando se utiliza el
| producto CODE/400, el compilador
CoOperative Development
| COBOL/400 no continuará el
Environment/400 para compilar programas
| proceso y emitirá un mensaje de
COBOL. Véase la nota de la página 21
| error. Para obtener más infor-
para obtener más información.
| mación acerca de estas opciones,
El programa produce tanto información de | consulte la publicación CODE
error como de depuración a nivel de | Debug Tool User's Guide and
fuente. | Reference, SC09-1622.
No es posible especificar *SRCDBG y
*LSTDBG juntos. Especifique una de las
*PRINT
dos.
El compilador produce un listado de spool.

*NOPRINT
*NOLSTDBG El listado no produce ningún listado de
Esta opción determina el tipo de infor- spool.
mación que se visualiza en la estación de
trabajo programable cuando se utiliza el Parámetro GENOPT:
CoOperative Development Especifica las opciones a utilizar cuando el
Environment/400 para compilar programas objeto programa se ha creado. Los listados
COBOL. Véase la nota de la página 21 podrían utilizarse si se produce algún error en
para obtener más información. COBOL. Los valores posibles son:

El compilador no permite ver el listado, la *NOLIST


información de error a nivel de fuente ni la No se lista ninguna IRP (representación
información de depuración a nivel de intermedia de programa), código
listado. hexadecimal asociado ni mensajes de
error.
*LSTDBG
Esta opción determina el tipo de infor- *LIST
mación que se visualiza en la estación de Se lista la IRP, sus códigos
trabajo programable cuando se utiliza el hexadecimales asociados y cualquier
CoOperative Development mensaje de error.
Environment/400 para compilar programas
COBOL. Véase la nota de la página 21
para obtener más información. *NOXREF
No produce un listado de referencias cru-
El compilador permite ver un listado, así
zadas de los objetos definidos en la IRP.
como información de depuración a nivel
de listado. Si *NOSRCDBG también está *XREF
activa, el compilador tampoco produce Produce un listado de referencias cru-
información de error a nivel de fuente. zadas de todos los objetos definidos en la
IRP.

Capítulo 3. Compilación de un Programa 21


Si se produce el subíndice cero, el
sistema operativo no permitirá su
*NOPATCH
utilización y emitirá el mensaje
No reserva un espacio en el programa
MCH0603.
compilado para un área de parche de pro-
grama.

*PATCH *UNREF
Reserva un espacio en el programa com- Incluye ítems de datos no referenciados
pilado para un área de parche de pro- en el programa compilado.
grama. El área de parche de programa
*NOUNREF
se puede utilizar para operaciones de
No incluye ítems de datos no referen-
depuración.
ciados en programas compilados. De
este modo, se reduce el número de
entradas ODT (tabla de definición de
*NODUMP
objetos) utilizadas, lo que permite la com-
No lista la plantilla del programa.
pilación de un programa más grande. Los
*DUMP ítems de datos no referenciados siguen
Lista la plantilla del programa. apareciendo en el listado de referencias
cruzadas que se ha producido a raíz de la
especificación de OPTION (*XREF).
*NOATR
No lista los atributos de un fuente IRP.
*NOOPTIMIZE
*ATR El compilador sólo realiza optimizaciones
Lista los atributos de un fuente IRP. estándar para el programa.

*OPTIMIZE
*RANGE El compilador intenta generar un pro-
En el tiempo de ejecución, el sistema veri- grama que opere de forma más eficiente y
fica que los subíndices se encuentren que utilice menos almacenamiento. Sin
dentro de los rangos correctos, pero no embargo, al especificar *OPTIMIZE el
verifica los rangos de los índices. Asi- tiempo necesario para compilar el pro-
mismo, comprueba las modificaciones de grama puede aumentar conside-
referencia y las operaciones de subserie rablemente.
de caracteres generadas por el compi-
lador.
*NODDSFILLER
*NORANGE Si no se encuentran campos coincidentes
No verifica los rangos en el tiempo de eje- mediante una instrucción COPY DDS, no
cución. se generará ninguna descripción de
Nota: La opción *RANGE genera un campo.
código para comprobar los rangos *DDSFILLER
subindexados. Por ejemplo, se Cuando no se encuentran campos coinci-
asegura de que el usuario no dentes mediante una instrucción COPY
intente acceder al elemento 21 de DDS, se genera siempre una descripción
una matriz de 20 elementos. de campo FILLER de carácter único "07
La opción *NORANGE no genera FILLER PIC X".
un código para comprobar los
rangos de subíndices.
*NOSYNC
Estas opciones no eliminan la
Se comprueba la sintaxis de la cláusula
comprobación del subíndice cero
SYNCHRONIZED.
realizada por el sistema operativo.

22 COBOL/400 Guía del usuario


*SYNC
La cláusula SYNCHRONIZED provoca la
*NOEXTACCDSP
alineación de un ítem elemental en un
El compilador no permite instrucciones
límite natural de almacenamiento.
ACCEPT o DISPLAY ampliadas.

*EXTACCDSP
*NOCRTF El compilador permite instrucciones
Los archivos que no están disponibles ACCEPT y DISPLAY ampliadas. Con-
durante una operación OPEN, no se sulte el Apéndice E del manual
crean dinámicamente. COBOL/400 Reference para obtener infor-
mación sobre los cambios en las listas de
*CRTF
palabras reservadas que se producen
Los archivos que no están disponibles
cuando se utiliza esta opción.
durante una operación OPEN se crean
| dinámicamente. Una vez creados, el
| archivo obtendrá la autorización del perfil
*NOINZDLT
| de trabajo. (Consulte la explicación de la
Los archivos relativos con acceso secuen-
instrucción OPEN en el manual
cial no se inicializan con registros supri-
COBOL/400 Reference para conocer
midos durante la operación CLOSE si los
mejor las condiciones bajo las que se
archivos se han abierto para OUTPUT.
pueden producir creaciones de archivos
Es decir, la cantidad de registros escritos
dinámicos.)
determinan el límite de registros. Las
Nota: La longitud máxima de los regis- operaciones OPEN subsiguientes sólo
tros de un archivo que se creará permiten acceder hasta el límite de regis-
dinámicamente es 32 766. tros.

*INZDLT
*NODUPKEYCHK Los archivos relativos con acceso secuen-
No comprueba las claves duplicadas de cial se inicializan con registros suprimidos
los archivos INDEXED. durante la operación CLOSE si los
archivos se han abierto para OUTPUT.
*DUPKEYCHK Los registros activos de los archivos no se
Comprueba las claves duplicadas de los verán afectados. En otras palabras, el
archivos INDEXED. (Consulte la expli- límite de registro se define como el
cación sobre la instrucción READ en el tamaño de archivo para ulteriores ope-
| manual COBOL/400 Reference para raciones de E/S.
| comprender mejor las condiciones bajo
las que se indica a un programa la exis-
| tencia de registros con claves duplicadas.) *NOBLK
| Aviso: Si se especifica esta opción, el El compilador permite bloquear sólo los
| rendimiento del compilador puede verse archivos de acceso SEQUENTIAL que no
| afectado. tengan una instrucción START.
Si se especifica una cláusula BLOCK
CONTAINS, esta cláusula se omite,
*STDERR excepto para los archivos de cinta.
Se utiliza el manejo de errores estándar.
Consulte el Capítulo 6, “Manejo de *BLK
Errores y Excepciones COBOL/400” en la Cuando se utilizan BLOCK CONTAINS, el
página 71 para obtener más información. compilador permite el bloqueo desde los
archivos de acceso DYNAMIC y
*NOSTDERR SEQUENTIAL con una instrucción
Se utiliza el método de manejo de errores START. Para los archivos RELATIVE que
de la Versión 1, Releases 1 y 2. se han abierto para operaciones de
salida, no está permitido el bloqueo.

Capítulo 3. Compilación de un Programa 23


La cláusula BLOCK CONTAINS controla *NOVARCHAR
el número de registros que se deben blo- Los campos de longitud variable se
quear. omiten y se declaran como campos
FILLER.
Cuando no se especifica ninguna cláusula
BLOCK CONTAINS, el compilador permite *VARCHAR
sólo bloquear archivos de acceso Los campos de longitud variable se
SEQUENTIAL que no tengan una instruc- declaran como ítems de grupo de longitud
ción START. El sistema operativo deter- fija y son accesibles para el programa.
mina la cantidad de registros que se Para obtener más información acerca de
deben bloquear. los campos de longitud variable, consulte
el apartado “Declaración de Ítems de
Datos utilizando Tipos de Datos de
*STDINZ CVTOPT” en la página 137.
El compilador inicializa los ítems de datos
del usuario a los valores por omisión del
sistema, siempre y cuando no dependan *NODATETIME
de una cláusula VALUE. Los tipos de datos de fecha, hora e indi-
cación horaria se omiten y se declaran
*NOSTDINZ
campos FILLER.
Para los ítems de usuario que no tengan
una cláusula VALUE, el compilador no *DATETIME
inicializa los ítems de datos a los valores Los tipos de datos de fecha, hora e indi-
por omisión del sistema. cación horaria se declaran campos de lon-
gitud variable y son accesibles para el
programa.
*FS21DUPKY
El compilador informa de un estado de
archivo 21 cuando se procesa un archivo *NOGRAPHIC
indexado con claves duplicadas en moda- Los tipos de datos DBCS gráficos se
lidad dinámica o al azar, si el valor de la omiten y se declaran campos FILLER.
clave se cambia entre la instrucción
READ obligatoria y una instrucción *GRAPHIC
REWRITE o DELETE siguiente. Los tipos de datos DBCS gráficos de lon-
gitud variable se declaran campos
*NOFS21DUPKY alfanuméricos de longitud fija y son acce-
El compilador no informa de un archivo de sibles para el programa.
estado 21 cuando se procesa un archivo
Cuando la opción *VARCHAR también se
indexado con claves duplicadas en moda-
utiliza, los tipos de datos DBCS gráficos
lidad de acceso dinámica o al azar. Una
de longitud variable se declaran ítems de
instrucción REWRITE puede cambiar la
grupo y son accesibles para el programa.
clave de un registro.
Para obtener más información sobre los
Parámetro CVTOPT: tipos de datos DBCS gráficos, consulte el
Especifica cómo maneja el compilador los apartado “Campos Gráficos DBCS” en la
tipos de datos SAA de tiempo, fecha e indi- página 139.
cación horaria, así como los campos de
Parámetro MSGLMT:
caracteres de longitud variable que se han
Controla la compilación indicando el número
pasado desde archivos descritos exter-
máximo de mensajes de un nivel de gravedad
namente hasta el programa del usuario a
de error determinado que pueden ocurrir
través de COPY DDS. Los valores posibles
antes de que se detenga la compilación.
son:
Por ejemplo, es posible detener la compi-
lación si se producen más de tres errores con
un nivel de gravedad 20 o superior. En este

24 COBOL/400 Guía del usuario


ejemplo, se especificaría 3 como el número que contenga un registro de longitud inferior a
máximo de mensajes de error, y 20 para el 132, la información se pierde.
nivel máximo de gravedad de error. Si se pro-
Los valores posibles son:
ducen tres errores con un nivel de gravedad
20 o superior, la compilación continúa, pero QSYSPRT
cuando se produce un cuarto, la compilación Si no se especifica un nombre de archivo,
se detiene automáticamente. Si la cantidad el listado del compilador se dirige a
máxima de mensajes de error no se supera ni QSYSPRT, que es un archivo suminis-
se iguala, la compilación continúa indepen- trado por IBM.
dientemente de la cantidad de errores produ-
cidos. nombre-archivo
Entre el nombre del archivo al que se
límite-mensaje dirige el listado del compilador.
Los posibles valores para el número
máximo de mensajes de error son: Los valores posibles de la biblioteca son:

*NOMAX *LIBL
La compilación se completa con nor- Si no se especifica un nombre de biblio-
malidad independientemente del teca, el sistema busca en la lista de biblio-
número de errores producidos. tecas *LIBL, para encontrar la biblioteca
en la que se encuentra el archivo.
1-9999
La compilación se detiene si el *CURLIB
número de errores del nivel de gra- Se utiliza la biblioteca actual. Si no ha
vedad especificado supera la cantidad asignado la biblioteca como biblioteca
especificada por el usuario. Si la can- actual, se utiliza QGPL.
tidad máxima de mensajes de error no nombre-biblioteca
se supera ni se iguala, la compilación Introduzca el nombre de la biblioteca en la
continúa independientemente de la que se encuentra el archivo.
cantidad de errores producidos.
Parámetro FLAGSTD:
gravedad-mensaje Especifica las opciones de la señalización
Los posibles valores para el nivel máximo FIPS. (Seleccione la opción *LINENUMBER
de gravedad de error son: para asegurarse de que los números de refe-
29 La compilación se detiene si la can- rencia que se utilizan en los mensajes FIPS
tidad de errores con un nivel de gra- sean únicos.) Los valores posibles son:
vedad 29 o superior sobrepasa el *NOFIPS
número máximo de mensajes de error El programa fuente no dispone de la
especificado. señalización FIPS.
nivel-gravedad-máximo *MINIMUM
Especifique un número de uno o dos Señal FIPS para el subconjunto menor o
dígitos del 0 al 29. La compilación se mayor.
detiene si la cantidad de errores con
el nivel de gravedad especificado o *INTERMEDIATE
superior sobrepasa la cantidad Señal FIPS para el subconjunto inter-
máxima de mensajes de error especi- medio o mayor.
ficada por el usuario.
*HIGH
Parámetro PRTFILE: Señal FIPS para el subconjunto mayor.
Especifica el nombre del archivo al que se
dirige el listado del compilador, así como la
biblioteca en la que está ubicado el archivo. *NOSEG
El archivo debe tener un longitud mínima de No se señala con FIPS el módulo
registro de 132. Si se especifica un archivo opcional SEGMENTATION.

Capítulo 3. Compilación de un Programa 25


*SEG1 ción ACCEPT ampliada, o hasta que el
Señal FIPS para el módulo opcional almacenamiento intermedio se llene.
SEGMENTATION de nivel 1 y superior.
Si no se detecta una instrucción ACCEPT
*SEG2 ampliada antes de que el almacenamiento
Señal FIPS para el módulo opcional intermedio se llene, el contenido del alma-
SEGMENTATION de nivel 2. cenamiento intermedio aparece en pan-
talla. Cuando se detecta una instrucción
ACCEPT ampliada, el contenido actual del
*NODEB almacenamiento intermedio aparece en
El módulo opcional DEBUG no se señala pantalla.
con FIPS.
*NODFRWRT
*DEB1 Todas las instrucciones DISPLAY
Señal FIPS para el módulo opcional ampliadas se ejecutan a medida que se
DEBUG de nivel 1 y superior. detectan.

*DEB2
Señal FIPS para el módulo opcional *UNDSPCHR
DEBUG de nivel 2. Las instrucciones ACCEPT y DISPLAY
ampliadas manejan los caracteres que se
pueden visualizar y los que no.
*NOOBSOLETE
Los elementos de lenguaje obsoletos no *NOUNDSPCHR
se señalan. | Utilice esta opción cuando los datos que
| se deben visualizar contengan caracteres
*OBSOLETE | DBCS ampliados. Las instrucciones
Los elementos de lenguaje obsoletos se ACCEPT y DISPLAY ampliadas manejan
señalan. únicamente caracteres que se pueden
visualizar.
Parámetro SAAFLAG:
Especifica si se desea señalar las funciones Aunque el usuario debe utilizar esta
COBOL/400* que no están soportadas por opción para estaciones de pantallas
COBOL SAA. (Seleccione la opción conectadas a controladores 3174 y 3274,
*LINENUMBER para asegurarse de que los también puede utilizarla para estaciones
números de referencia que se utilizan en los de trabajo locales. Si no se utiliza esta
mensajes COBOL SAA sean únicos.) Los opción, los datos deben contener carac-
valores posibles son: teres visualizables. Si los datos contienen
valores menores que el hexadecimal 20,
*NOFLAG
los resultados obtenidos no serán los
No se realiza la señalización de COBOL
esperados, ya que aparecerán errores
SAA.
graves e incluso algún formato de pantalla
*FLAG erróneo.
Se realiza la señalización de COBOL
SAA.
*ACCUPDALL
Parámetro EXTDSPOPT: Todos los tipos de datos se visualizan
Especifica las opciones que se deben utilizar previamente en las instrucciones ACCEPT
para las instrucciones ACCEPT y DISPLAY ampliadas, independientemente de la
ampliadas para la estación de trabajo de E/S. existencia de la frase UPDATE.
Los valores posibles son:
*ACCUPDNE
*DFRWRT Tan sólo los datos de edición numéricos
Las instrucciones DISPLAY ampliadas se se visualizan previamente en las instruc-
mantienen en un almacenamiento inter- ciones ACCEPT ampliadas que no con-
medio hasta que se produce una instruc- tengan la frase UPDATE.

26 COBOL/400 Guía del usuario


Parámetro FLAG: *PRV
Especifica el nivel de seguridad mínimo de los El objeto debe utilizarse en el release
mensajes que se van a imprimir. Los valores previo con un nivel de modificación 0 del
posibles son: sistema operativo. También es posible
utilizar el objeto en un sistema con cual-
0 Todos los mensajes se imprimen.
quier release ulterior del sistema operativo
nivel-gravedad instalado.
Entre un número de uno o dos dígitos que
nivel-release
especifique el nivel de gravedad mínimo
Especifique el release en el formato
de los mensajes que se han de imprimir.
VxRxMx. El objeto puede utilizarse en un
Se listan los mensajes que tienen niveles
sistema con el release especificado o con
de seguridad del valor especificado o
cualquier release posterior del sistema
superior.
operativo instalado.
Parámetro REPLACE: Los valores válidos dependen de la
Especifica si se crea un objeto programa versión actual, release y del nivel de
nuevo cuando un objeto programa del mismo modificación, que varían con cada release
nombre ya existe en la misma biblioteca. Los nuevo.
valores posibles son:
Parámetro USRPRF:
*YES Especifica el perfil del usuario que trabajará
Se crea un nuevo objeto programa y cual- con el programa COBOL compilado. El perfil
quier objeto programa existente del mismo del propietario o del usuario de este programa
nombre de la biblioteca especificada se sirve para ejecutar el programa y para con-
traslada a la biblioteca QRPLOBJ. trolar los objetos que el programa puede uti-
*NO lizar (incluyendo la autorización que el
No se crea ningún objeto programa si un programa tiene para cada objeto). Este pará-
objeto programa del mismo nombre ya metro no se actualiza si el programa ya
existe en la biblioteca especificada. existe. Para cambiar el valor de USRPRF,
suprima el programa y vuelva a compilarlo uti-
Parámetro TGTRLS: lizando el valor correcto.
Especifica el release del sistema operativo en
Los valores posibles son:
el que el usuario pretende utilizar el objeto
que se está creando. Se puede especificar *USER
un nivel de release exacto en el formato El perfil de usuario del usuario de este
VxRxMx, donde Vx es la versión, Rx el programa se utiliza cuando se ejecuta el
release y Mx el nivel de modificación. Por programa.
ejemplo, V2R2M0 es versión 2, release 2 y
nivel de modificación 0. *OWNER
El perfil de usuario del propietario del pro-
Nota: Para utilizar el objeto en el sistema grama y del usuario se utilizan cuando se
destino, es preciso guardar el objeto ejecuta el programa. Los conjuntos de
con el nivel de release de destino autorizaciones para objetos en los dos
especificado en el mandato de perfiles de usuario sirven para encontrar y
creación y a continuación restaurarlo acceder a los objetos durante la ejecución
en el sistema destino. del programa. El usuario del programa
Los valores posibles son: será el propietario de cualquier objeto que
se cree durante el programa.
*CURRENT
El objeto debe utilizarse en el release del Nota: Especifique el parámetro USRPRF
sistema operativo que se ejecute en ese para reflejar los requisitos de
momento en el sistema. También es seguridad de la instalación. Los
posible utilizar el objeto en un sistema con servicios de seguridad disponibles
cualquier release posterior del sistema en el sistema AS/400 se describen
operativo instalado.

Capítulo 3. Compilación de un Programa 27


con todo detalle en el manual la gestión del objeto. El usuario puede
Seguridad Manual de Consulta. cambiar el objeto y realizar funciones
básicas, como por ejemplo ejecutar y
Parámetro AUT: depurar el objeto programa.
Especifica la autorización que se otorga a los
*USE
usuarios que carecen de una autorización
Proporciona autorización operacional de
específica para el objeto programa, que no
objeto y autorización de lectura, así como
están en la lista de autorizaciones o que su
autorización para efectuar operaciones
grupo no tiene autorización específica para el
básicas en el objeto programa, como por
objeto programa. Es posible alterar la autori-
ejemplo ejecutar el programa. Se avisa al
zación de todos los usuarios, o sólo de usua-
usuario antes de que el objeto se modi-
rios específicos, una vez creado el objeto del
fique.
programa utilizando los mandatos
GRTOBJAUT (Autorización de Objeto Otor- *EXCLUDE
gado) o RVKOBJAUT (Autorización de Objeto El usuario no tiene acceso al objeto pro-
Revocado). grama.
Los posibles valores son: nombre-lista-autorización
Entre el nombre de una lista de
*LIBCRTAUT
autoridades de usuarios y autorizaciones
La autorización pública del objeto se
a las que el programa se añade. El
obtiene de la palabra clave CRTAUT de la
objeto programa está protegido por esta
biblioteca destino (biblioteca que debe
lista de autorizaciones y la autorización
contener el objeto programa creado).
pública del objeto programa se establece
Este valor se determina cuando se crea el
a *AUTL. La lista de autorizaciones debe
objeto. Si el valor CRTAUT de la biblio-
estar en el sistema cuando se emite el
teca cambia después de que se haya
mandato CRTCBLPGM. Utilice el
creado el objeto del programa, el nuevo
mandato Crear Lista de Autorizaciones
valor NO afectará a los objetos existentes.
(CRTAUTL) para obtener una lista de
*ALL Autorizaciones propia.
Proporciona autorización a todas las ope-
Nota: Especifique el parámetro AUT
raciones del objeto programa, excepto a
para reflejar los requisitos de
aquéllas que hagan referencia al propie-
seguridad de la instalación. Los
tario o que estén controladas por la autori-
servicios de seguridad disponibles
zación de la gestión de listas de
en el sistema AS/400 se describen
autorizaciones. El usuario puede con-
con detalle en el manual
trolar la existencia del objeto programa,
Seguridad Manual de Consulta.
especificar su seguridad, modificarla, así
como efectuar cualquier tipo de operación,
Parámetro DUMP:
pero no puede traspasar su título de pro-
Sistema de ayuda de depuración COBOL/400
piedad.
de IBM para el personal de servicio de IBM.
*CHANGE
Parámetro ITDUMP (n):
Proporciona a todos los datos autorización
Ayuda de depuración IBM proporcionada para
para poder realizar todo tipo de ope-
el personal de servicio de IBM. Este pará-
raciones en el objeto programa, excepto
metro obliga al compilador a volcar el texto
aquéllas que estén restringidas para el
interno en determinados momentos durante la
propietario o controladas por la autori-
compilación del programa fuente.
zación del objeto y por la autorización de

28 COBOL/400 Guía del usuario


Entrada del Mandato CRTCBLPGM desde la Línea de Mandatos
Es posible entrar el mandato CRTCBLPGM desde la línea de mandatos. Teclee
CRTCBLPGM seguido de los parámetros adecuados para compilar el programa. Con-
sulte la Figura 4 en la página 30 para cerciorarse del tipo de sintaxis adecuada
que se ha de utilizar. Si no está seguro del significado de algunos parámetros,
consulte las descripciones referentes a parámetros y opciones que se encuentran
entre las páginas 18 y 28. Consulte los siguientes ejemplos para conocer la sin-
taxis correcta que es preciso utilizar para introducir el mandato CRTCBLPGM
desde la línea de mandatos.

Ejemplo 1
CRTCBLPGM SRCFILE(QGPL/QLBLSRC) SRCMBR(SAMPLE) SAAFLAG(\FLAG)

Fuente Parcial para el Miembro SAMPLE


ID DIVISION.
PROGRAM-ID. EXAMPLE.
El ejemplo anterior permite crear un programa COBOL/400 desde el miembro
fuente SAMPLE en el archivo QLBLSRC y en la biblioteca QGPL. El programa
resultante se llama EXAMPLE. Si se especifica *FLAG para el parámetro
SAAFLAG, se indica al compilador que debe identificar cualquier función que no
esté soportada por COBOL SAA. En este ejemplo se han utilizado todos los
valores por omisión de los parámetros a excepción de los parámetros SRCFILE,
SRCMBR y SAAFLAG.

Ejemplo 2
CRTCBLPGM PGM(TEST) SRCFILE(SOURCE1) CVTOPT(\GRAPHIC)
En el ejemplo anterior, el compilador busca el archivo SOURCE1 en la lista de
bibliotecas y busca el miembro llamado TEST dentro de ese mismo archivo. (El
valor del parámetro SRCMBR ha tomado el valor por omisión *PGM, lo que signi-
fica que ha de buscar un miembro que tenga el mismo nombre que el programa
que se ha de crear). El compilador crea un programa COBOL/400 denominado
TEST a partir del programa fuente que se ha encontrado en el miembro TEST del
archivo SOURCE1. El hecho de especificar *GRAPHIC para el parámetro
CVTOPT indica que si DDS contiene tipos de datos DBCS gráficos, el programa
COBOL deberá poder referenciarlos como campos alfanuméricos.

Entrada del Mandato CRTCBLPGM desde un Programa CL


Cuando se emite el mandato CRTCBLPGM desde un programa CL, se pueden uti-
lizar las expresiones de concatenación de todos los valores de los parámetros.
Consulte el manual CL Reference para obtener más información sobre las expre-
siones de concatenación. Consúltelo también para obtener una descripción de las
reglas de denominación de objetos OS/400, así como para consultar la descripción
de la sintaxis de mandatos OS/400.

Interfaz de Programación de Uso General

Se puede utilizar este mandato en QCMDEXC.

Fin de Interfaz de Programación de Uso General

Capítulo 3. Compilación de un Programa 29


Sintaxis del Mandato CRTCBLPGM
La Figura 4 muestra la sintaxis del mandato CRTCBLPGM.

55──CRTCBLPGM───PGM──(─┬─\CURLIB/──────┬─┬─\PGMID───────┬─)───────────────────5
└─nombre-bibl./─┘ └─nombre-prgm.─┘

5───────────┬────────────────────────────────────────────────────────────┬────5
└─SRCFILE──(──┬─\LIBL/────────┬──────┬─QLBLSRC──────────┬──)─┘
├─\CURLIB/──────┤ └─arch-fuente-nomb─┘
└─nombre-bibl./─┘

5───────────┬─────────────────────────────────────────┬───────────────────────5
└─SRCMBR──(─┬─\PGM────────────────────┬─)─┘
└─arch-fuente-miembr-nomb─┘

5───────────┬────────────────────────────┬───┬────────────────────────────┬───5
└─OPTION──(─detalle-opción─)─┘ └─GENOPT──(─detalle-genopt─)─┘

5───────────┬──────────────────────────────────────────────────────────────┬──5
└─CVTOPT────(─┬─\NOVARCHAR─┬──┬─\NODATETIME─┬──┬─\NOGRAPHIC─┬─)┘
└─\VARCHAR───┘ └─\DATETIME───┘ └─\GRAPHIC───┘

5───────────┬───────────────────────────────────────────────────────────┬─────5
└─MSGLMT──(─┬──\NOMAX─────────┬───┬──29─────────────────┬─)─┘
└──límit-mensaje──┘ └──gravedad-máx-nivel─┘

5───────────┬────────────────────────────────┬────────────────────────────────5
└─GENLVL──(─┬─29─────────────┬─)─┘
└─nivel-gravedad─┘

5───────────┬─────────────────────────────────────────────────┬───────────────5
└─PRTFILE──(─┬─\LIBL/─────────┬──┬─QSYSPRT───┬─)──┘
├─\CURLIB/───────┤ └─nomb-arch─┘
└─nombre-bibl./──┘

5───────────┬──────────────────────────────────────────────────────────────┬──5
└─FLAGSTD─(─┬\NOFIPS──────┬─┬\NOSEG┬─┬\NODEB┬─┬\NOOBSOLETE─┬─)─┘
├\MINIMUM─────┤ ├\SEG1─┤ ├\DEB1─┤ └\OBSOLETE───┘
├\INTERMEDIATE┤ └\SEG2─┘ └\DEB2─┘
└\HIGH────────┘

5───────────┬──────────────────────────┬──────────────────────────────────────5
└─SAAFLAG──(─┬─\NOFLAG─┬─)─┘
└─\FLAG───┘

5───────────┬───────────────────────────────────────────────────────────────┬─5
└─EXTDSPOPT─(─┬─\DFRWRT───┬───┬─\UNDSPCHR───┬──┬─\ACCUPDALL─┬─)─┘
└─\NODFRWRT─┘ └─\NOUNDSPCHR─┘ └─\ACCUPDNE──┘

5───────────┬──────────────────────────────┬──────┬─────────────────────┬─────5
└─FLAG──(─┬─ð──────────────┬─)─┘ └─REPLACE─(─┬─\YES─┬)─┘
└─nivel-gravedad─┘ └─\NO──┘

Figura 4 (Parte 1 de 5). Sintaxis del Mandatos CRTCBLPGM

30 COBOL/400 Guía del usuario


5───────────┬─────────────────────────────┬───────┬──────────────────────┬────5
└TGTRLS─(─┬─\CURRENT──────┬───┘ └─USRPRF─(─┬─\USER──┬)─┘
├─\PRV──────────┤ └─\OWNER─┘
└─nivel-release─┘

5───────────┬──────────────────────────────────────┬──────────────────────────5
└─AUT──(─┬─\LIBCRTAUT──────────────┬─)─┘
├─\ALL────────────────────┤
├─\CHANGE─────────────────┤
├─\USE────────────────────┤
├─\EXCLUDE────────────────┤
└─nomb-lista-autorización─┘

5───────────┬──────────────────────────────────────┬──────────────────────────5
└─TEXT──(─┬─\SRCMBRTXT───────────┬─)───┘
├─\BLANK───────────────┤
└─'descripción-text'───┘

5───────────┬───────────────────────────────────────────────────────────┬─────5
└─DUMP──(───instrucción-inicio───────instrución-final───)───┘

5───────────┬───────────────────────┬────────────────────────────────────────5%
└─ITDUMP─(─opc.-vuelco─)┘

┌───────────────────────────────────┐
│Job: B,I Pgm: B,I REXX: B,I Exec│
└───────────────────────────────────┘
Detalles de OPTION:

5──┬─\SRC──────┬─┬─\NOXREF─┬─┬─\GEN─────┬─┬─\NOSEQUENCE─┬─┬─\NOVBSUM────┬─────5
├─\SOURCE───┤ └─\XREF───┘ └─\NOGEN───┘ └─\SEQUENCE───┘ └─\VBSUM──────┘
├─\NOSRC────┤
└─\NOSOURCE─┘

5──┬─\NONUMBER───┬─┬─\NOMAP──┬─┬─\NOOPTIONS┬─┬───\QUOTE────┬─┬─\NOSECLVL───┬──5
├─\NUMBER─────┤ └─\MAP────┘ └─\OPTIONS──┘ └───\APOST────┘ └─\SECLVL─────┘
└─\LINENUMBER─┘

5──┬─\PRTCORR───┬─┬─\NOSRCDBG──┬─┬──\NOLSTDBG──┬─┬─\PRINT──────┬──────────────5
└─\NOPRTCORR─┘ └─\SRCDBG────┘ └──\LSTDBG────┘ └─\NOPRINT────┘

Detalles de GENOPT:

5──┬─\NOLIST─┬───┬─\NOXREF─┬───┬─\NOPATCH─┬───┬─\NODUMP─┬───┬─\NOATR─┬────────5
└─\LIST───┘ └─\XREF───┘ └─\PATCH───┘ └─\DUMP───┘ └─\ATR───┘

Figura 4 (Parte 2 de 5). Sintaxis del Mandatos CRTCBLPGM

5──┬─\RANGE───┬─┬\UNREF───┬─┬\NOOPTIMIZE─┬─┬\NODDSFILLER─┬─┬─\NOSYNC─┬────────5
└─\NORANGE─┘ └\NOUNREF─┘ └\OPTIMIZE───┘ └\DDSFILLER───┘ └─\SYNC───┘

Figura 4 (Parte 3 de 5). Sintaxis del Mandatos CRTCBLPGM

5──┬─\NOCRTF─┬───┬─\NODUPKEYCHK─┬───┬─\STDERR────┬───┬─\NOEXTACCDSP──┬────────5
└─\CRTF───┘ └─\DUPKEYCHK───┘ └─\NOSTDERR──┘ └─\EXTACCDSP────┘

Figura 4 (Parte 4 de 5). Sintaxis del Mandatos CRTCBLPGM

5──┬─\NOINZDLT──┬──┬──\NOBLK────┬───┬──\STDINZ───┬───┬─\FS21DUPKY────┬────────5
└─\INZDLT────┘ └──\BLK──────┘ └──\NOSTDINZ─┘ └─\NOFS21DUPKY──┘

Figura 4 (Parte 5 de 5). Sintaxis del Mandatos CRTCBLPGM

Capítulo 3. Compilación de un Programa 31


Compilación del Programa Fuente para el Release Anterior
El programa COBOL/400 en un sistema AS/400 se puede compilar usando el
release actual del sistema operativo OS/400 y restaurarlo en un sistema AS/400
que utilice un release anterior del sistema operativo.

El parámetro Target Release (TGTRLS) del mandato CRTCBLPGM permite especi-


ficar el nivel de release en el que desea utilizar el programa objeto. El parámetro
TGTRLS dispone de tres valores posibles: *CURRENT , *PRV y nivel-release:
Especifique *CURRENT si el programa objeto se debe utilizar en el release del
sistema operativo que en estos momentos se ejecuta en el sistema. Por
ejemplo, si V2R2M0 se ejecuta en el sistema, *CURRENT significa que el
usuario quiere utilizar el programa en un sistema que tiene instalado V2R2M0.
Este valor es el valor por omisión.
Especifique *PRV si el programa objeto se ha de utilizar en el release anterior
con un nivel de modificación 0 del sistema operativo. Por ejemplo, si V2R2M0
se ejecuta en el sistema, *PRV significa que el usuario quiere utilizar el pro-
grama en un sistema que tiene instalado V2R1M0.
Nivel-release permite especificar el nivel de release en el que se desea utilizar
el programa objeto. Los valores que se pueden introducir para este parámetro,
y que se modificarán en cada release nueva, dependen de la versión actual,
release y nivel de modificación.

Para obtener más información acerca del parámetro TGTRLS, vea la página 27.

Es preciso tener presente las siguientes limitaciones:


Ÿ El soporte que se compila para ser utilizado con el release anterior sólo está
disponible cuando se utiliza el parámetro TGTRLS del parámetro
CRTCBLPGM. Especifique *PRV o bien el nivel de release cuando se compile
el programa y guárdelo mediante los mandatos CL Salvar Objeto (SAVOBJ) o
Salvar Biblioteca (SAVLIB) para restaurarlo satisfactoriamente en el release
anterior del sistema operativo.
Ÿ Sólo puede utilizar el parámetro TGTRLS para programas COBOL creados en
el entorno System/38.
Ÿ Es posible restaurar un programa objeto o a un release anterior a un release
siguiente. No puede restaurar un programa objeto en un sistema que está por
debajo de más de un release. Es decir, sólo se proporciona un nivel anterior
de release de compatibilidad.
Ÿ No puede utilizar las funciones que son nuevas en el release actual del
sistema operativo en un programa que se ha compilado para ser utilizado en el
nivel de release anterior.
Ÿ Los programas deben volverse a convertir cuando se restauran al release ante-
rior; por lo tanto, no puede suprimir la observabilidad si los programas han de
volverse a convertir.
Ÿ No deben haber bibliotecas producto en la parte del sistema de la lista de
bibliotecas.

32 COBOL/400 Guía del usuario


Uso de la Instrucción PROCESS para Especificar las Opciones del
Compilador
La instrucción PROCESS es una parte opcional del programa fuente COBOL. La
instrucción PROCESS se puede utilizar para especificar las opciones que nor-
malmente se especifican durante la compilación. Las opciones especificadas en la
instrucción PROCESS alteran temporalmente las opciones correspondientes espe-
cificadas en el mandato CL CRTCBLPGM.

El formato de la instrucción PROCESS es la siguiente:

Formato

┌─────────┐
6 │
55───PROCESS────opción-1──┴─────┬─────┬────────────────────────────────5%
└─ . ─┘

Se aplican las siguientes reglas:


Ÿ La instrucción PROCESS debe colocarse antes de la primera instrucción
fuente del programa COBOL precediendo inmediatamente al encabezamiento
IDENTIFICATION DIVISION.
Ÿ La instrucción empieza con la palabra PROCESS. Las opciones pueden apa-
recer en más de una línea; sin embargo, sólo la primera línea puede contener
la palabra PROCESS.
Ÿ La palabra PROCESS y todas las opciones deben aparecer entre las posi-
ciones 8 y 72. La posición 7 debe estar en blanco. Las posiciones restantes
pueden utilizarse como en las instrucciones fuente COBOL: de la 1 a la 6 para
números de secuencia, y de la 73 a la 80 para propósitos de identificación.
Ÿ Las opciones deben estar separadas por espacios en blanco y/o comas.
Ÿ Las opciones pueden aparecer en cualquier orden. Si se especifican opciones
contradictorias, por ejemplo, LIST y NOLIST, tiene preferencia la última opción
encontrada.
Ÿ Si la palabra clave de la opción es correcta y la subopción es errónea, se
asume la subopción por omisión.

No todos los parámetros CRTCBLPGM tienen una opción correspondiente en la


sentencia PROCESS. Las tablas siguientes indican las opciones de la instrucción
PROCESS disponibles y los parámetros y opciones del mandato CRTCBLPGM
equivalentes. Los valores por omisión se subrayan. Las descripciones de las
opciones de instrucción PROCESS corresponden a las descripciones de las
opciones y parámetros que empiezan en la página 18.

Opción de Instrucción PROCESS CRTCBLPGM


Opción de parámetro GENLVL
GENLVL(nn) nn

Capítulo 3. Compilación de un Programa 33


Opciones de Instrucción PROCESS CRTCBLPGM
Opciones de parámetro OPTION
GEN *GEN
NOGEN *NOGEN
NOMAP *NOMAP
MAP *MAP
NONUMBER *NONUMBER
NUMBER *NUMBER
LINENUMBER *LINENUMBER
NOSECLVL *NOSECLVL
SECLVL *SECLVL
NOOPTIONS *NOOPTIONS
OPTIONS *OPTIONS
QUOTE *QUOTE
APOST *APOST
NOSEQUENCE *NOSEQUENCE
SEQUENCE *SEQUENCE
SOURCE (o SRC) *SOURCE (o *SRC)
NOSOURCE *NOSOURCE
(o NOSRC) (o *NOSRC)
NOVBSUM *NOVBSUM
VBSUM *VBSUM
NOXREF *NOXREF
XREF *XREF
PRTCORR *PRTCORR
NOPRTCORR *NOPRTCORR

34 COBOL/400 Guía del usuario


Opciones de Instrucción PROCESS CRTCBLPGM
Opciones de parámetro GENOPT
NOINZDLT *NOINZDLT
INZDLT *INZDLT
NOLIST *NOLIST
LIST *LIST
STDERR *STDERR
NOSTDERR *NOSTDERR
NODDSFILLER *NODDSFILLER
DDSFILLER *DDSFILLER
NOSYNC *NOSYNC
SYNC *SYNC
NOCRTF *NOCRTF
CRTF *CRTF
NODUPKEYCHK *NODUPKEYCHK
DUPKEYCHK *DUPKEYCHK
NOEXTACCDSP *NOEXTACCDSP
EXTACCDSP *EXTACCDSP
NOBLK *NOBLK
BLK *BLK
STDINZ *STDINZ
NOSTDINZ *NOSTDINZ
FS21DUPKEY *FS21DUPKY
NOFS21DUPKEY *NOFS21DUPKY
RANGE *RANGE
NORANGE *NORANGE
UNREF *UNREF
NOUNREF *NOUNREF

Opciones de Instrucción PROCESS CRTCBLPGM


Opciones de parámetro CVTOPT
NOVARCHAR *NOVARCHAR
VARCHAR *VARCHAR
NODATETIME *NODATETIME
DATETIME *DATETIME
NOCVTGRAPHIC *NOGRAPHIC
CVTGRAPHIC *GRAPHIC

Capítulo 3. Compilación de un Programa 35


Opciones de Instrucción PROCESS CRTCBLPGM
Opciones de parámetro FLAGSTD
NOFIPS *NOFIPS
MINIMUM *MINIMUM
INTERMEDIATE *INTERMEDIATE
HIGH *HIGH
NOSEG *NOSEG
SEG1 *SEG1
SEG2 *SEG2
NODEB *NODEB
DEB1 *DEB1
DEB2 *DEB2
NOOBSOLETE *NOOBSOLETE
OBSOLETE *OBSOLETE

Opciones de Instrucción PROCESS CRTCBLPGM


EXTDSPOPT(a b c)
Opciones de parámetro EXTDSPOPT
DFRWRT *DFRWRT
NODFRWRT *NODFRWRT
UNDSPCHR *UNDSPCHR
NOUNDSPCHR *NOUNDSPCHR
ACCUPDALL *ACCUPDALL
ACCUPDNE *ACCUPDNE

Opciones de Instrucción PROCESS CRTCBLPGM


Opciones de parámetro SAAFLAG
NOSAAFLAG *NOFLAG
SAAFLAG *FLAG

Opción de Instrucción PROCESS CRTCBLPGM


Opción de parámetro FLAG
FLAG(nn) nn

Opciones de Instrucción PROCESS CRTCBLPGM


NOFS9MTO0M no aplicable
FS9MTO0M
NOGRAPHIC no aplicable
GRAPHIC

FS9MTO0M cambia un estado de archivo 9M a un estado de archivo 0M.

36 COBOL/400 Guía del usuario


La opción GRAPHIC de la instrucción PROCESS está disponible para procesar
caracteres DBCS en literales DBCS. Consulte el Apéndice F, “Soporte del Juego
de Caracteres de Idiomas Internacionales de Doble Byte” en la página 355 para
obtener información acerca del soporte DBCS.

La opción EXTDSPOPT de la instrucción PROCESS debe codificarse con las


opciones entre paréntesis asociadas similares a la sintaxis FLAG(nn). Se puede
especificar más de una opción dentro de los paréntesis para la opción
EXTDSPOPT. Por ejemplo, para especificar DFRWRT y UNDSPCHR, escriba
EXTDSPOPT(DFRWRT UNDSPCHR)
También es correcto especificar EXTDSPOPT o EXTDSPOPT( ).

Cuando sólo se especifica EXTDSPOPT en la instrucción PROCESS, todos los


valores por omisión de las opciones adicionales están activas.

Si se especifica EXTDSPOPT( ), no tiene ninguna consecuencia para el programa.

Si se especifican opciones contradictorias, la última opción especificada altera tem-


poralmente a las otras.

Compilación de varios Programas


La instrucción PROCESS se puede utilizar para separar varios programas y/o sub-
programas que se han de compilar con una sola invocación del compilador. (Un
subprograma es un programa llamado que se combina con el programa de
llamada en tiempo de ejecución para producir una unidad de ejecución.) Cuando
se compilan programas múltiples, todas las opciones del compilador que se han
especificado en la instrucción del mandato CRTCBLPGM, amén de las opciones
por omisión y de las opciones especificadas en la última instrucción PROCESS
que precede al programa, estarán activas para la compilación del programa. Toda
la salida del compilador se dirige a los destinos especificados por la instrucción del
mandato CRTCBLPGM.

Todos los programas objeto se almacenan en la biblioteca especificada en el pará-


metro PGM. Si se especifica el nombre del programa para el parámetro PGM, el
primer programa del trabajo por lotes tiene ese nombre, y el resto de programas
utilizan el nombre especificado en el párrafo PROGRAM-ID del programa fuente.

Uso de COPY dentro de la Instrucción PROCESS


Puede utilizarse una instrucción COPY en el programa fuente siempre que pueda
utilizarse una serie de caracteres o un separador. Cada instrucción COPY debe ir
precedida por un espacio y seguida de un punto y un espacio. Para obtener más
información acerca de la instrucción COPY, consulte la sección “Instrucción COPY”
del manual COBOL/400 Reference.

La instrucción COPY Formato 1 puede utilizarse dentro de la instrucción


PROCESS para recuperar las opciones del compilador almacenadas previamente
en una biblioteca fuente e incluirlas en la instrucción COPY. COPY puede utili-
zarse para incluir las opciones que prevalcen sobre aquéllas que el compilador
especifica como valores por omisión. Cualquier opción de la instrucción
PROCESS puede recuperarse con la instrucción COPY.

Capítulo 3. Compilación de un Programa 37


Las opciones del compilador pueden indistintamente preceder y seguir a la instruc-
ción COPY dentro de la instrucción PROCESS. La última aparición detectada de
una opción prevalece sobre todas las apariciones precedentes de esa opción.

El ejemplo siguiente muestra el uso de la instrucción COPY dentro de la instruc-


ción PROCESS. La instrucción COPY debe ir seguida de un punto. Observe
también que, en este ejemplo, NOMAP prevalece sobre la opción correspondiente
en el miembro de la biblioteca:

ððððð1 PROCESS XREF MYPROG


ððððð2 COPY DEFLTS. MYPROG
MAP, SOURCE, LIST DEFLTS
ððððð4 NOMAP, FLAG(2ð) MYPROG
ðððð1ð IDENTIFICATION DIVISION. MYPROG

Explicación de la Salida del Compilador


La salida del compilador puede incluir:
Ÿ Un resumen de las opciones de mandatos
Ÿ Un listado de opciones: listado de las opciones activas para la compilación.
Utilice OPTION(*OPTIONS).
Ÿ Un listado fuente: listado de las instrucciones que se encuentran en el pro-
grama fuente. Utilice OPTION(*SOURCE o *SRC).
Ÿ Un listado de utilizaciones de verbos: listado de los verbos COBOL y fre-
cuencia de uso de cada uno de ellos. Utilice OPTION(*VBSUM).
Ÿ Una correlación de la División de Datos: glosario de la información generada
por compilador referente a los datos. Utilice OPTION(*MAP). También se
incluye una correlación de los nombres suministrados por el usuario respecto a
los nombres internos generados por el compilador.
Ÿ Señalización SAA: lista de las funciones del programa que no son portables a
otros entornos COBOL SAA. Utilice SAAFLAG(*FLAG).
Ÿ Mensajes FIPS: lista de mensajes para un conjunto COBOL FIPS, para cual-
quiera de los módulos opcionales, para todos los elementos de lenguaje
obsoletos o para una combinación de un subconjunto COBOL FIPS, módulos
opcionales y todos los elementos obsoletos. Consulte la información referente
al “parámetro FLAGSTD” de la página 25 para un mejor conocimiento de las
opciones específicas que están disponibles para la señalización FIPS.
Ÿ Un listado de referencias cruzadas. Utilice OPTION(*XREF).
Ÿ Mensajes del compilador (incluyendo las estadísticas de diagnóstico).
Ÿ Estadísticas de compilación.
Ÿ Un listado del programa generado en formato simbólico.
Ÿ Un programa objeto.

La presencia o ausencia de algunos de estos tipos de salidas del compilador viene


determinada por las opciones especificadas en la instrucción PROCESS o por los
mandatos CRTCBLPGM. El nivel de los mensajes de diagnóstico impresos
depende de la opción FLAG.

38 COBOL/400 Guía del usuario


Especificación del Formato del Listado
Una barra (/) en el área del indicador (columna 7) de una línea da como resultado
un salto de página del listado del programa fuente. La línea de comentarios de la
barra (/) se imprime en la primera línea de la página siguiente.

Ampliación de IBM

Si especifica la instrucción EJECT en el programa, la próxima instrucción fuente se


imprime en la parte superior de la página siguiente en el listado del compilador.
Esta instrucción puede escribirse en cualquier lugar del Área A o Área B y debe
ser la única instrucción en la línea.

La instrucción SKIP1/2/3 origina la inserción en el listado del compilador de unas


líneas en blanco. Una instrucción SKIP1/2/3 puede escribirse en cualquier lugar
del Área A o B. Debe ser la única instrucción de la línea.
Ÿ SKIP1 inserta una sola línea en blanco (doble espacio)
Ÿ SKIP2 inserta dos líneas en blanco (triple espacio).
Ÿ SKIP3 inserta tres líneas en blanco (espacio cuádruple)

Cada una de las instrucciones SKIP anteriores origina una sola inserción de una,
dos o tres líneas.

Una instrucción TITLE coloca un título en cada página indicada.

Las instrucciones fuente COBOL se pueden listar o suprimir de forma selectiva uti-
lizando las instrucciones *CONTROL, *CBL o COPY:
Ÿ *CONTROL NOSOURCE y *CBL NOSOURCE suprimen el listado de las ins-
trucciones fuente.
Ÿ *CONTROL SOURCE y *CBL SOURCE continúan el listado de las instruc-
ciones fuente.
Ÿ Una instrucción COPY que lleva la frase SUPPRESS suprime el listado de ins-
trucciones copiadas. Por su duración, esta instrucción prevalece sobre cual-
quier instrucción *CONTROL o *CBL. Si el miembro copiado contiene
instrucciones *CONTROL o *CBL, la última se ejecuta una vez cuando el
miembro COPY se ha procesado.

Consulte la publicación COBOL/400 Reference para obtener más información


sobre las instrucciones EJECT, SKIP1/2/3, *CONTROL, *CBL, COPY y TITLE.

Fin de Ampliación de IBM

Caracteres de Separación de la Hora


EL parámetro TIMSEP de los mandatos relacionados con el trabajo (por ejemplo
CHGJOB) especifica el carácter de separación de tiempo que se utiliza en las indi-
caciones de la hora que aparecen en los listados del compilador. Si el valor
TIMSEP no está, el valor del sistema QTIMSEP se utiliza por omisión.

Capítulo 3. Compilación de un Programa 39


Visualización del Listado del Compilador Utilizando el SEU
El Programa de Utilidad de Entrada Fuente (SEU) permite examinar el contenido
del listado del compilador en una cola de salida. Es posible revisar los resultados
de una compilación anterior y hacer a la vez los cambios necesarios en el código
fuente. La Figura 5 muestra una pantalla dividida del SEU que permite examinar
el listado de una estación de trabajo.

à ð
Columnas. . . : 1 71 Editar XMPLIB/QLBLSRC
SEU==> XMPLE
FMT CB ......-A+++B+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ðð14.ðð DATA DIVISION.
ðð15.ðð FILE SECTION.
ðð16.ðð FD FILE1
ðð17.ðð RECORD CONTAINS 56 CHARACTERS
ðð18.ðð LABEL RECORDS ARE OMITTED
ðð19.ðð DATA RECORD IS REB-1.
ðð2ð.ðð ð1 REC-1 PIC X(56).
_______________________________________________________________________________
Columnas . . . : 1 71 Examinar Archivo Spool . . : XMPLE
SEU==>
ðððð.5ð STMT
ðððð.51 \ 19 MSGID: LBL1327 SEVERITY: 3ð SEQNBR: ðð19ðð
ðððð.52 Mensaje . . . . : 'REB-1' no definido en el programa. Cláusula
ðððð.53 ignorada.
ðððð.54 \ \ \ \ \ F I N D E M E N S A J E S \ \
ðððð.55 Resumen de Mensajes
ðððð.56 Total Info(ð-4) Aviso(5-19) Error(2ð-29) Gravedad(3ð-39)

F6=Mover línea de división F19=Izquierda F2ð=Derecha


F21=Mandatos del sistema F24=Más teclas
Se ha encontrado error de sintaxis.
á ñ
Figura 5. Pantalla Dividida de Editar/Examinar del SEU

Al mismo tiempo que se examina el listado del compilador, se pueden corregir las
sentencias fuente que contengan errores. Para buscar errores, escriba F \ERR en
la línea de mandatos del SEU.

Para obtener información completa sobre cómo examinar un listado del compilador,
consulte el manual SEU Guía del Usuario y Manual de Consulta.

Programa y Listado Ejemplo


Las siguientes páginas muestran las opciones del compilador y el listado fuente
que el programa ejemplo ha producido. En el texto siguiente se incluyen las refe-
rencias a las tablas. Estas referencias están indicadas por la impresión de letras
en blanco en un fondo oscuro, por ejemplo (.Z/). Las letras invertidas del texto
corresponden a las letras encontradas en las tablas.

Resumen de Mandatos
Este resumen, que se obtiene después de la compilación, lista todas las opciones
especificadas en el mandato CRTCBLPGM. Consulte el apartado “Utilización del
Mandato Crear Programa COBOL (CRTCBLPGM)” en la página 15 para obtener
más información sobre las opciones definidas por el usuario.

40 COBOL/400 Guía del usuario


5763CB1 V3RðM5 ðð1ððð IBM SAA COBOL/4ðð TESTER/SAMPLE AS4ððSYS ð3/27/94 11:ð1:51 Página 1
Programa . . . . . . . . . . . . . . : SAMPLE
Biblioteca . . . . . . . . . . . . : TESTER
Archivo fuente . . . . . . . . . . . : QLBLSRC
Biblioteca . . . . . . . . . . . . : TESTER
Miembro fuente . . . . . . . . . . . : SAMPLE ð3/27/94 11:ð1:34
Nivel de gravedad de generación . . : 29
"Descripción" del texto. . . . . . . : \BLANK
Opciones de listado fuente . . . . . : \NONE
Opciones de generación . . . . . . . : \NONE
Opciones de conversión . . . . . . . : \NONE
Límite de mensaje:
Cantidad de mensajes.. . . . . . . : \NOMAX
Gravedad límite de mensaje . . . : 29
Imprimir archivo. . . . . . . . . . : QSYSPRT
Biblioteca . . . . . . . . . . . . : \LIBL
Señalización FIPS. . . . . . . . . . : \NOFIPS \NOSEG \NODEB \NOOBSOLETE
Señalización SAA . . . . . . . . . . : \NOFLAG
Opciones de visualización ampliada . :
Gravedad de señalización . . . . . . : ð
Sustituir programa . . . . . . . . . : \YES
Release de destino . . . . . . . . . : \CURRENT
Perfil de usuario. . . . . . . . . . : \USER
Autorización . . . . . . . . . . . . : \LIBCRTAUT
Compilador . . . . . . . . . . . . . : IBM SAA COBOL/4ðð

Figura 6. Listado de Resumen de Mandatos

Identificación de las Opciones Activas


Si se especifica, la instrucción PROCESS se imprime en primer lugar. La Figura 7
muestra una lista de todas las opciones activas para la compilación del programa
ejemplo: las opciones especificadas en el mandato CRTCBLPGM, una vez modifi-
cadas por la instrucción PROCESS. Las opciones del compilador se listan al
comienzo de cada salida del compilador cuando se especifica el parámetro
OPTIONS.

Capítulo 3. Compilación de un Programa 41


5763CB1 V3RðM5 ðð1ððð Fuente COBOL AS/4ðð TESTER/SAMPLE AS4ððSYS ð3/27/94 11:ð1:51 Página 2
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ððð1ðð PROCESS OPTIONS, SAAFLAG, SOURCE, MAP, XREF, ð3/27/94
2 ððð2ðð FLAG(ðð), MINIMUM, VBSUM.
Opciones del Compilador COBOL Activas
OPTIONS
SOURCE
XREF
MAP
VBSUM
NONUMBER
NOSEQUENCE
GEN
GENLVL(29)
FLAG( ð)
MINIMUM
NOSEG
NODEB
NOOBSOLETE
SAAFLAG
QUOTE
NOSECLVL
NOSRCDBG
NOLSTDBG
PRINT
PRTCORR
Opciones de Generación COBOL Activas
NOLIST
UNREF
RANGE
NOATR
NOXREF
NODUMP
NOPATCH
NOOPTIMIZE
NODDSFILLER
NOSYNC
NOCRTF
NODUPKEYCHK
STDERR
NOEXTACCDSP
NOINZDLT
NOFS9MTOðM
NOBLK
STDINZ
FS21DUPKY
Opciones de Conversión COBOL Activas
NOVARCHAR
NODATETIME
NOGRAPHIC

Figura 7. Lista de Opciones Activas

Listado Fuente
La Figura 8 muestra un listado fuente. Las instrucciones del programa fuente se
listan tal y como se someten. El fuente no se lista si se especifica la opción
NOSOURCE. Después de la página en la que aparece listado el párrafo
PROGRAM-ID, todas las páginas de salida del compilador tienen el nombre del
identificador de programa listado en el encabezamiento antes del nombre del
sistema.

42 COBOL/400 Guía del usuario


5763CB1 V3RðM5 ðð1ððð Fuente COBOL AS/4ðð TESTER/SAMPLE AS4ððSYS ð3/27/94 11:ð1:51 Página 4
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
.A/ .B/ .C/ .D/ .E/
3 ððð3ðð IDENTIFICATION DIVISION.
4 ððð4ðð PROGRAM-ID. SAMPLE.
5 ððð5ðð AUTHOR. PROGRAMMER NAME.
6 ððð6ðð INSTALLATION. COBOL DEVELOPMENT CENTRE.
7 ððð7ðð DATE-WRITTEN. 11/27/87.
8 ððð8ðð DATE-COMPILED. ð3/27/94 11:ð1:51 .
9 ððð9ðð ENVIRONMENT DIVISION.
1ð ðð1ððð CONFIGURATION SECTION.
11 ðð11ðð SOURCE-COMPUTER. IBM-AS4ðð. ð3/27/94
12 ðð12ðð OBJECT-COMPUTER. IBM-AS4ðð. ð3/27/94
13 ðð13ðð INPUT-OUTPUT SECTION.
14 ðð14ðð FILE-CONTROL.
15 ðð15ðð SELECT FILE-1 ASSIGN TO DISK-SAMPLE.
16 ðð16ðð DATA DIVISION.
17 ðð17ðð FILE SECTION.
18 ðð18ðð FD FILE-1
19 ðð19ðð LABEL RECORDS ARE STANDARD
2ð ðð2ððð RECORD CONTAINS 2ð CHARACTERS
21 ðð21ðð DATA RECORD IS RECORD-1.
22 ðð22ðð ð1 RECORD-1.
23 ðð23ðð ð2 FIELD-A PIC X(2ð).
24 ðð24ðð WORKING-STORAGE SECTION.
25 ðð25ðð ð1 FILLER.
26 ðð26ðð ð5 KOUNT PIC S9(2) COMP-3.
27 ðð27ðð ð5 LETTERS PIC X(26) VALUE "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
28 ðð28ðð ð5 ALPHA REDEFINES LETTERS
29 ðð29ðð PIC X(1) OCCURS 26 TIMES.
3ð ðð3ððð ð5 NUMBR PIC S9(2) COMP-3.
31 ðð31ðð ð5 DEPENDENTS PIC X(26) VALUE "ð1234ð1234ð1234ð1234ð1234ð".
32 ðð32ðð ð5 DEPEND REDEFINES DEPENDENTS
33 ðð33ðð PIC X(1) OCCURS 26 TIMES.
34 ðð34ðð COPY WRKRCD.
35 +ðððð1ð ð1 WORK-RECORD. WRKRCD
36 +ðððð2ð ð5 NAME-FIELD PIC X(1). WRKRCD
37 +ðððð3ð ð5 FILLER PIC X(1) VALUE SPACE. WRKRCD
38 +ðððð4ð ð5 RECORD-NO PIC S9(3). WRKRCD
39 +ðððð5ð ð5 FILLER PIC X(1) VALUE SPACE. WRKRCD
4ð +ðððð6ð ð5 LOCATION PIC A(3) VALUE "NYC". WRKRCD
41 +ðððð7ð ð5 FILLER PIC X(1) VALUE SPACE. WRKRCD
42 +ðððð8ð ð5 NO-OF-DEPENDENTS WRKRCD
43 +ðððð9ð PIC X(2). WRKRCD
44 +ððð1ðð ð5 FILLER PIC X(7) VALUE SPACES. WRKRCD
45 ðð35ðð 77 WORKPTR USAGE POINTER.
ðð36ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð37ðð\ EL SIGUIENTE PÁRRAFO ABRE EL ARCHIVO DE SALIDA QUE\
ðð38ðð\ HA DE CREARSE E INICIALIZA LOS CONTADORES \
ðð39ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
46 ðð4ððð PROCEDURE DIVISION.
ðð41ðð STEP-1.
47 ðð42ðð OPEN OUTPUT FILE-1.
48 ðð43ðð MOVE ZERO TO KOUNT, NUMBR.
ðð44ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð45ðð\ LOS 3 PÁRRAFOS SIGUIENTES CREAN INTERNAMENTE LOS \
ðð46ðð\ REGISTROS QUE HA DE CONTENER EL ARCHIVO, LOS \
ðð47ðð\ GRABA EN DISCO Y LOS VISUALIZA \
ðð48ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð49ðð STEP-2.
49 ðð5ððð ADD 1 TO KOUNT, NUMBR.
5ð ðð51ðð MOVE ALPHA (KOUNT) TO NAME-FIELD.
51 ðð52ðð MOVE DEPEND (KOUNT) TO NO-OF-DEPENDENTS.
52 ðð53ðð MOVE NUMBR TO RECORD-NO.
ðð54ðð STEP-3.
53 ðð55ðð DISPLAY WORK-RECORD.
54 ðð56ðð WRITE RECORD-1 FROM WORK-RECORD.
ðð57ðð STEP-4.

Figura 8 (Parte 1 de 2). Ejemplo de Listado Fuente COBOL/400

Capítulo 3. Compilación de un Programa 43


55 ðð58ðð PERFORM STEP-2 THRU STEP-3 UNTIL KOUNT IS EQUAL TO 26.
ðð59ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð6ððð\ EL SIGUIENTE PÁRRAFO CIERRA EL ARCHIVO ABIERTO \
ðð61ðð\ PARA SALIDA Y VUELVE A ABRIRLO PARA ENTRADA \
ðð62ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð63ðð STEP-5.
56 ðð64ðð CLOSE FILE-1.
57 ðð65ðð OPEN INPUT FILE-1.
ðð66ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð67ðð\ LOS SIGUIENTES PÁRRAFOS LEEN HACIA ATRÁS EL \
ðð68ðð\ ARCHIVO Y SELECCIONAN EMPLEADOS SIN SUBORDINADOS \
ðð69ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð7ððð STEP-6.
58 ðð71ðð READ FILE-1 RECORD INTO WORK-RECORD
59 ðð72ðð AT END GO TO STEP-8.
ðð73ðð STEP-7.
6ð ðð74ðð IF NO-OF-DEPENDENTS IS EQUAL TO "ð"
61 ðð75ðð MOVE "Z" TO NO-OF-DEPENDENTS.
62 ðð76ðð GO TO STEP-6.
ðð77ðð STEP-8.
63 ðð78ðð CLOSE FILE-1.
64 ðð79ðð STOP RUN.
\ \ \ \ \ F I N D E F U E N T E \ \ \ \ \

Figura 8 (Parte 2 de 2). Ejemplo de Listado Fuente COBOL/400

La Figura 8 muestra los siguientes campos:


.A/ Número de instrucción generado por el compilador: Los números aparecen
a la izquierda del listado del programa fuente. Estos números tienen refe-
rencia en todos los listados de salida del compilador excepto en los lis-
tados de mensajes FIPS. Un número de instrucción puede abarcar varias
líneas y una línea puede contener más de una instrucción.
.B/ Número de Referencia: Los números aparecen a la izquierda de las ins-
trucciones fuente. Los números que aparecen en este campo y el encabe-
zamiento de columnas (mostrado como SEQNBR en este listado) se
determinan mediante una opción especificada en el mandato CRTCBLPGM
o en la instrucción PROCESS, como se muestra en la tabla siguiente:

Opción Encabe- Origen


zamiento
NONUMBER SEQNBR Números de secuencia de archivo fuente
NUMBER NUMBER Números de secuencia estándar COBOL
LINENUMBER LINNBR Números se secuencia generados por el compilador

.C/ Columna del indicador de error de secuencia: Una S en esta columna


indica que la línea está fuera de la secuencia. La comprobación de
secuencia se realiza en el campo de número de secuencia sólo si se espe-
cifica la opción SEQUENCE.
.D/ Copyname: Copyname, tal como se especifica en la instrucción COPY
COBOL, se lista para todos los registros incluidos en el programa fuente
mediante esa instrucción COPY. Si se utiliza la frase
DDS-ALL-FORMATS, aparece el nombre <--ALL-FMTS debajo de
COPYNAME.
.E/ Campo cambiar/fecha: Aquí se lista la fecha en que se ha modificado la
línea por última vez.

44 COBOL/400 Guía del usuario


Utilización de Verbos mediante el Listado de la Cuenta
La Figura 9 muestra la lista alfabética que se produce con todos los verbos utili-
zados en el programa fuente. También se incluye un contador para saber cuántas
veces se ha utilizado un verbo. El listado se produce cuando se especifica la
opción VBSUM.

5763CB1 V3RðM5 ðð1ððð Uso de Verbos COBOL AS/4ðð por Recuento TESTER/SAMPLE AS4ððSYS ð3/27/94 11:ð1:51 Página 6
VERB COUNT
ADD 1
CLOSE 2
DISPLAY 1
GO 2
IF 1
MOVE 5
OPEN 2
PERFORM 1
READ 1
STOP 1
WRITE 1
\ \ \ \ \ F I N D E V E R B O P O R R E C U E N T O \ \ \ \ \

Figura 9. Utilización de Verbos mediante el Listado de la Cuenta

Correlación de la División de Datos


La correlación de la División de Datos se lista cuando se especifica la opción MAP.
Contiene información sobre los nombres en el programa fuente COBOL. Al final
de la correlación de la División de Datos se da el número de bytes necesarios para
la Sección de Almacenamiento de Trabajo y la Sección de Archivos.

5763CB1 V3RðM5 ðð1ððð Mapa de División de Datos COBOL AS/4ðð TESTER/SAMPLE AS4ððSYS ð3/27/94 11:ð1:51 Página 7
INST NIV NOMBRE FUENTE SECCIÓN DISP LONG TIPO I-NOMBRE ATRIBUTOS
.F/ .G/ .H/ .I/ .J/ .K/ .L/ .M/ .N/
18 FD FILE-1 FS .Fð1 DEVICE DISK, ORGANIZATION SEQUENTIAL,
ACCESS SEQUENTIAL, RECORD CONTAINS 2ð
CHARACTERS, LABEL RECORDS STANDARD
22 ð1 RECORD-1 FS ðððððððð 2ð GROUP .Dðð633C
23 ð2 FIELD-A FS ðððððððð 2ð AN .Dðð63AE
25 ð1 FILLER WS ðððððððð 56 GROUP .Dðð642ð
26 ð2 KOUNT WS ðððððððð 2 PACKED .Dðð649ð
27 ð2 LETTERS WS ððððððð2 26 AN .Dðð6512 VALUE
28 ð2 ALPHA WS ððððððð2 1 AN .Dðð65Bð REDEFINES .Dðð6512, DIMENSION(26)
3ð ð2 NUMBR WS ðððððð28 2 PACKED .Dðð6632
31 ð2 DEPENDENTS WS ðððððð3ð 26 AN .Dðð66B4 VALUE
32 ð2 DEPEND WS ðððððð3ð 1 AN .Dðð6754 REDEFINES .Dðð66B4, DIMENSION(26)
35 ð1 WORK-RECORD WS ðððððððð 19 GROUP .Dðð67D6
36 ð2 NAME-FIELD WS ðððððððð 1 AN .Dðð684C
37 ð2 FILLER WS ððððððð1 1 AN .Dðð68Cð VALUE
38 ð2 RECORD-NO WS ððððððð2 3 ZONED .Dðð693C
39 ð2 FILLER WS ððððððð5 1 AN .Dðð69C2 VALUE
4ð ð2 LOCATION WS ððððððð6 3 A .Dðð7A98 VALUE
41 ð2 FILLER WS ððððððð9 1 AN .Dðð7B2ð VALUE
42 ð2 NO-OF-DEPENDENTS WS ðððððð1ð 2 AN .Dðð7B9C
44 ð2 FILLER WS ðððððð12 7 AN .Dðð7C16 VALUE
45 77 WORKPTR WS ðððððððð 16 POINTR .Dðð7C92
FILE SECTION utiliza 2ð bytes de almacenamiento
WORKING-STORAGE SECTION utiliza 75 bytes de almacenamiento
\ \ \ \ \ F I N D E M A P A D E D I V I S I O N D E D A T O S \ \ \ \ \

Figura 10. Correlación de la División de Datos

La correlación de División de Datos muestra los campos siguientes:


.F/ Número de instrucción: El número de instrucción generada por el compi-
lador dónde se ha definido el ítem de los datos se lista para cada ítem de
datos en la correlación de División de Datos.

Capítulo 3. Compilación de un Programa 45


.G/ Nivel de ítem de datos: Aquí se lista el número del nivel de ítem de datos,
como se especifica en el programa fuente. Los nombres de índice se iden-
tifican con una IX en el número de nivel y un campo de tipo en blanco.
.H/ Nombre fuente: Aquí se lista el nombre de los datos, como se especifica
en el programa fuente.
.I/ Sección: La sección en la que se ha definido el ítem se muestra aquí
mediante la utilización de los códigos siguientes:
FS Sección de Archivo
WS Sección de Almacenamiento de Trabajo
LS Sección de Enlace
SM Sección Clasificar/Fusionar
SR Registro Especial
.J/ Desplazamiento: Aquí se ofrece el desplazamiento del ítem, en bytes,
desde el ítem de grupo de nivel 01.
.K/ Longitud: Aquí se lista la longitud decimal del ítem.
.L/ Tipo: Se muestra aquí el tipo de datos para el ítem mediante la utilización
de los códigos siguientes:

GROUP Ítem de grupo


A Alfabético
AN Alfanumérico
ANE Alfanumérico editado
INDEX Ítem de datos de índice (USAGE INDEX)
BOOLN Booleano
ZONED Decimal con Zona (decimal externo)
PACKED Decimal empaquetado (decimal interno) (USAGE COMP,
COMP-3 o PACKED-DECIMAL)
BINARY Binario (USAGE COMP-4 o BINARY)
NE Numérico editado
POINTR Ítem de datos del puntero (USAGE POINTER)

.M/ Nombre interno: Aquí se listan los nombres internos generados por el
compilador y se asignan de la manera siguiente:
Nombre de archivos
El nombre interno utiliza el formato .Fnn, donde .F indica el nombre de
archivo y nn es un número de dos dígitos único.
Nombres de Datos
El nombre interno utiliza el formato .Dxxxxxx, donde .D indica un nombre
de índice o un nombre de datos, y xxxxxx es un valor hexadecimal de seis
dígitos único. Estos nombres aparecen en el listado IRP si se genera.
.N/ Atributos: Los atributos del ítem se listan de la siguiente manera:
Ÿ Para los archivos, puede darse la información siguiente:
Tipo de dispositivo
ORGANIZATION
ACCESS MODE
Información BLOCK CONTAINS
Información RECORD CONTAINS
Información LABEL
Se indica RERUN

46 COBOL/400 Guía del usuario


Se indica SAME AREA
Se indica CODE-SET
Se indica SAME RECORD AREA
Se indica LINAGE.
Ÿ Para los ítems de datos, los atributos indican si se ha especificado
para el ítem la siguiente información:
REDEFINES
VALUE
JUSTIFIED
SYNCHRONIZED
BLANK WHEN ZERO
SIGN IS LEADING
SIGN IS LEADING SEPARATE
SIGN IS SEPARATE
INDICATORS.
Ÿ Para los ítems de tabla, las dimensiones del elemento se listan aquí en
el formato DIMENSION (nn). Para cada dimensión, se da un valor
OCCURS máximo. Cuando una dimensión es una variable, se lista
como tal, dando los valores OCCURS más alto y más bajo.

Mensajes FIPS
Los mensajes FIPS en la Figura 11, se listan cuando se especifica el parámetro
FLAGSTD. Consulte la página 25 para obtener más información sobre cómo espe-
cificar la opción para la opción FIPS. Sólo se listan los mensajes para el
subconjunto FIPS solicitado, los módulos opcionales y/o los elementos obsoletos.
Nota: Se proporciona el número de secuencia y columna cada vez que se emite
el mensaje.

5763CB1 V3RðM5 ðð1ððð Mensajes FIPS COBOL AS/4ðð TESTER/SAMPLE AS4ððSYS ð3/27/94 11:ð1:51 Página 8
FIPS-ID DESCRIPCIÓN Y NÚMEROS SECUENCIA SEÑALIZADOS.P/
.O/
LBL82ðð Los siguientes ítems que no se ajustan al estándar son válidos a un nivel FIPS intermedio o superior.
LBL82ð1 Instrucción COPY.
ðð34ðð ððð8
LBL83ðð Los siguientes ítems que no se ajustan al estándar son válidos a un nivel FIPS o superior. .Q/
LBL83ð3 Párrafo DATE-COMPILED.
ððð8ðð ðð1ð
LBL85ðð Los siguientes ítems que no se ajustan al estándar son definidos por IBM o son extensiones IBM. .Q/
LBL85ð4 Nombre de asignación en cláusula ASSIGN.
ðð15ðð ðð36
LBL8518 USAGE IS COMPUTATIONAL-3.
ðð26ðð ðð36
ðð3ððð ðð36
LBL852ð USAGE IS POINTER.
ðð35ðð ðð26
LBL8561 Instrucción COPY con bliblioteca por omisión asumida.
ðð34ðð ðð19
7 violaciones FIPS señalizadas. .R/
\ \ \ F I N D E M E N S A J E S F I P S C O B O L \ \ \

Figura 11. Mensajes FIPS

Capítulo 3. Compilación de un Programa 47


Los mensajes FIPS están compuestos por los campos siguientes:
.O/ FIPS-ID: Este campo lista el número del mensaje FIPS.
.P/ Descripción y números de referencia señalizados: Este campo lista una
descripción de la condición señalizada, seguido por una lista de los
números de referencia del programa fuente donde se encuentra esta condi-
ción.
El tipo de números de referencia utilizados y sus nombres en el encabe-
zamiento (mostrados como SEQUENCE NUMBERS en este listado) se
determinan mediante una opción especificada en el mandato CRTCBLPGM
o en la instrucción PROCESS, tal como se muestra en la tabla siguiente:

Opción Encabezamiento
NONUMBER DESCRIPCION Y NUMEROS DE SECUENCIA
SEÑALIZADOS
NUMBER DESCRIPCIÓN Y NÚMEROS SUMINISTRADOS POR
USUARIO SEÑALIZADOS
LINENUMBER DESCRIPCIÓN Y NÚMEROS DE LÍNEAS SEÑALIZADOS

.Q/ Ítems agrupados por nivel: Estos encabezamientos subdividen los men-
sajes FIPS por nivel y categoría.
.R/ Violaciones FIPS señalizadas: El número total de violaciones FIPS
señalizadas se incluye al final del listado FIPS.

Mensajes SAA
La Figura 12 muestra los mensajes SAA que se listan cuando se especifica la
opción de señalización SAA. Consulte el apartado Parámetro SAAFLAG en la
página 26 o “Uso de la Instrucción PROCESS para Especificar las Opciones del
Compilador” en la página 33 para obtener más información sobre cómo especificar
esta opción.

5763CB1 V3RðM5 ðð1ððð Mensajes COBOL SAA TESTER/SAMPLE AS4ððSYS ð3/27/94 11:ð1:51 Página 9
MSGID DESCRIPCIÓN, NÚMEROS DE SECUENCIA Y NÚMEROS DE COLUMNA SEÑALIZADOS

LBL88ðð Los siguientes ítems se han señalizado como no portables por otros sistemas COBOL SAA.
LBL88ð1 Las opciones APOST,NUMBER,SEQUENCE,GRAPHIC,NOCRTF,NODUPKEYCHK,NOSYNC y EXTACCDSP no son COBOL SAA.
ððð1ðð ððð8
LBL88ð9 Instrucción PROCESS.
ððð1ðð ððð8
LBL8843 USAGE IS POINTER.
ðð35ðð ðð26
Se han señalizado 3 mensajes COBOL SAA.
\ \ \ F I N D E M E N S A J E S C O B O L S A A \ \ \

Figura 12. Mensajes SAA

Para obtener más información sobre la señalización SAA, consulte el apartado


“Señalización SAA” en la página 349.

48 COBOL/400 Guía del usuario


Listado de Referencias Cruzadas
La Figura 13 muestra el listado de referencias cruzadas que se genera cuando se
especifica la opción XREF. Proporciona una lista de todas las referencias de datos
y las referencias de nombres de procedimientos, por número de instrucción, dentro
del programa fuente.

5763CB1 V3RðM5 ðð1ððð Listado de referencias cruzadas COBOL AS/4ðð TESTER/SAMPLE AS4ððSYS ð3/27/94 11:ð1:51 Página 1ð
NOMBRES (\ = Nombre-procedimiento) REFERENCIAS DEFINIDAS (\ = Modificado)
.S/ .T/ .U/
ALPHA 28 5ð
DEPEND 32 51
DEPENDENTS 31 32
\DUMMY-SECTION 47
FIELD-A 23
FILE-1 18 15 47 56 57 58 63
KOUNT 26 48\ 49\ 5ð 51 55
LETTERS 27 28
LOCATION 4ð
NAME-FIELD 36 5ð\
NO-OF-DEPENDENTS 42 51\ 6ð 61\
NUMBR 3ð 48\ 49\ 52
RECORD-NO 38 52\
RECORD-1 22 21 54\
\STEP-1 47
\STEP-2 49 55
\STEP-3 53 55
\STEP-4 55
\STEP-5 56
\STEP-6 58 62
\STEP-7 6ð
\STEP-8 63 59
WORK-RECORD 35 53 54 58\
WORKPTR 45
\ \ \ \ \ F I N D E R E F E R E N C I A S C R U Z A D A S \ \

Figura 13. Listado de Referencias Cruzadas

El listado de referencias cruzadas muestra los siguientes campos:


.S/ Campo de nombres: Aquí se lista el nombre de datos o el nombre de
procedimiento referenciado. Todos los nombres de procedimiento se
señalizan con un * antes del nombre. Los nombres se listan por orden
alfabético.
.T/ Campo definido: Aquí se lista el número de instrucción donde se ha defi-
nido el nombre dentro del programa fuente.
.U/ Campo de referencias: Todos los números de instrucciones se listan en la
misma secuencia en que aparece la referencia al nombre en el programa
fuente. Un * que sigue a un número de secuencia indica que el ítem se ha
modificado en esa instrucción.

Mensajes
La Figura 14 muestra los mensajes que se generan durante la compilación del pro-
grama.

Capítulo 3. Compilación de un Programa 49


5763CB1 V3RðM5 ðð1ððð Mensajes COBOL AS/4ðð TESTER/SAMPLE AS4ððSYS ð3/27/94 11:ð1:51 Página 11
INST .X/
\.V/ 18 MSGID: LBLð65ð GRAVEDAD: ðð NUMSEC: ðð18ðð .W/
Mensaje . . . . : Bloqueo/Desbloqueo para archivo 'FILE-1' se
ejecutará por código generado por compilador. .Y/
\ \ \ \ \ F I N D E M E N S A J E S \ \ \ \ \
Resumen Mensajes
Total Info(ð-4) Aviso(5-19) Error(2ð-29) Grave(3ð-39) Terminal(4ð-99)
.Z/ 1 1 ð ð ð ð
Registros fuente leídos . . . . . . : 79
Registros de copia leídos . . . . . : 1ð
Miembros de copia procesados . . . : 1
Errores de secuencia . . . . . . . : ð
Mensaje de gravedad emitido más alto: ð
LBLð9ð1 ðð Programa SAMPLE creado en biblioteca TESTER.
\ \ \ \ \ F I N D E C O M P I L A C I O N \ \ \ \ \

Figura 14. Mensajes de Diagnóstico

Los campos que se muestran son:


.V/ Número de instrucción: Este campo lista el número de instrucciones gene-
radas por el compilador asociadas con la instrucción del programa fuente
para la que se ha emitido el mensaje. 1
.W/ Número de referencia: Aquí se emite el número de referencia. 1 Los
números que aparecen en este campo y el encabezamiento de la columna
(aquí se muestra como SEQNBR) vienen determinados por una opción
especificada en el mandato CRTCBLPGM o en la instrucción PROCESS,
tal como se muestra en la tabla siguiente:

Opción Encabe- Origen


zamiento
NONUMBER SEQNBR Números de secuencia de archivo fuente
NUMBER NUMBER Números de secuencia suministrados por el usuario
LINENUMBER LINNBR Números se secuencia generados por el compilador

Cuando se emite un mensaje para un registro desde un archivo de copia,


el número vienen precedido por el signo +.
.X/ MSGID y Nivel de Gravedad: Estos campos contienen el número de
mensaje y el nivel de gravedad asociado. Los niveles de gravedad se
definen de la manera siguiente:

ðð Informativo
1ð Aviso
2ð Error
3ð Error Grave
4ð Irrecuperable (generalmente error del usuario)
5ð Irrecuperable (generalmente error del compilador)

.Y/ Mensaje: El mensaje identifica la condición e indica la acción emprendida


por el compilador.

1 El número de instrucciones y el número de referencia no aparecen en ciertos mensajes que hacen referencia a ítems desapare-
cidos. Por ejemplo, si el párrafo PROGRAM-ID no aparece, el mensaje LBL0031 aparecerá en el listado sin ninguna instrucción
ni número de referencia listado.

50 COBOL/400 Guía del usuario


.Z/ Estadísticas de mensajes: Este campo lista el numero total de mensajes y
el número de mensajes por nivel de gravedad.
Los totales listados son el número de mensajes que genera el compilador
para cada gravedad y no siempre son el número listado. Por ejemplo, si
se especifica FLAG(10), no se lista ningún mensaje de gravedad menor de
10. Las cuentas, no obstante, indican el número que debería imprimirse si
no se hubiera suprimido.

Capítulo 3. Compilación de un Programa 51


52 COBOL/400 Guía del usuario
Capítulo 4. Ejecución del Programa en COBOL
Este capítulo proporciona la información necesaria para ejecutar el programa en
COBOL/400.

Para ello, las formas más usuales consisten en la utilización de:


Ÿ Un mandato CALL del lenguaje de control (CL)
Ÿ Una instrucción CALL de COBOL
Ÿ Un programa de menú orientado a la aplicación
Ÿ La emisión de un mandato creado por el usuario.

Un mandato CALL del lenguaje de control puede formar parte de un trabajo por
lotes, entrarlo un usuario de la estación de trabajo en forma interactiva o incluirlo
en un programa CL. Un ejemplo del mandato CALL sería CALL NOMINA.
NOMINA es el nombre de un programa COBOL que se llama y se ejecuta.

Un programa COBOL puede llamar a otro programa con la instrucción CALL de


COBOL. (Consulte la sección “Instrucción CALL” de la publicación COBOL/400
Reference para más información).

Otra forma de ejecutar el programa COBOL es mediante un menú orientado a la


aplicación. El usuario de la estación de trabajo puede seleccionar una opción de
un menú y llamar al programa pertinente. La figura siguiente ilustra un ejemplo de
un menú orientado a la aplicación.

à ð
MENÚ DEL DEPARTAMENTO DE NÓMINAS

1. Consultar el maestro de empleados


2. Modificar el maestro de empleados
3. Añadir nuevo empleado
4. Volver

Opción:____

Figura 15. Ejemplo de un Menú de Aplicación

El menú mostrado en esta figura normalmente se visualiza mediante un programa


de lenguaje de control en el que cada opción llama a un programa COBOL distinto.

El propio usuario puede crear también un mandato para ejecutar un programa en


COBOL utilizando una definición de mandato. Una definición de mandato es un
objeto que contiene la definición de un mandato (incluido el nombre del mandato,
las descripciones de parámetro y la información de control de validez) e identifica
al programa que efectúa la función solicitada por el mandato. El identificador del
objeto que el sistema reconoce es *CMD.

Por ejemplo, puede crear un mandato, PAGA, que llame a un programa, NOMINA.
PAYROLL es el nombre de un programa COBOL que se llama y se ejecuta. El
usuario puede entrar el mandato de forma interactiva o en un trabajo por lotes.
Consulte la publicación CL Guía del Programador para más información acerca de
la utilización de la definición de mandato.

 Copyright IBM Corp. 1994 53


Cuando un programa COBOL finaliza normalmente, el sistema devuelve el control
al llamador. El llamador puede ser un usuario de la estación de trabajo, un pro-
grama en lenguaje de control (como el programa de manejo del menú) o cualquier
otro programa en COBOL.

Si un programa COBOL finaliza de forma anómala durante el tiempo de ejecución,


se emite el mensaje LBE9001
Error id-mensaje provocó terminación del programa
Un programa CL puede supervisar esta excepción utilizando el mandato Supervisar
Mensaje (MONMSG). Consulte la publicación CL Reference para más información
acerca de los mandatos del lenguaje de control.

Si un programa finaliza por una razón que no sea la utilización de la instrucción


STOP o finaliza de forma anómala al término del programa, el código de retorno se
establece en 2. Consulte los mandatos RTVJOBA y DSPJOB en la publicación CL
Guía del Programador para más información acerca de los códigos de retorno.

Cuando se ejecuta un trabajo por lotes que utiliza la instrucción ACCEPT, los datos
de entrada se toman de la corriente de trabajos. Estos datos deben colocarse
inmediatamente después del mandato CALL para el programa en COBOL. Es res-
ponsabilidad del usuario la solicitud (mediante varias instrucciones ACCEPT) de la
misma cantidad de datos disponibles. Consulte la sección “Instrucción ACCEPT”
de la publicación COBOL/400 Reference para obtener más información.
Nota: Si se solicitan más datos de los disponibles, el mandato CL que sigue a los
datos se trata como dato de entrada. Si hay más datos disponibles de los
que se solicitan, cada línea de datos de más se trata como un mandato CL.
En cada uno de estos casos, pueden producirse resultados no deseados.

Respuesta a Mensajes de Consulta en Tiempo de Ejecución


Cuando se ejecuta un programa COBOL, pueden generarse mensajes de consulta
en tiempo de ejecución. Los mensajes necesitan una respuesta del usuario antes
de que el programa continúe ejecutándose.

Se puede añadir los mensajes de consulta a una lista de respuestas del sistema
para proporcionar respuestas automáticas a los mensajes. Las respuestas para
estos mensajes pueden especificarse de forma individual o general. Este método
de respuesta a mensajes de consulta es especialmente útil para los programas por
lotes que, de lo contrario, necesitarían un operador para emitir las respuestas.

Los siguientes mensajes de consulta de COBOL/400 pueden añadirse a la lista de


respuestas del sistema:
LBE7200
LBE7201
LBE7203
LBE7204
LBE7205
LBE7206
LBE7207
LBE7208
LBE7209
LBE7210
LBE7211

54 COBOL/400 Guía del usuario


LBE7604.

La lista de respuestas sólo se utiliza cuando un trabajo que tiene especificado el


atributo de respuesta de mensajes de consulta (INQMSGRPY) como
INQMSGRPY(\SYSRPYL) envía un mensaje de consulta.

El parámetro INQMSGRPY se produce en los mandatos de lenguaje de control


siguientes:
Ÿ Cambiar Trabajo (CHGJOB)
Ÿ Cambiar Descripción de Trabajo (CHGJOBD)
Ÿ Crear Descripción de Trabajo (CRTJOBD)
Ÿ Someter Trabajo (SBMJOB).
Puede seleccionar una de estas cuatro modalidades de respuesta especificando
uno de los siguientes valores para el parámetro INQMSGRPY:
SAME No se producen cambios en la forma de enviar respuestas a men-
sajes de consulta
RQD Todos los mensajes de consulta requieren una respuesta por parte
del receptor de dichos mensajes
DFT Se emite una respuesta por omisión
SYSRPYL La lista de respuestas del sistema se comprueba para una entrada de
lista de respuestas coincidente. Si se produce la coincidencia, se
utiliza el valor de respuesta en esa entrada. Si no hay entrada para
ese mensaje de consulta, se necesita una respuesta.

Puede utilizar el mandato Añadir Entrada de Lista de Respuestas (ADDRPYLE)


para añadir las entradas en la lista de respuestas del sistema, o el mandato Tra-
bajar con Entrada de Lista de Respuestas (WRKRPYLE) para cambiar o eliminar
entradas en la lista de respuestas del sistema. Vea la publicación CL Reference
para más detalles acerca de los mandatos ADDRPYLE y WRKRPYLE. También
podrá responder a mensajes de consulta en tiempo de ejecución con un manejador
de errores que haya definido. Para más información acerca de las API de manejo
de errores, consulte la publicación System Programmer’s Interface Reference.

Capítulo 4. Ejecución del Programa 55


56 COBOL/400 Guía del usuario
Capítulo 5. Depuración del Programa
El lenguaje COBOL/400 y el sistema operativo OS/400 proporciona funciones para
la depuración de los programas desarrollados por el usuario. Este capítulo des-
cribe aquellas funciones que le permitirán depurar los programas.

Funciones OS/400 Funciones COBOL/400


Puntos de interrup- Características de depu-
ción ración
Rastreos Vuelco con formato

Las funciones OS/400 le permitirán probar programas a la vez que proteger los
archivos de producción; podrá, asimismo, observar y depurar operaciones a
medida que se ejecuta un programa. No se necesita ningún código fuente especial
para utilizar las funciones OS/400.

Las funciones COBOL pueden utilizarse independientemente de las funciones


OS/400 o en combinación con ellas para:
Ÿ Depurar un programa
Ÿ Producir un vuelco con formato de los contenidos de los campos, estructuras
de datos, matrices y tablas.

El código fuente es necesario para la utilización de las características de depu-


ración de COBOL y la posibilidad de vuelco con formato. Un vuelco con formato
también puede obtenerse mediante una respuesta del usuario al mensaje en
tiempo de ejecución.

El contenido de OPEN-FEEDBACK y de I-O-FEEDBACK proporciona información


de depuración adicional. El método para la obtención de esta información se des-
cribe más adelante en este capítulo, concretamente en el apartado “Estado de
Archivos y Áreas de Realimentación” en la página 108.

Mientras prueba los programas, asegúrese de que la lista de bibliotecas haya cam-
biado, para direccionar los programas a una biblioteca de prueba que contenga
datos de prueba; de esta manera, ningún dato real existente se verá afectado.

Para evitar que los archivos de base de datos en bibliotecas de producción se


modifiquen de manera no intencionada, puede especificar UPDPROD(*NO) en el
mandato Arrancar Depuración (STRDBG) o utilizando el mandato Cambiar Depu-
ración (CHGDBG). Vea la publicación CL Reference para más información.
Nota: Consulte el manual CL Guía del Programador para los mandatos CL nece-
sarios para los programas de prueba y depuración.

No hay instrucciones especiales para la prueba en el programa que se va a probar.


El programa puede ejecutarse de forma normal sin modificación alguna. Todas las
funciones de prueba se especifican en el trabajo que contiene el programa, no en
el mismo programa.

Las funciones de prueba sólo se aplican al trabajo en el que se especifiquen. Un


programa puede utilizarse simultáneamente en dos trabajos: uno que esté en un
entorno de prueba y otro que esté en un entorno normal de proceso.

 Copyright IBM Corp. 1994 57


Las funciones de prueba le permitirán observar las operaciones que se realizan
mientras el programa se ejecuta. Estas funciones incluyen la utilización de puntos
de interrupción y de rastreos. (Consulte los apartados “Utilización de Puntos de
Interrupción” en la página 59 y “Utilización de un Rastreo” en la página 66 para
más información).

Cómo Evitar Errores de Códigos Comunes


Los errores que más frecuentemente cometen los programadores en COBOL se
pueden dividir en dos categorías: errores de tiempo de compilación y errores de
tiempo de ejecución.

El compilador puede detectar los errores al compilar el programa fuente. Aunque


el compilador hace correcciones basándose en ciertas suposiciones sobre los
errores que encuentra, es preciso que el usuario corrija el fuente y compile de
nuevo si tiene errores.

Los errores de codificación comunes incluyen:


Ÿ Descripciones de registros no coincidentes con archivos descritos exter-
namente
Ÿ Archivos de copia no encontrados
Ÿ Faltas de ortografía
Ÿ Puntuación defectuosa, especialmente la falta de puntos
Ÿ Sintaxis incorrecta o incompleta
Ÿ Mala utilización de palabras reservadas.

A continuación viene una serie de errores que sólo aparecen cuando se ejecuta el
programa:
Ÿ Imposibilidad de hacer coincidir la descripción de registros en el programa
fuente con el formato de los registros reales en el archivo que debe leerse.
Puede ser un error producido por el usuario (los registros son correctos, pero
la descripción es incorrecta) o un error causado por la persona que ha creado
los registros que lee el programa. (Por ejemplo, la descripción es correcta,
pero se han entrado uno o más registros de forma incorrecta.)
Ÿ Traslado de un ítem de datos cuyo subíndice o índice es demasiado grande,
es negativo o es 0. Este traslado puede recubrir y destruir parte del código o
puede recoger datos defectuosos.
Ÿ Olvidar la definición de un campo de signo para ítems que pueden tener
valores negativos. (En tal caso, se pierde el signo y el número negativo se
convierte, por error, en positivo).
Ÿ Traslado de datos en un área demasiado pequeña para ellos, provocando un
truncamiento no deseado.
Ÿ Olvidar inicializar los ítems de datos en la sección de Almacenamiento de
Trabajo antes de utilizarlos. Esto puede dar como resultado un error de datos
decimal.
Ÿ En un programa llamado, la coincidencia incorrecta entre la descripción de
datos de la Sección de Enlace con los del llamador. O, en el programa de
llamada, la identificación errónea de los datos que se van a pasar.
Ÿ Traslado de un ítem de grupo a otro ítem de grupo cuando las descripciones
de datos subordinados son incompatibles.

58 COBOL/400 Guía del usuario


Ÿ Especificación de USAGE para un ítem de datos redefinido que sea distinto del
USAGE especificado originalmente para el ítem redefinido, y después olvidarse
del cambio una vez que se haya llevado a cabo la redefinición.
Ÿ Incluir una instrucción GO TO sin nombre de procedimiento, y no inicializarlo
con una instrucción ALTER antes de que el programa en ejecución alcance
ese punto.
Ÿ No incluir las cláusulas AT END o INVALID KEY o los procedimientos USE en
archivos descritos en el programa.
Ÿ No hacer coincidir la descripción de registro fuente del archivo TRANSACTION
con la descripción de registro del formato de pantalla.

Utilización de Puntos de Interrupción


Un punto de interrupción es un número de instrucción o una etiqueta en el pro-
grama que detiene el proceso del programa, y pasa el control al usuario de la
estación de trabajo o a un programa específico. Si se utiliza un número de instruc-
ción, dicho número puede aparecer en el listado del programa fuente COBOL. Si
utiliza una etiqueta como punto de interrupción, la etiqueta:
Ÿ Puede estar asociada con una función realizada por el programa COBOL. Por
ejemplo,
.OPEN
indica la función de abrir archivo.
Ÿ Puede ser una etiqueta interna generada por el compilador del COBOL. Por
ejemplo,
.Lððððð1
indica la primera etiqueta generada internamente.
Nota: Para determinar las etiquetas generadas internamente para el programa,
utilice el parámetro GENOPT en el mandato CRTCBLPGM para obtener un listado
IRP del programa.

Cuando una instrucción de punto de interrupción va a ejecutarse en un trabajo inte-


ractivo, el sistema visualiza el punto de interrupción en el que el programa se ha
parado y, si se solicitó, visualiza los valores de las variables de programa. Una
vez haya conseguido esta información (en una pantalla), puede ir a la pantalla de
Entrada de Mandatos e introducir mandatos del OS/400 para solicitar otras fun-
ciones (como por ejemplo la visualización o cambio de una variable, la adición de
un punto de interrupción o la adición de un rastreo). Consulte la publicación CL
Guía del Programador para más información respecto a los puntos de interrupción.

Para un trabajo por lotes, puede llamarse a un programa de punto de interrupción


cuando se alcanza el punto de interrupción. La información del punto de interrup-
ción se pasa al programa de punto de interrupción.

Capítulo 5. Depuración del Programa 59


Ejemplo de un Programa que Utiliza Puntos de Interrupción
La Figura 16 muestra un ejemplo de un programa COBOL que utiliza puntos de
interrupción. Los siguientes mandatos OS/400 añaden puntos de interrupción en
las instrucciones 43 y 52. El valor de la variable KOUNT se visualiza cuando se
alcanza el punto de interrupción en la instrucción 52.

Mandatos OS/400:

STRDBG TESTPRT
ADDBKP STMT(43)
ADDBKP STMT(52)
PGMVAR(KOUNT)

Los mandatos OS/400 se exponen en el manual CL Reference.

5763CB1 V3RðM5 ðð1ððð Fuente COBOL AS/4ðð TESTER/TESTPRT AS4ððSYS ð3/3ð/94 17:ð5:37 Página 2
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ððð1ðð IDENTIFICATION DIVISION.
2 ððð2ðð PROGRAM-ID. TESTPRT.
3 ððð3ðð AUTHOR. PROGRAMMER NAME.
4 ððð4ðð INSTALLATION. COBOL DEVELOPMENT CENTRE. ð3/3ð/94
5 ððð5ðð DATE-WRITTEN. 11/27/87.
6 ððð6ðð DATE-COMPILED. ð3/3ð/94 17:ð5:37 .
7 ððð7ðð ENVIRONMENT DIVISION.
8 ððð8ðð CONFIGURATION SECTION.
9 ððð9ðð SOURCE-COMPUTER. IBM-AS4ðð. ð3/3ð/94
1ð ðð1ððð OBJECT-COMPUTER. IBM-AS4ðð. ð3/3ð/94
11 ðð11ðð INPUT-OUTPUT SECTION.
12 ðð12ðð FILE-CONTROL.
13 ðð13ðð SELECT FILE-1 ASSIGN TO DISK-SAMPLE.
14 ðð14ðð DATA DIVISION.
15 ðð15ðð FILE SECTION.
16 ðð16ðð FD FILE-1
17 ðð17ðð LABEL RECORDS ARE STANDARD
18 ðð18ðð RECORD CONTAINS 2ð CHARACTERS
19 ðð19ðð DATA RECORD IS RECORD-1.
2ð ðð2ððð ð1 RECORD-1.
21 ðð21ðð ð2 FIELD-A PIC X(2ð).
22 ðð22ðð WORKING-STORAGE SECTION.
23 ðð23ðð ð1 FILLER.
24 ðð24ðð ð5 KOUNT PIC S9(2) COMP-3.
25 ðð25ðð ð5 LETTERS PIC X(26) VALUE "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
26 ðð26ðð ð5 ALPHA REDEFINES LETTERS
27 ðð27ðð PIC X(1) OCCURS 26 TIMES.
28 ðð28ðð ð5 NUMBR PIC S9(2) COMP-3.
29 ðð29ðð ð5 DEPENDENTS PIC X(26) VALUE "ð1234ð1234ð1234ð1234ð1234ð".
3ð ðð3ððð ð5 DEPEND REDEFINES DEPENDENTS
31 ðð31ðð PIC X(1) OCCURS 26 TIMES.
32 ðð32ðð ð1 WORK-RECORD.
33 ðð33ðð ð5 NAME-FIELD PIC X(1).
34 ðð34ðð ð5 FILLER PIC X(1) VALUE SPACE.
35 ðð35ðð ð5 RECORD-NO PIC S9(3).
36 ðð36ðð ð5 FILLER PIC X(1) VALUE SPACE.
37 ðð37ðð ð5 LOCATION PIC A(3) VALUE "NYC".
38 ðð38ðð ð5 FILLER PIC X(1) VALUE SPACE.
39 ðð39ðð ð5 NO-OF-DEPENDENTS
4ð ðð4ððð PIC X(2).
41 ðð41ðð ð5 FILLER PIC X(7) VALUE SPACES.
ðð42ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð43ðð\ EL SIGUIENTE PARRAFO ABRE EL ARCHIVO DE SALIDA QUE\
ðð44ðð\ HA DE CREARSE E INICIALIZA LOS CONTADORES \
ðð45ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
42 ðð46ðð PROCEDURE DIVISION.
ðð47ðð STEP-1.
43 ðð48ðð OPEN OUTPUT FILE-1. .1/
44 ðð49ðð MOVE ZERO TO KOUNT, NUMBR.

Figura 16 (Parte 1 de 2). Ejemplo de Programa COBOL que Utiliza Puntos de Interrupción

60 COBOL/400 Guía del usuario


5763CB1 V3RðM5 ðð1ððð Fuente COBOL AS/4ðð TESTER/TESTPRT AS4ððSYS ð3/3ð/94 17:ð5:37 Página 2
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
ðð5ððð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð51ðð\ LOS 3 PARRAFOS SIGUIENTES CREAN INTERNAMENTE LOS \
ðð52ðð\ REGISTROS QUE HA DE CONTENER EL ARCHIVO, LOS \
ðð53ðð\ GRABA EN DISCO Y LOS VISUALIZA \
ðð54ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð55ðð STEP-2.
45 ðð56ðð ADD 1 TO KOUNT, NUMBR.
46 ðð57ðð MOVE ALPHA (KOUNT) TO NAME-FIELD.
47 ðð58ðð MOVE DEPEND (KOUNT) TO NO-OF-DEPENDENTS.
48 ðð59ðð MOVE NUMBR TO RECORD-NO.
ðð6ððð STEP-3.
49 ðð61ðð DISPLAY WORK-RECORD.
5ð ðð62ðð WRITE RECORD-1 FROM WORK-RECORD.
ðð63ðð STEP-4.
51 ðð64ðð PERFORM STEP-2 THRU STEP-3 UNTIL KOUNT IS EQUAL TO 26.
ðð65ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð66ðð\ EL SIGUIENTE PARRAFO CIERRA EL ARCHIVO ABIERTO \
ðð67ðð\ PARA SALIDA Y VUELVE A ABRIRLO PARA ENTRADA \
ðð68ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð69ðð STEP-5.
52 ðð7ððð CLOSE FILE-1. .2/
53 ðð71ðð OPEN INPUT FILE-1.
ðð72ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð73ðð\ LOS SIGUIENTES PARRAFOS LEEN HACIA ATRAS EL \
ðð74ðð\ ARCHIVO Y SELECCIONAN EMPLEADOS SIN SUBORDINADOS \
ðð75ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð76ðð STEP-6.
54 ðð77ðð READ FILE-1 RECORD INTO WORK-RECORD
55 ðð78ðð AT END GO TO STEP-8.
ðð79ðð STEP-7.
56 ðð8ððð IF NO-OF-DEPENDENTS IS EQUAL TO "ð"
57 ðð81ðð MOVE "Z" TO NO-OF-DEPENDENTS.
58 ðð82ðð GO TO STEP-6.
ðð83ðð STEP-8.
59 ðð84ðð CLOSE FILE-1.
6ð ðð85ðð STOP RUN.
\ \ \ \ \ F I N D E F U E N T E \ \ \ \ \

Figura 16 (Parte 2 de 2). Ejemplo de Programa COBOL que Utiliza Puntos de Interrupción

.1/ El primer punto de interrupción se utiliza para saber dónde está el usuario en
el programa. Cuando se produce la interrupción, se visualiza la información
siguiente:

à Visualizar Punto de Interrupción


ð
Sentencia/Instrucción . . . . . . . . . : 43 /ðð17
Programa . . . . . . . . . . . . . . . : TESTPRT
Nivel de repetición . . . . . . . . . . : 1

Pulse Intro para continuar.

F3=Salir Programa F1ð=Entrada de mandatos

á ñ
Figura 17. Primer Punto de Interrupción Visualizado

Capítulo 5. Depuración del Programa 61


.2/ La información siguiente se visualiza como resultado de alcanzar el segundo
punto de interrupción:

à Visualizar Punto de Interrupción


ð
Sentencia/Instrucción . . . . . . . . . : 52 /ðð56
Programa. . . . . . . . . . . . . . . . : TESTPRT
Nivel de repetición . . . . . . . . . . : 1
Posición inicial . . . . . . . . . . . : 1
Formato . . . . . . . . . . . . . . . . : \CHAR
Longitud . . . . . . . . . . . . . . . : \DCL

Variable. . . . . . . . . . . . . . . . : ð5 KOUNT
Tipo. . . . . . . . . . . . . . . . . : PACKED
Longitud . . . . . . . . . . . . . . : 2 ð
' 26'

Pulse Intro para continuar.

F3=Salir Programa F1ð=Entrada de mandatos

á ñ
Figura 18. Segundo Punto de Interrupción Visualizado

Para especificar una variable para el parámetro PGMVAR, empiece cada nombre
que entre con un carácter alfanumérico (A a la Z, $, #, o @). Puede ir seguido de
los caracteres (de la A a la Z, del 0 al 9, $, #, @, o _ ).

El ejemplo siguiente muestra cómo visualizar una variable COBOL, RECORD-NO,


en el ejemplo de programa. Debido a que el sistema operativo OS/400 trata al
guión como un carácter especial, RECORD-NO debe ir entre comillas.

STRDBG TESTPRT
ADDBKP STMT(58)
PGMVAR('RECORD-NO')

Para visualizar el valor de un ítem de tabla, entre los números de apariciones ade-
cuadas (subíndices) con el nombre de variable. Se permiten hasta siete dimen-
siones de subíndices, que deben estar separados por comas.

No utilice un nombre de índice ni un ítem de datos de índices como subíndice.


Cuando se introduce un índice como subíndice, el sistema operativo utiliza el valor
interno del índice como subíndice y pueden producirse resultados no deseados.

El ejemplo siguiente muestra cómo se debe especificar la variable COBOL TABLE1


con tres dimensiones.

PGMVAR('TABLE1(SUB1, SUB2, SUB3)')

Se permiten uno o más espacios en blanco después de cada coma que separa
subíndices, pero la longitud total de la variable más los subíndices, paréntesis,
comas y espacios en blanco especificados con la palabra clave PGMVAR no
puede sobrepasar los 132 caracteres. Para más información acerca de la codifi-
cación de variables en mandatos CL, consulte el manual CL Reference.

62 COBOL/400 Guía del usuario


Los nombres de variables pueden calificarse en el parámetro PGMVAR. Por
ejemplo:

PGMVAR('NAME-FIELD OF WORK-RECORD')

Puede utilizarse otra técnica para visualizar variables que no sean ítems de una
tabla multidimensional. Por ejemplo, para visualizar el campo NAME-FIELD, puede
utilizar el mapa de la correlación de División de Datos COBOL para encontrar su
nombre interno en COBOL (I-NAME). A continuación, utilice el listado de referen-
cias cruzadas IRP para encontrar el numero de la Tabla de Definición de Objetos
(ODT) para el nombre interno. (Consulte el apartado “Uso de la Instrucción
PROCESS para Especificar las Opciones del Compilador” en la página 33 para
más información sobre la obtención estos listados). La Figura 19 muestra el mapa
de la correlación de División de Datos, y la Figura 20 en la página 64 muestra el
listado de referencias cruzadas para el ejemplo de programa, TESTPRT.

5763CB1 V3RðM5 ðð1ððð Mapa de División de Datos COBOL AS/4ðð TESTER/TESTPRT AS4ððSYS ð3/3ð/94 17:ð5:37 Página 4
INST NIV NOMBRE FUENTE SECCIÓN DISP LONG TIPO I-NOMBRE ATRIBUTOS
16 FD FILE-1 FS .Fð1 DEVICE DISK, ORGANIZATION SEQUENTIAL,
ACCESS SEQUENTIAL, RECORD CONTAINS 2ð
CHARACTERS, LABEL RECORDS STANDARD
2ð ð1 RECORD-1 FS ðððððððð 2ð GROUP .Dðð633C
21 ð2 FIELD-A FS ðððððððð 2ð AN .Dðð63AE
23 ð1 FILLER WS ðððððððð 56 GROUP .Dðð642ð
24 ð2 KOUNT WS ðððððððð 2 PACKED .Dðð649ð
25 ð2 LETTERS WS ððððððð2 26 AN .Dðð6512 VALUE
26 ð2 ALPHA WS ððððððð2 1 AN .Dðð65Bð REDEFINES .Dðð6512, DIMENSION(26)
28 ð2 NUMBR WS ðððððð28 2 PACKED .Dðð6632
29 ð2 DEPENDENTS WS ðððððð3ð 26 AN .Dðð66B4 VALUE
3ð ð2 DEPEND WS ðððððð3ð 1 AN .Dðð6754 REDEFINES .Dðð66B4, DIMENSION(26)
32 ð1 WORK-RECORD WS ðððððððð 19 GROUP .Dðð67D6
33 ð2 NAME-FIELD WS ðððððððð 1 AN .Dðð684C .1/
34 ð2 FILLER WS ððððððð1 1 AN .Dðð68Cð VALUE
35 ð2 RECORD-NO WS ððððððð2 3 ZONED .Dðð693C
36 ð2 FILLER WS ððððððð5 1 AN .Dðð69C2 VALUE
37 ð2 LOCATION WS ððððððð6 3 A .Dðð6A98 VALUE
38 ð2 FILLER WS ððððððð9 1 AN .Dðð6B2ð VALUE
39 ð2 NO-OF-DEPENDENTS WS ðððððð1ð 2 AN .Dðð6B9C
41 ð2 FILLER WS ðððððð12 7 AN .Dðð6C16 VALUE
FILE SECTION utiliza 2ð bytes de almacenamiento
WORKING-STORAGE SECTION utiliza 75 bytes de almacenamiento
\ \ \ \ \ F I N D E M A P A D E D I V I S I O N D E D A T O S \ \ \ \ \

Figura 19. Mapa de Correlación de División de Datos para TESTPRT

.1/ El I-NAME para NAME-FIELD

Capítulo 5. Depuración del Programa 63


5763SS1 V3RðM5 92ð925 IBM COBOL/4ðð 5763CB1 V3RðM5 IRP LISTADO PARA TESTPRT ð3/3ð/94 17:ð5:37 Página 43
ODT Nombre ODT Referencia Cruzada SEQ (\ Indica donde está definido)
ð184 .DMPFBH1 514\
ð185 .DMPFBH2 515\
ð14F .DMPFBIB 452\
ð148 .DMPFBLN 445\
ð15B .DMPFBLO 471\
ð186 .DMPFBLP 512 516\
ð182 .DMPFBLS 512\
ð14C .DMPFBL1 449\ 1ð65 1ð66
ð14D .DMPFBL2 45ð\
ð16ð .DMPFBMF 476\
ð14E .DMPFBMN 451\ 995 1ð98 1ð99 1118 1119
ð18ð .DMPFBND 5ð9\
ð15ð .DMPFBOB 453\
ð15A .DMPFBOF 47ð\
ð152 .DMPFBOL 458\
ð15F .DMPFBPO 475\
ð161 .DMPFBQN 477\
ð155 .DMPFBRC 461\
ð153 .DMPFBRW 459\
ð158 .DMPFBSC 468\
ð149 .DMPFBSF 446\
ð14A .DMPFBSL 447\
ð14B .DMPFBSN 448\
ð146 .DMPFBTY 443\ 1ð97 1117
ð159 .DMPFBUF 469\
ð183 .DMPFBVL 513\
ð18B .DMPIOFB 522\
ð1Að .DMPIOFS 545\ 546 547
ð1A6 .DMPKYLN 551\
ð165 .DMPNDEV 481\ 1ð87 1145
ð144 .DMPOFBS 441\ 442 443 444 445 446 447 448 449 45ð 451 452 453 454 458 459 46ð 461 462 467 468 469 47ð 471 472 473 474 475 476
477 478 479 48ð 481 482 5ð8 5ð9 51ð
ð1AA .DMPRCD 555\
ð1AC .DMPRCDN 557\
ð1AE .DMPRDUP 559\
ð1A1 .DMPRFMT 546\
ð1A7 .DMPRRN 552\
ð1A5 .DMPSRC 55ð\
ð22ð .Dðð6A98 685\
ð221 .Dðð6B2ð 686\
ð222 .Dðð6B9C 687\ 767 914 916
ð223 .Dðð6C16 688\
ð211 .Dðð63AE 67ð\
ð21ð .Dðð633C 669\ 789 9ð4
ð212 .Dðð642ð 671\ 672 673 676 677
ð213 .Dðð649ð 672\ 753 757 761 765 815
ð216 .Dðð65Bð 675\ 763
ð214 .Dðð6512 673\ 674
ð218 .Dðð66B4 677\ 678
ð217 .Dðð6632 676\ 754 758 769
ð21B .Dðð67D6 68ð\ 681 682 683 684 685 686 687 688 778 789 9ð4
ð21A .Dðð6754 679\ 767
ð21D .Dðð68Cð 682\
ð21C .Dðð684C 681\ 763 .1/
ð21F .Dðð69C2 684\
ð21E .Dðð693C 683\ 769

Figura 20. Sección del Listado de Referencias Cruzadas IRP para TESTPRT

.1/ 021C es el número ODT para NAME-FIELD

Ahora podrá utilizar el número ODT 021C (para NAME-FIELD), con los mandatos
siguientes, para añadir un punto de interrupción al ejemplo de programa en la ins-
trucción 52.

STRDBG TESTPRT
ADDBKP STMT(52)
PGMVAR('/ð21C')

Estos mandatos se exponen en el manual CL Reference.

64 COBOL/400 Guía del usuario


Cuando se alcanza este punto de interrupción, se visualiza lo siguiente:

à Visualizar Punto de Interrupción


ð
Sentencia/Instrucción . . . . . . . . . : 52 /ðð56
Programa. . . . . . . . . . . . . . . . : TESTPRT
Nivel de repetición . . . . . . . . . . : 1
Posición inicial . . . . . . . . . . . : 1
Formato . . . . . . . . . . . . . . . . : \CHAR
Longitud . . . . . . . . . . . . . . . : \DCL

Variable. . . . . . . . . . . . . . . . : /ð21C
Tipo. . . . . . . . . . . . . . . . . : CHARACTER
Longitud. . . . . . . . . . . . . . . : 2
\...+....1....+....2....+....3....+....4....+....5
'Z'

Pulse Intro para continuar.

F3=Salir Programa F1ð=Entrada de mandatos

á ñ
Figura 21. Punto de Interrupción en la Instrucción 52

Cambio de Variables de Programa


Ahora podrá cambiar el valor de las variables de programa para alterar el proceso
del programa. Puede utilizar el mandato Cambiar Variable de Programa
(CHGPGMVAR) para cambiar el valor de una variable. Este proceso se explica
con más detalle en el manual CL Reference.

Puede utilizar el mandato DSPPGMVAR para visualizar ítems de datos de puntero,


pero no podrá utilizar el mandato CHGPGMVAR para cambiar ítems de datos de
puntero. Para cambiar los ítems de datos de puntero, deberá utilizar los mandatos
CHGHLLPTR o CHGPTR. Para más información acerca de los mandatos
CHGHLLPTR y CHGPTR, consulte el manual CL Reference.

Consideraciones para la Utilización de Puntos de Interrupción


Debe conocer las siguientes características de los puntos de interrupción antes de
utilizarlos:
Ÿ Si se elude un punto de interrupción, por ejemplo la instrucción GO TO, ese
punto de interrupción no se procesa.
Ÿ Cuando se establece un punto de interrupción en una instrucción, tiene lugar el
punto de interrupción antes de que se procese la instrucción.
Ÿ Las funciones de los puntos de interrupción se especifican mediante los man-
datos OS/400.
Estas funciones incluyen:
– Añadir puntos de interrupción a programas
– Eliminar puntos de interrupción de programas
– Visualizar información de punto de interrupción

Capítulo 5. Depuración del Programa 65


– Reanudar la ejecución de un programa después de que se haya alcanzado
(visualizado) un punto de interrupción.
Consulte la publicación CL Guía del Programador para la descripción de estos
mandatos y para más detalles acerca de puntos de interrupción.

Utilización de un Rastreo
Un rastreo es un registro de algunas o todas las instrucciones que se ejecutan en
un programa. Si se solicita, un rastreo también registra los valores de variables
específicas utilizadas en las instrucciones del programa.

Programa Rastreo
┌─────────────┐ ┌─────────────────────────────────────┐
│ Instrucción │ │ Orden de Proceso Variables │
│ 1 ...... │ │ 1 ────────5 ....... │
│ 2 ...... │ │ 6 ────────5 ....... │
│ 3 ...... │ │ 7 ────────5 ....... │
│ 4 ...... │ │ 8 ────────5 ....... │
│ 5 ...... │ │ 6 ────────5 ....... │
│ 6 ...... │ │ 7 ────────5 ....... │
│ 7 ...... │ │ 2 ────────5 ....... │
│ 8 ...... │ │ 6 ────────5 ....... │
│ . │ │ 7 ────────5 ....... │
│ . │ │ . │
│ . │ │ . │
│ │ │ │
│ │ │ │
└─────────────┘ └─────────────────────────────────────┘

Un rastreo se diferencia de un punto de interrupción en que el número de instruc-


ciones implicadas en el rastreo influye en el lugar en el que finalizará el rastreo. El
sistema registra todas las instrucciones rastreadas que se han procesado. Puede
solicitar una visualización de la información rastreada, que muestra la secuencia en
que se han procesado las instrucciones y, si se solicita, los valores de las variables
utilizadas en las instrucciones.

Especifique qué instrucción rastreará el sistema. También puede especificar que


las variables se visualicen únicamente cuando su valor haya cambiado desde la
ejecución de la última instrucción de rastreo.

Podrá especificar un rastreo de una instrucción en un programa, un grupo de ins-


trucciones en un programa o todas las instrucciones de todo un programa.

Ejemplo de Utilización de un Rastreo


La Figura 22 en la página 67 muestra una parte del ejemplo de programa COBOL,
TESTPRT. El mandato OS/400 siguiente añade un rastreo de las instrucciones 54
a 58 en ese programa. La variable NO-OF-DEPENDENTS sólo se registrará si su
valor cambia entre las instrucciones 54 y 58:

ADDTRC STMT((54 58))


PGMVAR('NO-OF-DEPENDENTS')
OUTVAR(\CHG)

Nota: Ha de introducirse STRDBG antes que la instrucción ADDTRC.

66 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
ðð42ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ð3/ð7/94
ðð43ðð\ EL SIGUIENTE PARRAFO ABRE EL ARCHIVO DE SALIDA QUE\
ðð44ðð\ HA DE CREARSE E INICIALIZA LOS CONTADORES \
ðð45ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ð3/ð7/94
42 ðð46ðð PROCEDURE DIVISION. ð3/ð7/94
ðð47ðð STEP-1. ð3/ð7/94
43 ðð48ðð OPEN OUTPUT FILE-1. ð3/ð7/94
44 ðð49ðð MOVE ZERO TO KOUNT, NUMBR. ð3/ð7/94
ðð5ððð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ð3/ð7/94
ðð51ðð\ LOS 3 PARRAFOS SIGUIENTES CREAN INTERNAMENTE LOS \ ð3/ð7/94
ðð52ðð\ REGISTROS QUE HA DE CONTENER EL ARCHIVO, LOS \ ð3/ð7/94
ðð53ðð\ GRABA EN DISCO Y LOS VISUALIZA \ ð3/ð7/94
ðð54ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ð3/ð7/94
ðð55ðð STEP-2. ð3/ð7/94
45 ðð56ðð ADD 1 TO KOUNT, NUMBR. ð3/ð7/94
46 ðð57ðð MOVE ALPHA (KOUNT) TO NAME-FIELD. ð3/ð7/94
47 ðð58ðð MOVE DEPEND (KOUNT) TO NO-OF-DEPENDENTS. ð3/ð7/94
48 ðð59ðð MOVE NUMBR TO RECORD-NO. ð3/ð7/94
ðð6ððð STEP-3. ð3/ð7/94
49 ðð61ðð DISPLAY WORK-RECORD. ð3/ð7/94
5ð ðð62ðð WRITE RECORD-1 FROM WORK-RECORD. ð3/ð7/94
ðð63ðð STEP-4. ð3/ð7/94
51 ðð64ðð PERFORM STEP-2 THRU STEP-3 UNTIL KOUNT IS EQUAL TO 26.
ðð65ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð66ðð\ EL SIGUIENTE PARRAFO CIERRA EL ARCHIVO ABIERTO \
ðð67ðð\ PARA SALIDA Y VUELVE A ABRIRLO PARA ENTRADA \
ðð68ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð69ðð STEP-5.
52 ðð7ððð CLOSE FILE-1.
53 ðð71ðð OPEN INPUT FILE-1.
ðð72ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð73ðð\ LOS SIGUIENTES PARRAFOS LEEN HACIA ATRAS EL \
ðð74ðð\ ARCHIVO Y SELECCIONAN EMPLEADOS SIN SUBORDINADOS \
ðð75ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð76ðð STEP-6.
54 ðð77ðð READ FILE-1 RECORD INTO WORK-RECORD
55 ðð78ðð AT END GO TO STEP-8.
ðð79ðð STEP-7.
56 ðð8ððð IF NO-OF-DEPENDENTS IS EQUAL TO "ð"
57 ðð81ðð MOVE "Z" TO NO-OF-DEPENDENTS.
58 ðð82ðð GO TO STEP-6.
ðð83ðð STEP-8.
59 ðð84ðð CLOSE FILE-1.
6ð ðð85ðð STOP RUN.
\ \ \ \ \ F I N D E L F U E N T E \ \ \ \ \

Figura 22. Ejemplo de un Programa COBOL que Utiliza un Rastreo

La Figura 23 en la página 68 es un ejemplo de un listado de información ras-


treada. Esta información se produce mediante el mandato Visualizar Datos de
Rastreo (DSPTRCDTA):
DSPTRCDTA OUTPUT(\PRINT) CLEAR(\YES)

Este mandato se explica en el manual CL Reference.

Capítulo 5. Depuración del Programa 67


5763SS1 V3RðM5 Visualizar Datos de Rastreo
Trabajo. . : DSPð2 Usuario. . : PGMRS Número . . . . : ðð4122
Sentencia/
Programa Instrucción Nivel de Recursividad Número de secuencia
TESTPRT 54 1 1
Posición inicial . . . . . . . . . . . : 1
Longitud . . . . . . . . . . . . . . . : \DCL
Formato . . . . . . . . . . . . . . . . : \CHAR
Variable . . . . . . . . . . . . . . . : ð5 NO-OF-DEPENDENTS
Tipo . . . . . . . . . . . . . . . . : CHARACTER
Longitud . . . . . . . . . . . . . . : 2
\...+....1....+....2....+....3....+....4....+....5
'ð '
Sentencia/
Programa Instrucción Nivel de Recursividad Número de Secuencia
TESTPRT 56 1 2
TESTPRT 57 1 3
TESTPRT 58 1 4
Posición inicial . . . . . . . . . . . : 1
Longitud . . . . . . . . . . . . . . . : \DCL
Formato . . . . . . . . . . . . . . . . : \CHAR
\Variable . . . . . . . . . . . . . . . : ð5 NO-OF-DEPENDENTS
Tipo . . . . . . . . . . . . . . . . : CHARACTER
Longitud . . . . . . . . . . . . . . : 2
\...+....1....+....2....+....3....+....4....+....5
'Z '
Sentencia/
Programa Instrucción Nivel de Recursividad Número de Secuencia
TESTPRT 54 1 5
TESTPRT 56 1 6
Posición inicial . . . . . . . . . . . : 1
Longitud . . . . . . . . . . . . . . . : \DCL
Formato . . . . . . . . . . . . . . . . : \CHAR
\Variable . . . . . . . . . . . . . . . : ð5 NO-OF-DEPENDENTS
Tipo . . . . . . . . . . . . . . . . : CHARACTER
Longitud . . . . . . . . . . . . . . : 2
\...+....1....+....2....+....3....+....4....+....5
'1 '
Sentencia/
Programa Instrucción Nivel de Recursividad Número de Secuencia
TESTPRT 58 1 7
TESTPRT 54 1 8
TESTPRT 56 1 9
Posición inicial . . . . . . . . . . . : 1
Longitud . . . . . . . . . . . . . . . : \DCL
Formato . . . . . . . . . . . . . . . . : \CHAR
\Variable . . . . . . . . . . . . . . . : ð5 NO-OF-DEPENDENTS
Tipo . . . . . . . . . . . . . . . . : CHARACTER
Longitud . . . . . . . . . . . . . . : 2
\...+....1....+....2....+....3....+....4....+....5
'2 '
Sentencia/
Programa Instrucción Nivel de Recursividad Número de Secuencia
TESTPRT 58 1 1ð
TESTPRT 54 1 11
TESTPRT 56 1 12

Figura 23. Listado de Visualizar Datos de Rastreo

Consideraciones para la Utilización de un Rastreo


Antes de utilizar los rastreos debe tener un conocimiento de las siguientes carac-
terísticas de los rastreos:
Ÿ Las instrucciones eludidas, por ejemplo la instrucción GO TO, no se incluyen
en el rastreo.

68 COBOL/400 Guía del usuario


Ÿ Las funciones de rastreo se especifican mediante los mandatos OS/400 en el
trabajo que contiene el programa rastreado. Estas funciones incluyen la
adición de peticiones de rastreo en un programa, eliminación de peticiones de
rastreo de un programa, eliminación de datos recogidos de rastreos anteriores,
visualización de información de rastreos y visualización de los rastreos que se
han especificado para el programa.
Ÿ Además de los números de instrucción, en el campo de salida STMT del
rastreo puede aparecer el nombre de rutinas generadas por COBOL.

Consulte la publicación CL Guía del Programador para más información acerca de


los rastreos.

Utilización de un Conmutador para Depuración en Tiempo de


Ejecución
Se proporciona un conmutador en tiempo de ejecución para el recurso de depu-
ración COBOL. Este conmutador activa el código de depuración generado cuando
se especifica WITH DEBUGGING MODE. Cuando el conmutador está activado, se
activan todas las secciones de depuración compiladas; cuando está desactivado
(estado por omisión) se desactivan los procedimientos declarativos USE FOR
DEBUGGING. Consulte el Apéndice B, “Características de Depuración” en la
página 329 para más información acerca de las características de depuración
COBOL y la utilización del conmutador en tiempo de ejecución.

Utilización de un Vuelco con Formato COBOL


Algunos mensajes en tiempo de ejecución COBOL le permiten obtener una opción
de vuelco con formato COBOL seleccionando D o F. El vuelco con formato (selec-
ción D) incluye la información actual acerca de los archivos del programa, los con-
tenidos de los campos, las estructuras de los datos, matrices y tablas para las
variables de datos COBOL definidas por el usuario.

Si elige la opción F, el vuelco también incluye una lista de campos generados por
el compilador y sus contenidos.

Tanto la opción D como la opción F volcarán los primeros 256 caracteres de las
variables del programa. Cualquier variable mayor que 256 caracteres se truncará.

Si no quiere un vuelco, especifique C (cancelar sin vuelco). La respuesta C


también es la respuesta por omisión para todos los mensajes de consulta COBOL
que permiten un vuelco.

Para más información acerca de las modalidades de respuesta, consulte “Res-


puesta a Mensajes de Consulta en Tiempo de Ejecución” en la página 54.

La salida para el vuelco se envía al archivo de impresora suministrado por IBM,


QPPGMDMP.

Consulte el Apéndice H, “Ejemplo de Vuelco con Formato COBOL” en la


página 393 para ver un ejemplo de un vuelco con formato.

Capítulo 5. Depuración del Programa 69


70 COBOL/400 Guía del usuario
Capítulo 6. Manejo de Errores y Excepciones COBOL/400
Este capítulo describe el manejo de errores del COBOL/400 y su utilización.
También define la relación entre el manejo de errores y el proceso de verbos de
E/S.

El compilador COBOL/400 proporciona dos métodos para el manejo de errores:


estándar y no estándar. El manejo de errores estándar no está disponible en los
compiladores con un release anterior a la Versión 1 Release 3.

Manejo de Errores Estándar


El manejo de errores estándar ofrece compatibilidad extra con otros compiladores
IBM COBOL (tales como VS COBOL II), además de otros compiladores que no
son IBM COBOL. Es muy útil durante el proceso de instrucciones de E/S, puesto
que captura errores graves, que de lo contrario, pasarían inadvertidos.

Una característica muy importante del manejo de errores estándar es la emisión de


un mensaje en tiempo de ejecución cuando se produce un error durante el proceso
de una instrucción de E/S si no hay ninguna frase AT END/INVALID KEY, ningún
procedimiento USE ni ninguna cláusula FILE STATUS en la instrucción SELECT
para el archivo.

¡Sensibilidad del Release!

El manejo de errores estándar se introdujo en la Versión 1 Release 3 como una


opción por omisión. Para obtener el manejo de errores que se utilizó en
releases anteriores, especifique *NOSTDERR como opción de generación del
mandato CRTCBLPGM, o NOSTDERR en la instrucción PROCESS.

Visión General del Manejo de Errores


Cuando se ejecuta un programa COBOL, pueden producirse varios tipos de error.
La instrucción COBOL que está activa en el momento en que se produce un error
provoca que se ejecuten ciertas cláusulas o frases COBOL.

Durante las operaciones aritméticas, los errores típicos son errores de tamaño
(MCH1210) y errores de datos decimales (MCH1202); la frase correspondiente
para el manejo de errores es la frase SIZE ERROR.

COBOL no detecta directamente la mayoría de errores MCH; los detecta el sistema


operativo y dan como resultado los mensajes del sistema. COBOL supervisa estos
mensajes, estableciendo bits internos que determinan si se ha de ejecutar una ins-
trucción imperativa SIZE ERROR o emitir un mensaje en tiempo de ejecución
(LBE7200) para finalizar el programa.

COBOL detecta errores que se producen mediante la división por cero durante una
operación aritmética. Si el COBOL los detecta, estos errores provocan que se
ejecute la instrucción imperativa SIZE ERROR.

El mensaje del sistema MCH1210 se produce cuando se desplaza un campo


numérico a un receptor que es demasiado pequeño. COBOL supervisa este error

 Copyright IBM Corp. 1994 71


y también da como resultado la ejecución de la instrucción imperativa SIZE
ERROR.

LBE7200 es un mensaje en tiempo de ejecución que se emite generalmente


cuando se produce un error grave no supervisado en el programa COBOL.
También puede emitirse bajo *NOSTDERR, cuando se produce un error en
ausencia de un manejador de errores apropiado.

El mensaje del sistema MCH1202 es un ejemplo típico de un error grave no super-


visado. Este tipo de error produce como resultado el mensaje en tiempo de ejecu-
ción COBOL LBE7200 (o LBE7204 si el error se produce en un programa llamado
por un programa COBOL). Los mensajes del sistema MCH3601 y MCH0601 son
otros ejemplos de errores graves no supervisados.

Para operaciones de E/S, hay varias frases y cláusulas importantes para el manejo
de errores. Son las frases AT END/INVALID KEY y NO DATA (codificadas a nivel
de la instrucción COBOL), el procedimiento USE y la cláusula FILE STATUS (codi-
ficada a nivel de archivo). Durante las operaciones aritméticas y de E/S, el
sistema detecta los errores y envía mensajes; es entonces cuando COBOL super-
visa los mensajes. Al igual que sucede con un error resultante de una división por
cero, COBOL detecta algunos errores durante una operación de E/S. Sin tener en
cuenta cómo se detecta un error durante una operación de E/S, el resultado
| siempre será un estado de archivo interno en el que el primer carácter no será
| cero, será un mensaje en tiempo de ejecución o ambas cosas.

Interfaz de programación de uso general

Utilización de las Interfaces del Programa de Aplicación (API) para el


Manejo de Errores
Es posible utilizar las API COBOL/400 para controlar el manejo de errores dentro
de los programas. Estas API son Recuperar Manejador de Errores COBOL
(QLRRTVCE) y Establecer Manejador de Errores COBOL (QLRSETCE).

La API Recuperar Manejador de Errores COBOL (QLRRTVCE) permite recuperar


el nombre del programa actual o pendiente de manejo de errores COBOL. Se
puede llamar mediante cualquier lenguaje de programación.

La API Establecer Manejador de Errores COBOL (QLRSETCE) permite especificar


la identidad de un programa de manejo de errores COBOL. Se puede llamar
mediante cualquier lenguaje de programación.

También es posible utilizar la API Cambiar Programa Principal COBOL


(QLRCHGCM) para crear unidades de ejecución múltiples que tengan su propio
manejador de error.

Para obtener más información sobre estas API, consulte el manual System
Programmer’s Interface Reference.

Fin de Interfaz de programación de uso general

72 COBOL/400 Guía del usuario


Estado de archivo Interno y Externo
Debe proporcionar un entrada FILE-CONTROL para especificar la organización y el
método de acceso para cada archivo que utiliza el programa COBOL. También
puede codificar en esta entrada una cláusula FILE STATUS.

La cláusula FILE STATUS designa uno o dos ítems de datos (codificados en la


sección WORKING-STORAGE) para mantener una copia del resultado de una ope-
ración de E/S. La copia del primero de estos ítems se denomina estado de archivo
externo. Si utiliza el archivo TRANSACTION, se dispone de otro registro del resul-
tado llamado código de retorno externo, que está compuesto por los códigos de
retorno principal y secundario externos.

COBOL guarda sus propias copias de estos dos ítems de datos, que se almacenan
en el Bloque de Información de Archivos (FIB) COBOL. En este capítulo, el estado
de archivo y códigos de retorno (principal/secundario) hacen referencia a copias de
COBOL a no ser que se especifique lo contrario.

Durante el proceso de una instrucción de E/S, el estado de archivo puede actuali-


zarse en una de las tres maneras que se describen a continuación. El contenido
del estado del archivo determina los procedimientos del manejo que errores que
deben ejecutarse.

Los procedimientos de manejo de errores toman el control después de una ope-


| ración de entrada o salida no satisfactoria, que se indica mediante cualquier estado
| del archivo en el que el primer carácter no sea cero. Antes de que se ejecute
cualquiera de estos procedimientos, el estado del archivo se copia en el estado del
archivo externo.

El estado del archivo se establece mediante una de las tres maneras siguientes:
Ÿ Método A (todos los archivos):
COBOL comprueba el contenido de variables en los bloques de control de
archivos. Si el contenido no es el esperado, se establece un estado de archivo
que no sea cero. La mayoría de estados de archivo que se establecen de esta
forma son el resultado de la comprobación del Bloque de Información de
Archivos (FIB) y del Bloque de Control de Archivos (UFCB).
Ÿ Método B (archivos de transacción):
COBOL comprueba los códigos de retorno principal y secundario del sistema.
Si el código de retorno principal no es cero, el código de retorno (compuesto
por códigos de retorno principal y secundario) se transforma en estado de
archivo. Si el código de retorno principal es cero, el Método A o C puede esta-
blecer el estado de archivo.
Observe que para las operaciones READ, WRITE y REWRITE de subarchivo,
sólo se aplican los Métodos A y C.
Para obtener una lista de códigos de retorno y sus correspondientes estado de
archivo, consulte el apartado “Resumen del soporte de estructuras de archivos
y valores claves de estado” en la publicación COBOL/400 Reference.
Ÿ Método C (todos los archivos):
El sistema envía un mensaje cuando el COBOL llama la gestión de datos para
realizar una operación de E/S. COBOL supervisa estos mensajes y establece
un estado de archivo concordante.

Capítulo 6. Manejo de Errores y Excepciones COBOL/400 73


COBOL supervisa específicamente un mensaje generando supervisores de
mensajes en el programa objeto producido en tiempo de compilación. La
generación del supervisor de mensajes se basa en los tipos de archivos (como
por ejemplo, tipo de organización y tipo de acceso) que especifique en un pro-
grama. Así pues, un mensaje que se supervisa específicamente en un pro-
grama puede caer bajo el manejador de E/S genérico que está en otro
programa. En este capítulo hay más información sobre la generación del
supervisor de mensajes.
COBOL supervisa la mayoría de mensajes que el sistema envía en respuesta
a una operación de E/S. Las excepciones típicas de E/S dan como resultado
mensajes CPF que empiezan por “CPF4” o “CPF5”, y COBOL realiza la super-
visión específica para éstas.
Para obtener una lista de mensajes para los que el COBOL efectúa la super-
visión específica, consulte el apartado “Resumen de Soporte de la Estructura
de Archivos y Valores Clave del Estado” en la publicación COBOL/400
Reference.

74 COBOL/400 Guía del usuario


Detección de Errores Generales

Estado del Archivo


001
Inicio de la operación de E/S
– Método A: Compruebe el contenido de las variables de los bloques
de control de archivos.
(Por ejemplo, compruebe que se ha abierto el archivo
adecuadamente y en la modalidad apropiada.)
| ¿Se ha establecido el estado de archivo interno diferente de 00?
Sí No

002
Llame la gestión de datos para realizar la operación de E/S
– Método C: Supervise los mensajes enviados por la gestión de datos
y establezca el estado de archivo interno de acuerdo
a los mismos.
– Método A: Compruebe los bloques de información del sistema y
establezca el estado de archivo interno si no lo
hizo utilizando el Método C.
¿Es un archivo de transacciones?
Sí No

003
Establezca el estado de archivo externo
– Transfiera el estado de archivo interno al estado de archivo externo
(especificado en la cláusula de estado de archivo). Basándose en el
estado de archivo interno, ejecute el código para el manejo de errores.

004
Compruebe los códigos de retorno principal y secundario del sistema
– Método B: Si la gestión de datos ha enviado un mensaje, convierta
los códigos de retorno principal y secundario asociados al
mensaje del sistema en estado de archivo interno.
Continúe en el Paso 003

005
Continúe en el Paso 003

Capítulo 6. Manejo de Errores y Excepciones COBOL/400 75


Generación del Supervisor de Mensajes
Un supervisor de mensajes proporciona a un programa una forma de manejar
mensajes enviados por el sistema o por otro programa. Un supervisor de men-
sajes puede manejar uno o más mensajes.

En algunos aspectos, un supervisor de mensajes se parece a un procedimiento


USE. Un supervisor de mensajes especifica una acción que se ha de llevar a cabo
cuando se produce un error durante el proceso de una instrucción de la interfaz
(MI) de la misma forma que un procedimiento USE especifica las acciones que ha
que llevar a cabo en respuesta a un error de E/S. Observe que el mensaje del
sistema señala el error de instrucción MI y que la instrucción COBOL está com-
puesta por una o más instrucciones MI.

A diferencia de un procedimiento USE (que puede no estar activo durante un pro-


grama completo), un supervisor de mensajes COBOL se activa tan pronto como se
inicia el programa. Los supervisores de mensajes establecen los estados de
archivo e indican las condiciones SIZE ERROR, END-OF-PAGE y OVERFLOW.

Los supervisores de mensajes que genera el COBOL se agrupan en varios con-


juntos, generados bajo ciertas condiciones dentro del programa COBOL. La
siguiente tabla proporciona las directrices generales concernientes a la generación
de supervisores de mensajes:

Tabla 1 (Página 1 de 3). Generación de supervisores de mensajes


Causa del supervisor de mensajes Miembros de ejemplo del conjunto de mensajes supervi-
sados
Codifique una cláusula de estado de Ÿ No se encontró archivo, estado archivo externo 35
archivo
Ÿ Condición de error permanente, estado archivo externo
30
Ÿ Modalidad OPEN no válida, estado archivo externo 37
Ÿ No hay registro siguiente, mensaje del sistema CPF5183
(parte del estado de archivo externo 46)
Ÿ Tipo de acceso no definido o no autorizado, estado
archivo externo 91
Ÿ Error lógico, estado archivo externo 92 (excepto para
mensajes del sistema CPF4740 y CPF5070)
Ÿ Registro bloqueado, estado archivo externo 9D
Ÿ OPEN con control de compromiso anómalo, estado
archivo externo 9P
Ÿ WRITE no válido, mensajes del sistema CPF5018 y
CPF5272 (parte del estado de archivo externo 24).
Codifique una frase AT END Ÿ Manejador fin de archivo, mensajes del sistema
CPF5001 y CPF5025
Ÿ No se encontró archivo, estado archivo externo 35

76 COBOL/400 Guía del usuario


Tabla 1 (Página 2 de 3). Generación de supervisores de mensajes
Causa del supervisor de mensajes Miembros de ejemplo del conjunto de mensajes supervi-
sados
Especifique un subarchivo en el pro- Ÿ Último registro grabado en el subarchivo, estado archivo
grama externo 9M
Ÿ No se encontró registro de subarchivo, mensaje del
sistema CPF5020 (parte del estado archivo externo 23)
Ÿ Violación del límite de subarchivo, mensajes del sistema
CPF5021 y CPF5043 (parte del estado de archivo
externo 24). Una violación del límite es un intento de
escribir fuera de los límites de un archivo secuencial.
Codifique una instrucción READ de Ÿ No hay registros de subarchivo modificados, estado
subarchivo con la frase NEXT archivo externo 12.
MODIFIED
Utilice un archivo secuencial Ÿ No hay supervisor específico (Método A), establezca
indexado estados de archivo interno 21 y 22.
Hay una operación READ con clave Ÿ Mensajes del sistema CPF5006 y CPF5013 (parte de
estado archivo externo 23).
Hay una operación WRITE secuen- Ÿ Violación de límite, mensaje del sistema CPF5116 (parte
cial de estado archivo externo 34).
Hay una operación REWRITE Ÿ No hay supervisor específico (método A), establezca los
| secuencial indexada estados de archivo interno 21, 43, 44 y 9S.
Hay TRANSACTION I/O Ÿ Tiempo de espera READ, mensaje del sistema CPF4743,
establezca estado archivo externo 00
Ÿ No hay datos durante el READ, mensaje del sistema
CPF4742, establezca bit NO DATA
Ÿ No hay dispositivos adquiridos, mensaje del sistema
CPF5070 (parte de estado archivo externo 92)
Ÿ No hay dispositivos invitados/adquiridos, mensaje del
sistema CPF4740 (parte de estado archivo externo 92 y
estado archivo externo 10)
Ÿ Cancelar trabajo, estado archivo externo 9A
Ÿ WRITE falló, estado archivo externo 9I
Ÿ Error temporal, estado archivo externo 9N.
Especifique una cláusula de formato Ÿ Nombre de formato no válido/no encontrado, estado
en una instrucción de E/S archivo interno 9K.

Capítulo 6. Manejo de Errores y Excepciones COBOL/400 77


Tabla 1 (Página 3 de 3). Generación de supervisores de mensajes
Causa del supervisor de mensajes Miembros de ejemplo del conjunto de mensajes supervi-
sados
No hay ninguna E/S (incluyendo las Ÿ Manejador de excepciones END-OF-PAGE (mensaje del
operaciones ACCEPT/DISPLAY sistema CPF5004)
ampliadas) en el programa.
Ÿ Error de comprobación de nivel, estado archivo externo
39
Ÿ Manejador de excepciones genérico, estado archivo
externo 90
Ÿ Discrepancia del indicador (mensaje en tiempo de ejecu-
ción LBE7421, mensaje del sistema CPF4238)
Ÿ Hacer caso omiso de COMMIT o ROLLBACK (mensaje
del sistema CPF8350).
Ÿ Clave duplicada, estado archivo externo 22.
Ÿ Cambio no válido de dirección READ DYNAMIC, estado
de archivo interno 9U, mensaje del sistema CPF5184.
Nota: Para obtener una lista de los mensajes supervisados que se desactivan bajo un estado de
archivo determinado, consulte el apartado “Resumen de soporte de estructura de archivos y valores
clave del estado” de la publicación COBOL/400 Reference.

Finalización de un Programa COBOL


Hay tres elementos que pueden provocar la finalización de un programa COBOL:
Una instrucción COBOL (EXIT PROGRAM, STOP RUN o GOBACK)
Una respuesta a un mensaje de consulta
Una instrucción STOP RUN o EXIT PROGRAM implícita.

Se supone una instrucción STOP RUN cuando un programa principal COBOL


carece de una instrucción ejecutable (EXIT PROGRAM implícito para un subpro-
grama COBOL), es decir, cuando el proceso se desactiva al llegar a la última ins-
trucción un programa.

Los mensajes de consulta pueden emitirse en respuesta a una instrucción COBOL


(un literal STOP), pero se emiten generalmente cuando se produce un error grave
en un programa, o cuando una operación COBOL no finaliza satisfactoriamente.
(Por ejemplo LBE7205, LBE7207 y LBE7208).

Hay cuatro respuestas comunes a un mensaje de consulta COBOL: C, D, F y G


(cancelar, cancelar y volcar, cancelar y vuelco total, continuar). Los tres primeros
originan (como pasos finales) un STOP RUN implícito seguido de un mensaje de
escape LBE9001. LBE9001 indica que el programa finaliza debido a un mensaje.

Una instrucción STOP RUN implícita o explícita, o una instrucción GOBACK que
aparezca en un programa principal, provoca la finalización de toda la unidad de
ejecución COBOL. Si se emite un mensaje de escape (LBE9001) como paso final
de una unidad de ejecución, el llamador del primer programa COBOL puede super-
visarlo. (Esto es debido a que el primer programa COBOL que se ha de llamar se
convierte en el programa principal).

78 COBOL/400 Guía del usuario


Si una unidad de ejecución COBOL está compuesta por varios programas COBOL
y no COBOL, el programa principal COBOL puede emitir el mensaje de escape.
Así pues, cualquier programa no COBOL que se llame después del programa prin-
cipal no puede supervisar el mensaje de escape.

Códigos de Retorno
Cuando se especifica un archivo TRANSACTION en el programa, la cláusula FILE
STATUS de la instrucción SELECT puede contener dos nombres de datos: el
estado de archivo externo y el código de retorno (principal y secundario). Tal y
como se describe en el apartado “Estado de archivo Interno y Externo” en la
página 73, un estado de archivo puede establecerse en una de las tres formas
descritas; no obstante, el sistema establece los códigos de retorno después de
cualquier transacción de E/S que llame la gestión de datos. Por lo tanto, la
mayoría de condiciones de error que dan como resultado un mensaje del sistema
también poseen un código de retorno asociado.

Los códigos de retorno son similares a los valores del estado de archivo. Es decir,
los mensajes CPF que envía el sistema se agrupan juntos bajo supervisores de
mensaje, y cada supervisor de mensajes establece uno o más estados de archivo.

De forma similar, los mensajes CPF se agrupan juntos, y cada grupo de mensajes
genera el mismo código de retorno principal. (El código de retorno secundario no
tiene que ser el mismo).

La principal diferencia entre los estados de archivo y los códigos de retorno es que
la agrupación de mensajes CPF es distinta.

Aunque COBOL sólo establece códigos de retorno para archivos TRANSACTION,


otros tipos de archivos (como por ejemplo los archivos de impresora) también los
establecen. Se puede acceder a los códigos de retorno para estos archivos
mediante una operación ACCEPT desde I-O-FEEDBACK.

Modelos Estándar y no Estándar de Manejo de Errores


La figuras 24 y 25 muestran dos modelos de manejo de errores diferentes.

Capítulo 6. Manejo de Errores y Excepciones COBOL/400 79


La operación de E/S
no es satisfactoria

¿Error
Ye s Emitir mensaje ¿Cuál es la C,D,F Finalizar
grave no
de error respuesta a programa COBOL
supervisado? E
LBE7200 LBE7200?

No

Vo l v e r a l
Establecer programa COBOL
estado del
archivo interno

Emitir mensaje
¿Error informativo (por
Fin de archivo ¿De qué Resto S í
grave ejemplo, LBE7421);
error
supervisado? establecer estado
se trata?
de archivo en 90

Clave no No

válida

¿Existe ¿Existe
¿Existe
No No ¿Existe una No una claúsula No
una frase una frase
Declarativa de estado de
AT E N D ? I N VA L I D K E Y ?
de error? archivo?

S í S í S í S í

Ejecutar Ejecutar
Ejecutar
sentencia sentencia
declarativa
imperativa imperativa
de error
AT E N D I N VA L I D K E Y

Vuelva a l
programa COBOL

N ota: = Ir a en la página siguiente

Figura 24 (Parte 1 de 2). Manejo de Error Estándar (por Omisión)

80 COBOL/400 Guía del usuario


E m i t ir m e n -

sa je d e e rro r

L B E 7 2 0 7

¿Cuál es
D,F C F ina liza r
Realizar
la respuesta
vuelco COBOL programa COBOL
a L B E 7 2 0 7 ?

F ina liza r Vo l v e r a

programa COBOL programa COBOL

¿ E x is t e u n
V o lv e r a l
m a n e ja d o r
d ia g r a m a a n t e r io r
d e e r r o r e s ?

S í

L la m a r a l
m a n e ja d o r d e
e r r o r e s

¿ El c ó d ig o
S í
d e re to rn o es un
e s p a c io n o
v á lid o ?

N o

¿ C u á l e s
E je c u t a r e l F in a liz a r e l
e l c ó d ig o d e
v u e lc o C O B O L p ro g ra m a d e C O B O L
r e t o r n o ?

F in a liz a r e l F in a liz a r e l

p ro g ra m a d e C O B O L p ro g ra m a d e C O B O L

Figura 24 (Parte 2 de 2). Manejo de Error Estándar (por Omisión)

Capítulo 6. Manejo de Errores y Excepciones COBOL/400 81


Operación de E/S
no satisfactoria

Vo l v e r a l
programa COBOL
G

*1 ¿Error S í
Emitir mensaje ¿Cuál es Finalizar
grave no C,D,F
E de error la respuesta programa COBOL
supervisado?
error? LBE7200 a LBE7200?

No

*2 ¿Error
S í Emitir mensaje
grave Finalizar
d e e r r o r, p o r e j e m p l o
supervisado? E programa COBOL
LBE7021

No

Establecer
estado de
archivo interno

*3
¿El estado ¿Existe Ejecutar
S í S í
de archivo es una declarativa declarativa
igual a 90 de error? de error
ó 9P?

No No

¿De
Fin de archivo Resto
qué error se
trata?

Clave no
válida

¿Existe
¿Existe No ¿Existe una
No una frase No
una frase declarativa de
I N VA L I D K E Y ?
AT E N D ? error?

S í S í S í

Ejecutar Ejecutar
sentencia sentencia Ejecutar

imperativa imperativa declarativa

AT E N D I N VA L I D K E Y de error

Vo l v e r a l
programa COBOL

Figura 25. Manejo de error no estándar (disponible por la opción *NOSTDERR)

82 COBOL/400 Guía del usuario


Pueden producirse otras excepciones de E/S que COBOL no tenga previstas.
Estas excepciones también dan como resultado los mensajes CPF4xxx y CPF5xxx,
pero no hay ninguna supervisión específica para ellos. Por el contrario, son
detectados por medio de un manejador de error de E/S genérico. Este manejador
de error supervisa algunos rangos de los mensajes CPF4xxx y CPF5xxx; establece
el estado de archivo 90 y sigue a la rama Sí desde la posición *3 en la Figura 25
en la página 82.

Puede producirse algún excepción de E/S que se supervisa específicamente y que,


según el modelo de manejo de errores no estándar, es suficientemente grave
como para detener el programa. En esta situación no se establece ningún estado
de archivo.

Estas excepciones de E/S dan como resultado mensajes de escape COBOL espe-
cíficos seguidos por la finalización del programa siguen a la rama Sí desde la posi-
ción *2 en la Figura 25.
Ejemplo: CPF4238 - discrepancia INDARA entre el programa y el archivo
Hay supervisión específica para este mensaje, y el resultado es el mensaje de
error LBE7021 seguido por una finalización del programa.
Otros mensajes COBOL que entran en esta categoría son LBE7020 y
LBE7022.

Durante una operación de E/S, puede producirse un problema que el sistema no


esperaba. Estos problemas generalmente dan como resultado varios mensajes
(como por ejemplo los que comienzan por “MCH”) que se desactivan fuera del
rango CPF4xxx y CPF5xxx. Estos errores, conocidos como errores graves no
supervisados, siguen a la rama Sí desde la posición *1 en la Figura 25. Estos
errores se manejan mediante un supervisor de mensajes multiuso y dan como
resultado una finalización del programa COBOL. No se establece ningún estado
de archivo

Efectos de *STDERR y *NOSTDERR en el Estado de Archivos


Ÿ Efectos de los mensajes LBE742x y LBE702x:
Con *STDERR, el estado de archivo 90 se establece siguiendo la emisión de
mensajes LBE742x. Entonces, el programa continúa si hay un procedimiento
USE o una cláusula FILE STATUS.
Con *NOSTDERR, los mensajes LBE702x provocan que el programa finalice
sin establecer un estado de archivo.
Ÿ Finalización de un programa debido al estado archivo 9P o 90:
Con *STDERR, un estado de archivo 9P o 90 que surge de un error de E/S
(señalado mediante los mensajes CPF4xxx y CPF5xxx) no hace que el pro-
grama finalice mientras haya un procedimiento USE o una cláusula FILE
STATUS. Si no existe ninguno, se emite un mensaje de error LBE7207.
Con *NOSTDERR, un estado de archivo 9P ó 90 en la ausencia de un proce-
dimiento USE provoca la emisión del mensaje de error LBE7200 y la finali-
zación del programa.
| Ÿ Emisión de un mensaje de error para cualquier estado de archivo cuyo primer
| carácter no sea cero cuando no hay manejador de error ni la cláusula FILE
STATUS:

Capítulo 6. Manejo de Errores y Excepciones COBOL/400 83


| Con *STDERR, cualquier estado de archivo cuyo primer carácter no sea cero
| cuando no hay la frase AT END/INVALID KEY, el procedimiento USE, ni la
cláusula FILE STATUS, origina la emisión de un mensaje de consulta LBE7207
(con las opciones de respuesta C, D, F y G).
| Con *NOSTDERR, cualquier estado de archivo cuyo primer carácter no sea
| cero cuando no hay ninguna frase AT END/INVALID ni procedimiento USE
permite al programa continuar a no ser que ya haya finalizado.

Proceso de Verbos de E/S


El siguiente diagrama muestra cuándo se ejecutan el procedimiento USE y las ins-
trucciones imperativas (NOT) AT END, (NOT) INVALID KEY y NO DATA. Este
proceso se mantiene desde la Versión 1 Release 3 y es independiente del método
de manejo de errores que se elija (*STDERR o *NOSTDERR).

Observe que el estado de archivo que se muestra aquí hace referencia al estado
de archivo interno.

Se ha establecido

el estado de archivo

¿Cuál es
¿El carácter
E je c u ta r
0 el carácter 2 o su p erior No ¿Existe un S í
que se encuentra
el procedimiento
de estado más a procedimiento
más a la izquierda
U S E
la izquierda? U S E ?
es el 2?

1 S í No

E je c u ta r ¿ E x is te E je c u ta r
¿ E x is te
S í S í
la sentencia una frase la sentencia
una frase
imperativa I N VA L I D K E Y ? imperativa
AT END?
AT END I N VA L I D K E Y

No No

¿ E x is te E je c u ta r
S í
un procedimiento el procedimiento

U S E ? U S E

No

Continuar el

programa COBOL

N o ta : = Ir a en la página siguiente

Figura 26 (Parte 1 de 2). Proceso de Verbos de E/S

84 COBOL/400 Guía del usuario


¿La

¿Existe Ejecutar la
condición
S í S í
una frase sentencia imperativa
N O D ATA e s
N O D ATA ? NO DATA
verdadera?

No

¿El

carácter ¿Existe
S í S í Ejecutar la
m ás a la izq uierd a una frase
sentencia imperativa
d e l e s ta d o d e NOT I N VA L I D
N O T I N VA L I D KEY
arc hivo es
K E Y ?
el 0?

No

¿El

carácter ¿Existe Ejecutar la


S í S í
m ás a la izq uierd a
una frase sentencia imperativa
d e l e s ta d o d e
N O T AT N O T AT E N D
arc hivo es
END?
el 0?

No No

Continuar

el programa COBOL

Figura 26 (Parte 2 de 2). Proceso de Verbos de E/S

Nota: Siga las partes del diagrama que se apliquen en sus instrucciones.

Excepciones Comunes y Algunas de sus Causas


Error de datos decimales MCH1202:
Ÿ Se ha utiliza un ítem numérico elemental como un fuente cuando se han alma-
cenado anteriormente datos no válidos en él. El ítem debe tener una cláusula
VALUE, o debe utilizarse una instrucción MOVE para inicializar su valor.
Ÿ Se ha realizado un intento para colocar los datos no numéricos en un ítem
numérico.
Ÿ Se han grabado datos defectuosos a un subarchivo al principio del programa.
Los datos del subarchivo no se validarán hasta que no aparezcan en pantalla.
Es por eso que se puede producir el error 1202 en la WRITE de un registro de
control del subarchivo, pero en realidad los datos defectuosos se han colocado
antes en el subarchivo.

Excepciones del puntero MCH0601:


Ÿ Parte de un ítem de sección de enlace fuera del espacio asignado.

Capítulo 6. Manejo de Errores y Excepciones COBOL/400 85


Por ejemplo, si se establece la dirección de ítem de sección de enlace y uno o
más de estos ítems de datos elementales se extiende fuera del espacio con
una MOVE al ítem de datos elementales, se emite MCH0601.
Para obtener más información sobre cómo utilizar los punteros, consulte el
apartado “Utilización de Punteros en un Programa COBOL/400” en la
página 295.

Alineación del puntero MCH0602:


Ÿ La alineación del puntero de la Sección del almacenamiento de trabajo del pro-
grama de llamada no coincide con la alineación de la Sección de enlace del
programa llamado. La alineación tiene como límite 16 bytes.
Para obtener más información sobre cómo utilizar los punteros, consulte la “Uti-
lización de Punteros en un Programa COBOL/400” en la página 295.

Error del puntero MCH3601:


Ÿ Se realiza una referencia a un registro o un campo dentro de un registro y se
ha cerrado el archivo asociado o nunca se ha abierto.
Por ejemplo, OPEN para el archivo no ha sido satisfactorio y se ha intentado
efectuar el proceso de cualquier instrucción de E/S para ese archivo. El
estado de archivo debe comprobarse antes de que se intente cualquier otra
E/S.

Fin de solicitudes CPF2415:


Ÿ Se ha intentado acceder a la entrada desde la corriente de entrada de trabajos
mientras el sistema se ejecutaba en modalidad por lotes y no hay entrada dis-
ponible.

Recuperación de una Anomalía

Recuperación con control de compromiso


Cuando se vuelve a arrancar el sistema después de una anomalía, los archivos
bajo el control de compromiso se restauran automáticamente a su estado en el
último límite de compromiso. Para obtener información adicional acerca del control
de compromiso, consulte el apartado “Consideraciones sobre Control de
Compromiso” en la página 99.

En una anomalía de trabajo (debido a un error del usuario o del sistema) los
archivo bajo control de compromiso se restauran como parte de la finalización de
trabajo al estado de archivo del límite de compromiso anterior.

Debido a que los archivos bajo control de compromiso se retrotraen después de


una anomalía del sistema o del proceso, esta característica puede utilizarse como
ayuda en la reiniciación del sistema. Se puede crear un registro separado para
almacenar datos que pueden utilizarse si fuera necesario al reiniciar un trabajo.
Estos datos de reinicio pueden incluir ítems como totales, contadores, valores de
claves de registro, valores de claves relativos y otras informaciones importantes del
proceso de una aplicación.

Si mantiene los datos de reinicio mencionados anteriormente en un archivo bajo


control de compromiso, los datos de reinicio también se almacenarán permanen-

86 COBOL/400 Guía del usuario


temente en la base de datos cuando se emite una instrucción COMMIT. Cuando
se produce una ROLLBACK después de una anomalía de trabajo o de proceso,
puede recuperar un registro de la ampliación de proceso realizado satisfac-
toriamente antes de la anomalía. Observe que el método anterior sólo es una
técnica de programación sugerida, y no siempre será lo idóneo, dependiendo de la
aplicación.

Recuperación del Archivo TRANSACTION


En algunos casos, se pueden recuperar errores de E/S en archivos
TRANSACTION sin la intervención del operador, o sin desactivar/activar las
estaciones de trabajo o los dispositivos de comunicaciones.

En errores de E/S potencialmente recuperables en archivos TRANSACTION, el


sistema inicia la acción además de los pasos que han de tomarse en el programa
de aplicación para intentar la recuperación del error. Para obtener más infor-
mación sobres las acciones que realiza el sistema, consulte la publicación Remote
Work Station Guide.

Examinando el estado de archivo después de un operación de E/S, el programa de


aplicación puede determinar si es posible efectuar una recuperación de un error de
E/S en el archivo TRANSACTION. Si la Clave de estado de archivo tiene un valor
9N, el programa de aplicación podrá recuperar el error de E/S. Un procedimiento
de recuperación debe codificarse como parte del programa de aplicación; además,
varía dependiendo de si el archivo TRANSACTION ha adquirido un dispositivo
único o de si los dispositivos múltiples estaban conectados.

Para un archivo con un dispositivo adquirido:


1. Cierre el archivo TRANSACTION con el error de E/S.
2. Vuelva a abrir el archivo.
3. Procese los pasos necesarios para volver a intentar la operación de E/S
anómala. Esto puede implicar cierto número de pasos, dependiendo del tipo de
dispositivo de programa utilizado. (Por ejemplo, si la última operación de E/S
fue READ, deben repetirse una o más instrucciones WRITE que se procesaron
antes que la instrucción READ.) Para obtener más información acerca de los
procedimientos de recuperación, consulte la publicación ICF Programmer’s
Guide.

Para un archivo de pantalla con múltiples dispositivos adquiridos:


1. Procese DROP del dispositivo de programa que ha provocado el error de E/S
en el archivo TRANSACTION.
2. Procese ACQUIRE del mismo dispositivo de programa.
3. Consulte el paso 3 descrito anteriormente.

Para un archivo ICF con múltiples dispositivos adquiridos:


1. Procese ACQUIRE del mismo dispositivo de programa.
2. Consulte el paso 3 descrito anteriormente.

Para un archivo de pantalla con múltiples dispositivos adquiridos:

Los intentos de recuperar un programa de aplicación deben intentarse nor-


malmente sólo una vez.

Capítulo 6. Manejo de Errores y Excepciones COBOL/400 87


Si falla el intento de recuperación:
Ÿ Si el archivo tiene conectado un solo dispositivo de programa, termine el pro-
grama mediante el proceso de la instrucción STOP RUN, EXIT PROGRAM o
GOBACK e intente localizar el origen del error.
Ÿ Si el archivo tiene múltiples dispositivos de programa adquiridos, es posible
que desee efectuar una de las siguientes acciones:
– Continuar con el proceso sin el dispositivo del programa que ha provocado
el error de E/S en el archivo TRANSACTION y volver a adquirir más tarde
el dispositivo.
– Terminar el programa.

Para obtener una descripción sobre los códigos de retorno principales y secunda-
rios que pueden servir de ayuda para diagnosticar errores de E/S en el archivo
TRANSACTION, consulte el manual ICF Programmer’s Guide o la publicación Guía
para la Gestión de Datos.

La Figura 27 en la página 89 muestra un ejemplo de un procedimiento de recupe-


ración de errores.

88 COBOL/400 Guía del usuario


G X 2 1 - 9 8 9 1 - 0 U M / 0 5 0 *
A S / 4 0 0 E S P E C I F I C A C I O N E S D E D E S C R I P C I O N D E D AT O S Impreso en España
Inter national Business Machines
*El núm e ro de hojas por área de re lleno puede variar ligeramente.

Archivo Signo Descripción Página de


Instrucciones

de Grabación
Programador Fecha Tecla

(/b / R / H / J / K / S / O )
Condicionamiento

Tipo Datos/Desp lazamien to Teclado

(b/O/I/B/H/M/N/P)
Ubicación
(A/O/*)

Nombre Co ndición
Espec
Formula rio

And/Or/Coment.

N om b re Longitud Funciones

Referencia (R)
Nombre

Nú mero de

U t i l i z a c/i ó n
Posiciones
Secuencia
Reservado

D ecimales
Indicador

Indicador

Indicador
de

No (N)

No (N)
No (N)

Línea P os
Tipo

Tipo

1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 19 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0

A * A R C H I VO D E P A N T A L L A P A R A E J E MP L O D E R E C U P E R AC I ON D E E R R OR

A *

A I ND A R A

A R F O R MA T 1 C F 0 1 ( 0 1 ' F I N D E P R OG R A M A ' )

A *

A 1 2 2 8 ' I N T R OD U C I R E N T R AD A '

A I N P U T F L D 5 I 1 2 4 2

A 2 8 2 6 ' F 1 = T E R M I N A R '

Figura 27. Ejemplo de un Procedimiento de Recuperación de Errores -- DDS

Capítulo 6. Manejo de Errores y Excepciones COBOL/400 89


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ððð1ðð IDENTIFICATION DIVISION. ð2/ð1/94
2 ððð2ðð PROGRAM-ID. RECOVERY. ð2/ð5/94
3 ððð3ðð ENVIRONMENT DIVISION. ð2/ð1/94
4 ððð4ðð CONFIGURATION SECTION. ð2/ð1/94
5 ððð5ðð SOURCE-COMPUTER. IBM-AS4ðð. ð2/ð2/94
6 ððð6ðð OBJECT-COMPUTER. IBM-AS4ðð. ð2/ð2/94
7 ððð7ðð INPUT-OUTPUT SECTION. ð2/ð1/94
8 ððð8ðð FILE-CONTROL. ð2/ð1/94
9 ððð9ðð SELECT RECOVFILE ð2/ð5/94
1ð ðð1ððð ASSIGN TO WORKSTATION-RECVFILE-SI ð3/22/94
11 ðð11ðð ORGANIZATION IS TRANSACTION ð2/ð5/94
12 ðð12ðð ACCESS MODE IS SEQUENTIAL ð2/ð1/94
13 ðð13ðð FILE STATUS IS STATUS-FLD, STATUS-FLD-2 ð2/ð5/94
14 ðð14ðð CONTROL-AREA IS CONTROL-FLD. ð2/ð5/94
15 ðð15ðð SELECT PRINTER-FILE ð2/ð5/94
16 ðð16ðð ASSIGN TO PRINTER-QPRINT. ð2/ð5/94
ðð17ðð ð2/ð1/94
17 ðð18ðð DATA DIVISION. ð2/ð1/94
18 ðð19ðð FILE SECTION. ð2/ð1/94
19 ðð2ððð FD RECOVFILE ð2/ð5/94
2ð ðð21ðð LABEL RECORDS ARE OMITTED ð2/ð5/94
21 ðð22ðð DATA RECORD IS RECOV-REC. ð2/ð5/94
22 ðð23ðð ð1 RECOV-REC. ð2/ð5/94
23 ðð24ðð COPY DDS-ALL-FORMATS OF RECVFILE. ð3/22/94
24 +ððððð1 ð5 RECVFILE-RECORD PIC X(5). <-ALL-FMTS
+ððððð2\ INPUT FORMAT:FORMAT1 FROM FILE RECVFILE OF LIBRARY COBNATEX <-ALL-FMTS
+ððððð3\ <-ALL-FMTS
25 +ððððð4 ð5 FORMAT1-I REDEFINES RECVFILE-RECORD. <-ALL-FMTS
26 +ððððð5 ð6 INPUTFLD PIC X(5). <-ALL-FMTS
+ððððð6\ OUTPUT FORMAT:FORMAT1 FROM FILE RECVFILE OF LIBRARY COBNATEX <-ALL-FMTS
+ððððð7\ <-ALL-FMTS
+ððððð8\ ð5 FORMAT1-O REDEFINES RECVFILE-RECORD. <-ALL-FMTS
ðð25ðð
27 ðð26ðð FD PRINTER-FILE.
28 ðð27ðð ð1 PRINTER-REC.
29 ðð28ðð ð5 PRINTER-RECORD PIC X(132).
ðð29ðð
3ð ðð3ððð WORKING-STORAGE SECTION.
ðð31ðð
31 ðð32ðð ð1 I-O-VERB PIC X(1ð).
32 ðð33ðð ð1 STATUS-FLD PIC X(2).
33 ðð34ðð 88 NO-ERROR VALUE "ðð".
34 ðð35ðð 88 ACQUIRE-FAILED VALUE "9H".
35 ðð36ðð 88 TEMPORARY-ERROR VALUE "9N".
36 ðð37ðð ð1 STATUS-FLD-2 PIC X(4).
37 ðð38ðð ð1 CONTROL-FLD.
38 ðð39ðð ð5 FUNCTION-KEY PIC X(2).
39 ðð4ððð ð5 PGM-DEVICE-NAME PIC X(1ð).
4ð ðð41ðð ð5 RECORD-FORMAT PIC X(1ð).
41 ðð42ðð ð1 END-INDICATOR PIC 1 INDICATOR 1
42 ðð43ðð VALUE B"ð".
43 ðð44ðð 88 END-NOT-REQUESTED VALUE B"ð".
44 ðð45ðð 88 END-REQUESTED VALUE B"1".
45 ðð46ðð ð1 USE-PROC-FLAG PIC 1
46 ðð47ðð VALUE B"ð".
47 ðð48ðð 88 USE-PROC-NOT-EXECUTED VALUE B"ð".
48 ðð49ðð 88 USE-PROC-EXECUTED VALUE B"1".
49 ðð5ððð ð1 RECOVERY-FLAG PIC 1
5ð ðð51ðð VALUE B"ð".
51 ðð52ðð 88 NO-RECOVERY-DONE VALUE B"ð".
52 ðð53ðð 88 RECOVERY-DONE VALUE B"1".
53 ðð54ðð ð1 HEADER-LINE.
54 ðð55ðð ð5 FILLER PIC X(6ð)
55 ðð56ðð VALUE SPACES.
56 ðð57ðð ð5 FILLER PIC X(72)
57 ðð58ðð VALUE "ERROR REPORT".
58 ðð59ðð ð1 DETAIL-LINE.
59 ðð6ððð ð5 FILLER PIC X(15)
6ð ðð61ðð VALUE SPACES.
61 ðð62ðð ð5 DESCRIPTION PIC X(25)
62 ðð63ðð VALUE SPACES.
63 ðð64ðð ð5 DETAIL-VALUE PIC X(92)
64 ðð65ðð VALUE SPACES.

Figura 28 (Parte 1 de 3). Ejemplo de un Procedimiento de Recuperación de Errores

90 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
65 ðð66ðð ð1 MESSAGE-LINE.
66 ðð67ðð ð5 FILLER PIC X(15)
67 ðð68ðð VALUE SPACES.
68 ðð69ðð ð5 DESCRIPTION PIC X(117)
69 ðð7ððð VALUE SPACES.
7ð ðð71ðð PROCEDURE DIVISION.
ðð72ðð DECLARATIVES.
ðð73ðð HANDLE-ERRORS SECTION.
ðð74ðð USE AFTER STANDARD ERROR PROCEDURE ON RECOVFILE. .1/
ðð75ðð DISPLAY-ERROR.
71 ðð76ðð SET USE-PROC-EXECUTED TO TRUE.
72 ðð77ðð WRITE PRINTER-REC FROM HEADER-LINE AFTER ADVANCING PAGE.
73 ðð78ðð MOVE "ERROR OCCURRED IN" TO DESCRIPTION OF DETAIL-LINE.
74 ðð79ðð MOVE I-O-VERB TO DETAIL-VALUE OF DETAIL-LINE.
75 ðð8ððð WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 5 LINES.
76 ðð81ðð MOVE "FILE STATUS =" TO DESCRIPTION OF DETAIL-LINE.
77 ðð82ðð MOVE STATUS-FLD TO DETAIL-VALUE OF DETAIL-LINE. .2/
78 ðð83ðð WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 2 LINES.
79 ðð84ðð MOVE "EXTENDED FILE STATUS =" TO DESCRIPTION OF DETAIL-LINE.
8ð ðð85ðð MOVE STATUS-FLD-2 TO DETAIL-VALUE OF DETAIL-LINE.
81 ðð86ðð WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 2 LINES.
82 ðð87ðð MOVE "CONTROL-AREA =" TO DESCRIPTION OF DETAIL-LINE.
83 ðð88ðð MOVE CONTROL-FLD TO DETAIL-VALUE OF DETAIL-LINE.
84 ðð89ðð WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 2 LINES.
ðð9ððð CHECK-ERROR.
85 ðð91ðð IF TEMPORARY-ERROR AND NO-RECOVERY-DONE THEN
86 ðð92ðð MOVE "\\\ERROR RECOVERY BEING ATTEMPTED\\\" .3/
ðð93ðð TO DESCRIPTION OF MESSAGE-LINE
87 ðð94ðð WRITE PRINTER-REC FROM MESSAGE-LINE
ðð95ðð AFTER ADVANCING 3 LINES
88 ðð96ðð PERFORM ERROR-RECOVERY
ðð97ðð ELSE
89 ðð98ðð IF RECOVERY-DONE THEN .4/
9ð ðð99ðð MOVE "\\\ERROR AROSE FROM RETRY AFTER RECOVERY\\\"
ð1ðððð TO DESCRIPTION OF MESSAGE-LINE
91 ð1ð1ðð WRITE PRINTER-REC FROM MESSAGE-LINE
ð1ð2ðð AFTER ADVANCING 3 LINES
92 ð1ð3ðð MOVE "\\\PROGRAM TERMINATED\\\"
ð1ð4ðð TO DESCRIPTION OF MESSAGE-LINE
93 ð1ð5ðð WRITE PRINTER-REC FROM MESSAGE-LINE
ð1ð6ðð AFTER ADVANCING 2 LINES
94 ð1ð7ðð GO TO ERROR-EXIT
ð1ð8ðð ELSE
95 ð1ð9ðð SET NO-RECOVERY-DONE TO TRUE.
96 ð11ððð MOVE "\\\EXECUTION CONTINUES\\\"
ð111ðð TO DESCRIPTION OF MESSAGE-LINE.
97 ð112ðð WRITE PRINTER-REC FROM MESSAGE-LINE
ð113ðð AFTER ADVANCING 2 LINES.
98 ð114ðð GO TO END-OF-DECLARATIVES.
ð115ðð ERROR-RECOVERY.
99 ð116ðð SET RECOVERY-DONE TO TRUE.
1ðð ð117ðð DROP PGM-DEVICE-NAME FROM RECOVFILE.
1ð1 ð118ðð ACQUIRE PGM-DEVICE-NAME FOR RECOVFILE. .5/
ð119ðð ERROR-EXIT.
1ð2 ð12ððð CLOSE RECOVFILE
ð121ðð PRINTER-FILE.
ð122ðð END-OF-DECLARATIVES.
ð123ðð END DECLARATIVES.
ð124ðð
ð125ðð MAIN-PROGRAM SECTION.
ð126ðð MAINLINE.
1ð3 ð127ðð MOVE "OPEN" TO I-O-VERB.
1ð4 ð128ðð OPEN I-O RECOVFILE
ð129ðð OUTPUT PRINTER-FILE.
1ð5 ð13ððð PERFORM I-O-PARAGRAPH UNTIL END-REQUESTED. .6/
1ð6 ð131ðð CLOSE RECOVFILE
ð132ðð PRINTER-FILE.
1ð7 ð133ðð STOP RUN.
ð134ðð I-O-PARAGRAPH.
1ð8 ð135ðð MOVE "WRITE" TO I-O-VERB.
1ð9 ð136ðð SET USE-PROC-NOT-EXECUTED TO TRUE.
11ð ð137ðð WRITE RECOV-REC FORMAT IS "FORMAT1"
ð138ðð INDICATOR IS END-INDICATOR.
111 ð139ðð IF USE-PROC-EXECUTED AND RECOVERY-DONE THEN .7/
112 ð14ððð GO TO I-O-PARAGRAPH.

Figura 28 (Parte 2 de 3). Ejemplo de un Procedimiento de Recuperación de Errores

Capítulo 6. Manejo de Errores y Excepciones COBOL/400 91


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
113 ð141ðð MOVE "READ" TO I-O-VERB.
114 ð142ðð SET USE-PROC-NOT-EXECUTED TO TRUE.
115 ð143ðð SET NO-RECOVERY-DONE TO TRUE.
116 ð144ðð READ RECOVFILE FORMAT IS "FORMAT1"
ð145ðð INDICATOR IS END-INDICATOR. .8/
117 ð146ðð IF NO-ERROR THEN
118 ð147ðð PERFORM SOME-PROCESSING.
ð148ðð SOME-PROCESSING.
119 ð149ðð (INSERT SOME DATABASE PROCESSING, FOR EXAMPLE).
\ \ \ \ \ F I N D E F U E N T E \ \ \ \ \

Figura 28 (Parte 3 de 3). Ejemplo de un Procedimiento de Recuperación de Errores

.1/ Define el proceso que se produce cuando hay un error de E/S en


RECOVFILE.
.2/ Imprime información para ayudar en el diagnóstico del problema.
.3/ Si el estado de archivo es igual a 9N (error transitorio) y no se ha intentado
ninguna recuperación anterior de error para esta operación de E/S, se
intenta ahora la recuperación del error.
.4/ Para evitar un bucle en un programa, ahora no se intenta la recuperación si
se ha intentado anteriormente.
.5/ La recuperación consiste en desactivar y volver a adquirir el dispositivo de
programa en el que se ha producido el error de E/S.
.6/ La tarea principal del programa consiste en escribir y leer en un dispositivo
hasta que el usuario indique un final de programa pulsando F1.
.7/ Si la operación WRITE ha sido anómala pero se ha efectuado la recupe-
ración, se intenta de nuevo WRITE.
.8/ Si la operación READ ha sido anómala, el proceso continuará escribiendo
otra vez en el dispositivo, e intentando luego de nuevo READ.

92 COBOL/400 Guía del usuario


Capítulo 7. Gestión de Archivos y Datos
Este capítulo contiene información general acerca de la gestión de archivos y datos
que le pueden ser útiles al crear aplicaciones COBOL/400.

Este capítulo describe:


Ÿ Las características de los programas COBOL/400 en el sistema AS/400, tanto
independientes de dispositivos como dependientes de dispositivos
Ÿ Funciones de spooling de entrada y salida
Ÿ Consideraciones para la alteración temporal del sistema
Ÿ Consideraciones para el bloqueo de archivos y registros
Ÿ Control de compromiso
Ÿ Bloqueo y desbloqueo de registros
Ÿ Estado de archivos y áreas de realimentación
Ÿ Información general acerca de la utilización de archivos descritos externamente
y archivos descritos por el programa en un programa COBOL/400
Ÿ La instrucción COPY de Formato 2 (Opción DD, DDR, DDS o DDSR).

El número máximo de archivos que el usuario puede definir y abrir en una serie de
archivos utilizados por un programa COBOL es de 99. Si utiliza opciones de
visualización ampliada, el número máximo es 98. Para más información acerca de
la especificación de las opciones de visualización ampliada, consulte la página 23 .

Dependencia e Independencia de Dispositivo


El elemento clave para todas las operaciones de E/S en el sistema AS/400 es el
archivo. Todos los archivos utilizados se definen para el sistema operativo. El
sistema operativo mantiene una descripción de cada archivo utilizado por un pro-
grama.

Los archivos se mantienen en línea y sirven como enlace de conexión entre un


programa y el dispositivo utilizado para E/S. La asociación de dispositivos reales
se realiza cuando se procesa el archivo. En determinados casos, este tipo de
control de E/S permite que el usuario cambie el atributo del archivo (y en algunos
casos, el dispositivo) utilizado en un programa sin cambiar dicho programa.

En el lenguaje COBOL/400, el nombre de archivo especificado en la entrada


ASSIGNMENT-NAME de la cláusula ASSIGN de la entrada de control del archivo
se utiliza para direccionar al archivo. Este nombre del archivo se direcciona a la
descripción de archivos del sistema:

P ro g ra m a e n C O B O L F IL E X

S E L E C T n o m b r e a r c h iv o
A S S IG N T O P R IN T E R -F IL E X D E V (Q P R IN T )
( n o m b r e - a s ig n a c ió n )

Im p re s o ra

 Copyright IBM Corp. 1994 93


El nombre de dispositivo COBOL en la cláusula ASSIGN define las funciones
COBOL que pueden procesarse en el archivo seleccionado. En tiempo de compi-
lación, ciertas funciones COBOL son válidas sólo para un nombre de dispositivo
COBOL específico; en este aspecto, COBOL es dependiente de dispositivo. Los
ejemplos siguientes son de dependencia de dispositivo:
Ÿ Las operaciones SUBFILE sólo son válidas para un dispositivo
WORKSTATION.
Ÿ Los indicadores sólo son válidos para dispositivos WORKSTATION o
FORMATFILE.
Ÿ LINAGE sólo es válida para el dispositivo PRINTER.
Ÿ OPEN INPUT WITH NO REWIND sólo es válida para el dispositivo TAPEFILE.

Por ejemplo, supongamos que el nombre de archivo FILEY se asocia en el pro-


grama COBOL con el dispositivo FORMATFILE. El dispositivo FORMATFILE es
un tipo de dispositivo independiente. Por lo tanto, no hay ninguna especificación
de línea o control válida en el programa COBOL en la instrucción WRITE
ADVANCING. Cuando el programa se ejecuta, el dispositivo de E/S real se espe-
cifica en la descripción de FILEY. Por ejemplo, el dispositivo puede ser una impre-
sora; únicamente se utilizaría la línea por omisión y el control de páginas o
aquellos definidos en el DDS:

P ro g ra m a e n C O B O L F IL E Y

S E L E C T n o m b r e - a r c h iv o D E V (Q P R IN T )
A S S IG N T O F O R M A T F IL E -F IL E Y

Im p re s o ra

Los mandatos CL pueden utilizarse para alterar temporalmente un parámetro en la


descripción de archivo especificada o para volver a dirigir un archivo en tiempo de
compilación o ejecución. La redirección de archivos permite que el usuario especi-
fique un archivo en tiempo de compilación y otro archivo en tiempo de ejecución:

F IL E X

T ie m p o d e
C o m p ila c ió n D E V (Q P R IN T )

P ro g ra m a e n C O B O L

M a n d a to d e A lte r a c ió n T e m p o r a l:
S E L E C T n o m b r e - a r c h iv o O V R D K T F F IL E (F IL E X ) T O F IL E (F IL E A )
A S S IG N T O F O R M A T F IL E -F IL E X
F IL E A
D is q u e te
T ie m p o d e D E V (Q D K T )
E je c u c ió n

En el ejemplo anterior, el mandato Alterar Temporalmente a Archivo de Disquete


(OVRDKTF) permite que el programa se ejecute con un archivo de dispositivo
completamente distinto al que se especificó en tiempo de compilación.

94 COBOL/400 Guía del usuario


No todas las redirecciones de archivos o alteraciones temporales son válidas. En
tiempo de ejecución, se produce una comprobación para asegurar que las especifi-
caciones dentro del programa COBOL sean válidas para el archivo a procesar. El
sistema operativo OS/400 permite algunas redirecciones de archivos incluso si el
programa contiene dispositivos específicos. Por ejemplo, si el nombre del disposi-
tivo COBOL es PRINTER y el archivo real que utiliza el programa no es una impre-
sora, el sistema operativo ignora las especificaciones de salto y espaciado de
impresión del COBOL.

Hay otras redirecciones de archivo que no están permitidas por el sistema ope-
rativo y que provocan la terminación del programa. Por ejemplo, si el nombre de
dispositivo COBOL es DATABASE o DISK y se especifica una operación READ
por clave en el programa, el programa se termina si el archivo real que utiliza el
programa no es un archivo de disco o de base de datos.

Consulte el apartado “Consideraciones acerca de la Alteración Temporal del


Sistema” en la página 97 para obtener información más detallada acerca de las
redirecciones y las alteraciones temporales de archivos válidas.

Spooling
El sistema AS/400 proporciona la utilización de funciones de spool de entrada y
salida. Cada descripción de archivo AS/400 contiene un atributo de spool que
determina si se utiliza el spooling para el archivo en tiempo de ejecución. El pro-
grama COBOL no sabe que está utilizando el spool. El lector o el transcriptor de
spool determinan el dispositivo físico real desde el que se lee un archivo o al que
se graba un archivo. Consulte la publicación Guía para la Gestión de Datos para
obtener una información más detallada acerca del spooling.

Spool de Salida
El spool de salida es válido para los trabajos por lotes e interactivos. La descrip-
ción del archivo que se especifica en COBOL mediante el nombre del sistema con-
tiene la especificación para el spool, tal como se muestra en el ejemplo siguiente:

Capítulo 7. Gestión de Archivos y Datos 95


P ro g ra m a e n C O B O L A r c h iv o C o la d e
Q P R IN T S a lid a

S E L E C T n o m b r e - a r c h iv o S P O O L (*Y E S ) Q P R IN T
A S S IG N T O P R IN T E R -Q P R IN T O U T Q (Q P R IN T )

T ie m p o d e E je c u c ió n

T r a n s c r ip to r
d e Im p r e s ió n

T ie m p o d e
T r a n s c r ip to r
d e Im p r e s ió n

D is p o s itiv o
Im p re s o ra

Los mandatos de alteración temporal de archivos pueden utilizarse en tiempo de


ejecución para alterar temporalmente las funciones que se especifican en la des-
cripción de archivos, como el número de copias a imprimir. Además, el soporte de
spooling de AS/400 le permitirá redirigir un archivo una vez se ha ejecutado el pro-
grama. Por ejemplo, podrá dirigir la salida de impresora a un dispositivo distinto,
como puede ser un disquete.

Spool de Entrada
El spool de entrada sólo es válido para los archivos de datos incorporados en tra-
bajos por lotes. Si los datos de entrada que lee COBOL provienen de un archivo
en spool, COBOL no sabe desde qué dispositivo se han puesto en spool los datos.

Los datos se leen desde un archivo incorporado en spool:

D is q u e te

F IL E A P ro g ra m a e n C O B O L
*N O
D E V (Q D K T ) S E L E C T n o m b r e - a r c h iv o
Spool A S S IG N T O D IS K E T T E -F IL E A
S P O O L (*Y E S )

*Y E S

A r c h iv o
en Spool

Consulte la publicación Guía para la Gestión de Datos para obtener más infor-
mación acerca de los archivos de datos incorporados.

96 COBOL/400 Guía del usuario


Consideraciones acerca de la Alteración Temporal del Sistema
Debe especificar cualquier alteración temporal antes de que el programa COBOL
abra el archivo. El sistema utiliza el mandato de alteración temporal de archivo
para determinar el archivo que se va a abrir y los atributos del archivo.

La forma más sencilla de alterar temporalmente un archivo es alterar tempo-


ralmente algunos atributos de dicho archivo. Por ejemplo, se especifica
FILE(OUTPUT) con COPIES(2) cuando se crea un archivo de impresora. Antes de
ejecutar un programa COBOL, el número de copias impresas de salida puede cam-
biarse a 3. El mandato de alteración temporal es el siguiente:
OVRPRTF FILE(OUTPUT) COPIES(3)

Otra manera de alterar temporalmente un archivo es redirigiendo el programa


COBOL para que acceda a un archivo distinto. Cuando la alteración temporal redi-
rige el programa a un archivo del mismo tipo (como, por ejemplo, de un archivo de
impresora a otro archivo de impresora) el archivo se procesa de la misma manera
que el archivo original.

Cuando la alteración temporal redirige el programa a un archivo de tipo diferente,


el archivo alterado temporalmente se procesa de la misma forma que se proce-
saría el archivo original. Las especificaciones dependientes de dispositivo en el
programa COBOL se ignoran, y el sistema toma los valores por omisión.

No todas las redirecciones de archivos son válidas. Por ejemplo, un archivo


indexado para un programa COBOL sólo puede alterarse temporalmente a otro
archivo indexado con una vía de acceso por clave.

Al alterar temporalmente un archivo de base de datos para procesar todos los


miembros se puede conseguir el proceso de múltiples miembros para un archivo
de base de datos. Observe las excepciones siguientes:
Ÿ No se puede alterar temporalmente un archivo fuente de base de datos utili-
zado para un programa COBOL para procesar todos los miembros. Al especi-
ficar OVRDBF MBR(*ALL) se acaba la compilación.
Ÿ No se puede alterar temporalmente un archivo de base de datos utilizado para
una instrucción COPY para procesar todos los miembros. Al especificar
OVRDBF MBR(*ALL) se ignorará la instrucción COPY.

El programador COBOL debe asegurarse de que las alteraciones temporales se


apliquen convenientemente. Para más información acerca de las redirecciones de
archivo válidas, las características dependientes de dispositivo ignoradas y los
valores por omisión asumidos, consulte la publicación Guía para la Gestión de
Datos.

Bloqueo de Archivos y Registros por COBOL


El sistema operativo permite que un estado de bloqueo (exclusivo, de lectura admi-
sible exclusiva, compartido sin actualización o compartido para lectura) se sitúe en
un archivo utilizado durante el paso de un trabajo. El archivo puede situarse en un
estado de bloqueo con el mandato Asignar Objeto (ALCOBJ).

Por omisión, el sistema operativo coloca los estados de bloqueo siguientes en


archivos de base de datos cuando los programas COBOL abren los archivos:

Capítulo 7. Gestión de Archivos y Datos 97


Tipo OPEN Estado de Bloqueo
INPUT Compartido para lectura
I/O Compartido para actuali-
zación
EXTEND Compartido para actuali-
zación
OUTPUT Compartido para actuali-
zación

La modalidad EXTEND es un método para añadir registros al final de un archivo


secuencial cuando se abre el archivo.

El estado de bloqueo compartido para lectura permite que otro usuario abra el
archivo con un estado de bloqueo compartido para lectura, compartido para actuali-
zación, compartido sin actualización y de lectura admisible exclusiva, pero el
usuario no puede especificar el uso exclusivo del archivo. El estado de bloqueo
compartido para actualización permite que otro usuario abra el archivo con un
estado de bloqueo compartido para lectura o compartido para actualización.

El sistema operativo coloca el bloqueo compartido para lectura en un archivo de


dispositivo y un estado de bloqueo de lectura admisible exclusiva en el dispositivo.
Otro usuario puede abrir el archivo pero no puede utilizar el mismo dispositivo.
Nota: Cuando un programa COBOL abre un archivo físico para OUTPUT, ese
archivo estará sujeto a un bloqueo exclusivo durante el tiempo necesario
para borrar el miembro.

Para más información acerca de la asignación de recursos y estados de bloqueo,


consulte la publicación Guía para la Gestión de Datos.

Bloqueo y Liberación de Registros


Cuando COBOL lee un registro de base de datos y el archivo se abre para E/S, se
coloca un bloqueo en ese registro de forma que otro programa no pueda actuali-
zarlo. Es decir, otro programa puede leer el registro si abre un archivo para
entrada, pero no si abre el archivo para E/S.

Para más información acerca de la duración del bloqueo de registro con o sin
control de compromiso, consulte la Tabla 2 en la página 101.

Para evitar que la instrucción READ bloquee registros en archivos abiertos en


modalidad de E/S (actualización), puede utilizar la frase NO LOCK. La instrucción
READ WITH NO LOCK desbloquea los registros bloqueados por una instrucción
READ anterior. Para más información acerca de esta frase, consulte la sección de
la instrucción READ en la publicación COBOL/400 Reference.

Para un archivo lógico basado en un archivo físico, el bloqueo se coloca en el


registro del archivo físico. Si un archivo lógico se basa en más de un archivo
físico, se coloca un bloqueo en un registro en cada archivo físico.

Este bloqueo no sólo se aplica para otros programas, sino también para el pro-
grama original si intenta actualizar el mismo registro físico subyacente a través de
un segundo archivo.
Nota: Cuando un archivo con organización indexada o relativa se abre para E/S,
utilizando acceso al azar o dinámico, una operación de E/S anómala en

98 COBOL/400 Guía del usuario


cualquier verbo de E/S excepto WRITE también desbloquea el registro.
Una operación WRITE no se considera una operación de actualización; por
lo tanto, no se libera el bloqueo de registro.

Para más información acerca de la liberación de registros de base de datos leídos


para la actualización, consulte la publicación Guía para la Gestión de Datos.

Posibilidad de Compartir una Vía de Datos Abierta


Si ya ha abierto un archivo a través de otro programa en el paso de
direccionamiento, el programa COBOL puede utilizar la misma Vía de de Datos
Abierta (ODP) para acceder al archivo.
Nota: Los pasos de direccionamiento se describen en la publicación
Programación: Guía para la Gestión de Trabajos; un trabajo contiene, gene-
ralmente, un solo paso de direccionamiento.

Las reglas siguientes se aplican para las ODP compartidas:


1. Debe especificar SHARE(*YES) en el mandato que crea el archivo, en un
mandato de cambio, o en un mandato de alteración temporal para el archivo.
2. Una vez que un programa abre por primera vez una ODP compartida y perma-
nece abierta, las operaciones OPEN siguientes dentro del mismo paso de
direccionamiento se ejecutan más rápidamente que las operaciones OPEN
estándar. La velocidad de otras operaciones de E/S que no sean la de aper-
tura no se verá afectada.
3. La utilización del archivo dentro de programas diferentes debe ser coherente.
Por ejemplo, si un programa que no sea COBOL realiza una operación READ
PREVIOUS utilizando E/S bloqueada, la instrucción COBOL READ podría
recuperar el registro que precede a la posición del archivo actual y no el
registro que sigue a la posición del archivo actual.

Consideraciones sobre Control de Compromiso


El control de compromiso es una función que permite:
Ÿ La sincronización de cambios para archivos de base de datos dentro del
mismo trabajo
Ÿ La cancelación de los cambios que no deben entrarse de modo permanente en
la base de datos
Ÿ El bloqueo de registros que están modificándose hasta que finalicen los
cambios
Ÿ Las técnicas para la recuperación de anomalías del trabajo o del sistema.

En algunas aplicaciones, sería deseable sincronizar los cambios para los registros
de base de datos. Si el programa determina que los cambios son válidos, estos se
efectúan permanentemente en la base de datos (se procesa una instrucción
COMMIT). Si los cambios no son válidos, o si se produce un problema durante el
proceso, los cambios pueden cancelarse (se procesa una instrucción ROLLBACK).
Tenga en cuenta que cuando se borra un archivo después de abrirse para
OUTPUT, el proceso de una instrucción ROLLBACK no restaura los registros
borrados para el archivo. Los cambios realizados en los registros de un archivo
que no está bajo el control de compromiso siempre son permanentes. A tales
cambios no les afectan nunca las instrucciones COMMIT o ROLLBACK poste-
riores.

Capítulo 7. Gestión de Archivos y Datos 99


Cada punto en el que se procese satisfactoriamente una instrucción COMMIT o
ROLLBACK es un límite de compromiso. Si todavía no se ha emitido ninguna ins-
trucción COMMIT o ROLLBACK en un programa, la primera apertura de cualquier
archivo bajo el control de compromiso crea un límite de compromiso. El compro-
miso o retroacción de cambios afecta únicamente a aquellos cambios que se
hayan hecho desde el anterior límite de compromiso.

La sincronización de cambios en los límites de compromiso hace más fáciles los


procedimientos de arranque o de recuperación después de una anomalía. Para
más información, consulte el apartado “Recuperación de una Anomalía” en la
página 86.

Cuando el control de compromiso se utiliza para archivos de base de datos, los


registros de dichos archivos están sujetos a un nivel de bloqueo superior LCKLVL
(*ALL) o a un nivel de bloqueo inferior LCKLVL(*CHG). Con un nivel de bloqueo
inferior (*CHG), se bloquean todos los registros que se cambian (o vuelven a gra-
barse, se suprimen o se añaden en archivos bajo el control de compromiso) se
bloquean hasta que se procesa satisfactoriamente una instrucción COMMIT o
ROLLBACK. Con un nivel de bloqueo superior (*ALL), se bloquean todos los
registros accedidos, tanto para entrada como para salida, hasta que se procesa
satisfactoriamente una instrucción COMMIT o una ROLLBACK. Para ambos
niveles de bloqueo de registro, ningún otro trabajo puede modificar los datos en
registros bloqueados hasta que la instrucción COMMIT o la ROLLBACK se haya
completado satisfactoriamente. (Un registro bloqueado sólo puede modificarse
dentro del mismo trabajo y a través del mismo archivo físico o lógico.)

El nivel de bloqueo también controla si pueden leerse los registros bloqueados.


Con un nivel de bloqueo superior (*ALL), no podrá leer registros bloqueados en un
archivo de base de datos. Con un nivel de bloqueo inferior (*CHG), podrá leer
registros bloqueados en un archivo de base de datos, siempre que el archivo se
abra como INPUT en el trabajo, o que se abra como E/S y se utilice READ WITH
NO LOCK.

| Puede obtenerse un tercer nivel de bloqueo especificando LCKLVL(*CS), en el que


| se bloquean todos los registros accedidos desde archivos bajo control de compro-
| miso. Los registros que no se actualizan o se suprimen sólo se bloquean hasta
| que se haya accedido a un registro distinto. Los registros actualizados, añadidos o
| suprimidos se bloquean hasta que la transacción se ha comprometido o retrotraído.

El resto de los trabajos, en los que los archivos no están bajo control de compro-
miso, siempre pueden leer registros bloqueados, prescindiendo del nivel de
bloqueo utilizado, con tal de que los archivos se abran como INPUT. Debido a que
en algunos casos es posible que otros trabajos lean registros bloqueados, puede
accederse a los datos antes de que estén permanentemente comprometidos para
una base de datos. Si se procesa una instrucción ROLLBACK después de que
otro trabajo haya leído registros bloqueados, los datos accedidos no reflejarán el
contenido de la base de datos.

La Tabla 2 muestra las consideraciones sobre el bloqueo de registros para


archivos con y sin control de compromiso.

100 COBOL/400 Guía del usuario


Tabla 2. Consideraciones sobre el bloqueo de registros con y sin control de compromiso
VERBO MODALIDAD NIVEL BLOQUEO DURACIÓN DEL BLOQUEO DE REGISTROS
APERTURA Siguiente COMMIT o
Operación E/S ROLLBACK
│ │
6 6

DELETE I-O DELETE │


.
Sin control de compromiso │
─────────────────────────────────────────────────────────5
Con control de compromiso *CHG ────────────────────────────┼────────────────────────────5

*ALL
READ INPUT READ │
.
Sin control de compromiso │
.
Con control de compromiso *CHG ────────────────────────────┼────────────────────────────5

*ALL
READ I-O READ │
.
WITH Sin control de compromiso │
NO .
Con control de compromiso *CHG ────────────────────────────┼────────────────────────────5
LOCK
*ALL
READ I-O READ │
───────────────────────────5
Sin control de compromiso │
───────────────────────────5
Con control de compromiso *CHG ────────────────────────────┼─────────────────────────────5

*ALL
REWRITE I-O REWRITE │
.
Sin control de compromiso │
─────────────────────────────────────────────────────────5
Con control de compromiso *CHG ────────────────────────────┼────────────────────────────5

*ALL
START INPUT START │
.
Sin control de compromiso │
.
Con control de compromiso *CHG ────────────────────────────┼────────────────────────────5

*ALL
START I-O START │
───────────────────────────5
Sin control de compromiso │
───────────────────────────5
Con control de compromiso *CHG ────────────────────────────┼────────────────────────────5

*ALL
WRITE I-O WRITE │
.
Sin control de compromiso │
─────────────────────────────────────────────────────────5
Con control de compromiso *CHG ────────────────────────────┼────────────────────────────5

*ALL
WRITE OUTPUT WRITE │
.
Sin control de compromiso │
─────────────────────────────────────────────────────────5
Con control de compromiso *CHG ────────────────────────────┼────────────────────────────5

*ALL

Un archivo bajo control de compromiso puede cerrarse o abrirse sin afectar al


estado de los cambios realizados desde el último límite de compromiso. Debe
emitirse aún una instrucción COMMIT para realizar los cambios permanentes, o
emitir una ROLLBACK para cancelar los cambios. Una instrucción COMMIT,
cuando se procesa, deja los archivos en el mismo estado, abierto o cerrado, que
tenían antes del proceso.

Todos los archivos bajo el control de compromiso dentro del mismo trabajo deben
registrarse por diario en el mismo diario. Para más información acerca de la
gestión de diario y de sus funciones relacionadas, así como acerca del control de
compromiso, consulte la publicación Advanced Backup and Recovery Guide.

El control de compromiso también debe especificarse fuera del lenguaje COBOL


mediante el lenguaje de control OS/400 (CL). El mandato Arrancar Control de
Compromiso (STRCMTCTL) establece la posibilidad de control de compromiso y
establece el nivel de bloqueo de registro a nivel superior (*ALL) o a nivel inferior
(*CHG). El mandato STRCMTCTL no inicia automáticamente el control de compro-
miso de un archivo. Dicho archivo también debe especificarse en la cláusula
COMMITMENT CONTROL del párrafo I-O-CONTROL en el programa COBOL. El

Capítulo 7. Gestión de Archivos y Datos 101


entorno de control de compromiso se termina normalmente utilizando el mandato
Finalizar Control de Compromiso (ENDCMTCTL). Esto hace que se cancelen
todos los cambios no comprometidos para archivos de base de datos bajo el
control de compromiso. (Se procesa una instrucción ROLLBACK). Consulte la
publicación CL Reference para más información acerca de los mandatos
STRCMTCTL y ENDCMTCTL.

Para más información acerca del control de compromiso, consulte la publicación


Advanced Backup and Recovery Guide.
Nota: La capacidad de evitar la lectura de datos no comprometidos que hayan
sido cambiados es una función de control de compromiso y sólo está dispo-
nible si se trabaja bajo control de compromiso. La extensión de control de
compromiso no modifica el soporte normal de la base de datos (sin com-
promiso), y permite leer registros bloqueados cuando se lee un archivo
abierto únicamente para entrada. Intente utilizar los archivos de forma
coherente. Normalmente, los archivos deben ejecutarse siempre bajo el
control de compromiso o no ejecutarse nunca bajo control de compromiso.

La Figura 29 en la página 103 muestra una utilización posible de control de com-


promiso en un entorno bancario. El programa procesa las transacciones para la
transferencia de fondos de una cuenta a otra. Si no se producen problemas
durante la transacción, se comprometen los datos para el archivo de base de
datos. Si la transferencia no puede realizarse debido a un número de cuenta inco-
rrecto o a fondos insuficientes, se emite una instrucción ROLLBACK para cancelar
los cambios.

102 COBOL/400 Guía del usuario


AS/400 ESPECIFICACIONES DE DESCRIPCION DE DATOS GX21-9891-0 UM/050*
Impreso en España
International Business Machines
*El número de hojas por área de relleno puede variar ligeramente.

Archivo Signo Descripción Página de


Instrucciones
de Grabación
Programador Fecha Tecla

T i p o N o m b r e o E s p e c (/b / R / H / J / K / S / O )
Condicionamiento

Tipo Datos/Desplazamiento Teclado


Ubicación

U t i l i z a c/i ó n ( b / O / I / B / H / M / N / P )
And/Or/Com ent. (A/O/*)

Nombre Condición
Tipo de Formula rio

Nom bre Longitud Funciones

Referencia (R)
Nú mero d e
Secuencia

Posiciones
Reservado

D ecimales
Indicador

Indicador

Indicador
No (N)

No (N)
No (N)

Línea Pos

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80

A * N OM B R E D E A R CH I VO P AN T A L L A D E SOL I C I T UD ' ACC T F M T S '


A *
A I ND A R A
A R ACC T P M T
A T E X T ( ' SOL I C I T UD CU E N T A CL I E N T E ' )
A
A CA 0 1 ( 1 5 ' F I N D E P R OG R A M A ' )
A P U T R E T A I N OV E R L A Y
A 1 3 ' AC T U A L I Z MA E S T R A CU E N T A '
A 3 3 ' N UME R O CU E N T A OR I GE N '
A A C C T F R OM 5 Y 0 I 3 2 3CH ECK ( ME )
A 9 9 E R RM S G ( ' N UME R O CU E N T A OR I GE N +
A NO VA L I DO ' 9 9 )
A 9 8 E R R M S G ( ' F ONDO S I N S U F I C I E N T E S E N +
A CU E N T A OR I G E N ' 9 8 )
A 4 3 ' N UME R O CU E N T A D E S T I NO '
A ACC T T O 5 Y 0 I 4 2 3CH ECK ( ME )
A 9 7 E R RM S G ( ' N UME R O CU E N T A D E S T I NO +
A NO VA L I DO ' 9 7 )
A 5 3 ' I MP OR T E T R AN S F E R I DO '
A T R A N S AM T 1 0 Y 0 2 I 5 2 3
A R E R R FMT
A 9 6 6 5 ' E S T ADO A R C H I VO NO VA L I DO '
A 9 6 7 5 ' T ECL A D E GR A V AC I ÓN NO VA L I DA '
A
A
A
A
A
A
A
A
A
A
A

Figura 29. Ejemplo de Utilización de Control de Compromiso --DDS

Capítulo 7. Gestión de Archivos y Datos 103


5763CB1 V3RðM5 Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ððð1ðð IDENTIFICATION DIVISION. ð2/ð1/94
2 ððð2ðð PROGRAM-ID. ACCOUNT. ð2/ð4/94
3 ððð3ðð AUTHOR. PROGRAMMER NAME. ð1/27/94
4 ððð4ðð INSTALLATION. COBOL DEVELOPMENT CENTRE. ð1/27/94
5 ððð5ðð DATE-WRITTEN. ð2/ð2/88. ð2/ð4/94
8 ðððð8ð DATE-COMPILED. ð5/24/92 14:ð2:39 . ð3/ð1/94
7 ððð7ðð ENVIRONMENT DIVISION. ð1/27/94
8 ððð8ðð CONFIGURATION SECTION. ð1/27/94
9 ððð9ðð SOURCE-COMPUTER. IBM-AS4ðð. ð1/27/94
1ð ðð1ððð OBJECT-COMPUTER. IBM-AS4ðð. ð1/27/94
11 ðð11ðð INPUT-OUTPUT SECTION. ð1/27/94
12 ðð12ðð FILE-CONTROL. ð1/27/94
13 ðð13ðð SELECT ACCOUNT-FILE ASSIGN TO DATABASE-ACCTMST ð2/ð4/94
14 ðð14ðð ORGANIZATION IS INDEXED ð2/ð4/94
15 ðð15ðð ACCESS IS DYNAMIC ð2/ð4/94
16 ðð16ðð RECORD IS EXTERNALLY-DESCRIBED-KEY ð2/ð4/94
17 ðð17ðð FILE STATUS IS ACCOUNT-FILE-STATUS. ð2/ð4/94
18 ðð18ðð SELECT DISPLAY-FILE ASSIGN TO WORKSTATION-ACCTFMTS-SI .1/ ð2/ð4/94
19 ðð19ðð ORGANIZATION IS TRANSACTION. ð2/ð4/94
ðð2ððð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ð2/ð4/94
2ð ðð21ðð CONTROL DE E-S ð2/ð4/94
21 ðð22ðð CONTROL DE COMPROMISO PARA ACCOUNT-FILE. .2/ ð2/ð4/94
ðð23ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ð2/ð4/94
22 ðð24ðð DATA DIVISION. ð2/ð4/94
23 ðð25ðð FILE SECTION. ð2/ð4/94
24 ðð26ðð FD ACCOUNT-FILE ð2/ð4/94
25 ðð27ðð LABEL RECORDS ARE STANDARD. ð2/ð4/94
26 ðð28ðð ð1 ACCOUNT-RECORD. ð2/ð4/94
27 ðð29ðð COPY DDS-ALL-FORMATS OF ACCTMST. ð2/ð4/94
28 +ððððð1 ð5 ACCTMST-RECORD PIC X(82). <-ALL-FMTS
+ððððð2\ FORMATO E-S:ACCNTREC DESDE ARCHIVO ACCTMST DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ððððð3\ <-ALL-FMTS
+ððððð4\DEFINICIONES CLAVE PARA FORMATO DE REGISTRO ACCNTREC <-ALL-FMTS
+ððððð5\ NÚMERO NOMBRE RECUPERACIÓN TIPO SECALT <-ALL-FMTS
+ððððð6\ ððð1 ACCNTKEY ASCENDENTE CON SIGNO NO <-ALL-FMTS
29 +ððððð7 ð5 ACCNTREC REDEFINES ACCTMST-RECORD. <-ALL-FMTS
3ð +ððððð8 ð6 ACCNTKEY PIC S9(5). <-ALL-FMTS
31 +ððððð9 ð6 NAME PIC X(2ð). <-ALL-FMTS
32 +ðððð1ð ð6 ADDR PIC X(2ð). <-ALL-FMTS
33 +ðððð11 ð6 CITY PIC X(2ð). <-ALL-FMTS
34 +ðððð12 ð6 STATE PIC X(2). <-ALL-FMTS
35 +ðððð13 ð6 ZIP PIC S9(5). <-ALL-FMTS
36 +ðððð14 ð6 BALANCE PIC S9(8)V9(2). <-ALL-FMTS
ðð3ððð
37 ðð31ðð FD DISPLAY-FILE
38 ðð32ðð LABEL RECORDS ARE STANDARD.
39 ðð33ðð ð1 DISPLAY-REC.
4ð ðð34ðð COPY DDS-ALL-FORMATS OF ACCTFMTS.
41 +ððððð1 ð5 ACCTFMTS-RECORD PIC X(2ð). <-ALL-FMTS
+ððððð2\ FORMATO ENTRADA:ACCTPMT DESDE ARCHIVO ACCTFMTS DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ððððð3\ SOLICITUD CUENTA CLIENTE <-ALL-FMTS
42 +ððððð4 ð5 ACCTPMT-I REDEFINES ACCTFMTS-RECORD. <-ALL-FMTS
43 +ððððð5 ð6 ACCTFROM PIC S9(5). <-ALL-FMTS
44 +ððððð6 ð6 ACCTTO PIC S9(5). <-ALL-FMTS
45 +ððððð7 ð6 TRANSAMT PIC S9(8)V9(2). <-ALL-FMTS
+ððððð8\ FORMATO SALIDA:ACCTPMT DESDE ARCHIVO ACCTFMTS DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ððððð9\ SOLICITUD CUENTA CLIENTE <-ALL-FMTS
+ðððð1ð\ ð5 ACCTPMT-O REDEFINES ACCTFMTS-RECORD. <-ALL-FMTS
+ðððð11\ FORMATO ENTRADA:ERRFMT DESDE ARCHIVO ACCTFMTS DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ðððð12\ <-ALL-FMTS
+ðððð13\ ð5 ERRFMT-I REDEFINES ACCTFMTS-RECORD. <-ALL-FMTS
+ðððð14\ FORMATO SALIDA:ERRFMT DESDE ARCHIVO ACCTFMTS DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ðððð15\ <-ALL-FMTS
+ðððð16\ ð5 ERRFMT-O REDEFINES ACCTFMTS-RECORD. <-ALL-FMTS
46 ðð35ðð WORKING-STORAGE SECTION.
47 ðð36ðð 77 ACCOUNT-FILE-STATUS PIC X(2).

Figura 30 (Parte 1 de 3). Ejemplo de la Utilización del Control de Compromiso

104 COBOL/400 Guía del usuario


5763CB1 V3RðM5 AS/4ðð COBOL Source
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
48 ðð37ðð 77 IND-ON PIC 1 VALUE B"1".
49 ðð38ðð 77 IND-OFF PIC 1 VALUE B"ð".
5ð ðð39ðð ð1 DISPFILE-INDICS.
51 ðð4ððð COPY DDS-ALL-FORMATS-INDIC OF ACCTFMTS. .3/
52 +ððððð1 ð5 ACCTFMTS-RECORD. <-ALL-FMTS
+ððððð2\ FORMATO ENTRADA:ACCTPMT DESDE ARCHIVO ACCTFMTS DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ððððð3\ SOLICITUD CUENTA CLIENTE <-ALL-FMTS
53 +ððððð4 ð6 ACCTPMT-I-INDIC. <-ALL-FMTS
54 +ððððð5 ð7 IN15 PIC 1 INDIC 15. <-ALL-FMTS
+ððððð6\ FIN DE PROGRAMA <-ALL-FMTS
55 +ððððð7 ð7 IN97 PIC 1 INDIC 97. <-ALL-FMTS
+ððððð8\ NÚMERO DE CUENTA DESTINO NO VÁLIDO <-ALL-FMTS
56 +ððððð9 ð7 IN98 PIC 1 INDIC 98. <-ALL-FMTS
+ðððð1ð\ FONDOS INSUFICIENTES EN CUENTA ORIGEN <-ALL-FMTS
57 +ðððð11 ð7 IN99 PIC 1 INDIC 99. <-ALL-FMTS
+ðððð12\ NÚMERO DE CUENTA ORIGEN NO VÁLIDO <-ALL-FMTS
+ðððð13\ FORMATO SALIDA:ACCTPMT DESDE ARCHIVO ACCTFMTS DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ðððð14\ SOLICITUD CUENTA CLIENTE <-ALL-FMTS
58 +ðððð15 ð6 ACCTPMT-O-INDIC. <-ALL-FMTS
59 +ðððð16 ð7 IN97 PIC 1 INDIC 97. <-ALL-FMTS
+ðððð17\ NÚMERO DE CUENTA DESTINO NO VÁLIDO <-ALL-FMTS
6ð +ðððð18 ð7 IN98 PIC 1 INDIC 98. <-ALL-FMTS
+ðððð19\ FONDOS INSUFICIENTES EN CUENTA ORIGEN <-ALL-FMTS
61 +ðððð2ð ð7 IN99 PIC 1 INDIC 99. <-ALL-FMTS
+ðððð21\ NÚMERO DE CUENTA ORIGEN NO VÁLIDO <-ALL-FMTS
+ðððð22\ FORMATO ENTRADA:ERRFMT DESDE ARCHIVO ACCTFMTS DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ðððð23\ <-ALL-FMTS
+ðððð24\ ð6 ERRFMT-I-INDIC. <-ALL-FMTS
+ðððð25\ FORMATO SALIDA:ERRFMT DESDE ARCHIVO ACCTFMTS DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ðððð26\ <-ALL-FMTS
62 +ðððð27 ð6 ERRFMT-O-INDIC. <-ALL-FMTS
63 +ðððð28 ð7 IN95 PIC 1 INDIC 95. <-ALL-FMTS
64 +ðððð29 ð7 IN96 PIC 1 INDIC 96. <-ALL-FMTS
ðð41ðð
65 ðð42ðð PROCEDURE DIVISION.
ðð43ðð DECLARATIVES.
ðð44ðð ERROR-SECTION SECTION.
ðð45ðð USE AFTER STANDARD EXCEPTION PROCEDURE ON ACCOUNT-FILE.
ðð46ðð ERROR-PARAGRAPH.
66 ðð47ðð IF ACCOUNT-FILE-STATUS IS NOT EQUAL "23" THEN
67 ðð48ðð MOVE IND-ON TO IN96 OF ERRFMT-O-INDIC .4/
ðð49ðð ELSE
68 ðð5ððð MOVE IND-ON TO IN95 OF ERRFMT-O-INDIC. .5/
69 ðð51ðð WRITE DISPLAY-REC FORMAT IS "ERRFMT"
ðð52ðð INDICATORS ARE ERRFMT-O-INDIC.
7ð ðð53ðð READ DISPLAY-FILE.
71 ðð54ðð CLOSE DISPLAY-FILE
ðð55ðð ACCOUNT-FILE.
72 ðð56ðð STOP RUN.
ðð57ðð END DECLARATIVES.
ðð58ðð MAIN-PROGRAM SECTION.
ðð59ðð MAINLINE.
73 ðð6ððð OPEN I-O DISPLAY-FILE
ðð61ðð I-O ACCOUNT-FILE.
74 ðð62ðð MOVE ZEROS TO ACCTPMT-I-INDIC
ðð63ðð ACCTPMT-O-INDIC.
75 ðð64ðð PERFORM WRITE-READ-DISPLAY.
76 ðð65ðð PERFORM VERIFY-ACCOUNT-NO UNTIL IN15 EQUAL IND-ON.
77 ðð66ðð CLOSE DISPLAY-FILE
ðð67ðð ACCOUNT-FILE.
78 ðð68ðð STOP RUN.
ðð69ðð VERIFY-ACCOUNT-NO.
79 ðð7ððð PERFORM VERIFY-TO-ACCOUNT.
8ð ðð71ðð IF IN97 OF ACCTPMT-O-INDIC EQUAL IND-OFF THEN
81 ðð72ðð PERFORM VERIFY-FROM-ACCOUNT.
82 ðð73ðð PERFORM WRITE-READ-DISPLAY.
ðð74ðð VERIFY-FROM-ACCOUNT.
83 ðð75ðð MOVE ACCTFROM TO ACCNTKEY.
84 ðð76ðð READ ACCOUNT-FILE
85 ðð77ðð INVALID KEY MOVE IND-ON TO IN99 OF ACCTPMT-O-INDIC.
86 ðð78ðð IF IN99 OF ACCTPMT-O-INDIC EQUAL IND-ON THEN .6/
ðð79ðð\ \
ðð8ððð ROLLBACK
ðð81ðð\ \
87 ðð82ðð ELSE
88 ðð83ðð PERFORM UPDATE-FROM-ACCOUNT.

Figura 30 (Parte 2 de 3). Ejemplo de la Utilización del Control de Compromiso

Capítulo 7. Gestión de Archivos y Datos 105


5763CB1 V3RðM5 Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
ðð84ðð VERIFY-TO-ACCOUNT.
89 ðð85ðð MOVE ACCTTO TO ACCNTKEY.
9ð ðð86ðð READ ACCOUNT-FILE
91 ðð87ðð INVALID KEY MOVE IND-ON TO IN97 OF ACCTPMT-O-INDIC. .7/
92 ðð88ðð IF IN97 OF ACCTPMT-O-INDIC EQUAL IND-ON THEN
ðð89ðð\ \
ðð9ððð ROLLBACK .8/
ðð91ðð\ \
93 ðð92ðð ELSE
94 ðð93ðð PERFORM UPDATE-TO-ACCOUNT.
ðð94ðð UPDATE-TO-ACCOUNT.
95 ðð95ðð ADD TRANSAMT TO BALANCE.
96 ðð96ðð REWRITE ACCOUNT-RECORD.
ðð97ðð UPDATE-FROM-ACCOUNT.
97 ðð98ðð SUBTRACT TRANSAMT FROM BALANCE.
98 ðð99ðð REWRITE ACCOUNT-RECORD.
99 ð1ðððð IF BALANCE IS LESS THAN ð THEN
1ðð ð1ð1ðð MOVE IND-ON TO IN98 OF ACCTPMT-O-INDIC
ð1ð2ðð\ \
ð1ð3ðð ROLLBACK .9/
ð1ð4ðð\ \
1ð1 ð1ð5ðð ELSE
ð1ð6ðð\ \
ð1ð7ðð COMMIT. .1ð/
ð1ð8ðð\ \
1ð2 ð1ð9ðð WRITE-READ-DISPLAY.
1ð3 ð11ððð WRITE DISPLAY-REC FORMAT IS "ACCTPMT"
ð111ðð INDICATORS ARE ACCTPMT-O-INDIC. .11/
1ð4 ð112ðð MOVE ZEROS TO ACCTPMT-I-INDIC
ð113ðð ACCTPMT-O-INDIC.
1ð5 ð114ðð READ DISPLAY-FILE RECORD
ð115ðð INDICATORS ARE ACCTPMT-I-INDIC.
ð116ðð
\ \ \ \ \ F I N D E L F U E N T E \ \ \ \ \

Figura 30 (Parte 3 de 3). Ejemplo de la Utilización del Control de Compromiso

.1/ Se proporciona un área de indicadores separada para el programa.


.2/ La cláusula COMMITMENT CONTROL especifica los archivos que han de
ponerse bajo control de compromiso. Todos los archivos que se nombren en
esta cláusula quedan afectados por los verbos COMMIT y ROLLBACK.
.3/ La instrucción COPY de Formato 2 con el atributo de indicador INDIC,
define las entradas de descripción de datos en WORKING-STORAGE para
los indicadores que el programa va a utilizar.
.4/ Se activa IN96 si hay un estado de archivo no válido.
.5/ Se activa IN95 si hay una condición INVALID KEY en la operación
REWRITE.
.6/ Se activa IN99 si el número de cuenta entrado para la cuenta a la que se
transfiere el dinero no es válido.
.7/ Se activa IN97 si el número de cuenta entrado para la cuenta a la que debe
transferirse el dinero no es válido.
.8/ Si se produce la condición INVALID KEY en la instrucción READ, se utiliza
una ROLLBACK y el bloqueo de registro colocado en el registro después de
la primera instrucción READ se libera.
.9/ Si no se permite la transferencia de fondos (se ha activado un indicador), se
procesa la instrucción ROLLBACK. Se cancelan todos los cambios reali-
zados en archivos de base de datos bajo control de compromiso.

106 COBOL/400 Guía del usuario


.1ð/ Si la transferencia de fondos ha sido válida (no se han activado indi-
cadores), se procesa la instrucción COMMIT, y todos los cambios realizados
en los archivos de base de datos bajo control de compromiso serán perma-
nentes.
.11/ La frase INDICATORS es necesaria para las opciones en la pantalla de
estación de trabajo que se controlan mediante los indicadores.

Desbloqueo de Registros de Entrada y Bloqueo de Registros de Salida


Un bloque contiene más de un registro. Para aumentar el rendimiento en las ope-
raciones de entrada y salida, el compilador COBOL genera códigos para desblo-
quear registros de entrada y bloquear registros de salida si se producen todas las
condiciones siguientes:
1. Se especifica *NOBLK (con o sin una cláusula BLOCK CONTAINS) y si se dan
todas las condiciones siguientes:
a. Para el archivo se especifica ACCESS IS SEQUENTIAL.
b. El archivo sólo se abre para INPUT o OUTPUT en ese programa.
c. El archivo se asigna a DISK, DATABASE, DISKETTE o TAPEFILE.
d. No se especifican instrucciones START para el archivo.
En la organización RELATIVE, no se efectúa bloqueo para OPEN OUTPUT.
Si se especifica BLOCK CONTAINS, se ignorará excepto para archivos de
cinta. En los archivos de cinta, la cláusula BLOCK CONTAINS controla el
número de registros que se han de bloquear. Si no se especifica BLOCK
CONTAINS, el sistema determinará el número de registros que se han de blo-
quear. En el caso de archivos de DISKETTE, el sistema determinará siempre
el número de registros que se han de bloquear.
2. Si *BLK se especifica con BLOCK CONTAINS y se dan todas las condiciones
siguientes:
a. ACCESS IS SEQUENTIAL o ACCESS IS DYNAMIC están especificadas
en el archivo.
b. El archivo se abre sólo para INPUT o OUTPUT en dicho programa.
c. El archivo se asigna a DISK, DATABASE, DISKETTE o TAPEFILE.
En la organización RELATIVE, no se efectúa agrupación para OPEN OUTPUT.
La cláusula BLOCK CONTAINS controla el número de registros que se han de
bloquear. En el caso de archivos de DISKETTE, el sistema determinará
siempre el número de registros que se han de bloquear.

Incluso si se cumplen todas las condiciones anteriores, ciertas restricciones


OS/400 pueden provocar la imposibilidad de procesar bloqueos y desbloqueos. En
estos casos, no se producirán mejoras en el rendimiento.

Si se está utilizando archivos de organización accedidos e indexados de forma


dinámica, se puede utilizar READ PRIOR y READ NEXT para realizar agru-
paciones. Al utilizar READ PRIOR y READ NEXT para realizar agrupaciones, no
se puede cambiar la dirección mientras aún queden registros en la agrupación.
Para borrar los registros de una agrupación, especifique una operación al azar (por

Capítulo 7. Gestión de Archivos y Datos 107


ejemplo, READ o START), o utilice una operación secuencial READ FIRST o
READ LAST.

Si se produce un cambio de dirección ilegal, el resultado será un estado de archivo


9U. No será posible ninguna E/S más hasta que el archivo se cierre y se vuelva a
abrir.

El bloqueo puede alterarse temporalmente en tiempo de ejecución especificando


SEQONLY(\NO) para el mandato OVRDBF.

Si se utiliza BLOCK CONTAINS en los archivos de base de datos, y si el factor de


bloqueo cero se especifica o se calcula, el sistema determinará el factor de
bloqueo.

Hay algunos casos en los que el factor de bloqueo especificado por el usuario
puede cambiarse. Consulte la publicación Guía para la Base de Datos para más
información acerca de estas situaciones.

El área de realimentación de E/S contendrá el número de registros en un bloque


en el que se grabe o se lea dicho bloque de registros. El área I/O-FEEDBACK no
se actualiza después de cada lectura o grabación de archivos en la que COBOL
agrupe y desagrupe varios registros. La actualización se produce cuando se lee o
se graba el siguiente bloque. Consulte el apartado “I/O FEEDBACK” en la publi-
cación COBOL/400 Reference para más información.

Para los archivos de base de datos, puede que no vea los cambios cuando se
producen, si los cambios se producen en programas distintos. Para obtener una
descripción del efecto de la agrupación en los cambios en archivos de base de
datos, consulte el análisis sobre el proceso sólo secuencial en la publicación Guía
para la Base de Datos.

Estado de Archivos y Áreas de Realimentación


Para transferir datos (áreas OPEN-FEEDBACK o I-O-FEEDBACK) asociados con
un archivo abierto a un identificador, utilice el formato siguiente:

Instrucción ACCEPT – Formato 3 – Área de realimentación

╔═════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ 55───ACCEPT──identific.──FROM──nomb-nemotéc.──┬─────────────────┬────────────5% ║
║ └──FOR──nomb-arch─┘ ║
║ ║
╚═════════════════════════════════════════════════════════════════════════════════╝

Consulte la sección “Instrucción ACCEPT” de la publicación COBOL/400 Reference


para más información acerca de la especificación de esta instrucción. Consulte la
sección “Formatos de datos de atributos” de la publicación COBOL/400 Reference
para más información acerca de las áreas OPEN-FEEDBACK e I-O-FEEDBACK.

108 COBOL/400 Guía del usuario


Consulte, asimismo, la publicación Guía para la Gestión de Datos para obtener
más información acerca de OPEN-FEEDBACK e I-O-FEEDBACK y del diseño y la
descripción de las áreas de datos contenidas en las áreas de realimentación.

Cuando se especifica la cláusula FILE STATUS, el sistema traslada un valor al


ítem de datos de clave de estado después de cada solicitud de entrada/salida que,
explícita o implícitamente, se refiera a dicho archivo. Este valor de dos caracteres
indica el estado de ejecución de la instrucción. Cuando el compilador genera el
código para bloquear los registros de salida o desbloquear los registros de entrada,
los valores del estado del archivo causados por excepciones del OS/400 sólo se
establecen cuando se procesa el bloque. Para más información acerca de la agru-
pación de registros, consulte el apartado “Desbloqueo de Registros de Entrada y
Bloqueo de Registros de Salida” en la página 107.

El área I/O-FEEDBACK no se actualiza después de cada lectura o grabación de


archivos en la que el COBOL agrupe y desagrupe varios registros.

Es posible que no vea los cambios de los archivos de base de datos en el


momento en que se producen, si dichos cambios se realizan en programas dis-
tintos. Para obtener una descripción del efecto de la agrupación en los cambios en
archivos de base de datos, consulte el análisis sobre el proceso sólo secuencial en
la publicación Guía para la Base de Datos.

Descripciones de Archivos
Todos los archivos en el sistema AS/400 se definen en el sistema operativo
OS/400. La amplitud hasta la que pueden definirse los archivos presenta las
siguientes diferencias:
Ÿ Un archivo descrito por programa se describe a nivel de campo dentro del
programa COBOL en la División de Datos. La descripción del archivo para el
sistema operativo incluye la información acerca del tipo de archivo y de la lon-
gitud de los registros en el archivo.
Ÿ Un archivo descrito externamente se describe a nivel de campo para el
sistema operativo mediante el IDDU, los mandatos SQL/400* o las DDS. Si
crea un archivo (por ejemplo, utilizando el mandato CRTPF) sin especificar las
DDS para éste, dicho archivo todavía tendrá una descripción de campo. El
campo único tendrá el mismo nombre que el archivo, y tendrá la longitud de
registro especificada en el mandato de crear.
La descripción incluye la información acerca del tipo de archivo, como por
ejemplo de base de datos o de dispositivo, y una descripción de cada campo y
sus atributos. El archivo debe crearse antes de que se compile el programa.

Tanto los archivos descritos externamente como los archivos descritos por pro-
grama deben definirse en el programa COBOL dentro de las secciones
INPUT-OUTPUT SECTION y FILE SECTION. Las descripciones de registros en la
sección FILE SECTION para los archivos descritos externamente pueden definirse
con la instrucción COPY de Formato 2.

Las funciones dependientes de dispositivo, como por ejemplo el control de formula-


rios, no las obtiene la operación COPY de Formato 2. Sólo se obtienen las des-
cripciones a nivel de campo.

Capítulo 7. Gestión de Archivos y Datos 109


Cuando se especifica EXTERNALLY-DESCRIBED-KEY como RECORD KEY, los
campos que componen RECORD KEY se obtienen también en las DDS.

Para más información acerca de la instrucción COPY de Formato 2, consulte la


Figura 37 en la página 118 y el texto que la acompaña.
Nota: El proceso real del archivo dentro de la División de Procedimientos es el
mismo, tanto si el archivo está descrito externamente como si está descrito
por programa.

Archivos Descritos por Programa


Los registros y campos para un archivo descrito por programa se describen
mediante la codificación de descripciones de registro en la Sección de Archivo del
programa COBOL en lugar de utilizar la instrucción COPY de Formato 2.

El archivo debe existir en el sistema antes de que el programa pueda ejecutarse,


excepto cuando utilice la creación dinámica de archivos, especificando GENOPT
(*CRTF) en el mandato CRTCBLPGM. Para más información, consulte la descrip-
ción del parámetro GENOPT en la página 23 o la instrucción OPEN en la
COBOL/400 Reference. Para crear un archivo, utilice uno de los mandatos Crear
Archivo, que podrá encontrar en la publicación CL Reference.

Las DDS pueden utilizarse junto con los mandatos de Crear Archivo. En un
archivo indexado COBOL, debe crearse una vía de acceso por claves. Especifique
una clave en las DDS cuando se cree el archivo. La clave de registro en COBOL
debe coincidir con la clave definida cuando se creó el archivo.

Archivos Descritos Externamente


Los archivos descritos externamente ofrecen las siguientes ventajas en compa-
ración con los archivos descritos por programa:
Ÿ Menos codificación en programas COBOL. Si varios programas utilizan el
mismo archivo, los campos pueden definirse una sola vez en el sistema ope-
rativo, y luego pueden utilizarlos todos los programas. Esto elimina la nece-
sidad de codificar una descripción de registro para cada programa que utiliza el
archivo.
Ÿ Menos actividad de mantenimiento cuando se cambia el formato de registro del
archivo. Podrá actualizar con frecuencia los programas cambiando el formato
de registro del archivo y recompilando a continuación los programas que uti-
lizan el archivo cambiando cualquier codificación en el programa.
Ÿ Mejor documentación. Los programas que utilizan los mismos archivos utilizan
formatos de registro y nombres de campos coherentes.
Ÿ Cualquier edición que ha de procesarse en archivos de salida descritos exter-
namente pueden especificarse en las DDS.

La descripción externa de un archivo incluye:


Ÿ Las especificaciones del formato de registro que contenga una descripción de
los campos en un registro
Ÿ Las especificaciones de vía de acceso que describen cómo se recuperan los
registros.

110 COBOL/400 Guía del usuario


Estas especificaciones vienen de la descripción de archivos externos y del
mandato OS/400 que utilice el usuario para crear el archivo.

Podrá utilizar un archivo descrito externamente en un programa convirtiéndolo en


un archivo descrito por programa (codificando la descripción del registro en el
fuente). En este caso, el compilador no copia la descripción externa a nivel de
campo del archivo en tiempo de compilación. Ello le resultará útil durante las con-
versiones, puesto que un programa ya existente podrá utilizar un archivo descrito
por programa a la vez que un programa nuevo utiliza un archivo descrito exter-
namente para referirse al mismo archivo.

La Figura 31 muestra el modo en que los programas COBOL pueden relacionarse


con los archivos del sistema AS/400, utilizando las descripciones externas del
archivo de las DDS.

Sistema OS/4ðð Sistema OS/4ðð Sistema OS/4ðð


┌────────────────┐ ┌────────────────┐ ┌────────────────┐
│ Descripción a │ │ Descripción a │ │ Descripción a │
│ Nivel de Campo │ │ Nivel Registro │ │ Nivel de campo │
│ de un Archivo │ │ de un Archivo │ │ de un Archivo │
└───────┬────────┘ └───────┬────────┘ └──────────────┬─┘
│ │ │
│ │ │
┌─────────────┴────────┐ └─────┬─────────────────────┐ │
│ │ │ │ │
6 6 6 6 6
COBOL .1/ COBOL .2/ COBOL .3/ COBOL .4/
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Archivo │ │ Archivo │ │ Archivo │ │ Archivo │
│ Descrito │ │ Descrito por │ │ Descrito │ │ Descrito │
│ Externamente │ │ Programa. El │ │ por Programa.│ │ Externamente │
│ mediante │ │ compilador no│ │ │ │ mediante │
│ DDS. │ │ copia de la │ │ │ │ DDS. │
│ │ │ descripción a│ │ │ │ │
│ │ │ nivel de │ │ │ │ │
│ │ │ campo. │ │ │ │ │
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘

Figura 31. Ejemplo que Muestra Cómo se Relaciona el COBOL con Archivos del AS/400

.1/ El programa COBOL utiliza la descripción a nivel de campo de un archivo


definido en el sistema operativo. El usuario de COBOL codificó una instruc-
ción COPY de Formato 2 para la descripción de registro. En tiempo de com-
pilación, el compilador copia de la descripción externa a nivel de campo y la
convierte en una descripción de registro COBOL sintácticamente correcta. El
archivo debe existir en tiempo de compilación.
.2/ Un archivo descrito externamente se utiliza como archivo descrito por pro-
grama en el programa COBOL. Toda la descripción de registro para el
archivo se codifica en el programa COBOL. Este archivo no tiene que existir
en tiempo de compilación.
.3/ Se describe un archivo en el sistema operativo sólo hasta el nivel de registro.
Toda la descripción de registro debe codificarse en el programa COBOL. Este
archivo no tiene que existir en tiempo de compilación.
.4/ Puede especificarse un nombre de archivo para tiempo de compilación, y
puede especificarse un nombre de archivo distinto para tiempo de ejecución.
Una instrucción COPY de Formato 2 genera la descripción de registro del
archivo en tiempo de compilación. En tiempo de ejecución, puede utilizarse
una lista de bibliotecas distinta o un mandato de alteración temporal del
archivo de forma que el programa acceda a otro archivo. La descripción de
archivo copiada en tiempo de compilación se utiliza para describir los regis-
tros de entrada utilizados en tiempo de ejecución.

Capítulo 7. Gestión de Archivos y Datos 111


Nota: Para los archivos descritos externamente, los dos formatos de archivo
deben ser los mismos. De lo contrario, se produce un error de compro-
bación de nivel.

Especificaciones de Descripción de Datos (DDS)


Puede utilizar las Especificaciones de Descripción de Datos (DDS) para describir
los archivos a nivel de campo en el sistema operativo. En las DDS, cada formato
de registro en un archivo descrito externamente se identifica mediante un nombre
de formato de registro exclusivo.

Las especificaciones del formato de registro describen los campos en un registro y


la ubicación de los campos en un registro. Los campos se ubican en el registro en
el orden especificado en las DDS. La descripción de campo generalmente incluye
el nombre de campo, el tipo de campo (carácter, binario, decimal externo o decimal
interno) y la longitud de campo (incluido el número de posiciones decimales en un
campo numérico). En lugar de especificarse en el formato de registro para un
archivo físico o lógico, los atributos de campo pueden definirse en un archivo de
referencia de campo. (Consulte la Figura 32 en la página 113).

Las claves para un formato de registro se especifican en las DDS. Cuando utiliza
la instrucción COPY de Formato 2, se genera una tabla de comentarios en el
listado del programa fuente mostrando cómo se definen las claves en las DDS
para el formato.

Además, las palabras clave de las DDS pueden utilizarse para:


Ÿ Especificar los códigos de edición para un campo (EDTCDE)
Ÿ Especificar palabras de edición para un campo (EDTWRD)
Ÿ Especificar que no se permiten los valores de clave duplicados para el archivo
(UNIQUE)
Ÿ Especificar una descripción de texto para un formato de registro o un campo
(TEXT).

Consulte la publicación DDS Reference para obtener una lista completa de las
palabras clave de las DDS válidas para un archivo de base de datos.

112 COBOL/400 Guía del usuario


G X 2 1 - 9 8 9 1 - 0 U M / 0 5 0 *
A S / 4 0 0 E S P E C I F I C A C I O N E S D E D E S C R I P C I O N D E D AT O S Impreso en España
Inter national B usiness Machines
*El número de hojas por área de relleno puede variar ligeramente.

Archivo Signo Descripción Página de


Instrucciones

de Grabación
Programador Fecha Tecla

(/b / R / H / J / K / S / O )
Condicionamiento

Datos/Desplazamiento Teclado

(b/O /I/B/H/M/N/P)
Ubicación
(A/O/*)

Espec
Nombre Condición
Formula rio

And/Or/Coment.

Nom bre Longitud Funciones

Referencia (R)
Nombre

Nú mero d e

U t i l i z a c/i ó n
Posiciones
Secuencia
Reservado

D ecimales
Indicador

Indicador

Indicador
de

No (N)

No (N)
No (N)

Línea P o s
Tipo

Tipo

Tipo
1 2 3 4 5 6 7 8 9 10 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0

A * * F L D R E F D S T R E F T E X T O CON S U L T A C AMP O D E A P L I C AC I ON E S D E D I S T R I B U C I ÓN

A R D S T R E F T E X T ( ' CON S U L T A C AMP O D I S T R I B U C I ON ' )

A * C AMP O S U S U A L M E N T E U T I L I Z A DO S C OMO CON S U L T A

A B A S D A T 6 0 E D T CD E ( Y )

A T E X T ( ' C AM P O D A T O S B A S E )

A * C AMP O S U T I L I Z A DO S P O R A R C H . MA E S T R O C L I E N T E S

A C U S T 5 C H E C K ( M F )

A CO L H DG ( ' C L I E N T E ' ' N UM E R O ' )

A N AM E 2 0 CO L H DG ( ' N OM B R E D E C L I E N T E ' )

A A D D R R R E F F L D ( N OM B R E )

A CO L H DG ( ' D I R E CC I ON D E C L I E N T E ' )

A C I T Y R R E F F L D ( N OM B R E )

A CO L H DG ( ' C I U D A D D E C L I E N T E ' )

A S T A T E 2 C H E C K ( M F )

A CO L H DG ( ' P R OV I NC I A ' )

A S R H COD 6 C H E C K ( M F )

A CO L H DG ( ' B U S Q U E D A ' ' COD I GO ' )

A T E X T ( ' COD I GO B U S Q U E D A N UM C L I E N T E ' )

A Z I P 5 0 C H E C K ( M F )

A CO L H DG ( ' COD I GO ' ' P O S T A L ' )

A C U S T Y P 1 0 R A NG E ( 1 5 )

A CO L H DG ( ' C L I E N ' ' T I P O ' )

A T E X T ( ' T I P O C L I E N T E 1 = GO B 2 = P L A N 3 = B +

A U S 4 = P T 5 = O T R ' )

A A R B A L 8 2 CO L H DG ( ' C U E N T P O R CO B R A R ' ' S A L D O ' )

A E D T CD E ( J )

A OR D B A L R R E F F L D ( A R B A L )

A CO L H DG ( ' I MP E N A / R ' ' A R C H P E D I D O S ' )

A L S T AM T R R E F F L D ( A R B A L )

A CO L H DG ( ' U L T ' ' I MP ' ' P AGA DO ' )

A T E X T ( ' U L T I MP OR T E P AGA DO E N A / R ' )

Figura 32. Ejemplo de Archivo de Referencia de Campos

Este ejemplo de un archivo de referencia de campos muestra las definiciones de


los campos que utiliza el archivo CUSMSTL (lógico maestro de clientes), que se
muestra en la Figura 33 en la página 115. El archivo de referencia de campos
normalmente contiene las definiciones de campos que utilizan otros archivos. El
texto siguiente describe algunas entradas para este archivo de referencia de
campos.
.1/ El campo BASDAT se edita mediante el código de edición Y, tal como se
indica mediante la palabra clave EDTCDE (Y). Si este campo se utiliza en
un archivo de salida descrito externamente para un programa COBOL, el
campo generado por COBOL es compatible con el tipo de datos especifi-
cado en las DDS. El campo se edita cuando se escribe el registro. Cuando
el campo se utiliza en un archivo de salida descrito por programa, la compa-

Capítulo 7. Gestión de Archivos y Datos 113


tibilidad con los campos DDS en el archivo es responsabilidad del usuario.
Cuando las DDS no se utilizan para crear el archivo, la edición adecuada
del campo en el programa COBOL también es responsabilidad del usuario.
.2/ La entrada CHECK(MF) especifica que el campo es un campo de relleno
obligatorio cuando se introduce desde una estación de trabajo de pantalla.
El relleno obligatorio implica que todos los caracteres del campo deben
introducirse desde la estación de trabajo de pantalla.
.3/ Los campos ADDR y CITY comparten los mismos atributos especificados
para el campo NAME, tal y como se indica en la palabra clave REFFLD.
.4/ La palabra clave RANGE, que se especifica para el campo CUSTYP,
asegura que los únicos números válidos que pueden entrarse en este
campo desde una estación de trabajo de pantalla van del 1 al 5.
.5/ La palabra clave COLHDG proporciona un encabezamiento de columna para
el campo si se utiliza mediante las Herramientas para el Desarrollo de Apli-
caciones (Appl Dev Tools).
.6/ El campo ARBAL se edita mediante el código de edición J, como se indica
mediante la palabra clave EDTCDE(J).
.7/ Se proporciona una descripción de texto (palabra clave TEXT) para algunos
campos. La palabra clave TEXT se utiliza a efectos de documentación y
aparece en varios listados.

Especificaciones COBOL para Archivos Descritos Externamente


Utilizando las DDS
Puede incorporar la descripción del archivo en el programa codificando la instruc-
ción COPY de Formato 2. La información de la descripción externa se recupera
mediante el compilador COBOL, y se genera la estructura de datos COBOL.

Las páginas siguientes proporcionan ejemplos de la utilización de las DDS y el


código COBOL que resultará de la utilización de una instrucción COPY de Formato
2. Consulte el apartado “Instrucción COPY de Formato 2 (Opción DD, DDR, DDS
o DDSR)” en la página 118 para una descripción detallada de la instrucción COPY
de Formato 2.
Ÿ La Figura 33 en la página 115 muestra las DDS para un archivo lógico y la
Figura 34 en la página 116 muestra el código COBOL generado.
Ÿ La Figura 35 en la página 117 describe el mismo archivo pero incluye la
palabra clave ALIAS, y la Figura 36 en la página 118 muestra el código
COBOL generado.

El proceso de archivo real dentro de la División de Procedimientos es el mismo


para los archivos descritos por programa y descritos externamente.

114 COBOL/400 Guía del usuario


G X 2 1 - 9 8 9 1 - 0 U M / 0 5 0 *
A S / 4 0 0 E S P E C I F I C A C I O N E S D E D E S C R I P C I O N D E D AT O S Impreso en España
Inter national Business Machines
*El núm e ro de hojas por área de re lleno puede variar ligeramente.

Archivo Signo Descripción Página de


Instrucciones

de Grabación
Programador Fecha Tecla

(/b / R / H / J / K / S / O )
Condicionamiento

Tipo Datos/Desp lazamien to Teclado

(b/O/I/B/H/M/N/P)
Ubicación
(A/O/*)

Nombre Co ndición
Espec
Formula rio

And/Or/Coment.

N om b re Longitud Funciones

Referencia (R)
Nombre

Nú mero de

U t i l i z a c/i ó n
Posiciones
Secuencia
Reservado

D ecimales
Indicador

Indicador

Indicador
de

No (N)

No (N)
No (N)

Línea P os
Tipo

Tipo

1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 19 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0

A * * L OG I C A L C U S M S T L A R C H I VO MA E S T R O D E C L I E N T E

A U N I Q U E

A * R C U S R E C P F I L E ( C U S M S T P )

A T E X T ( ' R E G I S T R O MA E S T R O C L I E N T E ' )

A C U S T

A N AM E

A A D D R

A C I T Y

A S T A T E

A Z I P

A S R H COD

A C U S T Y P

A A R B A L

A OR D B A L

A L S T AM T

A L S T D A T

A C R D L M T

A S L S Y R

A S L S L Y R

A K C U S T

Figura 33. Ejemplo de las Especificaciones de Descripción de Datos para un Archivo Lógico

.1/ Se define un archivo lógico para procesar el archivo físico maestro de


clientes (CUSMSTP) y denominado CUSMSTL.
.2/ La palabra clave UNIQUE indica que no se permiten los valores de clave
duplicados para este archivo.
.3/ Se define un formato de registro (CUSREC) para el archivo CUSMSTL, que
se basa en el archivo físico CUSMSTP.
.4/ El campo CUST se identifica como campo de clave para este archivo.
.5/ Si no se especifican los atributos de campo (como, por ejemplo, la longitud,
tipo de datos y posiciones decimales) en las DDS para un archivo lógico, los
atributos se obtienen del campo correspondiente en el archivo físico. Cual-
quier atributo de campo especificado en las DDS para el archivo lógico

Capítulo 7. Gestión de Archivos y Datos 115


altera temporalmente los atributos para el campo correspondiente en el
archivo físico. La definición de los campos en el archivo físico puede refe-
rirse a un archivo de referencia de campo. Un archivo de referencia de
campos es un archivo de descripción de datos que consta de nombres de
campos y de sus definiciones, como el tamaño y el tipo. Cuando se utiliza
un archivo de referencia de campos, los mismos campos utilizados en varios
formatos de registros tienen que definirse sólo una vez en el archivo de refe-
rencia de campos. Para más información acerca de un archivo de referencia
de campos, consulte la publicación Guía para la Base de Datos.

La Figura 32 en la página 113 muestra un ejemplo de un archivo de referencia de


campos que define los atributos de los campos utilizados en el archivo de base de
datos. Consulte la publicación Guía para la Base de Datos para obtener más infor-
mación acerca de los archivos de referencia de campos.

ð1 CUS-MASTER.
COPY DDS-CUSREC OF CUSLIB-CUSTMAST.
\FORMATO E-S: CUSREC DE ARCHIVO CUSTMAST DE BIBL. CUSLIB CUSREC
\ REGISTRO MAESTRO CLIENTE CUSREC
\LAS DEFINICIONES DE CLAVE PARA FORMATO DE REGISTRO CUSREC CUSREC
\NUMERO NOMBRE RECUPERAC. TIPO SECALT CUSREC
\ððð1 CLIENTE ASCENDENTE AN NO CUSREC
ð5 CUSREC. CUSREC
ð6 CUST PIC X(5). CUSREC
\ NUMERO CLIENTE CUSREC
ð6 NAME PIC X(2ð). CUSREC
\ NOMBRE CLIENTE CUSREC
ð6 ADDR PIC X(2ð). CUSREC
\ DIRECCION CLIENTE CUSREC
ð6 CITY PIC X(2ð). CUSREC
\ CIUDAD CLIENTE CUSREC
ð6 STATE PIC X(2). CUSREC
\ ABREVIATURA PROVINCIA CUSREC
ð6 ZIP PIC S9(5) COMP-3. CUSREC
\ CODIGO POSTAL CUSREC
ð6 SHRCOD PIC X(6). CUSREC
\ CODIGO BUSQUEDA NOMBRE CLIENTE CUSREC
ð6 CUSTYP PIC 9(1). CUSREC
\ TIPO CLIENTE CUSREC
ð6 ARBAL PIC S9(6)V9(2) COMP-3. CUSREC
\ SALDO CUENTAS PEND. CUSREC

Figura 34. Ejemplo de los Resultados de la Instrucción COPY de Formato 2 (DDS)

116 COBOL/400 Guía del usuario


G X 2 1 - 9 8 9 1 - 0 U M / 0 5 0 *
A S / 4 0 0 E S P E C I F I C A C I O N E S D E D E S C R I P C I O N D E D AT O S Impreso en España
Inter national B usiness Machines
*El número de hojas por área de relleno puede variar ligeramente.

Archivo Signo Descripción Página de


Instrucciones

de Grabación
Programador Fecha Tecla

(/b / R / H / J / K / S / O )
Condicionamiento

Datos/Desplazamiento Teclado

(b/O /I/B/H/M/N/P)
Ubicación
(A/O/*)

Espec
Nombre Condición
Formula rio

And/Or/Coment.

Nom bre Longitud Funciones

Referencia (R)
Nombre

Nú mero d e

U t i l i z a c/i ó n
Posiciones
Secuencia
Reservado

D ecimales
Indicador

Indicador

Indicador
de

No (N)

No (N)
No (N)

Línea P o s

Tipo
Tipo

Tipo

1 2 3 4 5 6 7 8 9 10 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0

A * * L OG I C A L C U S M S T L A R C H I VO MA E S T R O C L I E N T E S

A U N I Q U E

A * R C U S R E C P F I L E ( C U S M S T P )

A T E X T ( ' R E G I S T R O MA E S T R O C L I E N T E ' )

A C U S T A L I A S ( N U M E R O _C L I E N T E )

A N AM E A L I A S ( N OM B R E _C L I E N T E )

A A D D R A L I A S ( D I R E CC I ON )

A C I T Y

A S T A T E

A Z I P

A S R H COD A L I A S ( COD I GO _B U S Q U E D A )

A C U S T Y P A L I A S ( T I P O _C L I E N T E )

A A R B A L A L I A S ( S A L D O _C U E N T A S _P O R CO B R A R )

A OR D B A L

A L S T AM T

A L S T D A T

A C R D L M T

A S L S Y R

A S L S L Y R

A K C U S T

Figura 35. Ejemplo de las Especificaciones de Descripción de Datos con ALIAS

.1/ Este es el nombre asociado con la palabra clave ALIAS, que se incluirá en
el programa. Disponible en la opción ALIAS de DDS, un alias es un nombre
alternativo que sirve para que un nombre de datos de hasta 30 caracteres
se incluya en un programa COBOL/400.

Capítulo 7. Gestión de Archivos y Datos 117


ð1 CUS-MASTER.
COPY DD-CUSREC OF CUSLIB-CUSTMAST.
\FORMATO E-S: CUSREC DESDE CUSTMAST DE BIBLIOTECA CUSLIB CUSREC
\ REGISTRO MAESTRO CLIENTE CUSREC
\LAS DEFINICIONES DE CLAVE PARA FORMATO DE REGISTRO CUSREC CUSREC
\NUMERO NOMBRE RECUPERAC. TIPO SECALT CUSREC
\ððð1 NUMERO-CLIENTE ASCENDENTE AN NO CUSREC
CUSREC
ð5 CUSREC. CUSREC
ð6 CUSTOMER-NUMBER PIC X(5). CUSREC
\ NUMERO CLIENTE CUSREC
ð6 CUSTOMER-NAME PIC X(2ð). CUSREC
\ NOMBRE CLIENTE CUSREC
ð6 ADDRESS PIC X(2ð). CUSREC
\ DIRECCION CLIENTE CUSREC
ð6 CITY PIC X(2ð). CUSREC
\ CIUDAD CLIENTE CUSREC
ð6 STATE PIC X(2). CUSREC
\ ABREVIATURA PROVINCIA CUSREC
ð6 ZIP PIC S9(5) COMP-3. CUSREC
\ CODIGO POSTAL CUSREC
ð6 SEARCH-CODE PIC X(6). CUSREC
\ CODIGO BUSQUEDA NOMBRE CLIENTE CUSREC
ð6 CUSTOMER-TYPE PIC 9(1) CUSREC
\ TIPO CLIENTE CUSREC
ð6 ACCT-REC-BALANCE PIC S9(6)V9(2) COMP-3. CUSREC
\ SALDO CUENTAS PEND. CUSREC

Figura 36. Ejemplo de los Resultados de la Instrucción COPY de Formato 2 (DD) con la
Palabra Clave ALIAS

Ampliación de IBM

Instrucción COPY de Formato 2 (Opción DD, DDR, DDS o DDSR)


Para una información general acerca de los formatos de la instrucción COPY, vea
la publicación COBOL/400 Reference.

╔═══════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ 55───COPY──┬─DD-nombre-formato ┬──┬────────┬──┬───────────────┬───────────────5 ║
║ ├─DD-ALL-FORMATS── ─┤ ├─ -I───┤ ├─ -INDICATOR──┤ ║
║ ├─DDR-nombre-formato┤ ├─ -O───┤ ├─ -INDICATORS─┤ ║
║ ├─DDR-ALL-FORMATS── ┤ └─ -I-O─┘ └─ -INDIC──────┘ ║
║ ├─DDS-nombre-formato┤ ║
║ ├─DDS-ALL-FORMATS─ ─┤ ║
║ ├DDSR-nombre-formato┤ ║
║ └──DDSR-ALL-FORMATS─┘ ║
║ ║
║ ║
║ 5────┬─OF─┬──┬───────────────────┬nombre-archivo┬────────────┬────────────────5 ║
║ └─IN─┘ └nombre-biblioteca──┘ └──SUPPRESS──┘ ║
║ ║
║ ║
║ 5────┬───────────────────────────────────────────────────────────────────┬────5% ║
║ │ ┌──────────────────────────────────────────────────┐ │ ║
║ │ 6 │ │ ║
║ └──REPLACING──┬─ ==pseudotexto -1==─┬─BY─┬─ ==pseudotexto -2==─┬─┴──┘ ║
║ ├────identificador-1──┤ ├────identificador-2──┤ ║
║ ├────literal-1────────┤ ├────literal-2────────┤ ║
║ └────palabra-1────────┘ └────palabra-2────────┘ ║
║ ║
╚═══════════════════════════════════════════════════════════════════════════════════╝

Figura 37. Instrucción COPY – Formato 2 – Conversión DDS

118 COBOL/400 Guía del usuario


Puede utilizar la instrucción COPY de Formato 2 (opción DD, DDR, DDS o DDSR)
para crear instrucciones de División de Datos COBOL para describir un archivo
existente en el sistema. Estas descripciones se basan en la versión del archivo
existente en tiempo de compilación. No utilizan ninguna sentencia fuente DDS del
archivo. Consulte la sección “Instrucción COPY” de la publicación COBOL/400
Reference para más información acerca de la instrucción COPY
Nota: El término instrucción COPY de Formato 2 indicará la instrucción COPY de
Formato 2 (opción DD, DDR, DDS o DDSR) a través de este manual.

La instrucción COPY de Formato 2 sólo se utiliza en la División de Datos. Debe


asegurarse que un ítem a nivel de grupo que tiene un número de nivel menor que
05 precede a la instrucción.

La opción DD se utiliza para hacer referencia a los nombres ALIAS (alternativos).


La especificación de un nombre de ALIAS en las DDS permite que un nombre de
datos de hasta 30 caracteres se incluya en el programa COBOL.

Cuando se utiliza la opción DD, cualquier nombre de ALIAS presente sustituye a


los nombres de campos de las DDS correspondientes. Todos los subrayados en
los nombres ALIAS se convierten en guiones antes de producirse alguna susti-
tución.

La opción DDR hace todo lo que hace la opción DD. También copia los nombres
de campo de formato DDS internos, sustituyendo los caracteres COBOL no válidos
(@, #, $ y _) por los caracteres COBOL válidos A, N, D y - según proceda. Esta
opción también elimina cualquier subrayado desde el final de los nombres de
campo.

La opción DDS copia los nombres de campos de formato interno DDS. Para ver
ejemplos de claves y nombres de claves que pueden generarse cuando utilice la
opción DDS de la instrucción COPY de Formato 2, consulte las páginas 127 a 133.

La opción DDSR hace todo lo que hace la opción DDS. También copia los
nombres de campo de formato DDS internos, sustituyendo los caracteres COBOL
no válidos (@, #, $, y _) por los caracteres COBOL válidos A, N, D, y -, según
proceda. Esta opción también elimina cualquier subrayado desde el final de los
nombres de campo.

El ejemplo siguiente muestra el efecto de la opción DDR o DDSR en nombres de


campos COBOL no válidos:

Nombre de campo ori- Nombre de campo modi-


ginal ficado
FLD_A FLD-A
NUMBER#1 NUMBERN1
POINT@7 POINTA7
BALANCE$ BALANCED

Cuando la cláusula RECORD KEY especifica EXTERNALLY-DESCRIBED-KEY,


sólo puede copiarse un formato a la vez bajo una FD. Por ejemplo, si todos los
formatos de un archivo se copian bajo una FD, no puede especificarse otra instruc-
ción COPY de Formato 2 para el mismo archivo bajo dicha FD.

Capítulo 7. Gestión de Archivos y Datos 119


El nombre de formato es el nombre de la definición de formato de registro DDS
que debe convertirse en entradas de descripción de datos COBOL. El nombre de
formato debe seguir las reglas para la formación de cualquier nombre COBOL/400.

Si no se se especifica -I ni -O, se asume -I-O.

Si se especifica el nombre de formato sin el atributo Indicador, y los formatos -I y


-O deben generarse, cada formato de registro se genera como una redefinición de
un ítem elemental 05 definido como:
Ÿ El tamaño del formato de registro más grande que se generará.

Si se especifica ALL-FORMATS (sin el atributo Indicador), cada formato de registro


se genera como una redefinición de un ítem elemental 05 definido como:
Ÿ El tamaño del formato de registro más grande en el archivo, si aparece la ins-
trucción COPY en la Sección de Archivos
Ÿ El tamaño del formato de registro más grande que se generará, si aparece la
instrucción COPY fuera de la Sección de Archivos.
Cuando se especifica el atributo Indicador, no se produce ninguna redefinición. En
su lugar, cada formato genera una estructura de datos separada.

Puede encontrarse mas información acerca del atributo de Indicador en la sección


“Atributo de Indicador de la Instrucción COPY de Formato 2” en la página 124.

El nombre de biblioteca es opcional. Si no se especifica, se utiliza la lista de


bibliotecas de trabajo actual como valor por omisión.

El nombre de archivo es el nombre de un archivo del sistema AS/400. Las


entradas DDS generadas representan el formato de registro definido en el archivo.
El archivo debe crearse antes de que se compile el programa.

Si el archivo es un archivo de base de datos, se genera un único formato de E-S.

Para el resto de tipos de archivos, la descripción generada varía de la manera


siguiente:
Ÿ Si se especifica -I, las entradas de descripción de datos generadas contienen:
– Los campos de entrada y entrada/salida para un formato que no sea de
subarchivo, o
– Los campos de entrada, salida, y entrada/salida para un formato de subar-
chivo.
Ÿ Si se especifica -O, las entradas de descripción de datos generadas contienen:
– Los campos de salida y entrada/salida para un formato que no sea de sub-
archivo, o
– Los campos de entrada, salida, y entrada/salida para un formato de subar-
chivo.
Nota: Los registros de subarchivo sólo con campos de salida o entrada/salida, sin
indicadores de campo especificados, generan formatos I/O.

Si se necesita un área de almacenamiento separada en WORKING-STORAGE


para cada formato, debe especificarse una instrucción COPY individual para cada
formato.

120 COBOL/400 Guía del usuario


Por ejemplo, si asume que el archivo CUSTMASTER contiene dos formatos
CUSADR y CUSTDETL, pueden especificarse las instrucciones COPY siguientes:

SELECT FILE-X
ASSIGN TO DATABASE-CUSTMASTER.
..
.
FD FILE-X
LABEL RECORDS ARE STANDARD.
01 FILE-X-RECS.
COPY DDS-ALL-FORMATS OF
CUSTMASTER-QGPL. (Vea Nota 1.)
..
.
WORKING-STORAGE SECTION.
01 ADR-REC.
COPY DDS-CUSTADR OF
CUSTMASTER. (Vea Nota 2.)
01 DETAIL-REC.
COPY DDS-CUSTDETL OF
CUSTMASTER. (Vea Nota 2.)

Notas:
1. Esta instrucción COPY sólo genera un área de almacenamiento para todos los
formatos.
2. Estas instrucciones COPY generan áreas de almacenamiento separadas.

Indicadores
Los indicadores son ítems de datos Booleanos que pueden tener los valores B"0"
ó B"1".

Cuando define un formato de registro para un archivo utilizando las DDS, puede
condicionar las opciones utilizando indicadores; los indicadores también pueden uti-
lizarse para reflejar respuestas particulares. Estos indicadores se conocen como
OPTION y RESPONSE, respectivamente. Los indicadores de opción proporcionan
opciones tales como espaciado, subrayado y permiso o petición de transferencia
de datos desde un programa a una impresora o dispositivo de pantalla. Los indi-
cadores de respuesta proporcionan información de respuesta a un programa desde
un dispositivo, como por ejemplo las teclas de función pulsadas por un usuario de
estación de trabajo, y si se han introducido los datos.

Pueden utilizarse indicadores con archivos TRANSACTION y FORMATFILE, pero


nunca con archivos de base de datos.

Estructuras de Datos Generadas


Las diferentes palabras clave DDS influyen en la creación de los diversos tipos de
estructuras de datos.

Capítulo 7. Gestión de Archivos y Datos 121


Estructuras de Nivel de Formato (Registro)
Al principio de cada formato, se genera una tabla de comentarios en el listado del
programa fuente. Estos comentarios proporcionan detalles de los archivos utili-
zados durante la compilación del programa. Si hay claves de registros para el
archivo, los comentarios también se generan para mostrar cómo se definen las
claves en las DDS. A continuación aparece un listado de las entradas de clave de
registro que aparecen en la tabla y el encabezamiento de la tabla.

Encabezamiento Posible entrada


NÚMERO Número del campo de clave
NOMBRE Nombre del campo de clave
RECUPERACION ASCENDING, DESCENDING
TIPO ZONE, DIGIT, SIGNED, ABSVAL,
AN (alfanumérico), N (numérico)
J (ítem DBCS), DDS - L (fecha),
DDS - T (hora), DDS - Z (indicación de la hora),
DDS - G (gráfico de longitud variable),
VARLEN (carácter de longitud variable o ítem DBCS entre paréntesis),
G VARLEN (gráfico DBCS de longitud variable)
SECALT NO, YES

Si se requiere la redefinición para permitir la generación de varios formatos, se


genera un nombre a nivel de grupo de la forma siguiente:

05 nombre-archivo-RECORD
PIC X(tamaño del mayor registro).

Para cada formato, se asigna un nombre a nivel de grupo de la manera siguiente:


Ÿ INPUT
05 nombre-formato-I
Ÿ OUTPUT
05 nombre-formato-O
Ÿ Formato I/O
05 nombre-formato

Estructuras de Campos de Datos


Los nombres de campo, las definiciones PICTURE y las cláusulas de utilización
numérica se obtienen directamente de los nombres de campos de formato interno
DDS (o nombres ALIAS en el caso de la opción DD o DDR) y las representaciones
de tipo de datos. Los nombres de campo y las definiciones PICTURE se cons-
truyen de la manera siguiente:

06 nombre-campo PIC
Nota: Consulte la Figura 38 en la página 123 para la definición COBOL
PICTURE adecuada.

122 COBOL/400 Guía del usuario


Tabla 3. Estructura del campo de datos
DDS DIVISIÓN DE DATOS COBOL
n=longitud total de campo (pos. DDS 30-34)
m=número de decimales (pos. DDS 36 y 37)
Tipo de datos Formatos Si pos. DDS 36 y 37 están en Si pos. DDS 36 y 37 no están
(pos. 35) blanco en blanco
ARCHIVOS FÍSICOS, LÓGICOS, DE IMPRESORA Y DE COMUNICACIONES
␣(En Por omisión PIC X(n) ò PIC S9(n-m)V9(m)
blanco)
P Decimal empaquetado PIC S9(n) COMP-3 PIC S9(n-m)V9(m) COMP-3
S Caracteres numéricos PIC S9(n) PIC S9(n-m)V9(m)
decimales/marcados con zona
B Binario PIC S9(n) COMP-4 PIC S9(n-m)V9(m) COMP-4
F Coma flotanteñ
precisión simple PIC 9(5) COMP-4 PIC 9(5) COMP-4
precisión doble PIC 9(10) COMP-4 PIC 9(10) COMP-4
A Carácter PIC X(n) ò —
H Datos hexadecimales PIC X(n) —
L Fecha ó PIC X(n) —
T Hora ó PIC X(n) —
Z Indicación horaria ó PIC X(n) —
J Datos únicamente DBCS PIC X(n) —
E Cualquier tipo de datos DBCS PIC X(n) —
O Datos DBCS abiertos PIC X(n) —
G Datos DBCS gráficos PIC X(2n) ò —

ARCHIVOS DE PANTALLA
␣(En Por omisión PIC X(n) PIC S9(n-m)V9(m)
blanco)
X Sólo alfabético PIC X(n) —
N Desplazamiento numérico PIC X(n) PIC S9(n-m)V9(m)
Y Sólo numérico — PIC S9(n-m)V9(m)
I Entrada de teclado no habilitada PIC X(n) PIC S9(n-m)V9(m)
W Katakana PIC X(n) —
A Desplazamiento alfanumérico PIC X(n) —
D Sólo dígitos PIC X(n) PIC S9(n)
F Coma flotante ñ
precisión simple PIC 9(5) COMP-4 PIC 9(5) COMP-4
precisión doble PIC 9(10) COMP-4 PIC 9(10) COMP-4
M Carácter sólo numérico PIC X(n) —
S Desplazamiento numérico — PIC S9(n-m)V9(m)
marcado
E Cualquier tipo de datos DBCS PIC X(n) —
J Sólo DBCS PIC X(n) —
O Datos DBCS abiertos PIC X(n) —
G Datos DBCS gráficos PIC X(2n) —

ñ COBOL considera los campos de coma flotante como de RELLENO. Véase "Campos de coma flotante".
ò En DDS, si el campo tiene un atributo VARLEN, se añaden dos bytes adicionales al comienzo del campo.
ó Ítems FILLER por omisión. Véase "Campos de Fecha, Hora y de indicación horaria".

Figura 38. Estructuras de Campos de Datos

Estructuras de Indicador
Si se solicitan los indicadores, y existen en el formato, se genera un nombre de
grupo adicional (nivel 06) al principio de la estructura, seguido de las entradas
(nivel 07) para los indicadores individuales relevantes.

06 nombre-formato(-I o -O)-INDIC.
07 INxx PIC 1 INDIC xx.

Capítulo 7. Gestión de Archivos y Datos 123


donde xx es el número de indicador

Por ejemplo:

06 SAMPLE1-I-INDIC.
07 IN01 PIC 1 INDIC 01.
07 IN04 PIC 1 INDIC 04.
07 IN05 PIC 1 INDIC 05.
07 IN07 PIC 1 INDIC 07.
06 FLD1 PIC ... .
06 FLD2 PIC ... .

Atributo de Indicador de la Instrucción COPY de Formato 2


El atributo de indicador especifica si las entradas de descripción de datos se
generan para los indicadores.

Si se especifica el atributo de Indicador, se generan las entradas de descripción de


datos para los indicadores, pero no para campos de datos. Una entrada a nivel de
grupo 05 se genera del siguiente modo:
Ÿ Si la copia (COPY) es para una única estructura (por ejemplo, COPY
DDS-nombre-formato-INDIC)
05 nombre-formato-I. (o -O, si es pertinente)
Ÿ Si la copia (COPY) es para varias estructuras
(por ejemplo, COPY DDS-ALL-FORMATS-INDIC)
05 nombre-archivo-RECORD.
Las entradas de descripción de datos que se generan se determinan según el atri-
buto de utilización (I, O, o I-O) que se especifique o asuma en la instrucción
COPY.
Ÿ Si se especifica ...I-INDICATOR..., se generan las entradas de descripción de
datos para los indicadores de entrada (respuesta) para los indicadores utili-
zados en el área de registro de entrada.
Ÿ Si se especifica ...O-INDICATOR..., se generan las entradas de descripción de
datos para los indicadores de salida (opción) para los indicadores utilizados en
el área de registro de salida.
Ÿ Si se especifica o se asume ...I-O-INDICATOR..., se generan las entradas de
descripción de datos separadas para indicadores de entrada y salida (res-
puesta y opción) de los indicadores utilizados en las áreas de registro de
entrada y salida.

Si no se especifica el atributo Indicador, la generación de entradas de descripción


de datos para indicadores dependerá de si el archivo tenía la palabra clave
INDARA especificada en las DDS en el momento en que se creó.
Ÿ Si no se especificó INDARA, las entradas de descripción de datos se generan
tanto para campos de datos como de indicadores.
Ÿ Si INDARA se especificó, las entradas de descripción de datos se generan
solamente para campos de datos, y no para indicadores.

124 COBOL/400 Guía del usuario


Generación de Formatos I/O
Cuando todas las descripciones de campo sean idénticas, y haya solicitado
campos INPUT o OUTPUT implícita o explícitamente, sólo se genera un conjunto
de descripciones de campo. Este tipo de descripción se anota con una línea de
comentario que reza “FORMATO I-O: nombre-formato”. Ni -I ni -O se añaden al
formato de registro.
Nota: Esto siempre ocurre en los archivos de base de datos porque todas las
descripciones de campos de un archivo de base de datos son idénticas.

Por ejemplo:

ð1 RCUSREC.
COPY DDS-CUSREC-I OF CUSFILE.
\ FORMATO E-S: CUSREC DESDE ARCHIVO CUSFILE DE BIBL. CUSLIB CUSREC
\ DEFINICIONES DE CLAVE PARA FORMATO DE REGISTRO CUSREC
\ NUMERO NOMBRE RECUPERACION TIPO SECALT
\ ððð1 ARBAL ASCENDING SIGNED NO
\ ððð2 AREACD DESCENDING ABSVAL NO
ð5 CUSREC.
ð6 ARBAL PIC S9(7)V9(2) COMP-3 CUSREC
ð6 AREACD PIC S9(3) COMP-3. CUSREC
ð6 BOSTAZ PIC X(1). CUSREC
ð6 CNTCT PIC X(15). CUSREC
ð6 CRCHKZ PIC S9(2). CUSREC
ð6 CSTAT PIC X(1). CUSREC
ð6 CUSTNZ PIC S9(6). CUSREC
ð6 DLORD PIC S9(6). CUSREC
ð6 DSCPCZ PIC S9(2)V9(3) COMP-3. CUSREC
ð6 INDUS PIC S9(2). CUSREC
ð6 NAME1 PIC X(25). CUSREC
ð6 NAME2 PIC X(25). CUSREC
ð6 NAME3 PIC X(25). CUSREC
ð6 NAME4 PIC X(25). CUSREC
ð6 PHONE PIC S9(7) COMP-3. CUSREC
ð6 PRICIZ PIC S9(2). CUSREC
ð6 SHPINZ PIC X(25). CUSREC
ð6 SLSMAZ PIC X(3). CUSREC
ð6 TAXCDZ PIC S9(2). CUSREC
ð6 TERMSZ PIC S9(2). CUSREC

Figura 39. Ejemplo de Copia DDS que Muestra Formatos I/O

Redefinición de Formatos
Preste especial atención a la cláusula REDEFINES que puede generarse para las
frases ALL-FORMATS o -I-O. Debido a que todos los formatos se redefinen en la
misma área (generalmente un área de almacenamiento intermedio), varios
nombres de campo pueden describir la misma área de almacenamiento, y pueden
producirse resultados imprevisibles si no se vuelve a inicializar todo el área del
formato antes de cada operación de salida.

Los ítems de datos que están subordinados a los ítems de datos especificados en
una instrucción MOVE CORRESPONDING no se corresponden y no se trasladan
cuando contienen una cláusula REDEFINES o están subordinados a un ítem
redefinitorio.

Para evitar la reinicialización, se pueden utilizar varias instrucciones COPY de


Formato 2 que utilicen sufijos -I y -O para crear áreas de almacenamiento sepa-
radas en la Sección de Almacenamiento de Trabajo (Working Storage) de cada

Capítulo 7. Gestión de Archivos y Datos 125


formato o tipo de formato (entrada o salida). Con estos formatos de registro
pueden utilizarse instrucciones READ INTO y WRITE FROM.
Por ejemplo:

FD ORDER-ENTRY-SCREEN ...
ð1 ORDER-ENTRY-RECORD ...
..
.
WORKING-STORAGE SECTION.
ð1 ORDSFL-I-FORMAT.
COPY DDS-ORDSFL-I OF DOESCR.
ð1 ORDSFL-O-FORMAT.
COPY DDS-ORDSFL-O OF DOESCR.
..
.
PROCEDURE DIVISION.
..
.
READ SUBFILE ORDER-ENTRY-SCREEN NEXT MODIFIED RECORD
INTO ORDSFL-I-FORMAT FORMAT IS "ORDSFL"
AT END SET NO-MODIFIED-SUBFILE-RCD TO TRUE.
..
.
MOVE CORR ORDSFL-I TO ORDSFL-O.
REWRITE SUBFILE ORDER-ENTRY-RECORD FROM ORDSFL-O-FORMAT
FORMAT IS "ORDSFL" ...
..
.

126 COBOL/400 Guía del usuario


Ejemplos de Generación de Claves
AS/400 ESPECIFICACIONES DE DESCRIPCION DE DATOS GX21-9891-0 UM/050*
Impreso en España
International Business Machines
*El número de hojas por área de relleno puede variar ligeramente.

Archivo Signo Descripción Página de


Instrucciones
de Grabación
Programador Fecha Tecla

T i p o N o m b r e o E s p e c (/b / R / H / J / K / S / O )
Condicionamiento

Tipo Datos/Desplazamiento Teclado


Ubicación

U t i l i z a c/i ó n ( b / O / I / B / H / M / N / P )
And/Or/Com ent. (A/O/*)

Nombre Condición
Tipo de Formula rio

Nom bre Longitud Funciones

Referencia (R)
Nú mero d e
Secuencia

Posiciones
Reservado

D ecimales
Indicador

Indicador

Indicador
No (N)

No (N)
No (N)

Línea Pos

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80

A * AR CH I VO F I S I CO P F 1 P AR A E J E MP L O S D E G E N E R AC I ON D E C L AV E S
A *
A R P F R E COR C
A *
A M T H 2
A * DA Y 2
A Y E AR 4
A I T EM 8
A
A
A K M T H
A K DA Y
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A

Figura 40. Especificaciones de Descripción de Datos para un Archivo Físico

El archivo físico de la Figura 40 constituye una base para los ejemplos que apa-
recen a continuación. Cada ejemplo hace referencia a un archivo lógico (derivado
del archivo físico) que especifica EXTERNALLY-DESCRIBED-KEY en su cláusula
SELECT.

Capítulo 7. Gestión de Archivos y Datos 127


Ejemplo que Utiliza la Palabra Clave CONCAT
AS/400 ESPECIFICACIONES DE DESCRIPCION DE DATOS GX21-9891-0 UM/050*
Impreso en España
International Business Machines
*El número de hojas por área de relleno puede variar ligeramente.

Archivo Signo Descripción Página de


Instrucciones
de Grabación
Programador Fecha Tecla

T i p o N o m b r e o E s p e c (/b / R / H / J / K / S / O )
Condicionamiento

Tipo Datos/Desplazamiento Teclado


Ubicación

U t i l i z a c/i ó n ( b / O / I / B / H / M / N / P )
And/Or/Com ent. (A/O/*)

Nombre Condición
Tipo de Formula rio

Nom bre Longitud Funciones

Referencia (R)
Nú mero d e
Secuencia

Posiciones
Reservado

D ecimales
Indicador

Indicador

Indicador
No (N)

No (N)
No (N)

Línea Pos

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80

A * A R CH I VO L OG I C O L F 1 P AR A E J E MP L O S D E CONCA T E N A R C L AV E S
A *
A R R E COR D 1 P F I L E ( P F 1 )
A *
A DA T E CONCA T ( ME S D I A A ÑO )
A *
A K M T H
A K DA Y
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A

Figura 41. Especificaciones de Descripción de Datos que Utilizan la Palabra CONCAT

Para el archivo lógico de la Figura 41, COPY DDS genera claves y nombres de
claves derivados del archivo físico:

128 COBOL/400 Guía del usuario


FD LF1 LABEL RECORDS ARE STANDARD.
ð1 LOG-RECORD.
COPY DDS-ALL-FORMATS OF LF1.
ð5 LF1-RECORD PIC X(8).
\ FORMATO E-S:RECORD1 DESDE ARCHIVO LF1 DE BIBLIOTECA COPYDDS
\
\DEFINICIONES DE CLAVE PARA FORMATO DE REGISTRO RECORD1
\ NUMERO NOMBRE RECUPERAC. TIPO SECALT
\ ððð1 MTH-DDS ASCENDENTE AN NO
\ NOMBRE DE CLAVE ORIGINADO DEL ARCHIVO FISICO
\ ððð2 DAY-DDS-DDS ASCENDENTE AN NO
\ NOMBRE DE CLAVE ORIGINADO DEL ARCHIVO FISICO
ð5 RECORD1 REDEFINES LF1-RECORD.
ð6 DATE-DDS PIC X(8).
ð6 FILLER REDEFINES DATE-DDS.
ð7 MTH-DDS PIC X(2).
ð7 DAY-DDS-DDS PIC X(2).
ð7 FILLER PIC X(4).

Figura 42. Ejemplo que Utiliza la Palabra Clave CONCAT

La instrucción COPY añade el sufijo -DDS a los nombres de campos MTH y DATE
porque MTH es una clave que tiene su origen en el archivo físico, y DATE es una
palabra reservada COBOL. La instrucción COPY añade el sufijo -DDS dos veces
en el nombre de campo DAY porque DAY es a la vez una clave que se origina en
el archivo físico y una palabra reservada COBOL.

Observe que si mueve la instrucción COPY de la Sección de Archivos a la Sección


de Almacenamiento de Trabajo o a la Sección de Enlace, los campos subordi-
nados a DATE-DDS ya no están disponibles:

WORKING-STORAGE SECTION.
ð1 WRK-RECORD.
COPY DDS-ALL-FORMATS OF LF1.
ð5 LF1-RECORD PIC X(8).
\ FORMATO E-S:RECORD1 DESDE ARCHIVO LF1 DE BIBLIOTECA COPYDDS
\
ð5 RECORD1 REDEFINES LF1-RECORD.
ð6 DATE-DDS PIC X(8).

Figura 43. Ejemplo que Utiliza la Palabra Clave CONCAT-- Sección de Almacenamiento de
Trabajo

Capítulo 7. Gestión de Archivos y Datos 129


Ejemplo que Utiliza la Palabra Clave RENAME
AS/400 ESPECIFICACIONES DE DESCRIPCION DE DATOS GX21-9891-0 UM/050*
Impreso en España
International Business Machines
*El número de hojas por área de relleno puede variar ligeramente.

Archivo Signo Descripción Página de


Instrucciones
de Grabación
Programador Fecha Tecla

T i p o N o m b r e o E s p e c (/b / R / H / J / K / S / O )
Condicionamiento

Tipo Datos/Desplazamiento Teclado


Ubicación

U t i l i z a c/i ó n ( b / O / I / B / H / M / N / P )
And/Or/Com ent. (A/O/*)

Nombre Condición
Tipo de Formula rio

Nom bre Longitud Funciones

Referencia (R)
Nú mero d e
Secuencia

Posiciones
Reservado

D ecimales
Indicador

Indicador

Indicador
No (N)

No (N)
No (N)

Línea Pos

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80

A * AR CH I VO L OG I C O L F 2 P AR A E J E MP L O S R E D E N OM I N A R P A L AB R A C L AV E
A *
A R R E COR D 2 P F I L E ( P F 1 )
A *
A MO N T H R E N AM E ( M E S )
A *
A K M T H
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A

Figura 44. Especificaciones de Descripción de Datos que Utilizan la Palabra RENAME

Para el archivo lógico descrito en la Figura 44, COPY DDS genera una clave y un
nombre de clave derivados del archivo físico:

130 COBOL/400 Guía del usuario


FD LF2 LABEL RECORDS ARE STANDARD.
ð1 LOG-RECORD.
COPY DDS-ALL-FORMATS OF LF2.
ð5 LF2-RECORD PIC X(2).
\ FORMATO E-S:RECORD2 DESDE ARCHIVO LF2 DE BIBLIOTECA COPYDDS
\
\DEFINICIONES DE CLAVE PARA FORMATO DE REGISTRO RECORD2
\ NUMERO NOMBRE RECUPERAC. TIPO SECALT
\ ððð1 MTH-DDS ASCENDENTE AN NO
\ NOMBRE DE CLAVE ORIGINADO DEL ARCHIVO FISICO
ð5 RECORD2 REDEFINES LF2-RECORD.
ð6 MONTH PIC X(2).
ð6 MTH-DDS REDEFINES MONTH PIC X(2).

Figura 45. Utilización de la Palabra Clave RENAME

La instrucción COPY añade el sufijo -DDS al nombre de campo MTH porque MTH
es una clave que tiene su origen en el archivo físico.

Capítulo 7. Gestión de Archivos y Datos 131


Ejemplo que Utiliza la Palabra Clave SST
AS/400 ES PECIFICACIONES DE DESCRIPCION DE DATOS GX21-9891-0 UM/050*
Impreso en España
International Business Machines
*El núm e ro de hojas por área de re lleno puede variar lige ram ente .

Archivo Signo Descripción Página de


Instrucciones
de Grabación
Programador Fecha Tecla

T i p o N o m b r e o E s p e c (/b / R / H / J / K / S / O )
Condicionamiento

Tipo Datos/Desp lazamien to Teclado


Ubicación

U t i l i z a c/i ó n ( b / O / I / B / H / M / N / P )
And/Or/Coment. (A/O/*)

Nombre Co ndición
Tipo de Formula rio

N om b re Longitud Funciones

Referencia (R)
Nú mero de
Secuencia

Posiciones
Reservado

D ecimales
Indicador

Indicador

Indicador
No (N)

No (N)
No (N)

Línea Pos

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80

A * AR CH I VO L OG I C O L F 3 P AR A E J E MP L O S D E P A L AB R A C L AV E S S T
A *
A R R E COR D 3 P F I L E ( P F 1 )
A *
A Y Y I S S T ( AÑO 2 2 )
A *
A K Y Y
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A

Figura 46. Especificaciones de Descripción de Datos que Utilizan la Palabra Clave SST

132 COBOL/400 Guía del usuario


Para el archivo lógico descrito en la Figura 46 en la página 132, COPY DDS
genera las especificaciones siguientes:

FD LF3 LABEL RECORDS ARE STANDARD.


ð1 LOG-RECORD.
COPY DDS-ALL-FORMATS OF LF3.
ð5 LF3-RECORD PIC X(2).
\ FORMATO E-S:RECORD3 DESDE ARCHIVO LF3 DE BIBL. COPYDDS
\
\DEFINICIONES DE CLAVE PARA FORMATO DE REGISTRO RECORD3
\ NUMERO NOMBRE RECUPERAC. TIPO SECALT
\ ððð1 YY ASCENDENTE AN NO
ð5 RECORD3 REDEFINES LF3-RECORD.
ð6 YY PIC X(2).

Figura 47. Utilización de la Palabra Clave SST

La instrucción COPY no añade ningún sufijo al nombre de campo YY porque YY


no es una clave que se origine en el archivo físico ni es una palabra reservada
COBOL.

Notas Adicionales sobre Nombres de Campos y de Formatos


Si el nombre de campo generado es una palabra reservada COBOL el sufijo -DDS
se añade al nombre de campo.

La frase REPLACING no puede utilizarse para cambiar el nombre de un campo de


clave cuando se utiliza EXTERNALLY-DESCRIBED-KEY.

Campos de Coma Flotante


COBOL trata los campos de coma flotante como FILLER. Los campos pueden
contener valores de coma flotante colocados fuera de COBOL. Se genera una
definición COMP-4 para mantener el alineamiento adecuado en el registro, pero los
datos no están en formato binario. No debe hacerse ningún intento de utilizar
datos de coma flotante para el proceso en el programa COBOL.

No se permiten campos de clave de coma flotante. En casos en los que existan


algunos formatos con un campo de clave de coma flotante y otros formatos que no
lo tengan, utilice una o más instrucciones COPY de Formato 2 con nombres de
formato específicos; no utilice la opción ALL-FORMATS.
Nota: Si no especifica el orden de clasificación en el programa, puede crear un
registro que contenga campos de coma flotante en el programa COBOL
moviendo LOW-VALUES a la totalidad del registro antes de mover los
valores de los campos que no sean de coma flotante. Esto les dará un
valor cero a los campos de coma flotante en el registro. Tenga en cuenta
que el método anterior sólo es recomendable si los campos de coma flo-
tante válidos con un valor cero son apropiados para su aplicación particular.

Frase REPLACING en la Instrucción COPY de Formato 2


La frase REPLACING puede utilizarse para sustituir cualquier fuente generada en
COBOL, incluyendo los números de nivel y el nombre de formato. Observe la
excepción siguiente:
Ÿ Cuando se especifica RECORD KEY IS EXTERNALLY-DESCRIBED-KEY, la
frase REPLACING no puede cambiar el nombre de un campo que es una
clave.

Capítulo 7. Gestión de Archivos y Datos 133


Por ejemplo:

5763CB1 V3RðM5 Fuente AS/4ðð COBOL


INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
ðð15ðð\ ð3/25/94
ðð16ðð\ COPY DDS S I N OPCIÓN REPLACING ð3/25/94
ðð17ðð\ ð3/25/94
14 ðð18ðð COPY DDS-CUSMST OF CUSMSTP. ð3/25/94
+ððððð1\ FORMATO E-S:CUSMST DESDE ARCHIVO CUSMSTP DE BIBL. COBNATEX CUSMST
+ððððð2\ REGISTRO MAESTRO CLIENTE CUSMST
15 +ððððð3 ð5 CUSMST. CUSMST
16 +ððððð4 ð6 CUST PIC X(5). CUSMST
+ððððð5\ NÚMERO CLIENTE CUSMST
17 +ððððð6 ð6 NAME PIC X(25). CUSMST
+ððððð7\ NOMBRE CLIENTE CUSMST
18 +ððððð8 ð6 ADDR PIC X(2ð). CUSMST
+ððððð9\ DIRECCIÓN CLIENTE CUSMST
19 +ðððð1ð ð6 CITY PIC X(2ð). CUSMST
+ðððð11\ CIUDAD CLIENTE CUSMST
2ð +ðððð12 ð6 STATE PIC X(2). CUSMST
+ðððð13\ PROVINCIA CUSMST
21 +ðððð14 ð6 ZIP PIC S9(5) COMP-3. CUSMST
+ðððð15\ CÓDIGO POSTAL CUSMST

Figura 48. COPY DDS sin la Opción REPLACING

5763CB1 V3RðM5 Fuente AS/4ðð COBOL


INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
ðð19ðð\ ð3/25/94
ðð2ððð\ COPY DDS C O N OPCION REPLACING ð3/25/94
ðð21ðð\ ð3/25/94
31 ðð22ðð COPY DDS-CUSMST OF CUSMSTP ð3/25/94
32 ðð23ðð REPLACING NAME BY ADDR-LINE-1 ð3/25/94
33 ðð24ðð ADDR BY ADDR-LINE-2 ð3/25/94
34 ðð25ðð CITY BY ADDR-LINE-3. ð3/25/94
+ððððð1\ FORMATO E-S:CUSMST DESDE ARCHIVO CUSMSTP DE BIBL. COBNATEX CUSMST
+ððððð2\ REGISTRO MAESTRO CLIENTE CUSMST
35 +ððððð3 ð5 CUSMST. CUSMST
36 +ððððð4 ð6 CUST PIC X(5). CUSMST
+ððððð5\ NÚMERO CLIENTE CUSMST
37 +ððððð6 ð6 ADDR-LINE-1 PIC X(25). CUSMST
+ððððð7\ NOMBRE CLIENTE CUSMST
38 +ððððð8 ð6 ADDR-LINE-2 PIC X(2ð). CUSMST
+ððððð9\ DIRECCIÓN CLIENTE CUSMST
39 +ðððð1ð ð6 ADDR-LINE-3 PIC X(2ð). CUSMST
+ðððð11\ CIUDAD CLIENTE CUSMST
4ð +ðððð12 ð6 STATE PIC X(2). CUSMST
+ðððð13\ PROVINCIA CUSMST
41 +ðððð14 ð6 ZIP PIC S9(5) COMP-3. CUSMST
+ðððð15\ CÓDIGO POSTAL CUSMST

Figura 49. COPY DDS con la Opción REPLACING

Fin de Ampliación de IBM

Vía de Acceso
La descripción de un archivo descrito externamente contiene la vía de acceso que
describe cómo se recuperan los registros del archivo. Los registros pueden recu-
perarse basándose en una vía de acceso en secuencia de llegada (sin clave) o en
una vía de acceso en secuencia de claves.

134 COBOL/400 Guía del usuario


La vía de acceso del orden de llegada se basa en el orden en que se almacenan
los registros en el archivo. Los registros sólo se añaden al final del archivo.

Para la vía de acceso de secuencia por claves, el orden de recuperación de los


registros del archivo se basa en el contenido de los campos de clave definidos en
las DDS del archivo. Por ejemplo, en las DDS mostradas en la Figura 33 en la
página 115, CUST se define como campo clave. La vía de acceso en secuencia
de claves se actualiza siempre que se añaden o se suprimen registros, o cuando
se cambia el contenido de un campo clave.

Consulte la publicación Guía para la Base de Datos para una descripción completa
de las vías de acceso para un archivo de base de datos descrito externamente.

Claves de Registro y Claves Comunes


Para una vía de acceso en secuencia de claves, pueden definirse uno o más
campos en las DDS para utilizarlos como campos clave para un formato de
registro. No todos los tipos de registro de un archivo necesitan los mismos
campos clave. Por ejemplo, un registro de cabecera de pedido puede tener el
campo ORDER definido como campo de clave, y los registros de detalle de pedido
pueden tener los campos ORDER y LINE definidos como campos de clave.

La clave para un archivo se determina mediante las claves válidas para los tipos
de registros en ese archivo. La clave del archivo se determina de la manera
siguiente:
Ÿ Si todos los tipos de registro en un archivo tienen el mismo número de campos
de clave definidos en las DDS que sean idénticos en sus atributos, la clave del
archivo se compone de todos los campos en la clave para los tipos de registro.
(Los campos correspondientes no tienen que tener el mismo nombre). Por
ejemplo, si el archivo tiene tres tipos de registro y la clave para cada tipo de
registro consta en los campos A, B y C, la clave del archivo consta de los
campos A, B y C. Es decir, la clave del archivo es la misma que la clave de
los registros.
Ÿ Si todos los tipos de registro en el archivo no tienen los mismos campos de
clave, la clave del archivo consta de los campos de clave comunes para todos
los tipos de registro. Por ejemplo, un archivo tiene tres tipos de registro y los
campos de clave se definen de la manera siguiente:
– REC1 contiene el campo de clave A.
– REC2 contiene los campos de clave A y B.
– REC3 contiene los campos de clave A, B y C.
Luego la clave del archivo es el campo A, el campo de clave común para
todos los tipos de registro.
Ÿ Si no hay ningún campo clave común para todos los tipos de registro, cual-
quier referencia por clave para el archivo devolverá siempre el primer registro
en el archivo.

En COBOL, deberá especificar RECORD KEY para un archivo indexado para iden-
tificar el registro que desee procesar. COBOL compara el valor de clave con el
valor del archivo o registro y procesa la operación especificada en el registro cuya
clave coincida con el valor RECORD KEY.

Cuando se especifica RECORD KEY IS EXTERNALLY-DESCRIBED-KEY:

Capítulo 7. Gestión de Archivos y Datos 135


Ÿ Si se especifica la frase FORMAT, el compilador construye el argumento de
búsqueda a partir de los campos de clave en el área de registro para el
formato especificado.
Ÿ Si no se especifica la frase FORMAT, el compilador construye el argumento de
búsqueda a partir de los campos de clave en el área de registro del primer
formato de registro definido en el programa para ese archivo.
Nota: Para un archivo que contiene múltiples campos de clave para procesarlos
en COBOL, los campos de clave deben ser contiguos en el formato de
registro que utilice el programa COBOL, excepto cuando se especifique
RECORD KEY IS EXTERNALLY-DESCRIBED-KEY.

Alterar Temporalmente o Añadir Funciones COBOL a la


Descripción Externa
Además de colocar la descripción externa de archivo en el programa mediante la
instrucción COPY de Formato 2, podrá utilizar también la definición y redefinición
de registro estándar para describir archivos externos o para proporcionar una defi-
nición de grupo para una serie de campos. Es responsabilidad del programador el
asegurar que las definiciones descritas por programa sean compatibles con las
definiciones externas del archivo.

Comprobación de Nivel
Cuando un programa COBOL/400 utiliza un archivo descrito externamente, el
sistema operativo proporciona una función de comprobación de nivel (LVLCHK).
Esta función asegura que el formato no se ha modificado desde el momento de la
compilación.

El compilador siempre proporciona la información requerida por la comprobación


de nivel cuando se utiliza un archivo descrito externamente (es decir, cuando una
descripción de registro del archivo se ha definido utilizando la instrucción COPY de
Formato 2). Sólo se comprueba el nivel de aquellos formatos que ha copiado la
instrucción COPY de Formato 2 bajo el FD para un archivo. La función de com-
probación de nivel se iniciará en tiempo de ejecución basándose en la selección
realizada en los mandatos de crear, cambiar o alterar temporalmente archivo. La
opción por omisión en el mandato de crear archivo es pedir la comprobación de
nivel. Si se solicitó la comprobación de nivel, se produce según el formato de
registro cuando se abre el archivo. Si se produce un error en la comprobación de
nivel, COBOL establece el estado de archivo a 39 en tiempo de OPEN.

Si no se ha solicitado comprobación de nivel, y el archivo se vuelve a crear utili-


zando un formato existente, puede que los programas COBOL que utilicen dicho
formato no trabajen sin recompilación, dependiendo de los cambios en el formato.
Por ejemplo,
Ÿ Un cambio de claves provocará, con toda certeza, una anomalía en el pro-
grama o en cualquier instrucción I/O
Ÿ Un cambio en la longitud de registro provocará una anomalía de cualquier
REWRITE
Ÿ Un cambio en el diseño de registro puede provocar diversos errores en el
proceso de dicho registro.

Deberá extremar las precauciones cuando utilice programas COBOL sin compro-
bación de nivel o sin recompilar los programas.

136 COBOL/400 Guía del usuario


Nota: El compilador no proporciona la comprobación de nivel para los archivos
descritos por programa.

Para obtener más información acerca de la comprobación de nivel, consulte la


publicación Guía para la Gestión de Datos.

Declaración de Ítems de Datos utilizando Tipos de Datos de CVTOPT


El compilador COBOL/400 sirve para convertir campos de longitud variable desde
archivos descritos externamente, así como tipos de datos de bases de datos SAA
en ítems estándar de datos COBOL. Los tipos de datos SAA que se pueden con-
vertir son datos de fecha, hora, indicación horaria y DBCS gráficos. COBOL/400
proporciona soporte limitado para estos tipos de datos.

Campos de Longitud Variable


Es posible trasladar un campo de longitud variable a un programa si se especifica
*VARCHAR en el parámetro CVTOPT del mandato CRTCBLPGM, o bien la opción
VARCHAR de la instrucción PROCESS. Cuando se especifica *VARCHAR, el pro-
grama COBOL/400 convertirá un campo de longitud variable desde un archivo des-
crito externamente en un ítem de grupo COBOL/400.

A continuación se muestra un ejemplo de este ítem de grupo:


ð6 ITEM1.
49 ITEM1-LENGTH PIC S9(4) COMP-4.
49 ITEM1-DATA PIC X(n).
donde n representa la longitud máxima del campo de longitud variable. Dentro del
programa, PIC S9(4) COMP-4 se considera como cualquier otra declaración de este
tipo, y PIC X(n) como un estándar alfanumérico.

Puesto que el valor máximo que ITEM1-LENGTH puede mantener es 9 999, ésta
será la longitud del campo de longitud variable más largo que se pueda escribir
desde un programa COBOL.

Cuando no se especifica *VARCHAR, se hace caso omiso de los campos de lon-


gitud variable y se declaran como campos FILLER en programas COBOL/400. Si
se especifica *NOVARCHAR, el ítem se declara como sigue:
ð6 FILLER PIC x(n+2).

Para obtener más información referente a la sintaxis, consulte el parámetro


CVTOPT en la página 24.

El programa puede realizar cualquier tipo de operaciones de carácter válido en la


parte de datos generada; no obstante, debido a la estructura del campo, la longitud
de la parte debe estar formada por datos binarios válidos. Estos datos no son
válidos si son negativos o mayores que la longitud máxima de campo.

Si los dos primeros bytes del campo carecen de un número binario válido, se pro-
ducirá un error si se intenta efectuar WRITE o REWRITE a un registro que con-
tenga el campo (o UPDATE o PUT el campo en una base de datos), y se devuelve
el estado de archivo 90.

Las siguientes condiciones tienen lugar si se especifican campos de longitud


variable:

Capítulo 7. Gestión de Archivos y Datos 137


Ÿ Si se detecta un campo de longitud variable cuando se extrae un campo para
un archivo descrito externamente o para una estructura de datos descritos
externamente, dicho campo se declarará como un campo de caracteres de lon-
gitud fija en un programa COBOL/400.
Ÿ Para los campos de caracteres de un solo byte, la longitud del campo
COBOL/400 declarado equivale a la longitud del campo DDS más dos bytes.
Ÿ Para campos de caracteres DBCS gráficos, la longitud del campo COBOL/400
declarado equivale al doble de la longitud del campo DDS más dos bytes.
Para obtener más información sobre tipos de datos gráficos, consulte el apar-
tado “Campos Gráficos DBCS” en la página 139. Los dos bytes extra del
campo COBOL/400 contienen un número binario que representa la longitud
actual del campo de longitud variable. La Figura 50 muestra la longitud de
campo COBOL/400 de los campos de longitud variable.

──┬────────┬────────────────┬─────
──5 │ long. │ datos-caract. │ ──5
──┴────────┴────────────────┴─────
BIN(2) CHAR(N)
&

longitud declarada en DDS

Para campos de caract. de solo byte: 2 + N = long. de campo COBOL/4ðð

Para campos tipos datos DBCS gráfi.: 2 + 2(N) = long. de campo COBOL/4ðð

Figura 50. Longitud de Campo COBOL/400 de un Campo de Longitud Variable

Ÿ El programa COBOL/400 puede realizar cualquier operación válida de cálculo


de caracteres en el campo de longitud fija declarado. Sin embargo, debido a
la estructura del campo, los primeros dos caracteres del campo deben con-
tener datos binarios válidos (datos de longitud fija actuales no válidos son no
numéricos, inferiores a 0 o mayores que la longitud de campo DDS.) Se
produce un error en una operación de entrada o salida si los dos primeros
bytes del campo contienen datos de longitud de campo no válidos; entonces se
devuelve el estado de archivo 90.
Ÿ Si no se especifica *VARCHAR, se pueden producir errores durante la reali-
zación de las operaciones WRITE en campos de longitud variable, ya que no
se puede asignar ningún valor a FILLER. El campo de dos bytes puede tener
un valor (por ejemplo X'4ð4ð') que proporciona una longitud que sobrepase el
rango permitido de este campo. Esta acción origina un error de E/S.

Si desea observar un ejemplo de un programa que utilice campos de longitud


variable, consulte el apartado “Ejemplos” en la página 141.

Campos de fecha, hora e indicación horaria


Los campos de fecha, hora e indicación de la hora se introducen en el programa
únicamente si se especifica la opción *DATETIME del parámetro CRTCBLPGM
CVTOPT, o bien la opción DATETIME de la instrucción PROCESS. Para obtener
más información sobre la sintaxis del parámetro CVTOPT, consulte la página 24.

138 COBOL/400 Guía del usuario


Si no se especifica *DATETIME, se hace caso omiso de los campos de fecha, hora
e indicación de la hora y se declaran campos FILLER en el programa COBOL/400.

Los campos de fecha, hora e indicación de la hora se introducen en el programa


COBOL/400 como campos de caracteres de longitud variable. El programa
COBOL/400 puede realizar cualquier operación válida en los campos de longitud
variable. Esta operaciones se basan en las reglas COBOL estándar para ítems de
datos alfanuméricos.

Los tipos de datos de fecha, hora e indicación de la hora disponen cada uno de
ellos de un formato propio.

Si se actualiza un campo que contiene información referente a la hora, fecha o a la


indicación horaria, y la información actualizada debe transferirse a la base de
datos, el formato del campo debe ser exactamente el mismo que el del campo que
fue recuperado desde la base de datos. Si no se utiliza el mismo formato, se pro-
ducirá un error. Para obtener más información referente formatos válidos para
cada tipo de datos, consulte el manual DDS Reference.

Si se intenta efectuar WRITE sobre un registro antes de trasladar el valor ade-


cuado a un campo de fecha, hora o indicación de la hora, la operación WRITE no
será satisfactoria y se devolverá el estado de archivo 90.

Si se declaran en el programa como FILLER los ítems fecha, hora e indicación de


la hora, no intente efectuar WRITE sobre registros que contengan estos campos,
puesto que no es posible establecer valores que puedan ser aceptados por el
sistema.

Campos con posibilidad de nulos


Aunque el programa puede procesar campos con posibilidad de nulos, los valores
nulos no están soportados. Las operaciones READ, SORT y MERGE pueden rea-
lizarse en campos con posibilidad de nulos, pero se producirá un error si estos
campos contienen realmente valores nulos.

Campos Gráficos DBCS


El tipo de datos DBCS gráficos es una serie de caracteres donde cada carácter
está representado por 2 bytes. Este tipo de datos no contienen caracteres de des-
plazamiento a teclado ideográfico (SO) ni caracteres de desplazamiento a teclado
estándar (SI). La diferencia entre un dato de un solo byte y los datos DBCS grá-
ficos se muestra en la siguiente figura:

Capítulo 7. Gestión de Archivos y Datos 139


┌────────┬────────┬────────┬────────┐
│ 1 byte │ 1 byte │ 1 byte │ 1 byte │ Datos de un
└────────┴────────┴────────┴────────┘ solo byte

└────────┴────────┴────────┴────────┘
1 carác. 1 carác. 1 carác. 1 carác.

┌────────┬────────┬────────┬────────┐
│ 1 byte │ 1 byte │ 1 byte │ 1 byte │ Datos DBCS
└────────┴────────┴────────┴────────┘ gráficos

└─────────────────┴─────────────────┘
1 carácter 1 carácter
Figura 51. Comparación de Datos de un Solo Byte y Datos Gráficos

Los datos DBCS gráficos se introducen en el programa COBOL/400 solamente si


se especifica el valor *GRAPHIC en el parámetro CVTOPT del mandato
CRTCBLPGM, o bien la opción CVTGRAPHIC de la instrucción PROCESS. Si no
se especifican datos gráficos DBCS, se hace caso omiso de los datos gráficos y se
declaran campos FILLER en el programa COBOL/400. Para obtener más infor-
mación sobre la sintaxis del parámetro CVTOPT, consulte la página 24.

Las siguientes condiciones se aplican cuando se especifican los datos DBCS


gráficos:
Ÿ Los datos DBCS gráficos se copian en el programa COBOL/400 como un
campo alfanumérico de longitud fija.
Ÿ Cada carácter de datos DBCS gráficos tiene una longitud de 2 bytes.
Ÿ Cada campo de datos DBCS gráficos de longitud fija tiene una longitud que es
el doble del número de caracteres del campo. Para obtener una descripción
de la longitud de campo de los campos de datos gráficos de longitud variable,
consulte el apartado “Campos de Longitud Variable” en la página 137.
Ÿ El programa COBOL/400 puede realizar cualquier operación válida en los
campos de longitud variable.

Campos Gráficos DBCS de Longitud Variable


Es posible utilizar campos de longitud variable en combinación con tipos de datos
DBCS gráficos para especificar datos DBCS gráficos de longitud variable. Para
especificar datos DBCS gráficos de longitud variable, especifique \VARCHAR y
\GRAPHIC para el parámetro CVTOPT del mandato CRTCBLPGM, o bien las
opciones VARCHAR y CVTGRAPHIC para la instrucción PROCESS.

Si especifica tanto CVTOPT(\NOVARCHAR \NOGRAPHIC) como CVTOPT(\NOVARCHAR


\GRAPHIC) y el compilador detecta un ítem de datos DBCS gráficos de longitud
variable, el programa resultante contendrá los siguientes elementos:
ð6 FILLER PIC X(2n+2).
\ (Campo de longitud variable)

donde n es el número de caracteres del campo DDS.

140 COBOL/400 Guía del usuario


Si se especifica CVTOPT(\VARCHAR \NOGRAPHIC) y el compilador detecta un ítem de
datos DBCS gráficos de longitud variable, el programa resultante contendrá los
siguientes elementos:
ð6 NAME
\ (Campo de longitud variable)
49 NAME-LENGTH PIC S9(4) COMP-4.
\ (Número de caracteres de 2 bytes)
49 FILLER PIC X(2n).
\ (Campo gráfico)

donde n es el número de caracteres del campo DDS.

Si se especifica CVTOPT(\VARCHAR \GRAPHIC) y el compilador detecta un ítem de


datos DBCS gráficos de longitud variable, el programa resultante contendrá los
siguientes elementos:
ð6 NAME
\ (Campo de longitud variable)
49 NAME-LENGTH PIC S9(4) COMP-4.
\ (Número de caracteres de 2 bytes)
49 NAME-DATA PIC X(2n).
\ (Campo gráfico)

donde n es el número de caracteres del campo DDS.

Ejemplos
La Figura 52 muestra un ejemplo de archivo DDS que define un ítem de datos
DBCS gráficos de longitud variable. La Figura 53 en la página 142 muestra un
programa COBOL/400 que utiliza una instrucción DDS COPY, así como el listado
resultante que se obtiene cuando se compila el programa.

A R SAMPLEFILE
A\
A VARITEM 1ðð VARLEN
A\
A TIMEITEM T TIMFMT(\HMS)
A DATEITEM L DATFMT(\YMD)
A TIMESTAMP Z
A\
A GRAPHITEM 1ððG
A VGRAPHITEM 1ððG VARLEN
Figura 52. Archivo DDS que Define un Campo de Datos Gráficos de Longitud Variable

Capítulo 7. Gestión de Archivos y Datos 141


5763CB1 V3RðM5 ðð1ððð IBM SAA COBOL/4ðð TESTER/PGM1 AS4ððSYS ð4/24/94 ð8:55:54 Página 1
Programa . . . . . . . . . . . . . . : PGM1
Biblioteca . . . . . . . . . . . . : TESTER
Archivo fuente . . . . . . . . . . . : QLBLSRC
Biblioteca . . . . . . . . . . . . : TESTER
Miembro fuente . . . . . . . . . . . : PGM1 ð4/24/94 ð8:23:ð6
Nivel de gravedad de generación . . : 29
Texto 'descripción' . . . . . . . . : Ejemplos de tipos de datos
Opciones de listado fuente . . . . . : \NONE
Opciones de generación . . . . . . . : \NONE
Opciones de conversión . . . . . . . : \VARCHAR \DATETIME \GRAPHIC
Límite de mensaje:
Cantidad de mensajes.. . . . . . . : \NOMAX
Gravedad límite de mensaje . . . : 29
Imprimir archivo. . . . . . . . . . : QSYSPRT
Biblioteca . . . . . . . . . . . . : \LIBL
Señalización FIPS. . . . . . . . . . : \NOFIPS \NOSEG \NODEB \NOOBSOLETE
Señalización SAA . . . . . . . . . . : \NOFLAG
Opciones de visualización ampliada . :
Gravedad de señalización . . . . . . : ð
Sustituir programa . . . . . . . . . : \YES
Release de destino . . . . . . . . . : \CURRENT
Perfil de usuario. . . . . . . . . . : \USER
Autorización . . . . . . . . . . . . : \LIBCRTAUT
Compilador . . . . . . . . . . . . . : IBM SAA COBOL/4ðð
5763CB1 V3RðM5 ðð1ððð Fuente COBOL AS/4ðð TESTER/PGM1 AS4ððSYS ð4/24/94 ð8:55:54 Página 2
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ððð1ðð Identification division. ð1/ð2/94
2 ððð2ðð Program-id. pgm1. ð2/13/94
3 ððð3ðð Environment division. ð1/ð2/94
4 ððð4ðð Configuration section. ð1/ð2/94
5 ððð5ðð Source-computer. ibm-as4ðð. ð1/ð2/94
6 ððð6ðð Object-computer. ibm-as4ðð. ð1/ð2/94
7 ððð7ðð Input-output section. ð1/ð2/94
8 ððð8ðð File-control. ð1/ð2/94
9 ððð9ðð Select file1 ð4/23/94
1ð ðð1ððð assign to database-samplefile ð2/13/94
11 ðð11ðð organization is sequential ð4/23/94
12 ðð12ðð access is sequential ð4/23/94
13 ðð13ðð file status is fs1. ð4/23/94
14 ðð14ðð Data division. ð1/ð2/94
15 ðð15ðð File section. ð1/ð2/94
16 ðð16ðð fd file1. ð1/ð2/94
17 ðð17ðð ð1 record1. ð1/ð2/94
18 ðð18ðð copy dds-all-formats of samplefile. ð2/13/94
19 +ððððð1 ð5 SAMPLEFILE-RECORD PIC X(546). <-ALL-FMTS
+ððððð2\ FORMATO E-S:SAMPLEFILE DESDE ARCHIVO SAMPLEFILE DE BIBLO TESTER <-ALL-FMTS
+ððððð3\ <-ALL-FMTS
2ð +ððððð4 ð5 SAMPLEFILE REDEFINES SAMPLEFILE-RECORD. <-ALL-FMTS
21 +ððððð5 ð6 VARITEM. <-ALL-FMTS
+ððððð6\ (Campo de longitud variable) <-ALL-FMTS
22 +ððððð7 49 VARITEM-LENGTH PIC S9(4) COMP-4. <-ALL-FMTS
23 +ððððð8 49 VARITEM-DATA PIC X(1ðð). <-ALL-FMTS
24 +ððððð9 ð6 TIMEITEM PIC X(8). <-ALL-FMTS
+ðððð1ð\ (Campo de hora) <-ALL-FMTS
25 +ðððð11 ð6 DATEITEM PIC X(8). <-ALL-FMTS
+ðððð12\ (Campo de fecha) <-ALL-FMTS
26 +ðððð13 ð6 TIMESTAMP PIC X(26). <-ALL-FMTS
+ðððð14\ (Campo de indicación de la hora) <-ALL-FMTS
27 +ðððð15 ð6 GRAPHITEM PIC X(2ðð). <-ALL-FMTS
+ðððð16\ (Campo gráfico) <-ALL-FMTS
28 +ðððð17 ð6 VGRAPHITEM. <-ALL-FMTS
+ðððð18\ (Campo de longitud variable) <-ALL-FMTS
29 +ðððð19 49 VGRAPHITEM-LENGTH PIC S9(4) COMP-4. <-ALL-FMTS
+ðððð2ð\ (Número de caracteres de 2 bytes) <-ALL-FMTS
3ð +ðððð21 49 VGRAPHITEM-DATA PIC X(2ðð). <-ALL-FMTS
+ðððð22\ (Campo gráfico) <-ALL-FMTS
31 ðð19ðð working-storage section. ð4/22/94
32 ðð2ððð 77 fs1 pic x(2). ð4/23/94
33 ðð21ðð Procedure division. ð1/ð9/94
ðð22ðð Mainline. ð1/ð2/94
34 ðð23ðð stop run. ð1/ð2/94
\ \ \ \ \ F I N D E F U E N T E \ \ \ \ \
5738CB1 V2R2Mð ðð1ððð Mensajes COBOL AS/4ðð TESTER/PGM1 AS4ððSYS ð4/24/94 ð8:55:54 Página 3
INST
\ 16 MSGID: LBLð65ð GRAVEDAD: ðð NUMSEC: ðð16ðð
Mensaje . . . . : Bloqueo/Desbloqueo para archivo 'FILE-1' se
se realizará por medio del código generado por el compilador.
\ \ \ \ \ F I N D E M E N S A J E S \ \ \ \ \
Resumen Mensajes
Total Info(ð-4) Aviso(5-19) Error(2ð-29) Grave(3ð-39) Terminal(4ð-99)
1 1 ð ð ð ð
Registros fuente leídos . . . . . . : 23
Registros de copia leídos . . . . . : 22
Miembros de copia procesados . . . : 1
Errores de secuencia . . . . . . . : ð
Mensaje de gravedad emitido más alto: ð
LBLð9ð1 ðð Programa PGM1 creado en biblioteca TESTER.
\ \ \ \ \ F I N D E C O M P I L A C I O N \ \ \ \ \

Figura 53. Programa COBOL/400 que utiliza Ítems de Datos DBCS Gráficos de Longitud Variable

142 COBOL/400 Guía del usuario


Consideraciones acerca de los Datos de Sistemas Cruzados
Los identificadores de juegos de caracteres codificados (CCSID) le ayudarán a
mantener la integridad de los datos de caracteres en los sistemas.

La Arquitectura de Representación de Datos de Caracteres (CDRA) define los


valores CCSID para identificar los puntos de código utilizados para representar
caracteres y para convertir dichos códigos de manera que conserven sus signifi-
cados.

Como consecuencia de la conversión CDRA, es posible que pueda tener carac-


teres de sustitución (X’3F’) en sus datos. Si escribe dichos caracteres en una pan-
talla, se producirán una serie de resultados imprevisibles.

Para obtener más información acerca de las CCSID y CDRA, consulte las publi-
caciones Operación del Sistema, SC10-9280 (SC41-3203) y Guía para la Gestión
de Datos.

Capítulo 7. Gestión de Archivos y Datos 143


144 COBOL/400 Guía del usuario
Capítulo 8. Archivos Transaction

Ampliación de IBM

Esta capítulo describe las ampliaciones del lenguaje COBOL/400 que dan soporte
a las estaciones de trabajo y las comunicaciones programa a programa.

La organización de archivos TRANSACTION permite que un programa COBOL


comunique interactivamente con:
Ÿ Uno o más usuarios en una estación de trabajo
Ÿ Uno o más programas en un sistema remoto
Ÿ Uno o más dispositivos en un sistema remoto.

El sistema AS/400 le permite comunicar con un programa o dispositivo (como, por


ejemplo, tipos de comunicaciones Asíncronas) en un sistema remoto. Para una
descripción detallada de tales dispositivos, consulte la publicación ICF
Programmer’s Guide.

Archivos Transaction Descritos por Programa


En general, los archivos TRANSACTION en COBOL se describen externamente.
Sin embargo, si estos archivos se describen por programa, sólo pueden realizarse
formatos simples de pantalla. Todas las descripciones a nivel de campo se
definen en el programa COBOL

No envíe datos internos (empaquetados) o binarios (COMP, COMP-3 o COMP-4) a


una estación de pantalla como datos de salida. Tales datos pueden contener
caracteres de control de estación de pantalla que pueden provocar resultados
imprevisibles.

Consulte la publicación Guía para la Gestión de Datos para más información


acerca de la utilización de la definición de mandato.

Archivos Transaction Descritos Externamente


Un archivo en COBOL utiliza un archivo descrito externamente que contiene infor-
mación de archivo y una descripción de los campos en los registros. Los registros
en este archivo pueden describirse en el programa COBOL mediante el Formato 2
de la instrucción COPY.

La instrucción COPY con el Formato 2


Las instrucciones COPY con Formato 2 se utilizan para generar instrucciones en la
División de Datos COBOL dentro de los programas fuente para describir archivos
que existen en el sistema.
Nota: El término Instrucción COPY con formato 2 se utiliza en este manual para
describir la instrucción COPY (opción DD, DDR, DDS o DDSR).

Para más información acerca de la instrucción COPY con Formato 2, consulte el


apartado “Instrucción COPY de Formato 2 (Opción DD, DDR, DDS o DDSR)” en la
página 118.

 Copyright IBM Corp. 1994 145


Especificaciones de Descripción de Datos (Data Description
Specifications)
Las Especificaciones de Descripción de Datos (DDS) son una descripción de la
base de datos del usuario o de los archivos de dispositivo que se entran en el
sistema de forma fija. La descripción se utiliza para crear archivos.

Además de las descripciones de campo (como, por ejemplo, los nombres y atri-
butos de los campos), las especificaciones de descripción de datos (DDS) para un
archivo de dispositivo de pantalla:
Ÿ Especifican las entradas de número de línea y número de posición para cada
campo y constante con el fin de dar formato a la colocación del registro en la
pantalla.
Ÿ Especifican las funciones de atención, como pueden ser las de campos de
subrayado y resaltado, contraste invertido o un cursor parpadeante.
Ÿ Especifican la comprobación de validez para los datos entrados en la estación
de trabajo de pantalla. Las funciones para la comprobación de validez
incluyen:
– Detectar campos en los que se requieren datos
– Detectar los campos de relleno obligatorio
– Detectar los tipos de datos incorrectos
– Detectar los datos con un rango específico
– Comprobar los datos para una entrada válida
– Realizar la verificación de comprobación de dígitos de los módulos 10 u
11.
Ÿ Controlan las funciones de gestión de pantallas (por ejemplo, en qué momento
se van a borrar, dar formato previamente o retener cuando se visualicen
nuevos datos).
Ÿ Asocian indicadores del 01 al 99 con claves de función designadas como de
tipo CA o CF. Si una tecla de función se diseña como CF, tanto el registro de
datos modificados como el indicador de respuesta se devuelven al programa.
Si una tecla de función se designa como CA, el indicador de respuesta se
devuelve al programa, pero el registro de datos contiene, generalmente,
valores por omisión para campos sólo de entrada y valores grabados en el
formato para campos de entrada/salida ocultos. Para más información acerca
de los tipos de teclas de función CF y CA, consulte la publicación DDS
Reference.
Ÿ Asignan un código de edición (palabra clave EDTCDE) o palabra de edición
(palabra clave EDTWRD) a un campo para especificar cómo deben
visualizarse los valores del campo.
Ÿ Especifican subarchivos.

Los Datos de formato de pantalla definen o describen una pantalla. Un formato


de registro de dispositivo de pantalla contiene tres tipos de campos:
Ÿ Campos de Entrada: Los campos de entrada pasan desde un dispositivo al
programa cuando éste lee un registro. Los campos de entrada pueden
inicializarse con un valor por omisión; si no se cambia el valor por omisión,
éste pasa al programa. Los campos de entrada sin inicializar se visualizan
como espacios en blanco en los que el usuario de estación de trabajo puede
introducir datos.

146 COBOL/400 Guía del usuario


Ÿ Campos de Salida: Los campos de salida pasan desde el programa al disposi-
tivo cuando aquél graba un registro a una pantalla. El programa o el formato
de registro del archivo de dispositivo puede proporcionar campos de salida.
Ÿ Campos de Entrada/Salida: Un campo de entrada/salida es un campo de
salida que puede cambiarse y convertirse en campo de entrada. Los campos
de entrada/salida pasan desde el programa cuando el programa graba un
registro a una pantalla y pasan al programa cuando éste lee un registro de una
pantalla. Los campos de entrada/salida se utilizan cuando el usuario va a
cambiar o actualizar los datos que se graban a la pantalla desde el programa.

Para una descripción detallada de un archivo de comunicaciones de datos, con-


sulte la publicación ICF Programmer’s Guide. Para más información acerca de los
archivos de pantalla descritos externamente, vea la publicación Guía para la
Gestión de Datos. Para una lista de las palabras clave de las especificaciones de
descripciones de datos válidos (DDS), vea la publicación DDS Reference.

La Figura 54 muestra un ejemplo de las DDS para un archivo de dispositivo de


pantalla:

Capítulo 8. Archivos Transacción 147


G X 2 1 - 9 8 9 1 - 0 U M / 0 5 0 *
A S / 4 0 0 E S P E C I F I C A C I O N E S D E D E S C R I P C I O N D E D AT O S Impreso en España
International Business Machines
*El número de hojas por área de re lleno puede variar ligeramente.

Archivo Signo Descripción Página de


Instrucciones

de Grabación
Programador Fecha Tecla

(/b / R / H / J / K / S / O )
Condicionamiento

Datos/Desplazamiento Teclado

(b/O/I/B/H/M/N/P)
Ubicación
(A/O/*)

Espec

Nombre Condición
Formula rio

And/Or/Coment.

Nom bre Longitud Funciones

Referencia (R)
Nombre

Nú mero d e

U t i l i z a c/i ó n
Posiciones
Secuencia
Reservado

D ecimales
Indicador

Indicador

Indicador
de

No (N)

No (N)
No (N)

Línea P os
Tipo

Tipo

Tipo
1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0

A * A R C H I VO MA E S T R O D E CON S U L T A S D E C L I E N T E - - C U S M I NQ

A *

A R E F ( C U S M S T P )

A R C U S P M T T E X T ( ' S O L I C I T U D D E C L I E N T E ' )

A C A 0 3 ( 1 5 ' F I N D E P R OG R A M A )

A 1 3 ' CON S U L T A MA E S T R A D E C L I E N T E S '

A 3 3 ' N UM E R O D E C L I E N T E '

A C U S T R I 3 2 /0

A 9 9 E R R M S G ( ' N UM E R O C L I E N T E NO E NCON T R +

A ADO P U L S E R E S T A U R A R , A CON T I N U AC I ON +

A I N T R OD U Z C A N UM E R O V A L I DO ' 9 9 )

A 5 3 ' U T I L I C E F 3 P A R A F I N A L I Z A R P R OG R A M A , +

A P U L S E I N T R O P A R A P A R A VO L V E R A S O L I '

A R C U S F L D S C I T A R P A N T A L L A . T E X T O ( P A N T A L L A D E

A C L I E N T E C A 0 3 ( 1 5 ' F I N D E P R OG R A M A ' )

A R E C U B R I M I E N T O

A 8 3 ' N OM B R E '

A N AM E R 8 1 1

A 9 3 ' D I R E CC I ON '

A AD D R R 9 1 1

A 1 /
0 3 ' C I U D AD '

A C I T Y R 1 /
0 1 1

A 1 1 3 ' P R OV I NC I A '

A S T A T E R 1 1 1 1

A 1 1 2 1 ' COD I GO P O S T A L '

A Z I P R 1 1 3 1

A 1 2 3 ' B A L A NC E A / R '

A A R B A L R 1 2 1 7

Figura 54. Ejemplo de las Especificaciones de Descripción de Datos para un Archivo de Dispositivo de Pantalla

Esta archivo de dispositivo de pantalla contiene dos formatos de registro: CUSPMT


y CUSFLDS.
.1/ Los atributos para los campos de este archivo se definen en el archivo de
referencia de campo CUSMSTP. Por ejemplo, EDTCDE(J) se define en
CUSMSTP para el campo ARBAL.
.2/ La tecla F3 se asocia con el indicador 15, con el que el usuario finaliza el
programa.
.3/ La palabra clave ERRMSG identifica el mensaje de error que se visualiza si
el indicador 99 se establece en el programa que utiliza este formato de
registro.
.4/ La palabra clave OVERLAY se utiliza para el formato de registro CUSFLDS
de forma que el registro CUSPMT en la pantalla no se borre cuando el
registro CUSFLDS se grabe en la pantalla.

148 COBOL/400 Guía del usuario


.5/ Las constantes como por ejemplo ‘Nombre’, ‘Dirección’ y ‘Ciudad’ describen
los campos que graba el programa.
.6/ Las entradas de línea y posición identifican dónde se graban los campos o
constantes en la pantalla.

Proceso de un Archivo Transaction Descrito Externamente


Cuando se procesa un archivo TRANSACTION descrito externamente, el sistema
operativo transforma los datos del programa al formato especificado para el archivo
y visualiza los datos. Cuando los datos se pasan al programa, se transforman al
formato utilizado por el programa.

El sistema operativo proporciona información de control del dispositivo para realizar


operaciones de entrada/salida para el dispositivo. Cuando se solicita un registro
de entrada desde el dispositivo, el sistema operativo emite la petición y luego
extrae la información de control del dispositivo de los datos antes de que se pasen
éstos al programa. Además, el sistema operativo puede pasar indicadores al pro-
grama indicando qué campos, si los hay, se cambian en el registro.

Cuando el programa solicita una operación de salida, pasa el registro de salida al


sistema operativo. El sistema operativo proporciona la información de control del
dispositivo necesaria para visualizar el registro. También añade cualquier infor-
mación constante especificada para el formato del registro cuando se visualiza el
registro.

Cuando el registro pasa a un programa, los campos se disponen de acuerdo con el


orden especificado en las DDS. El orden en que se visualizan los campos se basa
en las posiciones de pantalla (números y posiciones de línea) asignadas a los
campos en las DDS. Por lo tanto, el orden en que se especifican los datos en las
DDS y el orden en que aparecen en la pantalla no tiene por qué ser el mismo.

Utilización de Indicadores con Archivos Transaction


Los indicadores son ítems de datos Booleanos que pueden tener los valores B"0"
ó B"1".

Cuando se define un formato de registro para un archivo utilizando las DDS, se


pueden condicionar las opciones utilizando indicadores; los indicadores también
pueden utilizarse para reflejar respuestas particulares. Estos indicadores se
conocen como OPTION y RESPONSE, respectivamente.

Los indicadores de opción proporcionan opciones tales como espaciado, subrayado


y permiso o petición de transferencia de datos desde un programa a una impresora
o dispositivo de pantalla. Los indicadores de respuesta proporcionan información
de respuesta a un programa desde un dispositivo, como por ejemplo las teclas de
función pulsadas por un usuario de estación de trabajo y si se han introducido los
datos.

Los indicadores pueden pasarse con registros de datos dentro de un área de


registro, o fuera del área de registro en un área de indicadores separada.

Capítulo 8. Archivos Transacción 149


Indicadores en un Área de Indicadores Separada
Si especifica la palabra clave a nivel de campo INDARA en las DDS, todos los
indicadores definidos en el formato de registro o en los formatos para ese archivo
se pasan al programa y desde el programa en un área de indicadores separada,
no en el área de registro. Para información sobre cómo especificar la palabra
clave INDARA, vea la publicación DDS Reference.

La entrada de control de archivo que tenga la palabra clave INDARA especificada


en las DDS debe tener el atributo de área de indicadores separada, SI, como parte
del nombre de asignación.

Las ventajas de utilizar un área de indicadores separada son las siguientes:


Ÿ El número y orden de indicadores utilizados en una instrucción de E/S para
cualquier formato de registro en un archivo no tiene que coincidir con el
número y orden de indicadores especificados en las DDS para dicho formato
de registro.
Ÿ El programa asocia el número del indicador en una entrada de descripción de
datos con el indicador apropiado.

Indicadores en el Área de Registro


Si la palabra clave INDARA no se utiliza en las DDS del archivo, los indicadores se
crean en el área de registro. Cuando los indicadores se definen en un formato de
registro para un archivo, se leen, regraban y graban con los datos en el área de
registro.

El número y orden de indicadores definido en las DDS para un formato de registro


para un archivo determina el número y orden en que deben codificarse en el pro-
grama las entradas de descripción de datos para los indicadores en el formato de
registros.

La entrada de control de archivo que no tiene la palabra clave INDARA especifi-


cada en las DDS asociadas no deberá tener el atributo de área de indicadores
separada, SI, como parte del nombre de asignación.

Si una instrucción COPY de Formato 2 se utiliza para copiar indicadores en un


programa fuente, estos indicadores se definen en el orden en el que están especifi-
cados en las DDS para el archivo.

Cláusula ASSIGN y Atributo de Área de Indicadores Separada


Formato

55───ASSIGN──┬────┬─────WORKSTATION───── -nomb-arch──┬───────┬───────────────5%
└─TO─┘ └─ -SI─┘

Las reglas para la cláusula ASSIGN son las siguientes:


Ÿ El dispositivo debe ser WORKSTATION

150 COBOL/400 Guía del usuario


Ÿ Si se codifica -SI, el nombre de archivo debe referirse a un archivo que tiene la
palabra clave a nivel de archivo INDARA especificada en sus DDS.

Para más información acerca de la cláusula ASSIGN, consulte el apartado “Cláu-


sula ASSIGN” en la página 181.

Entrada de Descripción de Datos–Datos Booleanos


Cuando utiliza indicadores en un programa COBOL, debe describirlos como ítems
de datos Booleanos utilizando la entrada de descripción de datos para datos
booleanos.
Formato 4 - Datos Booleanos

╔═══════════════════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ 55───número-nivel──┬───────────────┬──┬──────────────────────────┬──────────────────────5 ║
║ ├──nomb-fech-1──┤ ├──REDEFINES──nomb-fech-2──┤ ║
║ └──FILLER───────┘ └──LIKE ─ nomb-fech-3 ─────┘ ║
║ ║
║ ║
║ 5────┬───────────────────────────┬──────────────────────────────────────────────────────5 ║
║ └──┬──PICTURE──┬─┬────┬──1──┘ ║
║ └──PIC──────┘ └─IS─┘ ║
║ ║
║ ║
║ 5────┬──────────────────────────────┬───────────────────────────────────────────────────5 ║
║ └──┬───────────────┬──DISPLAY──┘ ║
║ └──USAGE─┬────┬─┘ ║
║ └─IS─┘ ║
║ ║
║ ║
║ 5──┬────────────────────────────────────────────────────────────────────────────────────5 ± ║
║ └─OCCURS─┬─entero--1─TO─entero--2─┬───────┬─DEPENDING─┬────┬─nomb-fech-4─┬───────────5 ² ║
║ │ └─TIMES─┘ └─ON─┘ │ ║
║ └─entero--2─┬───────┬───────────────────────────────────────────┘ ║
║ └─TIMES─┘ ║
║ ║
║ ║
║ ± 5──────────────────────────────────────────────┬────────────────────────────────────────5 ║
║ ² 5────┬──────────────────────────────────────┬──┘ ║
║ │ ┌─────────────┐ │ ║
║ │ 6 │ │ ║
║ └──INDEXED──┬────┬────nom-índice-1──┴──┘ ║
║ └─BY─┘ ║
║ ║
║ ║
║ 5────┬───────────────────────────┬──────────────────────────────────────────────────────5 ║
║ └─┬─INDICATOR──┬──entero--3─┘ ║
║ ├─INDICATORS─┤ ║
║ └─INDIC──────┘ ║
║ ║
║ ║
║ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ║
║ 5────┬───────────────────────────────────┬──┬────────────────────────────┬──────────────5 ║
║ \ └──┬──SYNCHRONIZED──┬──┬─────────┬──┘ └──┬─JUSTIFIED─┬──┬───────┬──┘ \ ║
║ \ └──SYNC──────────┘ ├──LEFT───┤ └─JUST──────┘ └─RIGHT─┘ \ ║
║ \ └──RIGHT──┘ \ ║
║ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ║
║ ║
║ ║
║ 5────┬─────────────────────────────────┬──.────────────────────────────────────────────5% ║
║ └──VALUE─┬────┬──Literal-boolean──┘ ║
║ └─IS─┘ ║
║ ║
╚═══════════════════════════════════════════════════════════════════════════════════════════════╝

Capítulo 8. Archivos Transacción 151


Consideraciones Especiales
A continuación se dan las consideraciones especiales para las cláusulas utilizadas
con datos booleanos. El resto de reglas para las cláusulas son las mismas que
aquéllas descritas en la sección “Estructura del Programa COBOL” de la publi-
cación COBOL/400 Reference.

Cláusula PICTURE: Se define un nombre de datos booleanos elemental


mediante una cláusula PICTURE que contiene sólo un 1.

Cláusula USAGE: USAGE debe definirse implícita o explícitamente como


DISPLAY.

Cláusula OCCURS: Cuando las cláusulas OCCURS e indicador INDICATOR se


especifican a un nivel elemental, se define una tabla de ítems de datos booleanos
con cada elemento de la tabla correspondiente a un indicador externo. El primer
elemento de la tabla corresponde al número de indicador especificado en la cláu-
sula INDICATOR; el segundo elemento corresponde al indicador que sigue secuen-
cialmente al indicador especificado mediante la cláusula INDICATOR.

Por ejemplo, si se codifica lo siguiente, SWITCHES (1) corresponde al indicador


16, SWITCHES (2) corresponde al indicador 17... y SWITCHES (10) corresponde
al indicador 25:

ð7 SWITCHES PIC 1
OCCURS 1ð TIMES
INDICATOR 16.

Cláusula INDICATOR: Si los campos del indicador están en un área de indicador


separada, la cláusula INDICATOR asocia un indicador definido en las DDS con un
ítem de datos booleanos. Si los campos de indicador están en un área de registro,
se comprueba la sintaxis de la cláusula INDICATOR, aunque se trata como un
comentario.

El Entero-3 tiene que ser un valor del 1 al 99.

La cláusula INDICATOR sólo debe especificarse a nivel elemental.

Cláusula VALUE: La cláusula VALUE especifica el contenido inicial de un ítem


de datos booleanos. Los valores permitidos para los literales booleanos son B"0",
B"1" y ZERO.

Cláusula LIKE: No se puede utilizar esta cláusula para cambiar la longitud de un


ítem de datos.

Frase INDICATORS
Cuando la frase INDICATORS se utiliza en las instrucciones READ, REWRITE y
WRITE (vea la Figura 57 en la página 158), especifica los indicadores que se van
a leer, regrabar y grabar.

El identificador especificado en la frase INDICATORS puede ser uno de los


siguientes:
Ÿ Un ítem elemental de datos booleanos

152 COBOL/400 Guía del usuario


Ÿ Un ítem elemental de grupo con ítems de datos booleanos subordinados a él.
(Los ítems de datos booleanos pueden estar en cualquier lugar del grupo, pero
son los únicos ítems que el usuario puede leer, grabar o regrabar).
El identificador no puede estar subordinado a un ítem que esté sujeto a una
cláusula OCCURS.

Indicadores en un Área de Indicadores Separada


Si se especifica INDARA en las DDS para el archivo, la utilización de los indi-
cadores referenciados en la frase INDICATORS está basada en el número del indi-
cador.
Ÿ En una instrucción READ, sólo se actualizan los números de indicador de res-
puesta referenciados por la frase INDICATORS. Los indicadores especificados
en las DDS para el formato, pero no referenciados por la frase INDICATORS,
se ignoran. No se modifican los indicadores referenciados por la frase
INDICATORS pero no especificados en las DDS.
Ÿ En una instrucción WRITE o REWRITE, sólo se utilizan los indicadores de
opción referenciados mediante la frase INDICATORS. Los indicadores especi-
ficados en las DDS para el formato pero no referenciados por la frase
INDICATORS, se consideran como DESACTIVADOS. Se ignoran los indi-
cadores referenciados por la frase INDICATORS pero no utilizados en las DDS
para el formato.

Si no se especifica la frase INDICATORS, ocurre lo siguiente:


Ÿ En la instrucción READ, no se actualizan los indicadores.
Ÿ En una instrucción WRITE o REWRITE, los indicadores se tratan como si estu-
vieran DESACTIVADOS.

Indicadores en el Área de Registro


Si no se especifica INDARA en las DDS para el archivo, el tamaño del identificador
en la frase INDICATORS de una instrucción de E/S (consulte la Figura 57 en la
página 158) debe ser igual al número de opción o indicadores de respuesta defi-
nidos en las DDS para ese formato.
Ÿ En una instrucción READ, el tamaño del identificador debe ser igual al número
de los indicadores de respuesta.
Ÿ En una instrucción REWRITE o WRITE, el tamaño del identificador debe ser
igual al número de los indicadores de opción.

Los contenidos del identificador no se comprueban, pero se copian al registro o


desde el comienzo del registro, de byte en byte; los números de indicador se
ignoran.

Si se omite la frase INDICATORS, se siguen pasando al área de registro los datos


de los campos de indicadores en el registro. La frase INDICATORS sólo se utiliza
para copiar indicadores a un área de registros antes de una instrucción WRITE o
REWRITE, o fuera de un área de registros después de una instrucción READ.

Capítulo 8. Archivos Transacción 153


Programas Ejemplo con Indicadores
Esta sección contiene ejemplos de programas en COBOL/400 que ilustran la utili-
zación de indicadores en un área de registro o un área de indicadores separada.

Todos los programas realizan lo siguiente:


1. Determinan la fecha actual.
2. Si es el primer día del mes, activan un indicador de opción que hace que apa-
rezca un campo de salida y parpadee.
3. Le permite pulsar las teclas de función para finalizar el programa, activar los
indicadores de respuesta y llamar a programas para escribir informes diarios o
mensuales.

La Figura 56 en la página 156 muestra un programa que utiliza los indicadores en


el área de registro pero no utiliza la frase INDICATORS en ninguna instrucción de
E/S. La Figura 55 en la página 155 muestra las DDS asociadas para el archivo.

La Figura 57 en la página 158 muestra un programa que utiliza indicadores en el


área de registro y la frase INDICATORS en las instrucciones de E/S. Las DDS
asociadas para la Figura 57 son la Figura 55 en la página 155.

La Figura 59 en la página 161 muestra un programa que utiliza indicadores en un


área de indicadores separada, definida en WORKING-STORAGE utilizando la ins-
trucción COPY Formato 2. La Figura 58 en la página 160 muestra las DDS aso-
ciadas para el archivo.

La Figura 60 en la página 163 muestra un programa que utiliza indicadores en un


área de indicadores separada, definida en una tabla WORKING-STORAGE. Las
DDS asociadas para el archivo son las mismas que en la Figura 58 en la
página 160.

154 COBOL/400 Guía del usuario


G X 2 1 - 9 8 9 1 - 0 U M / 0 5 0 *
A S / 4 0 0 E S P E C I F I C A C I O N E S D E D E S C R I P C I O N D E D AT O S Impreso en España
International Business Machines
*El núm ero de hojas por área de re lleno puede variar lige ram ente.

Archivo Signo Descripción Página de


Instrucciones

de Grabación
Programador Fecha Tecla

(/b / R / H / J / K / S / O )
Condicionamiento

Tipo Datos/Desplazamiento Teclado

(b/O/I/B/H/M/N/P)
Ubicación
(A/O/*)

Nombre Condición
Espec
de Formula rio

And/Or/Coment.

Nom bre Longitud Funciones

Referencia (R)
Nombre

Nú mero d e

Utilización
Posiciones
Secuencia
Reservado

D ecimales
Indicador

Indicador

Indicador
No (N)

No (N)
No (N)

Línea P os
Tipo

Tipo

1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0

A * D D S D E A R C H I VO D E P A N T A L L A P A R A E J E MP L O S D E I ND I C ADOR E S

A *

A R F OR MA T 1 / 3 ( 9 9
C F 0 ' F I N D E P R OG R A M A ' )

A / 5 ( 5 1
C F 0 ' I N F OR M E D I A R I O ' )

A / 9 ( 5 2
C F 0 ' I N F OR M E ME N S U A L ' )

A *

A 1 0 1 0 ' N UM E R O D E D E P A R T AM E N T O : '

A D E P T NO 5 I 1 0 3 2

A 0 1 2 0 2 6 ' P R OD U C I R I N F OR M E S M E N S U A L E S '

A D S P A T R ( B L )

A *

A 2 4 0 1 ' F 5 = I N F OR M E D I A R I O '

A 2 4 2 6 ' F 9 = I N F OR M E M E N S U A L '

A 2 4 5 3 ' F 3 = T E R M I N A R '

Figura 55. Ejemplo de un Programa que Utiliza Indicadores en el Área de Registros sin Utilizar la Frase
INDICATORS en la Sentencia–Datos de E/S: Especificaciones de Descripción

.1/ No se utiliza la palabra clave INDARA; los indicadores se almacenan en el


área de registro con los campos de datos.
.2/ Se especifica un formato de registro, FORMAT1.
.3/ Se asocian tres indicadores con tres teclas de función. El indicador 99 se
activará cuando pulse F3, y así sucesivamente.
.4/ Se define un campo para la salida.
.5/ El indicador 01 se define para hacer que el campo de constante asociado
parpadee si está activo el indicador.
.6/ Las definiciones de teclas de función (F) se documentan en la pantalla de
estación de trabajo.

Capítulo 8. Archivos Transacción 155


5763CB1 V3RðM5 Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ððð1ðð IDENTIFICATION DIVISION. ð3/ð9/94
2 ððð2ðð PROGRAM-ID. XMPLE71. ð3/22/94
ððð3ðð\ PROGRAMA EJEMPLO CON INDICADORES EN ÁREA DE REGISTRO. ð3/ð9/94
3 ððð4ðð AUTHOR. PROGRAMMER NAME. ð3/ð9/94
4 ððð5ðð INSTALLATION. TORONTO COBOL DEVELOPMENT CENTRE. ð3/ð9/94
5 ððð6ðð DATE-WRITTEN. 12/ð8/88. ð3/ð9/94
6 ðððð7ð DATE-COMPILED. ð5/24/94 11:ð2:36 .
7 ððð8ðð ENVIRONMENT DIVISION. ð3/ð9/94
8 ððð9ðð CONFIGURATION SECTION. ð3/ð9/94
9 ðð1ððð SOURCE-COMPUTER. IBM-AS4ðð. ð3/25/94
1ð ðð11ðð OBJECT-COMPUTER. IBM-AS4ðð. ð3/25/94
11 ðð12ðð INPUT-OUTPUT SECTION. ð3/ð9/94
12 ðð13ðð FILE-CONTROL. ð3/ð9/94
13 ðð14ðð SELECT DISPFILE ð3/ð9/94
14 ðð15ðð ASSIGN TO WORKSTATION-DSPFILEX .1/ ð3/ð9/94
15 ðð16ðð ORGANIZATION IS TRANSACTION ð3/ð9/94
16 ðð17ðð ACCESS IS SEQUENTIAL. ð3/ð9/94
17 ðð18ðð DATA DIVISION. ð3/ð9/94
18 ðð19ðð FILE SECTION. ð3/ð9/94
19 ðð2ððð FD DISPFILE ð3/ð9/94
2ð ðð21ðð LABEL RECORDS ARE OMITTED ð3/ð9/94
21 ðð22ðð DATA RECORD IS DISP-REC. ð3/ð9/94
22 ðð23ðð ð1 DISP-REC. ð3/ð9/94
23 ðð24ðð COPY DDS-ALL-FORMATS OF DSPFILEX. .2/ ð3/ð9/94
24 +ððððð1 ð5 DSPFILEX-RECORD PIC X(8). <-ALL-FMTS
+ððððð2\FORMATO ENTRADA:FORMAT1 DESDE ARCHIVO DSPFILEX DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ððððð3\ <-ALL-FMTS
25 +ððððð4 ð5 FORMAT1-I REDEFINES DSPFILEX-RECORD. <-ALL-FMTS
26 +ððððð5 ð6 FORMAT1-I-INDIC. <-ALL-FMTS
27 +ððððð6 ð7 IN99 PIC 1 INDIC 99. .3/ <-ALL-FMTS
+ððððð7\ FIN DE PROGRAMA <-ALL-FMTS
28 +ððððð8 ð7 IN51 PIC 1 INDIC 51. <-ALL-FMTS
+ððððð9\ INFORME DIARIO <-ALL-FMTS
29 +ðððð1ð ð7 IN52 PIC 1 INDIC 52. <-ALL-FMTS
+ðððð11\ INFORME MENSUAL <-ALL-FMTS
3ð +ðððð12 ð6 DEPTNO PIC X(5). <-ALL-FMTS
+ðððð13\FORMATO SALIDA:FORMAT1 DESDE ARCHIVO DSPFILEX DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ðððð14\ <-ALL-FMTS
31 +ðððð15 ð5 FORMAT1-O REDEFINES DSPFILEX-RECORD. <-ALL-FMTS
32 +ðððð16 ð6 FORMAT1-O-INDIC. <-ALL-FMTS
33 +ðððð17 ð7 INð1 PIC 1 INDIC ð1. <-ALL-FMTS
ðð25ðð
34 ðð26ðð WORKING-STORAGE SECTION.
35 ðð27ðð ð1 CURRENT-DATE.
36 ðð28ðð ð5 CURR-YEAR PIC 9(2).
37 ðð29ðð ð5 CURR-MONTH PIC 9(2).
38 ðð3ððð ð5 CURR-DAY PIC 9(2).
39 ðð31ðð ð1 INDIC-AREA. .4/
4ð ðð32ðð ð5 INð1 PIC 1.
41 ðð33ðð 88 NEW-MONTH .5/ VALUE B"1".
42 ðð34ðð ð5 IN51 PIC 1.
43 ðð35ðð 88 WANT-DAILY VALUE B"1".
44 ðð36ðð ð5 IN52 PIC 1.
45 ðð37ðð 88 WANT-MONTHLY VALUE B"1".
46 ðð38ðð ð5 IN99 PIC 1.
47 ðð39ðð 88 NOT-END-OF-JOB VALUE B"ð".
48 ðð4ððð 88 END-OF-JOB VALUE B"1".
49 ðð41ðð PROCEDURE DIVISION.
ðð42ðð XAMPLE3-MAIN.
5ð ðð43ðð OPEN I-O DISPFILE.
51 ðð44ðð ACCEPT CURRENT-DATE FROM DATE.
52 ðð45ðð SET NOT-END-OF-JOB TO TRUE.
53 ðð46ðð PERFORM DISPLAY-SCREEN THRU READ-AND-PROCESS-SCREEN
ðð47ðð UNTIL END-OF-JOB.
54 ðð48ðð CLOSE DISPFILE.
55 ðð49ðð STOP RUN.
ðð5ððð DISPLAY-SCREEN.
56 ðð51ðð MOVE ZEROS TO INDIC-AREA. .6/
57 ðð52ðð IF CURR-DAY = ð1 THEN
58 ðð53ðð SET NEW-MONTH TO TRUE. .7/
59 ðð54ðð MOVE CORR INDIC-AREA TO FORMAT1-O-INDIC. .8/
6ð ðð55ðð WRITE DISP-REC FORMAT IS "FORMAT1". .9/
ðð56ðð READ-AND-PROCESS-SCREEN.
61 ðð57ðð MOVE ZEROS TO INDIC-AREA.
62 ðð58ðð READ DISPFILE FORMAT IS "FORMAT1". .1ð/

Figura 56 (Parte 1 de 2). Ejemplo de un Programa que Utiliza Indicadores en el Área de Registros sin la Frase
INDICATORS en la Sentencia–COBOL de E/S: Programa Fuente

156 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
63 ðð59ðð MOVE CORR FORMAT1-I-INDIC TO INDIC-AREA. .11/
64 ðð6ððð IF WANT-DAILY THEN
65 ðð61ðð CALL "DAILY" USING DEPTNO .12/
ðð62ðð ELSE
66 ðð63ðð IF WANT-MONTHLY THEN
67 ðð64ðð CALL "MONTHLY" USING DEPTNO.
\ \ \ \ \ F I N D E F U E N T E \ \
5763CB1 V3RðM5 Mensajes AS/4ðð COBOL
INST
\ \ \ \ \ F I N D E M E N S A J E S \ \ \ \ \
Resumen Mensajes
Total Info(ð-4) Aviso(5-19) Error(2ð-29) Grave(3ð-39) Terminal(4ð-99)
ð ð ð ð ð ð
Registros fuente leídos . . . . . . : 64
Registros de copia leídos . . . . . : 17
Miembros de copia procesados . . . : 1
Errores de secuencia . . . . . . . : ð
Mensaje de gravedad emitido más alto: ð
LBLð9ð1 ðð Programa XMPLE71 creado en biblioteca XMPLIB.
1 \ \ \ \ \ F I N D E C O M P I L A C I O N \ \ \ \ \

Figura 56 (Parte 2 de 2). Ejemplo de un Programa que Utiliza Indicadores en el Área de Registros sin la Frase
INDICATORS en la Sentencia–COBOL de E/S: Programa Fuente

.1/ El atributo del área de indicadores separada, SI, no se codifica en la cláusula


ASSIGN.
.2/ La instrucción COPY con Formato 2 define los campos de datos y los indi-
cadores en el área de registro.
.3/ Dado que el archivo no tiene un área de indicadores separada, los indi-
cadores de respuesta y de opción se definen en el orden en que se utilizan
en las DDS, y los números de indicadores se tratan como documentación.
.4/ Todos los indicadores utilizados por el programa se definen mediante
nombres significativos en las entradas de descripción de datos en
WORKING-STORAGE. Aquí se omiten los números de los indicadores
porque no tienen efecto.
.5/ Para cada indicador, se asocia un nombre significativo de condición de nivel
88 con un valor para dicho indicador.
.6/ Inicializar el nivel de grupo a cero.
.7/ Si es el primer día del mes, se activa IN01 en WORKING-STORAGE.
.8/ Los indicadores adecuados a la salida de FORMAT1 se copian en el área de
registros.
.9/ FORMAT1 se graba en la pantalla de estación de trabajo con datos y valores
del indicador en el área de registro.
La frase INDICATORS no es necesaria porque no hay área de indicadores
separada y se han establecido los valores del indicador en el área de registro
mediante la instrucción anterior MOVE CORRESPONDING.
.1ð/ FORMAT1 se lee desde la pantalla de estación de trabajo, incluyendo datos
e indicadores.
.11/ Los indicadores de respuesta para FORMAT1 se copian del área de registros
para las entradas de descripción de datos en WORKING-STORAGE.
.12/ Si se pulsa F5, se procesa una llamada de programa.

Capítulo 8. Archivos Transacción 157


5763CB1 V3RðM5 Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ððð1ðð IDENTIFICATION DIVISION. ð3/ð7/94
2 ððð2ðð PROGRAM-ID. XMPLE713. ð3/22/94
ððð3ðð\ PROGRAMA EJEMPLO - ARCHIVO CON INDICADORES EN ÁREA DE REGISTRO ð3/ð7/94
3 ððð4ðð AUTHOR. PROGRAMMER NAME. ð3/ð7/94
4 ððð5ðð INSTALLATION. TORONTO COBOL DEVELOPMENT CENTRE. ð3/ð7/94
5 ððð6ðð DATE-WRITTEN. 12/1ð/88. ð3/ð7/94
6 ðððð7ð DATE-COMPILED. ð5/24/94 11:ð4:34 .
7 ððð8ðð ENVIRONMENT DIVISION. ð3/ð7/94
8 ððð9ðð CONFIGURATION SECTION. ð3/ð7/94
9 ðð1ððð SOURCE-COMPUTER. IBM-AS4ðð. ð3/ð7/94
1ð ðð11ðð OBJECT-COMPUTER. IBM-AS4ðð. ð3/ð7/94
11 ðð12ðð INPUT-OUTPUT SECTION. ð3/ð7/94
12 ðð13ðð FILE-CONTROL. ð3/ð7/94
13 ðð14ðð SELECT DISPFILE ð3/ð7/94
14 ðð15ðð ASSIGN TO WORKSTATION-DSPFILEX .1/ ð3/22/94
15 ðð16ðð ORGANIZATION IS TRANSACTION ð3/ð7/94
16 ðð17ðð ACCESS IS SEQUENTIAL. ð3/ð7/94
17 ðð18ðð DATA DIVISION. ð3/ð7/94
18 ðð19ðð FILE SECTION. ð3/ð7/94
19 ðð2ððð FD DISPFILE ð3/ð7/94
2ð ðð21ðð LABEL RECORDS ARE OMITTED ð3/ð7/94
21 ðð22ðð DATA RECORD IS DISP-REC. ð3/ð7/94
22 ðð23ðð ð1 DISP-REC. ð3/ð7/94
23 ðð24ðð COPY DDS-ALL-FORMATS OF DSPFILEX. .2/ ð3/22/94
24 +ððððð1 ð5 DSPFILEX-RECORD PIC X(8). <-ALL-FMTS
+ððððð2\FORMATO ENTRADA:FORMAT1 DESDE ARCHIVO DSPFILEX DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ððððð3\ <-ALL-FMTS
25 +ððððð4 ð5 FORMAT1-I REDEFINES DSPFILEX-RECORD. <-ALL-FMTS
26 +ððððð5 ð6 FORMAT1-I-INDIC. <-ALL-FMTS
27 +ððððð6 ð7 IN99 PIC 1 INDIC 99. .3/ <-ALL-FMTS
+ððððð7\ FIN DE PROGRAMA <-ALL-FMTS
28 +ððððð8 ð7 IN51 PIC 1 INDIC 51. <-ALL-FMTS
+ððððð9\ INFORME DIARIO <-ALL-FMTS
29 +ðððð1ð ð7 IN52 PIC 1 INDIC 52. <-ALL-FMTS
+ðððð11\ INFORME MENSUAL <-ALL-FMTS
3ð +ðððð12 ð6 DEPTNO PIC X(5). <-ALL-FMTS
+ðððð13\FORMATO SALIDA:FORMAT1 DESDE ARCHIVO DSPFILEX DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ðððð14\ <-ALL-FMTS
31 +ðððð15 ð5 FORMAT1-O REDEFINES DSPFILEX-RECORD. <-ALL-FMTS
32 +ðððð16 ð6 FORMAT1-O-INDIC. <-ALL-FMTS
33 +ðððð17 ð7 INð1 PIC 1 INDIC ð1. <-ALL-FMTS
ðð25ðð
34 ðð26ðð WORKING-STORAGE SECTION.
35 ðð27ðð ð1 CURRENT-DATE.
36 ðð28ðð ð5 CURR-YEAR PIC 9(2).
37 ðð29ðð ð5 CURR-MONTH PIC 9(2).
38 ðð3ððð ð5 CURR-DAY PIC 9(2).
ðð31ðð
39 ðð32ðð 77 IND-OFF PIC 1 VALUE B"ð".
4ð ðð33ðð 77 IND-ON PIC 1 VALUE B"1".
ðð34ðð
41 ðð35ðð ð1 RESPONSE-INDICS.
42 ðð36ðð ð5 END-OF-PROGRAM PIC 1. .4/
43 ðð37ðð ð5 DAILY-REPORT PIC 1.
44 ðð38ðð ð5 MONTHLY-REPORT PIC 1.
45 ðð39ðð ð1 OPTION-INDICS.
46 ðð4ððð ð5 NEW-MONTH PIC 1.
ðð41ðð
47 ðð42ðð PROCEDURE DIVISION.
ðð43ðð XMPLE3-MAIN.
48 ðð44ðð OPEN I-O DISPFILE.
49 ðð45ðð ACCEPT CURRENT-DATE FROM DATE.
5ð ðð46ðð MOVE IND-OFF TO END-OF-PROGRAM.
51 ðð47ðð PERFORM DISPLAY-SCREEN THRU READ-AND-PROCESS-SCREEN
ðð48ðð UNTIL END-OF-PROGRAM = IND-ON.
52 ðð49ðð CLOSE DISPFILE.
53 ðð5ððð STOP RUN.
ðð51ðð
ðð52ðð DISPLAY-SCREEN.
54 ðð53ðð MOVE ZEROS TO OPTION-INDICS.
55 ðð54ðð IF CURR-DAY = ð1 THEN .5/
56 ðð55ðð MOVE IND-ON TO NEW-MONTH.
57 ðð56ðð WRITE DISP-REC FORMAT IS "FORMAT1" .6/
ðð57ðð INDICATORS ARE OPTION-INDICS.
ðð58ðð

Figura 57 (Parte 1 de 2). Ejemplo de un Programa que Utiliza Indicadores en el Área de Registros y la Frase
INDICATORS en las Instrucciones de E/S–Programa Fuente COBOL

158 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
ðð59ðð READ-AND-PROCESS-SCREEN.
58 ðð6ððð MOVE ZEROS TO RESPONSE-INDICS.
59 ðð61ðð READ DISPFILE FORMAT IS "FORMAT1" .7/
ðð62ðð INDICATORS ARE RESPONSE-INDICS. .8/
6ð ðð63ðð IF DAILY-REPORT = IND-ON THEN
61 ðð64ðð CALL "DAILY" USING DEPTNO .9/
ðð65ðð ELSE
62 ðð66ðð IF MONTHLY-REPORT = IND-ON THEN
63 ðð67ðð CALL "MONTHLY" USING DEPTNO.
\ \ \ \ \ F I N D E F U E N T E \ \
5763CB1 V3RðM5 Mensajes AS/4ðð COBOL
INST
\ \ \ \ \ E N D O F M E S S A G E S \ \ \ \ \
Resumen Mensajes
Total Info(ð-4) Aviso(5-19) Error(2ð-29) Grave(3ð-39) Terminal(4ð-99)
ð ð ð ð ð ð
Registros fuente leídos . . . . . . : 67
Registros de copia leídos . . . . . : 17
Miembros de copia procesados . . . : 1
Errores de secuencia . . . . . . . : ð
Mensaje de gravedad más alta emitido: ð
LBLð9ð1 ðð Programa XMPLE713 creado en biblioteca XMPLIB.
\ \ \ \ \ F I N D E C O M P I L A C I O N \ \ \ \ \

Figura 57 (Parte 2 de 2). Ejemplo de un Programa que Utiliza Indicadores en el Área de Registros y la Frase
INDICATORS en las Instrucciones de E/S–Programa Fuente COBOL

.1/ El atributo del área de indicadores separada, SI, no se codifica en la cláu-


sula ASSIGN.
.2/ La instrucción COPY con Formato 2 define los campos de datos y los indi-
cadores en el área de registro.
.3/ Dado que el archivo no tiene un área de indicadores separada, los indi-
cadores de respuesta y de opción se definen en el orden en que se utilizan
en las DDS, y los números de indicadores se tratan como documentación.
.4/ Todos los indicadores que utiliza el programa se definen con nombres signi-
ficativos en entradas de descripción de datos en WORKING-STORAGE.
Aquí se omiten los números de los indicadores debido a que no tienen
efecto. Los indicadores deben definirse en el orden necesario mediante el
archivo de pantalla.
.5/ Si es el primer día del mes, se activa IN01 en WORKING-STORAGE.
.6/ FORMAT1 se escribe en la pantalla de estación de trabajo:
Ÿ La frase INDICATORS hace que el contenido de la variable
OPTION-INDICS se copie en el comienzo del área de registro.
Ÿ Los valores de datos y de indicador se escriben en la pantalla de
estación de trabajo.
.7/ FORMAT1 se lee desde la pantalla de estación de trabajo, incluyendo datos
e indicadores.
.8/ La frase INDICATORS hace que los bytes se copien desde el comienzo del
área de registro a RESPONSE-INDICS.
.9/ Si se pulsa F5, se procesa una llamada de programa.

Capítulo 8. Archivos Transacción 159


G X 2 1 - 9 8 9 1 - 0 U M / 0 5 0 *
A S / 4 0 0 E S P E C I F I C A C I O N E S D E D E S C R I P C I O N D E D AT O S Impreso en España
International Business Machines
*El núm ero de hojas por área de re lleno puede variar lige ram ente.

Archivo Signo Descripción Página de


Instrucciones

de Grabación
Programador Fecha Tecla

(/b / R / H / J / K / S / O )
Condicionamiento

Tipo Datos/Desplazamiento Teclado

(b/O/I/B/H/M/N/P)
Ubicación
(A/O/*)

Nombre Condición
Espec
de Formula rio

And/Or/Coment.

Nom bre Longitud Funciones

Referencia (R)
Nombre

Nú mero d e

U t i l i z a c/i ó n
Posiciones
Secuencia
Reservado

D ecimales
Indicador

Indicador

Indicador
No (N)

No (N)
No (N)

Línea P os
Tipo

Tipo

1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0

A * V I S U A L I Z A R D D S D E A R C H I VO P A R A E J E MP L O S D E I ND I C ADOR E S

A *

A I ND A R A

A R F OR MA T 1 C F 0 3 ( 9 9 ' F I N D E P R OG R A M A ' )

A C F 0 5 ( 5 1 ' I N F OR M E D I A R I O ' )

A C F 0 9 ( 5 2 ' I N F OR M E ME N S U A L ' )

A *

A 1 0 1 0 ' N UM E R O D E D E P A R T AM E N T O : '

A D E P T NO 5 I 1 0 3 2

A 0 1 2 0 2 6 ' P R OD U C I R I N F OR M E S M E N S U A L E S '

A D S P A T R ( B L )

A *

A 2 4 0 1 ' F 5 = I N F OR M E D I A R I O '

A 2 4 2 6 ' F 9 = I N F OR M E M E N S U A L '

A 2 4 5 3 ' F 3 = T E R M I N A R '

Figura 58. Ejemplo de un Programa que Utiliza Indicadores en una Área de Separada de Indicadores, Definido en
WORKING-STORAGE mediante la Sentencia COPY, Formato DDS

.1/ Se especifica la palabra clave INDARA; los indicadores se almacenan en un


área de indicadores separada, no en el área de registro. Excepto para esta
especificación, las DDS para este archivo son las mismas que las mostradas
en la Figura 55 en la página 155.

160 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ððð1ðð IDENTIFICATION DIVISION. ð3/ð9/94
2 ððð2ðð PROGRAM-ID. XMPLE717. ð3/22/94
ððð3ðð\ PROGRAMA EJEMPLO - ARCHIVO CON ÁREA DE INDICADORES SEPARADA ð3/ð9/94
3 ððð4ðð AUTHOR. PROGRAMMER NAME. ð3/ð9/94
4 ððð5ðð INSTALLATION. TORONTO COBOL DEVELOPMENT CENTRE. ð3/ð9/94
5 ððð6ðð DATE-WRITTEN. 12/ð8/88. ð3/ð9/94
6 ðððð7ð DATE-COMPILED. ð5/24/94 12:53:17 .
7 ððð8ðð ENVIRONMENT DIVISION. ð3/ð9/94
8 ððð9ðð CONFIGURATION SECTION. ð3/ð9/94
9 ðð1ððð SOURCE-COMPUTER. IBM-AS4ðð. ð3/ð9/94
1ð ðð11ðð OBJECT-COMPUTER. IBM-AS4ðð. ð3/ð9/94
11 ðð12ðð INPUT-OUTPUT SECTION. ð3/ð9/94
12 ðð13ðð FILE-CONTROL. ð3/ð9/94
13 ðð14ðð SELECT DISPFILE ð3/ð9/94
14 ðð15ðð ASSIGN TO WORKSTATION-DSPFILE-SI .1/ ð3/22/94
15 ðð16ðð ORGANIZATION IS TRANSACTION ð3/ð9/94
16 ðð17ðð ACCESS IS SEQUENTIAL. ð3/ð9/94
ðð18ðð ð3/ð9/94
17 ðð19ðð DATA DIVISION. ð3/ð9/94
18 ðð2ððð FILE SECTION. ð3/ð9/94
19 ðð21ðð FD DISPFILE ð3/ð9/94
2ð ðð22ðð LABEL RECORDS ARE OMITTED ð3/ð9/94
21 ðð23ðð DATA RECORD IS DISP-REC. ð3/ð9/94
22 ðð24ðð ð1 DISP-REC. ð3/ð9/94
23 ðð25ðð COPY DDS-ALL-FORMATS OF DSPFILE. .2/ ð3/22/94
24 +ððððð1 ð5 DSPFILE-RECORD PIC X(5). <-ALL-FMTS
+ððððð2\FORMATO ENTRADA:FORMAT1 DESDE ARCHIVO DSPFILE DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ððððð3\ <-ALL-FMTS
25 +ððððð4 ð5 FORMAT1-I REDEFINES DSPFILE-RECORD. <-ALL-FMTS
26 +ððððð5 ð6 DEPTNO PIC X(5). <-ALL-FMTS
+ððððð6\FORMATO SALIDA:FORMAT1 DESDE ARCHIVO DSPFILE DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ððððð7\ <-ALL-FMTS
+ððððð8\ ð5 FORMAT1-O REDEFINES DSPFILE-RECORD. <-ALL-FMTS
ðð26ðð
27 ðð27ðð WORKING-STORAGE SECTION.
28 ðð28ðð ð1 CURRENT-DATE.
29 ðð29ðð ð5 CURR-YEAR PIC 9(2).
3ð ðð3ððð ð5 CURR-MONTH PIC 9(2).
31 ðð31ðð ð5 CURR-DAY PIC 9(2).
ðð32ðð
32 ðð33ðð 77 IND-OFF PIC 1 VALUE B"ð".
33 ðð34ðð 77 IND-ON PIC 1 VALUE B"1".
34 ðð35ðð ð1 DISPFILE-INDICS.
35 ðð36ðð COPY DDS-ALL-FORMATS-INDIC OF DSPFILE. .3/
36 +ððððð1 ð5 DSPFILE-RECORD. <-ALL-FMTS
+ððððð2\FORMATO ENTRADA:FORMAT1 DESDE ARCHIVO DSPFILE DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ððððð3\ <-ALL-FMTS
37 +ððððð4 ð6 FORMAT1-I-INDIC. <-ALL-FMTS
38 +ððððð5 ð7 IN51 PIC 1 INDIC 51. .4/ <-ALL-FMTS
+ððððð6\ INFORME DIARIO <-ALL-FMTS
39 +ððððð7 ð7 IN52 PIC 1 INDIC 52. <-ALL-FMTS
+ððððð8\ INFORME MENSUAL <-ALL-FMTS
4ð +ððððð9 ð7 IN99 PIC 1 INDIC 99. <-ALL-FMTS
+ðððð1ð\ FIN DE PROGRAMA <-ALL-FMTS
+ðððð11\FORMATO SALIDA:FORMAT1 DESDE ARCHIVO DSPFILE DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ðððð12\
41 +ðððð13 ð6 FORMAT1-O-INDIC.
42 +ðððð14 ð7 INð1 PIC 1 INDIC ð1.
ðð37ðð
43 ðð38ðð PROCEDURE DIVISION.
ðð39ðð
ðð4ððð MAIN-PROCESS.
ðð41ðð
44 ðð42ðð OPEN I-O DISPFILE.
45 ðð43ðð ACCEPT CURRENT-DATE FROM DATE.
46 ðð44ðð MOVE IND-OFF TO IN99 IN FORMAT1-I-INDIC.
47 ðð45ðð PERFORM DISPLAY-SCREEN THRU READ-AND-PROCESS-SCREEN
ðð46ðð UNTIL IN99 IN FORMAT1-I-INDIC = IND-ON.
48 ðð47ðð CLOSE DISPFILE.
49 ðð48ðð STOP RUN.
ðð49ðð
ðð5ððð DISPLAY-SCREEN.
ðð51ðð
5ð ðð52ðð MOVE ZEROS TO FORMAT1-O-INDIC.
51 ðð53ðð IF CURR-DAY = ð1 THEN
52 ðð54ðð MOVE IND-ON TO INð1 IN FORMAT1-O-INDIC. .5/

Figura 59 (Parte 1 de 2). Listado COBOL que Utiliza Indicadores en un Área de Indicadores Separada

Capítulo 8. Archivos Transacción 161


5763CB1 V3RðM5 Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
53 ðð55ðð WRITE DISP-REC FORMAT IS "FORMAT1"
ðð56ðð INDICATORS ARE FORMAT1-O-INDIC. .6/
ðð57ðð
ðð58ðð READ-AND-PROCESS-SCREEN.
ðð59ðð
54 ðð6ððð MOVE ZEROS TO FORMAT1-I-INDIC.
55 ðð61ðð READ DISPFILE FORMAT IS "FORMAT1"
ðð62ðð INDICATORS ARE FORMAT1-I-INDIC. .7/
56 ðð63ðð IF IN51 IN FORMAT1-I-INDIC = IND-ON THEN
57 ðð64ðð CALL "DAILY" USING DEPTNO .8/
ðð65ðð ELSE
58 ðð66ðð IF IN52 IN FORMAT1-I-INDIC = IND-ON THEN
59 ðð67ðð CALL "MONTHLY" USING DEPTNO.
\ \ \ \ \ F I N D E F U E N T E \ \
5763CB1 V3RðM5 Mensajes AS/4ðð COBOL
INST
\ 23 MSGID: LBLð6ðð GRAVEDAD: 1ð NUMSEC: ððð25ð
Mensaje . . . . : No se encontraron campos OUTPUT para formato FORMAT1.
\ \ \ \ \ F I N D E M E N S A J E S \ \ \ \ \
Resumen Mensajes
Total Info(ð-4) Aviso(5-19) Error(2ð-29) Grave(3ð-39) Terminal(4ð-99)
1 ð 1 ð ð ð
Registros fuente leídos . . . . . . : 67
Registros de copia leídos . . . . . : 22
Miembros de copia procesados . . . : 2
Errores de secuencia . . . . . . . : ð
Mensaje de gravedad más alta emitido: 1ð
LBLð9ð1 ðð Programa XMPLE717 creado en biblioteca XMPLIB.
\ \ \ \ \ F I N D E C O M P I L A C I O N \ \ \ \ \

Figura 59 (Parte 2 de 2). Listado COBOL que Utiliza Indicadores en un Área de Indicadores Separada

.1/ El atributo del área de indicadores separada, SI, se especifica en la cláusula


ASSIGN.
.2/ La instrucción COPY con Formato 2 genera descripciones de datos en el
área de registro solamente para campos de datos. Las entradas de descrip-
ción de datos para los indicadores no se generan debido a que el área de
indicadores separada se ha especificado para el archivo.
.3/ La instrucción COPY con Formato 2, con el atributo INDICATOR, INDIC,
define las entradas de descripción de datos en WORKING-STORAGE para
todos los indicadores utilizados en las DDS para el formato de registro del
archivo.
.4/ Debido a que el archivo tiene un área de indicadores separada, los números
de los indicadores utilizados en las entradas de descripción de datos no se
tratan como documentación.
.5/ Si es el primer día del mes, se activa IN01 (01) en el área de indicadores
separada para FORMAT1.
.6/ La frase INDICATORS es necesaria para enviar los valores de los indi-
cadores a la pantalla de estación de trabajo.
.7/ La frase INDICATORS es necesaria para recibir valores de los indicadores
desde la pantalla de estación de trabajo. Si pulsa F5, se activa IN51.
.8/ Si se ha activado IN51, se procesa una llamada de programa.

162 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ððð1ðð IDENTIFICATION DIVISION. ð1/22/94
2 ððð2ðð PROGRAM-ID. XMPLE72ð. ð3/22/94
ððð3ðð\ PROGRAMA EJEMPLO ð1/22/94
ððð4ðð\ ARCHIVO CON ÁREA DE IND.SEPARADA EN ÁREA ALMACENAMIENTO ð1/22/94
3 ððð5ðð AUTHOR. PROGRAMMER NAME. ð1/22/94
4 ððð6ðð INSTALLATION. TORONTO COBOL DEVELOPMENT CENTRE. ð1/22/94
5 ððð7ðð DATE-WRITTEN. 12/ð8/88. ð1/22/94
6 ðððð8ð DATE-COMPILED. ð5/24/94 12:46:ðð .
7 ððð9ðð ENVIRONMENT DIVISION. ð1/22/94
8 ðð1ððð CONFIGURATION SECTION. ð1/22/94
9 ðð11ðð SOURCE-COMPUTER. IBM-AS4ðð. ð1/22/94
1ð ðð12ðð OBJECT-COMPUTER. IBM-AS4ðð. ð1/22/94
11 ðð13ðð INPUT-OUTPUT SECTION. ð1/22/94
12 ðð14ðð FILE-CONTROL. ð1/22/94
13 ðð15ðð SELECT DISPFILE ð1/22/94
14 ðð16ðð ASSIGN TO WORKSTATION-DSPFILE-SI .1/ ð3/22/94
15 ðð17ðð ORGANIZATION IS TRANSACTION ð1/22/94
16 ðð18ðð ACCESS IS SEQUENTIAL. ð1/22/94
ðð19ðð ð1/22/94
17 ðð2ððð DATA DIVISION. ð1/22/94
18 ðð21ðð FILE SECTION. ð1/22/94
19 ðð22ðð FD DISPFILE ð1/22/94
2ð ðð23ðð LABEL RECORDS ARE OMITTED ð1/22/94
21 ðð24ðð DATA RECORD IS DISP-REC. ð1/22/94
22 ðð25ðð ð1 DISP-REC. ð1/22/94
23 ðð26ðð COPY DDS-ALL-FORMATS OF DSPFILE. .2/ ð3/22/94
24 +ððððð1 ð5 DSPFILE-RECORD PIC X(5). <-ALL-FMTS
+ððððð2\FORMATO ENTRADA:FORMAT1 DESDE ARCHIVO DSPFILE DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ððððð3\ <-ALL-FMTS
25 +ððððð4 ð5 FORMAT1-I REDEFINES DSPFILE-RECORD. <-ALL-FMTS
26 +ððððð5 ð6 DEPTNO PIC X(5). <-ALL-FMTS
+ððððð6\FORMATO SALIDA:FORMAT1 DESDE ARCHIVO DSPFILE DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ððððð7\ <-ALL-FMTS
+ððððð8\ ð5 FORMAT1-O REDEFINES DSPFILE-RECORD. <-ALL-FMTS
ðð27ðð
27 ðð28ðð WORKING-STORAGE SECTION.
28 ðð29ðð ð1 CURRENT-DATE.
29 ðð3ððð ð5 CURR-YEAR PIC 9(2).
3ð ðð31ðð ð5 CURR-MONTH PIC 9(2).
31 ðð32ðð ð5 CURR-DAY PIC 9(2).
ðð33ðð
32 ðð34ðð ð1 INDIC-AREA.
33 ðð35ðð ð5 INDIC-TABLE OCCURS 99 PIC 1 INDICATOR 1. .3/
34 ðð36ðð 88 IND-OFF VALUE B"ð".
35 ðð37ðð 88 IND-ON VALUE B"1".
ðð38ðð
36 ðð39ðð ð1 DISPFILE-INDIC-USAGE.
37 ðð4ððð ð5 IND-NEW-MONTH PIC 9(2) VALUE ð1.
38 ðð41ðð ð5 IND-DAILY PIC 9(2) VALUE 51. .4/
39 ðð42ðð ð5 IND-MONTHLY PIC 9(2) VALUE 52.
4ð ðð43ðð ð5 IND-EOJ PIC 9(2) VALUE 99.
ðð44ðð
41 ðð45ðð PROCEDURE DIVISION.
ðð46ðð
ðð47ðð XMPLE-MAIN.
42 ðð48ðð OPEN I-O DISPFILE.
43 ðð49ðð ACCEPT CURRENT-DATE FROM DATE.
44 ðð5ððð SET IND-OFF (IND-EOJ) TO TRUE.
45 ðð51ðð PERFORM DISPLAY-SCREEN THRU READ-AND-PROCESS-SCREEN
ðð52ðð UNTIL IND-ON (IND-EOJ).
46 ðð53ðð CLOSE DISPFILE.
47 ðð54ðð STOP RUN.
ðð55ðð
ðð56ðð DISPLAY-SCREEN.
ðð57ðð
48 ðð58ðð MOVE ZEROS TO INDIC-AREA.
49 ðð59ðð IF CURR-DAY = ð1 THEN
5ð ðð6ððð SET IND-ON (IND-NEW-MONTH) TO TRUE. .5/
51 ðð61ðð WRITE DISP-REC FORMAT IS "FORMAT1"
ðð62ðð INDICATORS ARE INDIC-TABLE. .6/
ðð63ðð
ðð64ðð READ-AND-PROCESS-SCREEN.
ðð65ðð
52 ðð66ðð READ DISPFILE FORMAT IS "FORMAT1"
ðð67ðð INDICATORS ARE INDIC-TABLE. .7/

Figura 60 (Parte 1 de 2). Ejemplo de un Programa que Utiliza Indicadores en una Área Separada de Indicadores,
Definido en una Tabla en WORKING-STORAGE

Capítulo 8. Archivos Transacción 163


5763CB1 V3RðM5 Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
53 ðð68ðð IF IND-ON (IND-DAILY) THEN .8/
54 ðð69ðð CALL "DAILY" USING DEPTNO
ðð7ððð ELSE
55 ðð71ðð IF IND-ON (IND-MONTHLY) THEN
56 ðð72ðð CALL "MONTHLY" USING DEPTNO.
\ \ \ \ \ F I N D E F U E N T E \ \
5763CB1 V3RðM5 Mensajes AS/4ðð COBOL
INST
\ 23 MSGID: LBLð6ðð GRAVEDAD: 1ð NUMSEC: ððð26ð
Mensaje . . . . : No se encontraron campos OUTPUT para formato FORMAT1.
\ \ \ \ \ F I N D E M E N S A J E S \ \ \ \ \
Resumen Mensajes
Total Info(ð-4) Aviso(5-19) Error(2ð-29) Grave(3ð-39) Terminal(4ð-99)
1 ð 1 ð ð ð
Registros fuente leídos . . . . . . : 72
Registros de copia leídos . . . . . : 8
Miembros de copia procesados . . . : 1
Errores de secuencia . . . . . . . : ð
Mensaje de gravedad más alta emitido: 1ð
LBLð9ð1 ðð Programa XMPLE72ð creado en biblioteca XMPLIB.
\ \ \ \ \ F I N D E C O M P I L A C I O N \ \ \ \ \

Figura 60 (Parte 2 de 2). Ejemplo de un Programa que Utiliza Indicadores en una Área Separada de Indicadores,
Definido en una Tabla en WORKING-STORAGE

.1/ El atributo del área de indicadores separada, SI, se especifica en la cláusula


ASSIGN.
.2/ La instrucción COPY con Formato 2 genera campos en el área de registros
sólo para campos de datos.
.3/ Se define una tabla de 99 ítems de datos booleanos en
WORKING-STORAGE. La cláusula INDICATOR para esta entrada de des-
cripción de datos hace que estos ítems de datos se asocien con los indi-
cadores 1 a 99 respectivamente. La utilización de esta tabla puede tener
como resultado un rendimiento mejorado si se compara con la utilización de
un ítem de grupo con múltiples entradas subordinadas para indicadores indi-
viduales.
.4/ Se define una serie de ítems de datos en WORKING-STORAGE para propor-
cionar nombres de subíndices significativos con los que referirse a la tabla de
indicadores. La utilización de tales ítems de datos no es necesaria.
.5/ Si es el primer día del mes, se activa INDIC-TABLE (01) en el área de indi-
cadores separada para FORMAT1.
.6/ La frase INDICATOR es necesaria para enviar los valores de los indicadores
a la pantalla de estación de trabajo.
.7/ La frase INDICATOR es necesaria para recibir valores de los indicadores
desde la pantalla de estación de trabajo. Si se pulsa F5, se activará
INDIC-TABLE (51).
.8/ Si se ha activado INDIC-TABLE (51), se llama al programa DAILY.

Subarchivos
Pueden especificarse subarchivos en las DDS para un archivo de pantalla que per-
mitan al usuario manejar varios registros del mismo tipo en una pantalla. Consulte
la Figura 61 en la página 165 para ver un ejemplo de una pantalla de subarchivo.
Un subarchivo es un grupo de registros que se leen desde un dispositivo de pan-
talla o se graban a dicho dispositivo. El programa procesa un registro a la vez,

164 COBOL/400 Guía del usuario


pero el sistema operativo y la estación de trabajo envían y reciben bloques de
registros. Si se transmiten más registros de los que pueden visualizarse en la pan-
talla a la vez, el operador de la estación de trabajo puede pasar de una página del
bloque de registros a otra sin devolver el control al programa.

Los registros que se han de incluir en un subarchivo se especifican en las DDS


para el archivo. El número de registros que pueden contenerse en un subarchivo
también debe especificarse en las DDS. Un archivo puede contener más de un
subarchivo: sin embargo, en un dispositivo sólo pueden estar activos doce subar-
chivos de forma simultánea. Pueden visualizarse doce subarchivos en un disposi-
tivo a la vez.

Las DDS de un subarchivo constan de dos formatos de registros: un formato de


registros de subarchivos y un formato de registros de control de subarchivos.

El formato de registro de subarchivo contiene las descripciones de campo para los


registros en el subarchivo. Las especificaciones del formato de registro de subar-
chivo en una operación READ, WRITE o REWRITE hace que se procese el
registro del subarchivo especificado, pero no afecta directamente a los datos
visualizados.

La especificación del formato de registro de control del subarchivo en la instrucción


READ o WRITE hace que se realicen las operaciones de lectura física, escritura o
configuración de un subarchivo. La Figura 62 en la página 167 muestra un
ejemplo de las DDS para un formato de registro de subarchivo, y la Figura 63 en
la página 169 muestra un ejemplo de las DDS para un formato de registro de
control de subarchivo.

Para la descripción de la visualización de los registros en un subarchivo, y para la


descripción de las palabras clave que pueden especificarse para un subarchivo,
consulte las publicaciones Guía para la Gestión de Datos y DDS Reference.

à Búsqueda Nombre Cliente ð


Código de Búsqueda _____

Número Nombre Dirección Ciudad Provincia

XXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XX


XXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XX
XXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XX
XXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XX
XXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XX
XXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XX
XXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XX
XXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XX
XXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XX
XXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XX
XXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XX
XXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XX
XXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XX
XXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XX

á ñ
Figura 61. Pantalla de Subarchivo

Capítulo 8. Archivos Transacción 165


Para utilizar un subarchivo en un archivo de pantalla de un programa COBOL
deberá especificar la frase SUBFILE con la operación de entrada/salida. Las ope-
raciones válidas de subarchivo son:
Ÿ READ SUBFILE nombre-archivo RECORD
Ÿ WRITE SUBFILE nombre-registro
Ÿ REWRITE SUBFILE nombre-registro.

Los subarchivos pueden procesarse secuencialmente con la instrucción READ


SUBFILE NEXT MODIFIED, o procesarse al azar especificando un valor de clave
relativa. Una clave relativa es un número sin signo que el sistema puede utilizar
directamente para ubicar un registro en un archivo.

El archivo TRANSACTION debe ser un archivo descrito externamente. En


COBOL, todos los accesos al subarchivo se realizan con un número de registro
relativo. Si las frases SUBFILE se utilizan con un archivo TRANSACTION, la sen-
tencia SELECT en la División de Entorno debe indicar ACCESS MODE IS
DYNAMIC y debe especificar la clave RELATIVE KEY a utilizar.

Si un archivo de pantalla adquiere más de un dispositivo de pantalla, habrá un


subarchivo separado para cada dispositivo de pantalla individual. Si se creó un
subarchivo para un dispositivo de pantalla particular adquirido por un archivo
TRANSACTION, todas las operaciones de entrada que hacen referencia a un
formato de registro para el subarchivo se realizan sobre el subarchivo que perte-
nece a dicho dispositivo. Consulte el análisis de la frase TERMINAL en la página
191 de este capítulo para saber determinar cuál es el dispositivo que se utiliza.
Cualquier operación que haga referencia al nombre del formato de registro que no
está designado como un subarchivo se procesa como una operación de
entrada/salida dirigida directamente al dispositivo de pantalla.

Utilización de Subarchivos
Algunas utilizaciones típicas de los subarchivos incluyen:

Utilización Significado
Sólo Visualizar El usuario de la estación de trabajo revisa la pantalla.
Visualizar con Selección El usuario solicita más información acerca de uno de los ítems en
la pantalla.
Modificación El usuario modifica uno o más registros.
Sólo Entrada (sin comprobación de Se utiliza un subarchivo para una función de entrada de datos.
validez)
Sólo Entrada (con comprobación de Se utiliza un subarchivo para una función de entrada de datos, y
validez) se comprueban los registros.
Combinación de Tareas Puede utilizarse un subarchivo como visualización con modifi-
cación.

166 COBOL/400 Guía del usuario


G X 2 1 - 9 8 9 1 - 0 U M / 0 5 0 *
A S / 4 0 0 E S P E C I F I C A C I O N E S D E D E S C R I P C I O N D E D AT O S Impreso en España
International Business Machines
*El número de hojas por área de relleno puede variar ligeramente.

Archivo Signo Descripción Página de


Instrucciones

de Grabación
Programador Fecha Tecla

(/b / R / H / J / K / S / O )
Condicionamiento

Datos/Desplazamiento Teclado

(b/O/I/B/H/M/N/P)
Ubicación
(A/O/*)

Espec
Nombre Condición
Formula rio

And/Or/Coment.

Nom bre Longitud Funciones

Referencia (R)
Nombre

Nú mero d e

U t i l i z a c/i ó n
Posiciones
Secuencia
Reservado

D ecimales
Indicador

Indicador

Indicador
de

No (N)

No (N)
No (N)

Línea P os
Tipo

Tipo
Tipo

1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 16 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0

A * D D S P A R A E L A R C H I VO D E D I S P O S I T I VO D E P A N T A L L A P A Y U P D T D

A * AC T U A L I Z AC I ON D E P AGO I N T E R AC T I VO D E C U E N T A S P OR CO B R A R

A *

A R S U B A R C H 1 S F L

A T E X T ( ' S U B A R C H P A R A P AGO C L I E N T E ' )

A *

A AC P P M T 4 A I 5 4 T E X T ( ' AC E P T A R P AGO ' )

A V A L OR E S ( ' * S I ' ' * NO ' )

A 5 1 D S P A T R ( R I MD T )

A N 5 1 D S P A T R ( ND P R )

A *

A C U S T 5 B 5 1 5 T E X T ( ' N UM E R O C L I E N T E ' )

A 5 2 D S P A T R ( R I )

A 5 3 D S P A T R ( ND )

A 5 4 D S P A T R ( P R )

A *

A AMP A I D 8 0 2 B 5 2 4 T E X T ( ' I MP OR T E P AGA DO ' )

A C H E C K ( F E )

A A U T O ( R A B )

A CMP ( G T 0 )

A 5 2 D S P A T R ( R I )

A 5 3 D S P A T R ( ND )

A 5 4 D S P A T R ( P R )

A *

A E C P M S G 3 1 A O 5 3 7 T E X T ( ' M E N S A J E D E E X C E P C I ON ' )

A 5 2 D S P A T R ( R I )

A 5 3 D S P A T R ( ND )

A 5 4 D S P A T R ( B L )

A *

A OV R P M T 8 Y 2 O 5 7 0 T E X T ( ' E X C E S O E N E L P AGO ' )

A E D T CD E ( 1 )

A 5 5 D S P A T R ( B L )

A N 5 6 D S P A T R ( ND )

A *

A S T S CD E 1 A H T E X T ( ' COD I GO D E E S T ADO ' )

Figura 62. Especificaciones de Descripción de Datos para un Formato de Registro de Subarchivo

Las especificaciones de descripción de datos (DDS) para un formato de registro de


subarchivo describe los registros en un subarchivo:
.1/ La palabra clave SFL identifica el formato de registro como un subarchivo.
.2/ Las entradas de línea y posición definen la ubicación de los campos en la
pantalla.
.3/ La palabra clave VALUES especifica que el usuario sólo puede especificar
*YES o *NO como valores para el campo ACPPMT.
.4/ Las entradas de utilización definen si el campo denominado debe ser un
campo de salida (O), entrada (I), salida/entrada (B) u oculto (H).

Capítulo 8. Archivos Transacción 167


.5/ La entrada CHECK(FE) especifica que el usuario no puede saltar al siguiente
campo de entrada sin pulsar una de las teclas de salida de campo.
.6/ La entrada AUTO(RAB) especifica que los datos introducidos en el campo
AMPAID van a ser justificados a la derecha automáticamente, y los carac-
teres iniciales van a rellenarse con espacios en blanco.
.7/ La entrada CMP(GT 0) especifica que los datos introducidos para el campo
AMPAID deben compararse con cero para asegurar que el valor es mayor
que cero.
.8/ La palabra clave EDTCDE especifica la edición deseada para el campo de
salida OVRPMT. EDTCDE(1) indica que debe imprimirse el campo OVRPMT
con puntos, comas decimales y sin signos. Asimismo, se imprimirá un saldo
de cero y se suprimirán los ceros iniciales.
.9/ La palabra clave DSPATR se utiliza para especificar los atributos de pantalla
para el campo nombrado cuando el estado del indicador correspondiente es
cierto. Los atributos especificados son:
Ÿ BL (parpadeo)
Ÿ RI (contraste invertido)
Ÿ PR (protección)
Ÿ MDT (establece indicador de datos modificados)
Ÿ ND (no visualizar)

168 COBOL/400 Guía del usuario


G X 2 1 - 9 8 9 1 - 0 U M / 0 5 0 *
A S / 4 0 0 E S P E C I F I C A C I O N E S D E D E S C R I P C I O N D E D AT O S Impreso en España
Inter national B usiness Machines
*El número de hojas por área de relleno puede variar ligeramente.

Archivo Signo Descripción Página de


Instrucciones

de Grabación
Programador Fecha Tecla

(b/R/H/J/K/S/O)
Condicionamiento

Teclado

(b/O /I/B/H/M/N/P)
Ubicación

Datos/Desplazamiento
(A/O/*)

Espec
Nombre Condición
Formula rio

And/Or/Coment.

Nom bre Longitud Funciones

Referencia (R)
Nombre

Nú mero d e

U t i l i z a c/i ó n
Posiciones
Secuencia
Reservado

D ecimales
Indicador

Indicador

Indicador
de

No (N)

No (N)
No (N)

Línea P o s
Tipo

Tipo
Tipo

1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 16 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0

A R CON T R O L 1 T E X T ( ' CON T R O L S U B A R C H I VO ' )

A S F L C T L ( S U B A R C H 1 )

A S F L S I Z ( 1 7 )

A S F L P AG ( 1 7 )

A 6 1 S F L C L R

A 6 2 S F L D S P

A 6 2 S F L D S P C T L

A R E C U B R I M I E N T O

A B L OQ U E O

A *

A H E L P ( 9 9 ' T E C L A D E A Y U D A ' )

A C A 1 2 ( 9 8 ' F I N D E AC T U A L I Z AC I ON P AGO ' )

A C A 1 1 ( 9 7 ' I G NO R A R E N T R AD A ' )

A *

A 9 9 S F L M S G ( ' F 1 1 - I G NO R A R E N T R NO V A L I D A +

A F 1 2 - F I N D E AC T U A L I +

A Z AC I ON D E P AGO ' )

A *

A 1 2 ' S O L I C I T U D AC T U A L I Z . P AGO C L I E N T E '

A 1 6 5 ' F E C H A '

A 1 7 8 F E C H A E D T CD E ( Y )

A 6 3 3 2 ' AC E P T A R '

A 6 3 4 2 ' P AGO '

A 3 1 4 ' C L I E N T E '

A 3 2 6 ' P AGO '

A 6 4 3 3 7 ' M E N S A J E D E E X C E P C I ON '

Figura 63. Especificaciones de Descripción de Datos para un Formato de Registro de Control de Subarchivo

El formato de registro de control del subarchivo define los atributos del subarchivo,
el campo de entrada de búsqueda, las constantes y las teclas de mandatos. Las
palabras clave utilizadas indican lo siguiente:
.1/ SFLCTL identifica este registro como un registro de control de subarchivo y
nombra los registros de subarchivo asociados (SUBFILE1).
.2/ SFLSIZ indica el número total de registros a incluir en el subarchivo (17).
.3/ SFLPAG indica el número total de registros en una pagina (17).
.4/ SFLCLR indica cuándo debe borrarse el subarchivo (cuando el indicador 61
está activo).
.5/ SFLDSP indica cuándo se visualiza el subarchivo (cuando el indicador 62
está activo).
.6/ SFLDSPCTL indica cuándo se visualiza el registro de control de subarchivo
(cuando el indicador 62 está activo).

Capítulo 8. Archivos Transacción 169


.7/ La palabra clave LOCK impide que el usuario de la estación de trabajo
utilice el teclado cuando el formato de registro CONTROL1 se visualiza ini-
cialmente.
.8/ HELP permite que el usuario pulse la tecla Ayuda y active el indicador 99.
.9/ SFLMSG identifica la constante como un mensaje que se visualiza si se
activa el indicador 99.

Además de la información de control, el formato de registro de control de subar-


chivo define las constantes a utilizar como encabezamientos de columna para el
formato de registro de subarchivo. Consulte la Figura 63 en la página 169 para
ver un ejemplo de formato de registro de control de subarchivo.

Archivos de Múltiples Dispositivos y Archivos de Dispositivo Único


Un archivo de múltiples dispositivos es un archivo de pantalla o un archivo de
función de comunicaciones entre sistemas (ICF). Un archivo de múltiples disposi-
tivos puede adquirir más de un dispositivo de programa. Para obtener un ejemplo
de la utilización de archivos de múltiples dispositivos, consulte la Figura 64 en la
página 172.

Un archivo de dispositivo único es un archivo de dispositivo creado con un sólo


dispositivo de programa definido para él. Los archivos de impresora, de diskette y
de cinta son archivos de dispositivo único. Los archivos de pantalla y los archivos
de función de comunicaciones entre sistemas (ICF) creados con un número
máximo de un dispositivo de programa también son archivos de dispositivo único.

Un archivo de pantalla puede tener múltiples dispositivos de programa cuando el


parámetro MAXDEV del mandato CRTDSPF es mayor que 1. Si se especifica
*NONE para el parámetro DEV de este mandato, se debe suministrar el nombre de
un dispositivo de pantalla antes de utilizar cualquier campo relacionado con el
archivo.

Para más información acerca de la creación y utilización de un archivo de pantalla,


consulte la publicación Guía para la Gestión de Datos.

Los archivos ICF pueden tener dispositivos múltiples de programa cuando el pará-
metro MAXPGMDEV del mandato CRTICFF sea mayor que 1. Para más infor-
mación acerca de la creación y utilización de archivos ICF, consulte la ICF
Programmer’s Guide.

COBOL determina en tiempo de ejecución si un archivo es un archivo de disposi-


tivo único o un archivo de múltiples dispositivos, basándose en si el archivo es
capaz de tener varios dispositivos. El número real de dispositivos adquiridos no
afecta a si un archivo se considera de único dispositivo o de múltiples dispositivos.
Si un archivo es un archivo de dispositivo único o múltiple no se determina en
tiempo de compilación; esta determinación se basa en la descripción actual de la
pantalla o del archivo ICF.

Para archivos de múltiples dispositivos, si se ha de utilizar un dispositivo de pro-


grama particular en una instrucción de E/S, tal dispositivo se especifica mediante la
frase TERMINAL. La frase TERMINAL también puede especificarse para un
archivo de dispositivo único.

170 COBOL/400 Guía del usuario


Las páginas siguientes contienen un ejemplo que ilustra la utilización de archivos
de múltiples dispositivos. El programa utiliza un archivo de pantalla y está
pensado para ejecutarse en modo de proceso por lotes. El programa adquiere
terminales e invita a esos terminales mediante una pantalla de inicio de sesión.
Después de invitar a los terminales, éstos se sondean. Si nadie inicia la sesión
antes de que el tiempo de espera expire, el programa finaliza. Si se entra una
contraseña válida, el usuario está autorizado a actualizar un archivo de empleados
llamando a otro programa COBOL. Una vez completada la actualización, se invita
al dispositivo de nuevo y los terminales se sondean otra vez.

Capítulo 8. Archivos Transacción 171


GX21-9891-0 UM/050*
A S / 4 0 0 E S P E C I F I C A C I O N E S D E D E S C R I P C I O N D E D ATO S Impreso en España
International Business Machines
*El núm ero de hojas por área de re lleno puede variar lige ram ente.

Archivo Signo Descripción Página de


Instrucciones
de Grabación
Programador Fecha Tecla

T i p o N o m b r e o E s p e c (/b / R / H / J / K / S / O )
Condicionamiento

Tipo Datos/Desplazamiento Teclado


Ubicación

U t i l i z a c/i ó n ( b / O / I / B / H / M / N / P )
And/Or/Com ent. (A/O/*)

Nombre Condición
Tipo de Formula rio

Nom bre Longitud Funciones

Referencia (R)
Nú mero d e

Posiciones
Secuencia
Reservado

D ecimales
Indicador

Indicador

Indicador
No (N)

No (N)
No (N)

Línea Pos

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80

A*
A* DD S P AR A E L A R C H I VO DE P AN T A L L A DE MU L T I P L E S D I S P O S I T I VO S
A*
A R S I GNON I NV I T E
A O 5 / b
/ ' b
20 / /b /b /b /b /b /b/b/b/b/b/b/b/ b/ b/ b/ b/ b
/b/ '
A DSPATR ( R I )
A O 6 / ' b
20 /b/ '
A DSPATR ( R I )
A O 6 /b
38 ' b / '
A DSPATR ( R I )
E l formato SIGNON tiene
A O 7 / ' b
20 /b/ '
la palabra clave INVITE
A DSPATR ( R I )
asoc
Aia d a . A sí, si se u tiliza O 7 27 'M D F '

e l f oAr m a t o S I G N O N e n u n a DSPATR ( H I B L )
A O 7 /b
38 ' b / '
s e n tAe n c i a W R I T E , s e i n v i t a r á DSPATR ( R I )
a l dA
ispositivo en el que se O 8 / ' b
20 /b/ '
e s t áA e s c r i b i e n d o . DSPATR ( R I )
A O 8 38 ' b/b / '
A DSPATR ( R I )
A O 9 / ' /b /b /b /b/b/b/b/b/b/b/ b/ b/ b/ b/ b/ b
20 /b/b
/ b
/ b
/ '
A DSPATR ( R I )
A O /
2 0 / ' I N I C I E L A
2 0 S E S I ON '
A DSPATR ( H I )
A P A S S WO R D 1 /0 A I 20
/ 4 3D S P A T R ( PC ND )
A WR ONG 2 /0 A O 2 1 4 3
A R UPDA T E
A O 3 5 ' AC T U A L I Z AC I ON A R C H I VO DE P E R S ON A L '
A DSPATR ( B L )
A O 7 5 ' T ECL E E N UME R O E MP L E ADO +
A A AC T U A L I Z A R '
A N UM 7A I 7 4 4D S PA T R ( R I PC )
A R E MP L O Y E E
A O 3 5 ' N UME R O E MP L E ADO '
A N UM 7A B 3 2 5D S PA T R ( PC )
A O 5 5 ' N OM B R E E MP L E ADO '
A N AM E 3 /0 A B 5 2 5D S PA T R ( PC )
A O 7 5 ' D I R E CC I ON E MP L E ADO '
A O 9 5 ' CA L L E '
A S TRE E T 3 /0 A B 9 2 5D S PA T R ( PC )
A O 1 1 5 ' N UME R O A P A R T AM E N T O '
A A P T NO 5A B 1 1 2 5 ' D S PA T R ( PC )
A O 13 5 ' C I U D AD '
A C I T Y 2 /0 A B 13 2 5D S PA T R ( PC )
A O 15 5 ' P R OV I NC I A '
A P R OV 2 /0 A B 15 2 5D S PA T R ( PC )
A R R E CO V E R Y
A O 3 5 ' E L N UME R O DE E MP L E ADO QU E HA +
A D ADO NO E S VA L I DO '
A O 6 5 ' T ECL E E S P AR A R E I N T E N T AR '
A O 8 5 ' T ECL E E N P AR A SAL I R '
A AN SWE R 1X I /
10 5D S PA T R ( R I PC )
A V A L OR E S ( ' S ' ' N ' )
A
A
A
A
A
A

Figura 64 (Parte 1 de 3). Ejemplo de Utilización de Archivos de Múltiples Dispositivos

172 COBOL/400 Guía del usuario


G X2 1-98 91-0 U M /05 0*
A S / 4 0 0 E S P E C I F I C A C I O N E S D E D E S C R I P C I O N D E D AT O S Impreso en España
International Business Machines
*El núm e ro de hojas por área de re lleno puede variar lige ram ente .

Archivo Signo Descripción Página de


Instrucciones
de Grabación
Programador Fecha Tecla

T i p o N o m b r e o E s p e c (/b / R / H / J / K / S / O )
Condicionamiento

Tipo Datos/Desp lazamien to Teclado


Ubicación

Utilización (b/O/I/B/H/M/N/P)
And/Or/Coment. (A/O/*)

Nombre Co ndición
Tipo de Formula rio

N om b re Longitud Funciones

Referencia (R)
Nú mero de

Posiciones
Secuencia
Reservado

D ecimales
Indicador

Indicador

Indicador
No (N)

No (N)
No (N)

Línea Pos

1 2 3 4 5 6 7 8 9 10 11 12 13 1 4 15 16 17 18 19 20 2 1 22 2 3 24 2 5 26 27 2 8 29 3 0 3 1 32 3 3 34 3 5 36 37 38 39 4 0 4 1 4 2 4 3 44 4 5 46 4 7 48 49 5 0 5 1 5 2 5 3 5 4 55 5 6 5 7 58 5 9 60 6 1 6 2 63 6 4 65 6 6 6 7 68 6 9 70 7 1 7 2 7 3 7 4 75 7 6 77 7 8 7 9 80

A *

A * DD S P A R A L A CON T R A S E Ñ A D E A R C H I VO F I S I CO

A *

A U N I QU E

A R P A S S WO R D S

A P A S S K E Y 1 0
/

/
A P A S S WO R D 1 0

A K P A S S K E Y

Figura 64 (Parte 2 de 3). Ejemplo de Utilización de Archivos de Múltiples Dispositivos

Capítulo 8. Archivos Transacción 173


G X 2 1 -9 8 9 1 -0 U M /0 5 0 *
A S / 4 0 0 E S P E C I F I C A C I O N E S D E D E S C R I P C I O N D E D AT O S Impreso en España
International Business Machines
*El número de hojas por área de relleno puede variar ligeramente.

Archivo Signo Descripción Página de


Instrucciones

de Grabación
Programador Fecha Tecla

T i p o N o m b r e o E s p e c (/b / R / H / J / K / S / O )
Condicionamiento

Tipo Datos/Desplazamiento Teclado


Ubicación

(b/O/I/B/H/M/N/P)
And/Or/Com ent. (A/O/*)

Nombre Condición
Tipo de Formula rio

Nom bre Longitud Funciones

Referencia (R)
Nú mero d e

Utilización
Posiciones
Secuencia
Reservado

D ecimales
Indicador

Indicador

Indicador
No (N)

No (N)
No (N)

Línea Pos

1 2 3 4 5 6 7 8 9 10 1 1 12 13 14 15 16 17 18 19 20 2 1 22 2 3 24 2 5 26 2 7 28 2 9 30 31 3 2 33 3 4 35 3 6 37 3 8 39 4 0 4 1 4 2 4 3 4 4 45 46 47 48 49 5 0 5 1 52 5 3 54 5 5 56 5 7 58 5 9 60 6 1 6 2 6 3 6 4 65 6 6 67 6 8 69 7 0 7 1 7 2 7 3 7 4 75 7 6 7 7 78 7 9 80

A *

A * DD S P A R A E L T E R M I NO D E A R C H I VO F I S I CO

A * QU E CON T I E N E L A L I S T A D E T E R M I NA L E S

A *

A R T E R M

A T E R M 1 0
/

Figura 64 (Parte 3 de 3). Ejemplo de Utilización de Archivos de Múltiples Dispositivos

174 COBOL/400 Guía del usuario


5763CB1 V3RðM5 ðð1ððð Fuente COBOL AS/4ðð TESTER/SAMPMDF AS4ððSYS ð3/31/94 13:58:ð5 Página 2
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ðððð1ð IDENTIFICATION DIVISION.
2 ðððð2ð PROGRAM-ID. SAMPMDF.
3 ðððð3ð AUTHOR. PROGRAMMER NAME.
ðððð4ð
ðððð5ð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðððð6ð\ EL SIGUIENTE PROGRAMA MUESTRA ALGUNAS FUNCIONES DISPONIBLES\
ðððð7ð\ CON EL SOPORTE DEL ARCHIVO DE MÚLTIPLES DISPOSITIVOS. \
ðððð8ð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðððð9ð
4 ððð1ðð INSTALLATION. COBOL DEVELOPMENT CENTRE.
5 ððð11ð DATE-WRITTEN. ð2/ð2/87.
6 ððð12ð DATE-COMPILED. ð3/31/94 13:58:ð5 .
7 ððð13ð ENVIRONMENT DIVISION.
8 ððð14ð CONFIGURATION SECTION.
9 ððð15ð SOURCE-COMPUTER. IBM-AS4ðð.
1ð ððð16ð OBJECT-COMPUTER. IBM-AS4ðð.
11 ððð17ð SPECIAL-NAMES. ATTRIBUTE-DATA IS ATTR. .1/
12 ððð18ð INPUT-OUTPUT SECTION.
13 ððð19ð FILE-CONTROL.
14 ððð2ðð SELECT MULTIPLE-FILE
15 ððð21ð ASSIGN TO WORKSTATION-MULT
16 ððð22ð ORGANIZATION IS TRANSACTION .2/
17 ððð23ð ACCESS MODE IS SEQUENTIAL
18 ððð24ð FILE STATUS IS MULTIPLE-FS1, MULTIPLE-FS2 .3/
19 ððð25ð CONTROL-AREA IS MULTIPLE-CONTROL-AREA.
ððð26ð .4/
2ð ððð27ð SELECT TERMINAL-FILE
21 ððð28ð ASSIGN TO DATABASE-TERM
22 ððð29ð ORGANIZATION IS SEQUENTIAL
23 ððð3ðð ACCESS IS SEQUENTIAL
24 ððð31ð FILE STATUS IS TERMINAL-FS1.
ððð32ð
25 ððð33ð SELECT PASSWORD-FILE
26 ððð34ð ASSIGN TO DATABASE-PASSWORD
27 ððð35ð ORGANIZATION IS INDEXED
28 ððð36ð RECORD KEY IS EXTERNALLY-DESCRIBED-KEY
29 ððð37ð ACCESS MODE IS RANDOM
3ð ððð38ð FILE STATUS IS PASSWORD-FS1.
ððð39ð
31 ððð4ðð SELECT PRINTER-FILE
32 ððð41ð ASSIGN TO PRINTER-QPRINT.
33 ððð42ð DATA DIVISION.
34 ððð43ð FILE SECTION.
35 ððð44ð FD MULTIPLE-FILE.
36 ððð45ð ð1 MULTIPLE-REC. COPY DDS-SIGNON OF MULT. .5/
37 +ððððð1 ð5 MULT-RECORD PIC X(2ð). SIGNON
+ððððð2\ FORMATO ENTRADA:SIGNON DESDE ARCH MULT DE BIBLIOTECA TESTER SIGNON
+ððððð3\ SIGNON
38 +ððððð4 ð5 SIGNON-I REDEFINES MULT-RECORD. SIGNON
39 +ððððð5 ð6 PASSWORD PIC X(1ð). .6/ SIGNON
+ððððð6\ FORMATO SALIDA:SIGNON DESDE ARCH MULT DE BIBLIOTECA TESTER SIGNON
+ððððð7\ SIGNON
4ð +ððððð8 ð5 SIGNON-O REDEFINES MULT-RECORD. SIGNON
41 +ððððð9 ð6 WRONG PIC X(2ð). SIGNON
ððð46ð
42 ððð47ð FD TERMINAL-FILE.
43 ððð48ð ð1 TERMINAL-REC. COPY DDS-ALL-FORMATS OF TERM.
44 +ððððð1 ð5 TERM-RECORD PIC X(1ð). <-ALL-FMTS
+ððððð2\ FORMATO E-S:TERM DESDE ARCHIVO TERM DE BIBLIOTECA TESTER <-ALL-FMTS
+ððððð3\ <-ALL-FMTS
45 +ððððð4 ð5 TERM REDEFINES TERM-RECORD. <-ALL-FMTS
46 +ððððð5 ð6 TERM PIC X(1ð). <-ALL-FMTS
ððð49ð
47 ððð5ðð FD PASSWORD-FILE.
48 ððð51ð ð1 PASSWORD-REC. COPY DDS-ALL-FORMATS OF PASSWORD.
49 +ððððð1 ð5 PASSWORD-RECORD PIC X(2ð). <-ALL-FMTS
+ððððð2\ FORMATO E-S:PASSWORDS DESDE ARCHIVO PASSWORD DE BIBLO TESTER <-ALL-FMTS
+ððððð3\ <-ALL-FMTS
+ððððð4\ DEFINICIONES CLAVE PARA FORMATO DE REGISTRO PASSWORDS <-ALL-FMTS
+ððððð5\ NÚMERO NOMBRE RECUPERACIÓN TIPO ALTSEQ <-ALL-FMTS
+ððððð6\ ððð1 PASSKEY ASCENDING AN NO <-ALL-FMTS
5ð +ððððð7 ð5 PASSWORDS REDEFINES PASSWORD-RECORD. <-ALL-FMTS
51 +ððððð8 ð6 PASSKEY PIC X(1ð). <-ALL-FMTS
52 +ððððð9 ð6 PASSWORD PIC X(1ð). <-ALL-FMTS
ððð52ð

Figura 65 (Parte 1 de 4). Listado Fuente COBOL para el Soporte de Archivos de Múltiples Dispositivos

Capítulo 8. Archivos Transacción 175


5763CB1 V3RðM5 ðð1ððð Fuente COBOL AS/4ðð TESTER/SAMPMDF AS4ððSYS ð3/31/94 13:58:ð5 Página 2
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
53 ððð53ð FD PRINTER-FILE.
54 ððð54ð ð1 PRINTER-REC.
55 ððð55ð ð5 PRINTER-RECORD PIC X(132).
ððð56ð
56 ððð57ð WORKING-STORAGE SECTION.
ððð58ð
ððð59ð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ððð6ðð\ DECLARAR EL ESTADO DE ARCHIVO PARA CADA ARCHIVO \
ððð61ð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ððð62ð
57 ððð63ð ð1 MULTIPLE-FS1 PIC X(2) VALUE SPACES.
58 ððð64ð ð1 MULTIPLE-FS2. .7/
59 ððð65ð ð5 MULTIPLE-MAJOR PIC X(2) VALUE SPACES.
6ð ððð66ð ð5 MULTIPLE-MINOR PIC X(2) VALUE SPACES.
61 ððð67ð ð1 TERMINAL-FS1 PIC X(2) VALUE SPACES.
62 ððð68ð ð1 PASSWORD-FS1 PIC X(2) VALUE SPACES.
ððð69ð
ððð7ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ððð71ð\ DECLARAR ESTRUCTURA PARA ATRIBUTOS DE ARCHIVO DE MANTENIM. \
ððð72ð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ððð73ð
63 ððð74ð ð1 STATION-ATTR.
64 ððð75ð ð5 STATION-TYPE PIC X(1). .8/
65 ððð76ð ð5 STATION-SIZE PIC X(1).
66 ððð77ð ð5 STATION-LOC PIC X(1).
67 ððð78ð ð5 FILLER PIC X(1).
68 ððð79ð ð5 STATION-ACQUIRE PIC X(1).
69 ððð8ðð ð5 STATION-INVITE PIC X(1).
7ð ððð81ð ð5 STATION-DATA PIC X(1).
71 ððð82ð ð5 STATION-STATUS PIC X(1).
72 ððð83ð ð5 STATION-DISPLAY PIC X(1).
73 ððð84ð ð5 STATION-KEYBOARD PIC X(1).
74 ððð85ð ð5 STATION-SIGNON PIC X(1).
75 ððð86ð ð5 FILLER PIC X(5).
ððð87ð
ððð88ð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ððð89ð\ DECLARAR ÁREA DE CONTROL PARA VARIOS ARCHIVOS \
ððð9ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ððð91ð
76 ððð92ð ð1 MULTIPLE-CONTROL-AREA.
77 ððð93ð ð5 MULTIPLE-KEY-FEEDBACK PIC X(2) VALUE SPACES.
78 ððð94ð ð5 MULTIPLE-DEVICE-NAME PIC X(1ð) VALUE SPACES.
79 ððð95ð ð5 MULTIPLE-FORMAT-NAME PIC X(1ð) VALUE SPACES.
ððð96ð
ððð97ð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ððð98ð\ DECLARAR VARIABLES DE INFORME DE ERROR \
ððð99ð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð1ððð
8ð ðð1ð1ð ð1 HEADER-LINE.
81 ðð1ð2ð ð5 FILLER PIC X(6ð) VALUE SPACES.
82 ðð1ð3ð ð5 FILLER PIC X(72)
83 ðð1ð4ð VALUE "MDF ERROR REPORT".
84 ðð1ð5ð ð1 DETAIL-LINE.
85 ðð1ð6ð ð5 FILLER PIC X(15) VALUE SPACES.
86 ðð1ð7ð ð5 DESCRIPTION PIC X(25) VALUE SPACES.
87 ðð1ð8ð ð5 DETAIL-VALUE PIC X(92) VALUE SPACES.
ðð1ð9ð
ðð11ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð111ð\ DECLARAR CONTADORES, DISTINTIVOS Y VARIABLES DE ALMACENAM.\
ðð112ð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð113ð
88 ðð114ð ð1 CURRENT-TERMINAL PIC X(1ð) VALUE SPACES.
89 ðð115ð ð1 TERMINAL-ARRAY.
9ð ðð116ð ð5 LIST-OF-TERMINALS OCCURS 25ð TIMES.
91 ðð117ð ð7 DEVICE-NAME PIC X(1ð).
92 ðð118ð ð1 COUNTER PIC 9(3) VALUE IS 1.
93 ðð119ð ð1 NO-OF-TERMINALS PIC 9(3) VALUE IS 1.
94 ðð12ðð ð1 TERMINAL-LIST-FLAG PIC 1.
95 ðð121ð 88 END-OF-TERMINAL-LIST VALUE IS B"1".
96 ðð122ð 88 NOT-END-OF-TERMINAL-LIST VALUE IS B"ð".
97 ðð123ð ð1 NO-DATA-FLAG PIC 1.
98 ðð124ð 88 NO-DATA-AVAILABLE VALUE IS B"1".
99 ðð125ð 88 DATA-AVAILABLE VALUE IS B"ð".
ðð126ð

Figura 65 (Parte 2 de 4). Listado Fuente COBOL para el Soporte de Archivos de Múltiples Dispositivos

176 COBOL/400 Guía del usuario


5763CB1 V3RðM5 ðð1ððð Fuente COBOL AS/4ðð TESTER/SAMPMDF AS4ððSYS ð3/31/94 13:58:ð5 Página 2
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1ðð ðð127ð PROCEDURE DIVISION.
ðð128ð
ðð129ð DECLARATIVES.
ðð13ðð
ðð131ð MULTIPLE-SECTION SECTION.
ðð132ð USE AFTER STANDARD EXCEPTION PROCEDURE ON MULTIPLE-FILE.
ðð133ð
ðð134ð MULTIPLE-PARAGRAPH.
1ð1 ðð135ð WRITE PRINTER-REC FROM HEADER-LINE AFTER ADVANCING PAGE.
1ð2 ðð136ð MOVE "FILE NAME IS:" TO DESCRIPTION OF DETAIL-LINE.
1ð3 ðð137ð MOVE "MULTIPLE FILE" TO DETAIL-VALUE OF DETAIL-LINE.
1ð4 ðð138ð WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 5 LINES.
1ð5 ðð139ð MOVE "FILE STATUS IS:" TO DESCRIPTION OF DETAIL-LINE.
1ð6 ðð14ðð MOVE MULTIPLE-FS1 TO DETAIL-VALUE OF DETAIL-LINE.
1ð7 ðð141ð WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 2 LINES.
1ð8 ðð142ð MOVE "EXTENDED STATUS IS:" TO DESCRIPTION OF DETAIL-LINE. .9/
1ð9 ðð143ð MOVE MULTIPLE-FS2 TO DETAIL-VALUE OF DETAIL-LINE.
11ð ðð144ð WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 2 LINES.
111 ðð145ð ACCEPT STATION-ATTR FROM ATTR. .9A/
112 ðð146ð MOVE "FILE ATTRIBUTES ARE:" TO DESCRIPTION OF DETAIL-LINE.
113 ðð147ð MOVE STATION-ATTR TO DETAIL-VALUE OF DETAIL-LINE.
114 ðð148ð WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 2 LINES.
115 ðð149ð STOP RUN.
ðð15ðð
ðð151ð TERMINAL-SECTION SECTION.
ðð152ð USE AFTER STANDARD EXCEPTION PROCEDURE ON TERMINAL-FILE.
ðð153ð TERMINAL-PARAGRAPH.
116 ðð154ð WRITE PRINTER-REC FROM HEADER-LINE AFTER ADVANCING PAGE.
117 ðð155ð MOVE "FILE NAME IS:" TO DESCRIPTION OF DETAIL-LINE.
118 ðð156ð MOVE "TERMINAL FILE" TO DETAIL-VALUE OF DETAIL-LINE.
119 ðð157ð WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 5 LINES.
12ð ðð158ð MOVE "FILE STATUS IS:" TO DESCRIPTION OF DETAIL-LINE.
121 ðð159ð MOVE TERMINAL-FS1 TO DETAIL-VALUE OF DETAIL-LINE.
122 ðð16ðð WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 2 LINES.
123 ðð161ð STOP RUN.
ðð162ð
ðð163ð PASSWORD-SECTION SECTION.
ðð164ð USE AFTER STANDARD EXCEPTION PROCEDURE ON PASSWORD-FILE.
ðð165ð PASSWORD-PARAGRAPH.
124 ðð166ð WRITE PRINTER-REC FROM HEADER-LINE AFTER ADVANCING PAGE.
125 ðð167ð MOVE "FILE NAME IS:" TO DESCRIPTION OF DETAIL-LINE.
126 ðð168ð MOVE "PASSWORD FILE" TO DETAIL-VALUE OF DETAIL-LINE.
127 ðð169ð WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 5 LINES.
128 ðð17ðð MOVE "FILE STATUS IS:" TO DESCRIPTION OF DETAIL-LINE.
129 ðð171ð MOVE PASSWORD-FS1 TO DETAIL-VALUE OF DETAIL-LINE.
13ð ðð172ð WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 2 LINES.
131 ðð173ð STOP RUN.
ðð174ð
ðð175ð END DECLARATIVES.
ðð176ð
ðð177ð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð178ð\ LÓGICA DE PROGRAMA PRINCIPAL EMPIEZA AQUÍ \
ðð179ð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð18ðð
ðð181ð MAIN-LINE SECTION.
ðð182ð MAIN-LINE-PARAGRAPH.
132 ðð183ð OPEN I-O MULTIPLE-FILE .1ð/
ðð184ð INPUT TERMINAL-FILE
ðð185ð I-O PASSWORD-FILE
ðð186ð OUTPUT PRINTER-FILE.
ðð187ð
133 ðð188ð MOVE 1 TO COUNTER.
134 ðð189ð SET NOT-END-OF-TERMINAL-LIST TO TRUE.
ðð19ðð PERFORM
135 ðð191ð FILL-TERMINAL-LIST UNTIL END-OF-TERMINAL-LIST.
ðð192ð PERFORM
136 ðð193ð ACQUIRE-AND-INVITE-TERMINALS
ðð194ð VARYING COUNTER FROM 1 BY 1
ðð195ð UNTIL COUNTER GREATER THAN NO-OF-TERMINALS.
137 ðð196ð MOVE 1 TO COUNTER.
138 ðð197ð SET DATA-AVAILABLE TO TRUE.
ðð198ð PERFORM
139 ðð199ð POLL-TERMINALS UNTIL NO-DATA-AVAILABLE.
ðð2ððð PERFORM
14ð ðð2ð1ð DROP-TERMINALS
ðð2ð2ð VARYING COUNTER FROM 1 BY 1
ðð2ð3ð UNTIL COUNTER GREATER THAN NO-OF-TERMINALS.

Figura 65 (Parte 3 de 4). Listado Fuente COBOL para el Soporte de Archivos de Múltiples Dispositivos

Capítulo 8. Archivos Transacción 177


5763CB1 V3RðM5 ðð1ððð Fuente COBOL AS/4ðð TESTER/SAMPMDF AS4ððSYS ð3/31/94 13:58:ð5 Página 2
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
141 ðð2ð4ð CLOSE MULTIPLE-FILE
ðð2ð5ð TERMINAL-FILE
ðð2ð6ð PASSWORD-FILE
ðð2ð7ð PRINTER-FILE.
142 ðð2ð8ð STOP RUN.
ðð2ð9ð
ðð21ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð211ð\ PROCEDIMIENTOS \
ðð212ð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð213ð
ðð214ð PROCEDURE-SECTION SECTION.
ðð215ð FILL-TERMINAL-LIST.
143 ðð216ð READ TERMINAL-FILE RECORD INTO LIST-OF-TERMINALS(COUNTER)
ðð217ð AT END
144 ðð218ð SET END-OF-TERMINAL-LIST TO TRUE
145 ðð219ð SUBTRACT 1 FROM COUNTER
146 ðð22ðð MOVE COUNTER TO NO-OF-TERMINALS.
147 ðð221ð ADD 1 TO COUNTER.
ðð222ð
ðð223ð ACQUIRE-AND-INVITE-TERMINALS.
148 ðð224ð ACQUIRE LIST-OF-TERMINALS(COUNTER) FOR MULTIPLE-FILE. .11/
149 ðð225ð WRITE MULTIPLE-REC .12/
ðð226ð FORMAT IS "SIGNON"
ðð227ð TERMINAL IS LIST-OF-TERMINALS(COUNTER).
ðð228ð
ðð229ð POLL-TERMINALS.
15ð ðð23ðð READ MULTIPLE-FILE RECORD. .13/
151 ðð231ð IF MULTIPLE-FS2 EQUAL "31ð" THEN
152 ðð232ð SET NO-DATA-AVAILABLE TO TRUE. .14/
153 ðð233ð IF DATA-AVAILABLE THEN
154 ðð234ð MOVE MULTIPLE-DEVICE-NAME TO CURRENT-TERMINAL
155 ðð235ð PERFORM PASSWORD-VALIDATION. .15/
ðð236ð
ðð237ð PASSWORD-VALIDATION.
156 ðð238ð MOVE CURRENT-TERMINAL TO PASSKEY OF PASSWORD-REC.
157 ðð239ð READ PASSWORD-FILE RECORD.
158 ðð24ðð IF PASSWORD OF SIGNON-I EQUAL PASSWORD OF PASSWORD-REC THEN
159 ðð241ð CALL "UPDT" USING CURRENT-TERMINAL
16ð ðð242ð MOVE SPACES TO WRONG OF SIGNON-O
ðð243ð ELSE
161 ðð244ð MOVE "INVALID PASSWORD" TO WRONG OF SIGNON-O.
162 ðð245ð WRITE MULTIPLE-REC
ðð246ð FORMAT IS "SIGNON"
ðð247ð TERMINAL IS CURRENT-TERMINAL.
ðð248ð
ðð249ð DROP-TERMINALS.
163 ðð25ðð DROP LIST-OF-TERMINALS(COUNTER) FROM MULTIPLE-FILE. .16/
\ \ \ \ \ F I N D E F U E N T E \ \ \ \ \

Figura 65 (Parte 4 de 4). Listado Fuente COBOL para el Soporte de Archivos de Múltiples Dispositivos

Atributos del Archivo de Dispositivo


.1/ ATTR es el nombre mnemotécnico asociado con el nombre de función
ATTRIBUTE-DATA. ATTR se utiliza en la instrucción ACCEPT para obtener
los datos de atributos para el archivo TRANSACTION, llamado
MULTIPLE-FILE. Vea el ítem .9A/.
.2/ El archivo MULT debe haberse creado utilizando el mandato CRTDSPF,
donde el parámetro DEV tiene el valor *NONE y el parámetro MAXDEV tiene
un valor mayor que 1. El parámetro WAITRCD especifica el tiempo de
espera para las operaciones READ del archivo. El parámetro WAITRCD
debe tener un valor mayor que 0.
.3/ MULTIPLE-FS2 es el estado del archivo ampliado para el archivo
TRANSACTION, llamado MULTIPLE-FILE. Esta variable se declaró en la
sección WORKING-STORAGE del programa. Vea el ítem .7/.
.4/ MULTIPLE-CONTROL-AREA es el área de control para el archivo
TRANSACTION, llamado MULTIPLE-FILE. Esta variable se utiliza para
determinar qué dispositivo de programa se ha utilizado para iniciar la sesión.
Vea el ítem .15/.

178 COBOL/400 Guía del usuario


.5/ La descripción de datos para MULTIPLE-REC se ha definido utilizando la ins-
trucción COPY DDS.
Nota: Sólo se nombran los campos que se copian. Consulte las DDS de
este ejemplo para comentarios acerca de las DDS utilizadas.
.6/ El formato SIGNON es el formato con la palabra clave INVITE. Este es el
formato que se utilizará para invitar a los dispositivos mediante la instrucción
WRITE.
.7/ Esta es la declaración para el estado del archivo ampliado MULTIPLE-FS2.
Es un campo de 4 bytes que se subdivide en un código de retorno principal
(los 2 primeros bytes) y un código de retorno secundario (los 2 últimos bytes).
.8/ STATION-ATTR es el lugar en el que la instrucción ACCEPT contiene los
datos del atributo para el archivo TRANSACTION, llamado MULTIPLE-FILE.
Vea el ítem .9A/.
.9/ En esta instrucción, está grabándose el estado de archivo ampliado
MULTIPLE-FS2.
.9A/ Este es un ejemplo de aceptación de datos de atributo para el archivo
TRANSACTION, llamado MULTIPLE-FILE. Dado que no interesa un disposi-
tivo de programa específico, sino más bien el último dispositivo de programa
utilizado, las frases FOR no se utilizan con la instrucción ACCEPT.
.1ð/ Esta instrucción abre el archivo TRANSACTION llamado MULTIPLE-FILE.
Dado que el parámetro ACQPGMDEV del mandato CRTDSPF tiene el valor
*NONE, no se adquiere implícitamente ningún dispositivo de programa
cuando se abre el archivo.
.11/ Esta instrucción adquiere el dispositivo de programa contenido en la variable
LIST-OF-TERMINALS (COUNTER), para el archivo TRANSACTION, llamado
MULTIPLE-FILE.
.12/ Esta instrucción WRITE invita al dispositivo de programa especificado en la
frase TERMINAL. El formato SIGNON tiene la palabra clave DDS INVITE
asociada con él. Consulte el ítem .13/.
.13/ Esta instrucción READ leerá desde cualquier dispositivo de programa invi-
tado. Vea el ítem .12/. Si el tiempo de espera expira antes de que alguien
introduzca datos en los dispositivos invitados, el estado ampliado del archivo
se colocará en “0310” y el proceso continuará. Vea el ítem .14/.
.14/ En esta instrucción, el estado ampliado del archivo para MULTIPLE-FILE está
comprobándose para ver si ha expirado el tiempo de espera.
.15/ El nombre del dispositivo de programa almacenado en el área de control se
utiliza para determinar qué dispositivo de programa se utilizó para iniciar la
sesión. Vea el ítem .4/.
.16/ Esta instrucción DROP libera el dispositivo de programa contenido en la
variable LIST-OF-TERMINALS del archivo TRANSACTION, llamado
MULTIPLE-FILE.

Capítulo 8. Archivos Transacción 179


División de Entorno

Entrada de Control de Archivo


El archivo TRANSACTION debe designarse mediante una entrada de control de
archivo en el párrafo FILE-CONTROL. Esta entrada también especifica otra infor-
mación relacionada con el archivo.

Formato

╔═══════════════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ \\\\\\\\\\\\\\\\\\\\\\\\\ ║
║ \ ┌───────────────────┐ \ ║
║ \ │ │ \ ║
║ \\6\\\\\\\\\\\\\\\\\\\│\\ ║
║ 55───SELECT──nomb-arch────ASSIGN──┬────┬────┬─nomb-asignación-1─┼───────────────────────5 ║
║ └─TO─┘ └─literal-1─────────┘ ║
║ ║
║ ║
║ ║
║ ║
║ 5────┬───────────────────────┬──TRANSACTION─────────────────────────────────────────────5 ║
║ └──ORGANIZATION─┬────┬──┘ ║
║ └─IS─┘ ║
║ ║
║ ║
║ 5────┬───────────────────────────────────────────────────────────────────────────────┬──5 ║
║ └──ACCESS──┬──────┬──┬────┬──┬─SEQUENTIAL───────────────────────────────────────┤ ║
║ └─MODE─┘ └─IS─┘ └─DYNAMIC───RELATIVE──┬─────┬──┬────┬──nomb-fech-3─┘ ║
║ └─KEY─┘ └─IS─┘ ║
║ ║
║ 5────┬──────────────────────────────────────────────────────────┬───────────────────────5 ║
║ └─┬──────┬──STATUS─┬────┬──nomb-fech-1──┬───────────────┬──┘ ║
║ └─FILE─┘ └─IS─┘ └──nomb-fech-5──┘ ║
║ ║
║ ║
║ 5────┬─────────────────────────────────────┬────.──────────────────────────────────────5% ║
║ └──CONTROL-AREA──┬────┬──nomb-fech-6──┘ ║
║ └─IS─┘ ║
║ ║
╚═══════════════════════════════════════════════════════════════════════════════════════════╝

180 COBOL/400 Guía del usuario


Cláusula ASSIGN
La cláusula ASSIGN asocia el archivo TRANSACTION con un archivo de pantalla
o un archivo ICF mediante la utilización de nombre de asignación-1.

El nombre de asignación-1 tiene la estructura siguiente:

Formato

55───ASSIGN──┬────┬─────WORKSTATION───── -nomb-arch──┬───────┬───────────────5%
└─TO─┘ └─ ─SI─┘

El dispositivo especifica el tipo de dispositivo asociado con el archivo. El valor


debe ser WORKSTATION.

El nombre de archivo de AS/400 es un nombre externo de uno a diez caracteres


de un archivo de pantalla o un archivo ICF especificado en los mandatos de crear
archivo de dispositivo, CRTDSPF o CRTICFF.

El atributo -SI se utiliza para especificar la opción a nivel de archivo para un área
de indicadores separada. Consulte el apartado “Utilización de Indicadores con
Archivos Transaction” en la página 149 para más detalles.

El segundo y siguientes nombres de asignación se comprueban sintácticamente,


pero se tratan como documentación.

Cláusula ORGANIZATION
La cláusula ORGANIZATION especifica la estructura lógica de un archivo. La
organización TRANSACTION significa una interacción entre el programa y un
usuario de estación de trabajo u otro sistema.

Organización TRANSACTION: El proceso TRANSACTION se define como la


llegada al azar de un registro desde una de las múltiples fuentes posibles mediante
el proceso apropiado, y finalmente, mediante la salida de los resultados o la infor-
mación de realimentación de algún tipo al fuente del registro.

En algunos casos, todos los registros son homogéneos; es decir, una transacción
lógica se completa con un intercambio de registros. En otras situaciones, una
serie de registros se transfiere hacia atrás y hacia adelante en progresión lógica
con varios tipos de registro seleccionados por el iniciador o como parte del proceso
basándose en los valores de datos de entrada.

Cada transacción puede procesarse mediante un programa distinto, o varias trans-


acciones pueden procesarse mediante el mismo programa, según el entorno del
sistema.

La iniciación de una transacción puede provocar que se planifique un programa


para procesar la transacción.

Una transacción puede consistir en una serie de peticiones y respuestas alter-


nativas (un diálogo). Cada petición y respuesta puede consistir en varios registros
lógicos.

Capítulo 8. Archivos Transacción 181


Cláusula ACCESS MODE
Para archivos con organización TRANSACTION, la modalidad de acceso puede
ser SEQUENTIAL o DYNAMIC.
Nota: El proceso dinámico es un método de lectura o grabación a un archivo en
orden no secuencial y de lectura desde un archivo en orden secuencial con
la misma instrucción OPEN.

Cuando se especifica o implica ACCESS IS SEQUENTIAL, el nombre del formato


contenido en el campo de nombre de formato del área de control especifica a qué
registro se ha accedido. Cuando se especifica ACCESS IS SEQUENTIAL para un
archivo TRANSACTION, no especifique el ítem de datos RELATIVE KEY.

Cuando se especifique ACCESS IS DYNAMIC, los registros del archivo pueden


tener acceso secuencial o al azar, según la forma de la petición de entrada/salida
específica. El acceso al azar a un archivo TRANSACTION sólo es válido si se
realiza el proceso del subarchivo. Para el proceso del subarchivo, deberá especi-
ficar ACCESS IS DYNAMIC.

Cláusula RELATIVE KEY


La cláusula RELATIVE KEY especifica el número relativo de registro para un
registro específico de un subarchivo. El ítem de datos RELATIVE KEY, nombre de
datos 3, debe definirse como entero sin signo y no puede ser escalado. Asimismo,
el ítem de datos no debe definirse en una entrada de descripción de registros aso-
ciada con el archivo TRANSACTION.

Cláusula FILE STATUS


El nombre de datos 5 identifica el ítem de datos del estado ampliado del archivo,
que contiene códigos de retorno principal y secundario. Estos códigos de retorno
principal y secundario pueden, en algunos casos, indicar errores de E/S cuando no
lo hace el código de estado del archivo. Una vez se realiza la operación de E/S en
un archivo no abierto, el estado ampliado del archivo tendrá un valor de cero.

Para más información acerca de la cláusula FILE STATUS, consulte el el apartado


“Estado de Archivos y Áreas de Realimentación” en la página 108. Las conside-
raciones generales acerca de la cláusula FILE STATUS y el nombre de datos 1 se
describen en la segunda parte del manual COBOL/400 Reference, en la sección
“Cláusula FILE STATUS”.

Para información acerca del papel que desempeña el estado del archivo en el
manejo de errores, consulte el Capítulo 6, “Manejo de Errores y Excepciones
COBOL/400” en la página 71.

El nombre de datos 5 debe estar definido en la División de Datos como un ítem de


datos alfanuméricos de 4 bytes; no debe estar definido en la Sección de Archivos.
Los dos primeros bytes del ítem de datos del estado del archivo ampliado con-
tienen el código de retorno principal, y los dos bytes siguientes contienen el código
retorno secundario. Los códigos de retorno se mueven al nombre de datos 5
después de cada operación de entrada o salida (excepto la instrucción ACCEPT o
CLOSE) del archivo TRANSACTION. Los valores colocados en el nombre de
datos 5 también puede tener acceso mediante la instrucción ACCEPT utilizando el
nombre de función I-O-FEEDBACK. Para más información acerca de los códigos
de retorno principal y secundario, consulte las publicaciones Guía para la Gestión
de Datos y ICF Programmer’s Guide.

182 COBOL/400 Guía del usuario


Cláusula CONTROL-AREA
La cláusula CONTROL-AREA especifica la información que depende del dispositivo
y del sistema y que se utiliza para controlar las operaciones de entrada/salida para
archivos TRANSACTION.

El nombre de datos 6 es un ítem de datos CONTROL-AREA que debe definirse en


LINKAGE SECTION o WORKING-STORAGE SECTION. Se asume que el número
de datos 6 tiene el formato siguiente:

01 nombre datos 6.
02 tecla-función PIC X(2).
(Campo de realimentación de tecla de función).
02 nombre-dispositivo PIC X(10).
(Nombre de dispositivo de programa).
02 formato-registro PIC X(10).
(Formato de registro)

El nombre de datos 6 debe tener una longitud de 2, 12 ó 22 caracteres.


Basándose en la longitud del nombre de datos 6, el compilador asume la disponibi-
lidad de los bytes de realimentación de tecla, el nombre del dispositivo de pro-
grama y el formato de registro.
Nota acerca de la Programación: Para un archivo ICF, el nombre real de un
dispositivo debe ser diferente del nombre de dispositivo de programa
(nombre de datos 11).

La información se mueve al nombre de datos 6 para cada operación READ desde


un archivo que se asignó al tipo de dispositivo WORKSTATION. La información
sólo es válida si la operación READ se completa satisfactoriamente (siempre que
no haya expirado el tiempo de espera). La información se encuentra en el formato
fijo tal como se muestra en el ejemplo siguiente:
FILE-CONTROL.
SELECT SCREEN-FILE
ASSIGN TO WORKSTATION-MYFMTS
ORGANIZATION IS TRANSACTION
CONTROL-AREA IS
TRANSACTION-CONTROL-AREA.
..
.
WORKING-STORAGE SECTION.
ð1 TRANSACTION-CONTROL-AREA.
\ ÍTEM DE REALIMENTACIÓN
ð2 FUNCTION-KEY PIC XX.
ð2 TERMINAL-ID PIC X(1ð).
ð2 FORMAT-NAME PIC X(1ð).

Capítulo 8. Archivos Transacción 183


Cada campo en el ítem de datos TRANSACTION-CONTROL-AREA del ejemplo se
describe de la forma siguiente:
Ÿ FUNCTION-KEY: Un número de dos dígitos insertado en el campo por la
interfaz de la estación de trabajo que identifica la tecla de función pulsada por
el operador para iniciar la transacción. Los códigos son los siguientes:

00 Tecla Intro
01-24 Teclas de función 1 a 24
90 Tecla de Giro Arriba
91 Tecla de Giro Abajo
92 Tecla Impr
93 Tecla Ayuda
94 Tecla Borra
95 Tecla Inicio
99 No definido

Cualquier tecla de función para la que se precisa información de realimen-


tación debe definirse para el archivo de pantalla utilizando las DDS.
Ÿ TERMINAL-ID: El nombre de dispositivo del programa
Ÿ FORMAT-NAME: El nombre de formato de registro de las DDS que se ha refe-
renciado, mediante la última instrucción de E/S ejecutada.

División de Datos

Entrada de Descripción de Archivos


Una entrada de descripción de archivos consta de un indicador de nivel (FD), un
nombre de archivo y una serie de cláusulas independientes. Para un archivo
TRANSACTION, las cláusulas independientes permitidas son la cláusula RECORD
CONTAINS, la cláusula LABEL RECORDS y la cláusula DATA RECORDS.

184 COBOL/400 Guía del usuario


Formato

╔═══════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ 55───FD────nomb-arch──────────────────────────────────────────────────────────5 ║
║ ║
║ ║
║ 5────┬─────────────────────────────────────────────────────────────────────┬──5 ║
║ └──RECORD─┬──────────┬──┬─────────────────┬─entero--4──┬────────────┬─┘ ║
║ └─CONTAINS─┘ └──entero--3 TO───┘ └─CHARACTERS─┘ ║
║ ║
║ ║
║ 5────┬────────────────────────────────────────────────────┬───────────────────5 ║
║ │ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ │ ║
║ └────LABEL──┬──RECORD──┬────┬───┬──┬──STANDARD──┬────┘ ║
║ \ │ └─IS─┘ │ └──OMITTED───┘ \ ║
║ \ └──RECORDS─┬─────┬──┘ \ ║
║ \ └─ARE─┘ \ ║
║ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ║
║ ║
║ ║
║ 5────┬─────────────────────────────────────────────────┬──.──────────────────5% ║
║ │ ┌───────────┐ │ ║
║ │ 6 │ │ ║
║ └──DATA──┬──RECORD──┬────┬───┬─────nomb-fech-2─┴──┘ ║
║ │ └─IS─┘ │ ║
║ └──RECORDS─┬─────┬──┘ ║
║ └─ARE─┘ ║
║ ║
║ ║
╚═══════════════════════════════════════════════════════════════════════════════════╝

La cláusula LABEL RECORDS especifica si se presentan las etiquetas o no. Esta


cláusula es necesaria en cada entrada de descripción de archivos. Se comprueba
sintácticamente, pero se trata como documentación.

Ítems de Datos Booleanos


La utilización de datos booleanos y de indicadores se describe en el apartado
“Entrada de Descripción de Datos–Datos Booleanos” en la página 151.

División de Procedimiento

Conceptos de División de Procedimiento


El lenguaje COBOL/400 proporciona una serie de ampliaciones a las instrucciones
PROCEDURE DIVISION para dar soporte al proceso TRANSACTION. Las sec-
ciones siguientes describen las instrucciones implicadas y su uso.

Capítulo 8. Archivos Transacción 185


Instrucción ACCEPT
La instrucción ACCEPT recupera la información (datos de atributo) sobre un dispo-
sitivo de programa particular asociado con un archivo TRANSACTION.

Instrucción ACCEPT – Formato 6 – Datos de Atributo

╔═════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ 55───ACCEPT────identific.-1────FROM────nomb-nemotéc.──────────────────────────5 ║
║ ║
║ ║
║ ║
║ 5────┬───────────────────────────────────────────────────┬───────────────────5% ║
║ └──FOR──┬──identific.-2──┬──┬────────────────────┬──┘ ║
║ └──literal-1─────┘ └──FOR──nomb-arch-1──┘ ║
║ ║
╚═════════════════════════════════════════════════════════════════════════════════╝

Este formato de la instrucción ACCEPT sólo puede utilizarse para archivos con una
organización de TRANSACTION. El nombre mnemotécnico debe asociarse al
nombre de función ATTRIBUTE-DATA en el párrafo SPECIAL-NAMES.

Si no se especifica el nombre de archivo, el archivo por omisión para la instrucción


ACCEPT es el primer archivo TRANSACTION especificado en una cláusula
SELECT del párrafo FILE-CONTROL.

Si se especifica el literal-1 o el contenido del identificador-2, indica el nombre del


dispositivo de programa para el que están disponibles los datos de atributo. Este
dispositivo debe definirse mediante un mandato CL: CRTDSPF, ADDICFDEVE o
OVRICFDEVE. No es obligatorio que se adquiera realmente el dispositivo. Si se
especifica el literal-1, debe ser no numérico con una longitud de 10 caracteres o
menos. Si se especifica el contenido del identificador-2, debe ser un ítem de datos
alfanumérico con una longitud de 10 caracteres o menos. Si se especifica un
nombre incorrecto de dispositivo de programa, o si el archivo no está abierto
cuando se procesa la instrucción ACCEPT, se emite el mensaje LBE7205
Instrucción ACCEPT ATTRIBUTE-DATA anómala (C D F).
y termina el proceso.

Si se omiten ambas frases FOR (indicando que se está utilizando el archivo por
omisión TRANSACTION), la instrucción ACCEPT utiliza el dispositivo de programa
desde el que se realizó más recientemente una operación READ, WRITE,
REWRITE o ACCEPT (Datos de Atributo). Si la única operación anterior del
archivo fue una OPEN, la instrucción ACCEPT utiliza el dispositivo de programa
adquirido implícitamente por el archivo cuando éste se abrió. Cuando se omiten
ambas frases FOR, ha de haberse adquirido un dispositivo de programa con el fin
de utilizar este formato particular de la instrucción ACCEPT.

Los atributos del dispositivo de programa se mueven al identificador-1 desde el


formato de datos de atributos apropiado, de acuerdo con las normas para una ins-
trucción MOVE de grupo sin la frase CORRESPONDING.

186 COBOL/400 Guía del usuario


El usuario podrá hacer uso de varios archivos de pantalla junto con archivos ordi-
narios en un programa que incluya una instrucción ACCEPT o DISPLAY
ampliadas. Vea la publicación COBOL/400 Reference para más información.

Formatos de Datos Atributo


Los datos atributo recuperados mediante la instrucción ACCEPT tienen dos
formatos distintos, según sean los datos para una estación de trabajo o para un
dispositivo de comunicaciones.

El nombre mnemotécnico ATTRIBUTE-DATA sólo puede utilizarse para obtener


información acerca de un dispositivo de programa para un archivo TRANSACTION.
Los datos atributo no proporcionan información acerca del estado de una operación
completa de E/S o un intento en la misma operación. Para obtener información
acerca de las operaciones de E/S, utilice la instrucción ACCEPT con Formato 3
con los nombres mnemotécnicos I-O-FEEDBACK u OPEN-FEEDBACK. Para más
información acerca de estos nombres mnemotécnicos, consulte la sección “Párrafo
SPECIAL NAMES” de la publicación COBOL/400 Reference.

Instrucción ACQUIRE
La instrucción ACQUIRE adquiere un dispositivo de programa para un archivo
TRANSACTION.

Instrucción ACQUIRE – Archivo TRANSACTION

╔═════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ 55───ACQUIRE──┬──identific.──┬──FOR──nomb-arch──────────────────────────────5% ║
║ └──literal─────┘ ║
║ ║
╚═════════════════════════════════════════════════════════════════════════════════╝

El literal o los contenidos del identificador indican el nombre del dispositivo de pro-
grama que debe adquirir el archivo especificado. Si se especifica el literal, debe
ser no numérico con una longitud de 10 caracteres o menos. Si se especifica el
identificador, debe hacer referencia a un ítem de datos alfanuméricos con una lon-
gitud de 10 caracteres o menor.

El nombre de archivo debe ser el nombre de un archivo con una organización de


TRANSACTION, y el archivo debe estar abierto cuando se ejecuta la instrucción
ACQUIRE. Se emite un mensaje de error de compilación si la organización no es
TRANSACTION.

Para una descripción de las condiciones que deben cumplirse antes de que se
pueda adquirir un dispositivo de comunicaciones, consulte la publicación ICF
Programmer’s Guide. Para más información acerca de los requisitos para panta-
llas, consulte la publicación Guía para la Gestión de Datos.

La realización satisfactoria de la operación ACQUIRE hace disponible para ope-


raciones de entrada y salida el dispositivo de programa.

Capítulo 8. Archivos Transacción 187


Si la operación ACQUIRE no es satisfactoria, el valor de estado del archivo se
establece en 9H y se llama al procedimiento USE AFTER EXCEPTION/ERROR (si
se especifica). Para más información, consulte el Capítulo 6, “Manejo de Errores y
Excepciones COBOL/400”.

Al abrir un archivo, sólo se puede adquirir implícitamente un dispositivo de pro-


grama. Si un archivo es ICF, el parámetro ACQPGMDEV del mandato CRTICFF
determina el único dispositivo de programa adquirido implícitamente. Si el archivo
es un archivo de pantalla, la primera entrada en el parámetro DEV del mandato
CRTDSPF determina el único dispositivo de programa adquirido implícitamente.
Los dispositivos de programa adicionales deben adquirirse explícitamente.

Un dispositivo de programa se adquiere explícitamente utilizando la instrucción


ACQUIRE. Para un archivo ICF, dicho dispositivo debe haber sido definido con el
mandato CL ADDICFDEVE o OVRICFDEVE antes de abrir el archivo. Para los
archivos de pantalla no existe tal requisito. Es decir, el dispositivo nombrado en la
instrucción ACQUIRE no tiene que estar especificado ni en el parámetro DEV del
mandato CRTDSPF, ni en el CHGDSPF ni en el OVRDSPF. En un archivo de
pantalla, el nombre de dispositivo de programa debe coincidir con el de dispositivo
de pantalla.

La instrucción ACQUIRE también puede utilizarse como ayuda para la recupe-


ración de errores I/O. Para más información, consulte la sección “Instrucción
ACQUIRE” de la publicación COBOL/400 Reference.

Para más información acerca de dichos mandatos, consulte la publicación CL


Reference.

Instrucción CLOSE
La instrucción CLOSE termina el proceso de volúmenes y archivos, con bloqueo
opcional donde sea procedente.

Instrucción CLOSE – Formato 3 – Archivo TRANSACTION

╔═════════════════════════════════════════════════════════════════════════════════╗
║ ┌──────────────────────────────┐ ║
║ 6 │ ║
║ 55───CLOSE──nomb-arch-1──┬─────────────────┼─────────────────────────────────5% ║
║ └──┬──────┬─LOCK──┘ ║
║ └─WITH─┘ ║
╚═════════════════════════════════════════════════════════════════════════════════╝

Para un análisis detallado de la instrucción CLOSE, consulte la sección “Instrucción


CLOSE” de la publicación COBOL/400 Reference.

188 COBOL/400 Guía del usuario


Instrucción DROP
La instrucción DROP libera un dispositivo de programa adquirido por un archivo
TRANSACTION.

Instrucción DROP

╔═════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ 55───DROP──┬─identific.─┬──FROM──nomb-arch───────────────────────────────────5% ║
║ └─literal────┘ ║
║ ║
╚═════════════════════════════════════════════════════════════════════════════════╝

El literal o el contenido del identificador indican el nombre del dispositivo de pro-


grama del dispositivo a liberar. Si se especifica el literal, debe ser no numérico y
con una longitud de 10 caracteres o menor. Si se especifica el identificador, debe
referirse a un ítem de datos alfanumérico con una longitud de 10 caracteres o
menos.

El nombre del archivo ha de referirse a un archivo con una organización de


TRANSACTION, y el archivo debe estar abierto para ser utilizado en la instrucción
DROP. Si no se emite ninguna instrucción DROP, los dispositivos de programa
conectados a un archivo TRANSACTION se liberan implícitamente cuando el
archivo se cierra finalmente.

Los dispositivos de programa especificados en una instrucción DROP han de haber


sido adquiridos por el archivo TRANSACTION, mediante una instrucción ACQUIRE
explícita o mediante una instrucción ACQUIRE implícita en tiempo OPEN.

Después de la ejecución satisfactoria de la instrucción DROP, el dispositivo de pro-


grama no está ya disponible para las operaciones de entrada y salida a través del
archivo TRANSACTION. El dispositivo puede volverse a adquirir si es necesario.
El contenido del área de registros asociada con un dispositivo de programa libe-
rado no está ya disponible, incluso si se vuelve a adquirir el dispositivo.

Si la operación DROP no es satisfactoria, se procesa el procedimiento USE


AFTER EXCEPTION/ERROR (si se especifica). Para más información, consulte el
Capítulo 6, “Manejo de Errores y Excepciones COBOL/400”.

La instrucción DROP también puede utilizarse como ayuda para la recuperación de


errores de E/S. Para más información, consulte la sección “Instrucción DROP” de
la publicación COBOL/400 Reference.

Instrucción OPEN
La instrucción OPEN inicia el proceso de archivos.

Capítulo 8. Archivos Transacción 189


Instrucción OPEN – Formato 3 – Archivos TRANSACTION

╔═════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ ┌─────────┐ ║
║ 6 │ ║
║ 55───OPEN I-O──nomb-arch─┴───────────────────────────────────────────────────5% ║
║ ║
╚═════════════════════════════════════════════════════════════════════════════════╝

Un archivo TRANSACTION debe abrirse en modalidad de E/S. Para un tra-


tamiento adicional de la instrucción OPEN, consulte la COBOL/400 Reference.

La instrucción OPEN puede provocar que se adquiera implícitamente un dispositivo


de programa para un archivo TRANSACTION. Para un análisis adicional acerca
de la adquisición de dispositivos de programa, consulte el apartado “Instrucción
ACQUIRE” en la página 187.

Recursos Comunes de Proceso


El comentario siguiente sobre las frases FORMAT, INDICATORS, SUBFILE y TER-
MINAL está relacionado con las instrucciones READ, REWRITE y WRITE.

Frase FORMAT
El literal o identificador especificado debe ser una serie de caracteres con una lon-
gitud de 10 caracteres o menos.

Varios registros de datos, cada uno con un formato distinto, pueden estar activos
de forma simultánea para un archivo TRANSACTION. Si se especifica la frase
FORMAT, debe especificar un nombre de formato válido que se define para el
sistema, y debe realizarse la operación de E/S en un registro de datos del mismo
formato. Si el formato es un nombre no válido o si no existe, el ítem de datos FILE
STATUS, si se especifica, se establece con un valor 9K y el contenido del área de
registro es indefinido.

Registro Especial DB-FORMAT-NAME: Después de la ejecución de una instruc-


ción de entrada/salida para un archivo TRANSACTION, el registro especial
DB-FORMAT-NAME se modifica de acuerdo con las normas siguientes:
Ÿ Si la operación de entrada/salida es satisfactoria, el nombre del formato de
registro se mueve implícitamente al registro especial después de la finalización
de la operación de entrada/salida.
Ÿ Si la operación de entrada/salida no es satisfactoria, DB-FORMAT-NAME con-
tiene el nombre del formato de registro utilizado en la última operación de
entrada/salida satisfactoria.

Si no se especifica la frase FORMAT, puede utilizarse DB-FORMAT-NAME si el


archivo contiene un nombre de formato de registro por omisión. El valor por
omisión siempre se mueve al registro especial DB-FORMAT-NAME.

DB-FORMAT-NAME se define implícitamente como PICTURE X(10).

190 COBOL/400 Guía del usuario


Frase INDICATORS
El identificador especificado en la frase INDICATORS debe ser un ítem de datos
booleanos elemental especificado sin la cláusula OCCURS o un ítem de grupo que
tiene ítems de datos booleanos subordinados a él.

Cuando se graba o se regraba un registro de datos, los indicadores pueden gra-


barse o regrabarse con él. Los indicadores pueden controlar el modo de
visualización del registro y las diversas funciones de gestión de datos.

Cuando se lee un registro de datos, los indicadores pueden leerse con él. Los
indicadores pueden utilizarse para pasar información acerca de los registros de
datos y y de su entrada en el programa.

Al definir un formato utilizando DDS, el usuario determina qué funciones deben


controlarse mediante los indicadores y qué indicadores controlan una determinada
función.

Para una información detallada de la frase INDICATORS, consulte el apartado “Uti-


lización de Indicadores con Archivos Transaction” en la página 149.

Frase SUBFILE
Si se especifica la frase SUBFILE, ésta indica que todos los formatos referenciados
por la instrucción son subarchivos. Cuando no se especifica SUBFILE en una ins-
trucción TRANSACTION I/O, indica que ninguno de los formatos referenciados por
la instrucción son subarchivos. Esta información no se verifica en tiempo de com-
pilación. Si se especifica de manera incorrecta, el archivo se procesa como una
serie de operaciones de entrada/salida directamente al dispositivo de pantalla.
Cuando el nombre de formato especificado exista como un formato de archivo de
pantalla, las operaciones READ/WRITE se realizan de modo satisfactorio.

Cuando no se especifica SUBFILE, el ítem de datos RELATIVE KEY asociado con


el archivo, si se especifica, no se referencia o cambia mediante la operación de
E/S.

Cuando se especifica SUBFILE, el ítem de datos RELATIVE KEY debe definirse


para el archivo. La operación de E/S referencia su valor, y a veces lo cambia.
Vea cada una de las instrucciones asociadas con las operaciones SUBFILE para
una descripción detallada de cuándo y cómo se cambia el ítem de datos RELA-
TIVE KEY.

La frase SUBFILE sólo puede especificarse para los archivos de pantalla.

Frase TERMINAL
Cuando se especifica la frase TERMINAL, indica que un dispositivo de programa
específico se va a utilizar para una operación READ, WRITE o REWRITE en un
archivo TRANSACTION.

La frase TERMINAL puede omitirse para las operaciones de E/S en archivos de


dispositivo único, porque ese dispositivo es el que se utiliza siempre.

Si se omite la frase TERMINAL para una operación de E/S en un archivo


TRANSACTION que adquirió varios dispositivos de programa, se utiliza el disposi-
tivo de programa que intentó por última vez una operación READ, WRITE,
REWRITE, ACQUIRE, DROP o ACCEPT (Datos de Atributo) en el archivo. Si la

Capítulo 8. Archivos Transacción 191


única de las operaciones anteriores del archivo fue una OPEN, el dispositivo de
programa por omisión utilizado es el dispositivo de programa adquirido implíci-
tamente por el archivo TRANSACTION cuando se abrió el archivo. Se produce un
mensaje de error en tiempo de ejecución si no se ha adquirido ningún dispositivo
de programa al abrir el archivo.

Para una instrucción READ con la frase TERMINAL y la frase NO DATA especifi-
cadas, se ejecuta la instrucción imperativa en la frase NO DATA sólo si los datos
no están inmediatamente disponibles desde el dispositivo de programa especifi-
cado mediante la frase TERMINAL.

Si se especifica la frase TERMINAL y el ítem de datos o el literal está en blanco, la


frase se trata en tiempo de ejecución como si no se hubiera especificado.

Instrucción READ
La instrucción READ hace que un registro esté disponible desde un dispositivo,
utilizando un formato designado. Si el formato es un subarchivo, la instrucción
READ hace que un registro específico esté disponible desde dicho subarchivo.

192 COBOL/400 Guía del usuario


Instrucción READ – Formato 4 – Archivo TRANSACTION (No subarchivo)

╔═════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ 55───READ──nomb-arch──┬────────┬──────────────────────────────────────────────5 ║
║ └─RECORD─┘ ║
║ ║
║ 5────┬──────────────────────┬─────────────────────────────────────────────────5 ║
║ └──INTO──identific.-1──┘ ║
║ ║
║ ║
║ 5────┬───────────────────────────────────┬────────────────────────────────────5 ║
║ └──FORMAT─┬────┬──┬─identific.-2─┬──┘ ║
║ └─IS─┘ └─literal-1────┘ ║
║ ║
║ ║
║ 5────┬─────────────────────────────────────┬──────────────────────────────────5 ║
║ └──TERMINAL─┬────┬──┬─identific.-3─┬──┘ ║
║ └─IS─┘ └─literal-2────┘ ║
║ ║
║ ║
║ 5────┬───────────────────────────────────────┬────────────────────────────────5 ║
║ └─┬─INDICATOR──┬──┬─────┬──identific.-4─┘ ║
║ ├─INDICATORS─┤ ├─IS──┤ ║
║ └─INDIC──────┘ └─ARE─┘ ║
║ ║
║ ║
║ 5────┬───────────────────────────────────┬────────────────────────────────────5 ║
║ └──NO DATA──sentencia-imperativa-1──┘ ║
║ ║
║ ║
║ 5────┬────────────────────────────────────┬───────────────────────────────────5 ║
║ └─┬────┬─END──sentencia-imperativa-2─┘ ║
║ └─AT─┘ ║
║ ║
║ ║
║ 5────┬──────────────────────────────────────────┬──┬──────────┬──────────────5% ║
║ └──NOT─┬────┬─END──sentencia-imperativa-3──┘ └─END-READ─┘ ║
║ └─AT─┘ ║
║ ║
╚═════════════════════════════════════════════════════════════════════════════════╝

El Formato 4 sólo se utiliza para leer un formato que no sea un subarchivo. El


ítem de datos RELATIVE KEY, si se especifica en la entrada FILE-CONTROL, no
se utiliza. La instrucción READ con Formato 4 no es válida para un registro de
subarchivo. Sin embargo, debe utilizarse una instrucción READ de Formato 4 para
el formato de registro de control de subarchivo para colocar dichos registros de
subarchivo que se actualizaron en una pantalla en el subarchivo.

Si los datos solicitados están disponibles, se devuelven al área de registros. Los


nombres del formato de registro y del dispositivo de programa se devuelven al área
I-O-FEEDBACK en el CONTROL-AREA.

La instrucción READ sólo es válida cuando hay dispositivos adquiridos para el


archivo. Si se procesa una instrucción READ y no hay dispositivos adquiridos, el
estado del archivo se establece en 92 (error lógico).

Capítulo 8. Archivos Transacción 193


El modo de funcionamiento de la instrucción READ con Formato 4 depende de:
Ÿ Si la instrucción READ es para un archivo de un solo dispositivo o para
archivos de múltiples dispositivos
Ÿ Si se ha solicitado un dispositivo de programa específico mediante la frase
TERMINAL
Ÿ Si se ha solicitado un formato de registro específico mediante la frase
FORMAT
Ÿ Si se ha especificado la frase NO DATA.

En las secciones siguientes, las referencias a datos disponibles o devueltos


incluyen la situación en la que sólo se establecen los indicadores de respuesta.
Esto se aplica también incluso cuando se utiliza un área de indicadores separada y
dichos indicadores no se devuelven al área de registros del archivo.

La tabla siguiente muestra las combinaciones posibles de frases y la función reali-


zada para un archivo de dispositivo único o para un archivo de múltiples disposi-
tivos. Por ejemplo, si TERMINAL es N, FORMAT es N y NO DATA es N, el
dispositivo único es D y el dispositivo múltiple es A.

Función Frase Y=Sí N=No


Comprobado en TERMINAL2 NNNNYYYY
Compilación FORMAT2 NNYYNNYY
NO DATA NYNYNYNY
Determinado en Un Solo Dispositivo DCDBDCDB
Tiempo de Ejecu- Dispositivos Múltiples AADBDCDB
ción

A continuación se explican los códigos A a D:

Código A–Lectura desde Dispositivo de Programa Invitado (solamente Archivos de


Dispositivos Múltiples)

Este tipo de READ recibe datos del primer dispositivo de programa invitado que
tenga datos disponibles. Los dispositivos de programa invitados son estaciones de
trabajo u otros dispositivos de comunicaciones que han sido invitados para enviar
entradas. La invitación se realiza escribiendo el dispositivo de programa con un
formato que especifique la palabra clave INVITE de DDS. Una vez que se ha leído
un dispositivo de programa invitado, ya no queda invitado por más tiempo. Este
dispositivo de programa no se utilizará para la entradas mediante otra instrucción
READ a menos que se vuelva a invitar, o a menos que se le dirija una instrucción
READ especificando la frase TERMINAL o la frase FORMAT.

El formato de registro devuelto desde el dispositivo de programa se determina por


medio del sistema. Consulte el capítulo sobre soporte de dispositivo de pantalla en
la publicación Guía para la Gestión de Datos para obtener información acerca de
cómo se determina el formato de registro para estaciones de trabajo. Consulte la

2 Si se especifica la frase y el ítem de datos o literal está en blanco, la frase se trata en tiempo de ejecución como si no se hubiera
especificado.

194 COBOL/400 Guía del usuario


publicación ICF Programmer’s Guide para obtener información acerca del pará-
metro FMTSLT de los mandatos ADDICFDEVE y OVRICFDEVE.

Esta instrucción READ puede completarse sin devolver ningún dato en los casos
siguientes:
Ÿ Si no hay dispositivos invitados.
Ÿ Si se produce una cancelación controlada del trabajo. Esto da como resultado
un valor de estado de archivo de 9A y un valor de código de retorno
principal/secundario de 0309.
Ÿ Si se omite la frase NO DATA y expira el tiempo de espera especificado. Esto
da como resultado un valor de estado de archivo de 00 y un valor de código
de retorno principal/secundario de 0310.
Ÿ Si el tiempo de espera especificado es el valor entrado en el parámetro
WAITRCD para el archivo.
Ÿ Si se especifica la frase NO DATA y no hay datos inmediatamente disponibles
cuando se procesa la READ.

Si hay datos disponibles, se devuelven al área de registros. El formato de registro


se devuelve en el área I-O-FEEDBACK y en el CONTROL-AREA. Para más infor-
mación acerca de “Lectura desde Dispositivos de Programa Invitados,” consulte la
publicación ICF Programmer’s Guide.

Código B–Lectura Desde Un Dispositivo de Programa (Combinación no Permitida)

Se emite un mensaje en tiempo de compilación, y se ignora la frase NO DATA.


Consulte la entrada de tabla para la misma combinación de frases con la frase NO
DATA omitida.

Código C–Lectura Desde Un Dispositivo de Programa (con la frase NO DATA)

Esta función de la instrucción READ nunca hace que un programa se detenga y


espere hasta que los datos estén disponibles. Se procesan los datos que estén
inmediatamente disponibles o bien la instrucción imperativa NO DATA.

Esta función READ puede utilizarse para comprobar periódicamente si los datos
están disponibles desde un dispositivo de programa particular (o bien el dispositivo
de programa por omisión o uno especificado mediante la frase TERMINAL). Esta
comprobación de los datos se realiza de la manera siguiente:
1. El dispositivo de programa se determina de la manera siguiente:
a. Si se ha omitido la frase TERMINAL o contiene espacios en blanco, se
utiliza el dispositivo de programa por omisión. El dispositivo de programa
por omisión es el que se utiliza por la instrucción READ, WRITE,
REWRITE, ACQUIRE o DROP que se intentó por última vez. Si no se
emitió previamente ninguna de estas operaciones de E/S, el dispositivo de
programa por omisión es el primer dispositivo de programa adquirido.
b. Si se especificó la frase TERMINAL, se utiliza el dispositivo de programa
indicado.
2. Se efectúa una comprobación para determinar si los datos están disponibles y
si el dispositivo de programa está invitado.

Capítulo 8. Archivos Transacción 195


3. Si los datos están disponibles, esos datos se devuelven al área de registro y el
dispositivo de programa deja de estar invitado. Si no hay datos inmedia-
tamente disponibles, se ejecuta la instrucción imperativa NO DATA y el disposi-
tivo de programa permanece invitado.
4. Si el dispositivo de programa no está invitado, se dará la condición AT END y
el estado del archivo se establece en 10.

Código D–Lectura Desde Un Dispositivo de Programa (sin la frase NO DATA)

Esta instrucción READ siempre espera a que los datos estén disponibles. Incluso
si el trabajo recibe una cancelación controlada o se especifica un tiempo
WAITRCD para el archivo, el programa nunca recuperará el control de la instruc-
ción READ. Esta operación READ se realiza de la manera siguiente:
1. El dispositivo de programa se determina así:
a. Si se omite la frase TERMINAL o contiene un valor en blanco, se utiliza el
dispositivo de programa por omisión. El dispositivo de programa por
omisión es el dispositivo de programa que utiliza la instrucción READ,
WRITE, REWRITE, ACQUIRE, DROP o ACCEPT (Datos de Atributo) que
se intentó por última vez. Si no se realizó ninguna de estas operaciones,
se utiliza el dispositivo de programa adquirido implícitamente al abrir el
archivo. Si no hay dispositivos adquiridos, se dará la condición AT END.
b. Si se especifica la frase TERMINAL, se utiliza el dispositivo de programa
indicado.
2. El formato de registro se determina de la manera siguiente:
a. Si se omite la frase FORMAT o contiene espacios en blanco, el formato de
registro devuelto lo determina el sistema. Para obtener información acerca
de cómo se calcula el formato de registro para los dispositivos de estación
de trabajo, consulte la publicación Guía para la Gestión de Datos. Para
obtener información acerca de cómo se determina el formato de registro
para las comunicaciones, consulte la sección del parámetro FMTSLT de
los mandatos ADDICFDEVE y OVRICFDEVE en la publicación ICF
Programmer’s Guide.
b. Si se especifica la frase FORMAT, se devuelve el formato de registro indi-
cado. Si los datos disponibles no coinciden con el formato de registro soli-
citado, se establece un estado de archivo de 9G.
3. El proceso del programa se detiene hasta que los datos están disponibles.
Los datos se devuelven al área de registro después de que se ejecute la ins-
trucción READ. Si el dispositivo de programa se invitó anteriormente, no per-
manecerá invitado por más tiempo después de esta instrucción READ.

Frase INTO
La frase INTO puede especificarse si:
Ÿ Sólo hay una descripción de registro subordinada a la entrada de descripción
del archivo,
o bien
Ÿ Todos los nombres de registros asociados al nombre de archivo y el ítem de
datos al que hace referencia el identificador-1 describen un ítem de grupo o un
ítem alfanumérico elemental.

196 COBOL/400 Guía del usuario


Frase FORMAT
El literal-1 o el identificador-2 especifican el nombre del formato de registro a leer.
Si se especifica el literal-1, debe ser no numérico con una longitud de 10 carac-
teres o menos. Si se especifica el identificador-2, debe referirse a un ítem de
datos alfanumérico con una longitud de 10 caracteres o menos. Si el
identificador-2 contiene espacios en blanco, se ejecuta la instrucción READ como
si se omitiera la frase FORMAT.

Frase NO DATA
Cuando se especifica la frase NO DATA, la instrucción READ determina si los
datos están inmediatamente disponibles. Si hay datos disponibles, se devuelven al
área de registros. Si no hay datos inmediatamente disponibles, se procesa la ins-
trucción imperativa NO DATA. La frase NO DATA evita que la instrucción READ
espere a que los datos estén disponibles.

Frase TERMINAL
El literal-2 o el identificador-3 especifican el nombre del dispositivo de programa.
Si se especifica el literal-2, debe ser no numérico con una longitud de 10 carac-
teres o menos. Si se especifica el identificador-3, debe referirse a un ítem de
datos alfanuméricos con una longitud de 10 caracteres o menos. El dispositivo de
programa debe haberse adquirido antes de que se procese la instrucción READ.
Si el identificador-3 contiene espacios en blanco, se procesa la instrucción READ
como si se omitiera la frase TERMINAL. Para un archivo de un solo dispositivo,
puede omitirse la frase TERMINAL. Se asume que el dispositivo de programa es
aquel dispositivo único.

Si se omite la frase TERMINAL para una instrucción READ de un archivo


TRANSACTION que ha adquirido múltiples dispositivos de programa, se utiliza el
dispositivo de programa por omisión. Consulte el comentario de la frase TER-
MINAL en la página 191, para ver cómo se determina el dispositivo de programa
por omisión.

Frase AT END
La instrucción imperativa-2 se realiza cuando se detecta la condición AT END.
Nota: Una condición AT END se produce en los casos siguientes:
Ÿ Durante una instrucción READ para un archivo con acceso secuencial cuando
no hay ningún registro lógico siguiente en el archivo, o cuando el número de
dígitos significativos en el número relativo de registro es mayor que el tamaño
del ítem de datos de clave relativa, o cuando no se presenta ningún archivo de
entrada opcional.
Ÿ Durante una instrucción RETURN cuando no hay registros lógicos para la clasi-
ficación asociada o el archivo de fusión.
Ÿ Durante una instrucción SEARCH cuando la operación de búsqueda finaliza sin
satisfacer la condición especificada en cualquier frase WHEN asociada.

Frase NOT AT END


Esta frase sirve para especificar procedimientos a efectuar cuando la operación
READ es satisfactoria.

Capítulo 8. Archivos Transacción 197


Frase END-READ
La frase END-READ sirve para delimitar explícitamente el ámbito de la instrucción.

Instrucción READ – Formato 5 – Archivo TRANSACTION (Subarchivo)

╔═════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ 55───READ SUBFILE──nomb-arch──────────────────────────────────────────────────5 ║
║ ║
║ ║
║ 5────┬────────────────────┬──┬────────┬───────────────────────────────────────5 ║
║ └─┬──────┬─MODIFIED──┘ └─RECORD─┘ ║
║ └─NEXT─┘ ║
║ ║
║ 5────┬──────────────────────┬─────────────────────────────────────────────────5 ║
║ └──INTO──identific.-1──┘ ║
║ ║
║ ║
║ 5────┬───────────────────────────────────┬────────────────────────────────────5 ║
║ └──FORMAT─┬────┬──┬─identific.-2─┬──┘ ║
║ └─IS─┘ └─literal-1────┘ ║
║ ║
║ ║
║ 5────TERMINAL─┬────┬──┬─identific.-3─┬────────────────────────────────────────5 ║
║ └─IS─┘ └─literal-2────┘ ║
║ ║
║ ║
║ 5────┬───────────────────────────────────────┬────────────────────────────────5 ║
║ └─┬─INDICATOR──┬──┬─────┬──identific.-4─┘ ║
║ ├─INDICATORS─┤ ├─IS──┤ ║
║ └─INDIC──────┘ └─ARE─┘ ║
║ ║
║ ║
║ 5────┬───────────────────────────────────────────┬────────────────────────────5 ║
║ └──INVALID─┬─────┬──sentencia-imperativa-1──┘ ║
║ └─KEY─┘ ║
║ ║
║ ║
║ 5────┬───────────────────────────────────────────────┬────────────────────────5 ║
║ └──NOT INVALID─┬─────┬──sentencia-imperativa-2──┘ ║
║ └─KEY─┘ ║
║ ║
║ 5────┬────────────────────────────────────┬───────────────────────────────────5 ║
║ └─┬────┬─END──sentencia-imperativa-3─┘ ║
║ └─AT─┘ ║
║ ║
║ ║
║ 5────┬──────────────────────────────────────────┬──┬──────────┬──────────────5% ║
║ └──NOT─┬────┬─END──sentencia-imperativa-4──┘ └─END-READ─┘ ║
║ └─AT─┘ ║
║ ║
╚═════════════════════════════════════════════════════════════════════════════════╝

El formato 5 sólo se utiliza para leer un formato que sea un registro de subarchivo.
La frase AT END sólo puede utilizarse cuando se especifica la frase NEXT
MODIFIED. La frase INVALID KEY no debe utilizarse cuando se especifica la
frase NEXT MODIFIED.

198 COBOL/400 Guía del usuario


El formato 5 no puede utilizarse para dispositivos de comunicaciones. Si el
formato de subarchivo de la instrucción READ se utiliza para un dispositivo de
comunicaciones, la instrucción READ falla y se establece un estado de valor de 90.

Acceso al Azar de Registros de Subarchivo: La frase NEXT MODIFIED no debe


utilizarse para registros de acceso al azar en un subarchivo. La frase INVALID
KEY sólo puede utilizarse para el acceso al azar de registros de subarchivo.

Acceso Secuencial de Registros de Subarchivo: La frase NEXT MODIFIED debe


especificarse para acceder a registros de subarchivo de forma secuencial. La
frase AT END sólo puede especificarse con la frase NEXT MODIFIED.

Frase NEXT MODIFIED


Cuando no se especifica NEXT MODIFIED, el registro de datos disponible es el
registro en el subarchivo con un número relativo de registro que corresponde al
valor del ítem de datos RELATIVE KEY.

Cuando no se especifica la frase NEXT MODIFIED, y si el ítem de datos RELA-


TIVE KEY contiene un valor que no sea el número de registro relativo de un
registro en un subarchivo, se dará la condición INVALID KEY y la ejecución de la
instrucción READ no será satisfactoria.

Cuando se especifica la frase NEXT MODIFIED, el registro disponible es el registro


siguiente modificado que sigue a la posición del puntero actual en el archivo. Para
obtener información acerca de la activación del Distintivo de Datos Modificados,
consulte la publicación Guía para la Gestión de Datos.

La búsqueda del siguiente registro modificado comienza:


Ÿ Al principio del subarchivo si:
– Se ha realizado una operación de E/S para el registro de control de subar-
chivo.
– La operación de E/S ha borrado, inicializado o visualizado el subarchivo.
Ÿ Para todos los otros casos, comienza en el registro que sigue al registro que
se leyó mediante una operación anterior de lectura.

El valor del ítem de datos RELATIVE KEY se actualiza para reflejar el número
relativo de registro del registro disponible para el programa.

Si se especifica NEXT MODIFIED y no hay más registros modificados por el


usuario en el subarchivo, existe la condición AT END. Entonces se ejecuta la ins-
trucción imperativa 2 o un procedimiento USE AFTER ERROR/EXCEPTION proce-
dente, si lo hay.

Frase FORMAT
Cuando no se especifica un nombre de formato, el formato utilizado es el último
formato de registro grabado en el dispositivo de pantalla que contiene campos de
entrada, campos de entrada/salida o campos ocultos. Si no existe tal formato para
el archivo de pantalla, el formato utilizado es el formato de registro de la última
operación WRITE para el dispositivo de pantalla.
Nota: Un campo de entrada es un campo especificado en un archivo de pantalla
o en un archivo de base de datos que se reserva para la información sumi-
nistrada por el usuario

Capítulo 8. Archivos Transacción 199


Si se especifica la frase FORMAT, el literal-1 o el contenido del identificador-2
deben especificar un formato que esté activo para el dispositivo de programa apro-
piado. La instrucción READ lee un registro de datos del formato especificado.

Para asegurarse de que los resultados sean correctos, especifique siempre la frase
FORMAT para archivos con múltiples formatos. Para más información acerca de
la frase FORMAT, consulte la División de Procedimientos, en “Recursos Comunes
de Proceso” en la página 190.

Frase TERMINAL
Consulte el Formato 4 de la instrucción READ para obtener las consideraciones
generales concernientes a la frase TERMINAL.

Para una instrucción READ de Formato 5, si se omite la frase TERMINAL de un


archivo que tenga dispositivos múltiples adquiridos, se lee un registro desde el sub-
archivo asociado al dispositivo de programa por omisión. Consulte el análisis de la
frase TERMINAL en la página 191, para ver cómo se determina el dispositivo de
programa por omisión.

Frase INVALID KEY


Si en el momento de ejecución de la instrucción, el ítem de datos RELATIVE KEY
contiene un valor que no corresponde a un número relativo de registro para el sub-
archivo, la condición INVALID KEY existe y la ejecución de la instrucción no es
satisfactoria. Para ver lo que ocurre a continuación, consulte los diagramas de la
página 80 a la página 82.

| Para una instrucción READ con Formato 5, especifique la frase INVALID KEY si no
se especifica la frase NEXT MODIFIED y si no hay el procedimiento USE perti-
nente especificado para el nombre de archivo.

Frase NOT INVALID KEY


Esta frase le permite especificar los procedimientos a realizar cuando la operación
READ es satisfactoria.

Frase AT END
Si se especifica la frase NEXT MODIFIED y no hay ningún registro modificado por
el usuario en el subarchivo, existe la condición AT END y la operación READ no es
satisfactoria.

Especifique la frase AT END cuando se utiliza la frase NEXT MODIFIED y no se


especifica ningún procedimiento USE aplicable para el nombre del archivo. Si se
especifica la frase AT END y el procedimiento USE para un archivo, y surge la
condición AT END, el control se transfiere a la instrucción imperativa AT END y el
procedimiento USE no se ejecuta.

Frase NOT AT END


Esta frase le permite especificar los procedimientos a realizar cuando la operación
READ es satisfactoria.

200 COBOL/400 Guía del usuario


Frase END-READ
La frase END-READ sirve para delimitar explícitamente el ámbito de la instrucción.

Instrucción REWRITE
La instrucción REWRITE se utiliza para sustituir un registro de subarchivo que ya
existe en el subarchivo.

Instrucción REWRITE – Formato 2 – Archivo TRANSACTION (Subarchivo)

╔═════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ 55───REWRITE SUBFILE──nomb-regist-1─┬──────────────────────┬────────────────5 ║
║ └──FROM──identific.-1──┘ ║
║ ║
║ ║
║ 5───FORMAT─┬────┬──┬─identific.-2─┬───────────────────────────────────────────5 ║
║ └─IS─┘ └─literal-1────┘ ║
║ ║
║ ║
║ 5────┬─────────────────────────────────────┬──────────────────────────────────5 ║
║ └──TERMINAL─┬────┬──┬─identific.-3─┬──┘ ║
║ └─IS─┘ └─literal-2────┘ ║
║ ║
║ ║
║ 5────┬───────────────────────────────────────┬────────────────────────────────5 ║
║ └─┬─INDICATOR──┬──┬─────┬──identific.-4─┘ ║
║ ├─INDICATORS─┤ ├─IS──┤ ║
║ └─INDIC──────┘ └─ARE─┘ ║
║ ║
║ ║
║ 5────┬───────────────────────────────────────────┬────────────────────────────5 ║
║ └──INVALID─┬─────┬──sentencia-imperativa-1──┘ ║
║ └─KEY─┘ ║
║ ║
║ ║
║ 5────┬───────────────────────────────────────────────┬─┬─────────────┬───────5% ║
║ └──NOT INVALID─┬─────┬──sentencia-imperativa-2──┘ └─END-REWRITE─┘ ║
║ └─KEY─┘ ║
║ ║
╚═════════════════════════════════════════════════════════════════════════════════╝

El número de posiciones de caracteres en el registro referenciado por el nombre


de registro debe ser igual al número de posiciones de caracteres en el registro a
sustituir. Una operación READ satisfactoria en el registro debe ser anterior a la
operación REWRITE. El registro sustituido en el subarchivo es el registro en el
subarchivo accedido mediante la anterior operación READ.

Frase FORMAT
El formato de registro especificado en la frase FORMAT debe ser el formato de
registro accedido en la operación READ anterior. El literal-1 o el contenido del
identificador-2 debe ser el nombre del formato del subarchivo accedido en la ante-
rior instrucción READ. Para más información acerca de la frase FORMAT, con-
sulte el apartado “Recursos Comunes de Proceso” en la página 190.

Capítulo 8. Archivos Transacción 201


Frase TERMINAL
La frase TERMINAL indica en qué subarchivo de dispositivo de programa va a
regrabarse un registro. Si se especifica la frase TERMINAL, el literal-2 o el
identificador-3 deben hacer referencia a una estación de trabajo adquirida mediante
el archivo TRANSACTION. Si el literal-2 o el identificador-3 contienen espacios en
blanco, la frase TERMINAL no tiene efecto. Debe haberse adquirido el dispositivo
de programa especificado mediante la frase TERMINAL, explícita o implícitamente,
y debe tener un subarchivo asociado con el dispositivo.

El literal-2 o el identificador-3 deben ser nombres válidos de dispositivo de pro-


grama. Si se especifica el literal-2, debe ser no numérico con una longitud de 10
caracteres o menos. Si se especifica el Identificador-3, debe referirse a un ítem de
datos alfanumérico, de 10 caracteres o menos.

Si se omite la frase TERMINAL de un archivo TRANSACTION que adquirió varios


dispositivos de programa, el subarchivo utilizado es el subarchivo asociado con el
último dispositivo de programa desde el que se ha intentado una instrucción READ
del archivo TRANSACTION.

La instrucción REWRITE no puede utilizarse para dispositivos de comunicaciones.


Si se utiliza la instrucción REWRITE para un dispositivo de comunicaciones, la
operación fracasa y el estado del archivo se establece en 90.

Frase INVALID KEY


Si en el momento de ejecución de la instrucción, el ítem de datos RELATIVE KEY
contiene un valor que no corresponde a un número relativo de registro para el sub-
archivo, la condición INVALID KEY existe y la ejecución de la instrucción no es
satisfactoria. Para ver lo que ocurre a continuación, consulte los diagramas de la
página 80 a la página 82.

Frase NOT INVALID KEY


Esta frase le permite especificar los procedimientos a realizar cuando la operación
REWRITE es satisfactoria.

Frase END-REWRITE
La frase END-REWRITE sirve para delimitar explícitamente el ámbito de la instruc-
ción.

202 COBOL/400 Guía del usuario


Instrucción WRITE
La instrucción WRITE libera un registro lógico para el archivo.

Instrucción WRITE – Formato 4 – Archivo TRANSACTION (No subarchivo)

╔═════════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ 55───WRITE─nombre-registro-1────────────────────┬─────────────────────────────5 ║
║ └─FROM──identific.-1─┘ ║
║ ║
║ ║
║ 5────FORMAT─┬────┬──┬─identific.-2─┬──────────────────────────────────────────5 ║
║ └─IS─┘ └─literal-1────┘ ║
║ ║
║ 5────┬─────────────────────────────────────┬──────────────────────────────────5 ║
║ └──TERMINAL─┬────┬──┬─identific.-3─┬──┘ ║
║ └─IS─┘ └─literal-2────┘ ║
║ ║
║ 5────┬───────────────────────────────────────────────┬────────────────────────5 ║
║ └──STARTING─┬────┬──┬──────┬──┬─identific.-4─┬──┘ ║
║ └─AT─┘ └─LINE─┘ └─literal-3────┘ ║
║ ║
║ ║
║ 5────┬────────────────────────────────────────────────────────────────────────5 ± ║
║ └──┬─BEFORE─┬──ROLLING──┬───────┬──┬─identific.-5─┬──────────────────────5 ² ║
║ └─AFTER──┘ ├─LINES─┤ └─literal-4────┘ ║
║ └─LINE──┘ ║
║ ║
║ ║
║ ± 5──────────────────────────────────────────────────────────────────────────┬──5 ║
║ ² 5────┬─────────┬──┬─identific.-6─┬──┬─UP───┬──┬─identific.-7─┬──┬───────┬──┘ ║
║ ├─THROUGH─┤ └─literal-5────┘ └─DOWN─┘ └─literal-6────┘ ├─LINES─┤ ║
║ └─THRU────┘ └─LINE──┘ ║
║ ║
║ ║
║ ║
║ 5────┬───────────────────────────────────────┬──┬───────────┬────────────────5% ║
║ └─┬─INDICATOR──┬──┬─────┬──identific.-8─┘ └─END-WRITE─┘ ║
║ ├─INDICATORS─┤ ├─IS──┤ ║
║ └─INDIC──────┘ └─ARE─┘ ║
║ ║
╚═════════════════════════════════════════════════════════════════════════════════════╝

Frase TERMINAL
La frase TERMINAL especifica los dispositivos de programa a los que va a enviar
el registro de salida.

El contenido del literal-2 o el identificador-3 debe ser el nombre de un dispositivo


de programa anteriormente adquirido, implícita o explícitamente, por el archivo. Si
se especifica el literal-2, debe ser no numérico con una longitud de 10 caracteres o
menos. Si se especifica el identificador-3, debe referirse a un ítem de datos
alfanuméricos con una longitud de 10 caracteres o menos. Un valor de espacios
en blanco se trata como si se omitiera la frase TERMINAL.

Capítulo 8. Archivos Transacción 203


Si el archivo TRANSACTION sólo ha adquirido un único dispositivo de programa,
la frase TERMINAL puede omitirse. Dicho dispositivo de programa siempre se
utiliza para la instrucción WRITE.

Si la frase TERMINAL se omite para una operación WRITE en un archivo


TRANSACTION que ha adquirido múltiples dispositivos de programa, se utiliza el
dispositivo de programa por omisión. Consulte el análisis de la frase TERMINAL
en la página 191, para ver cómo se determina el dispositivo de programa por
omisión.

Frase STARTING
La frase STARTING especifica el número inicial de línea para los formatos de
registro que utilicen la palabra clave línea de comienzo variable. Esta frase sólo es
válida para dispositivos de pantalla.

El número real de línea en el que comienza un campo puede determinarse con la


ecuación siguiente:

Línea-real = Línea inicial + Línea inicial de las DDS − 1

Figura 66. Ecuación del Número de Línea para la Frase STARTING

Donde:
Línea real es el número real de línea
Línea inicial es el número de línea inicial especificado en el programa
Línea inicial de las DDS es el número de línea especificado en las posiciones
39 a 41 del formulario Especificaciones de Descripción de Datos.

La operación WRITE es satisfactoria si:


Ÿ El resultado de la ecuación anterior es positivo y menor o igual al número de
líneas en la pantalla.
Ÿ El valor especificado para la frase STARTING es 0. En este caso, se asume
un valor de 1.

La operación WRITE no es satisfactoria, y el programa finaliza, si:


Ÿ El resultado de la ecuación anterior es mayor que el número de líneas en la
pantalla.
Ÿ El valor especificado para la frase STARTING es negativo.

Si el valor especificado para la frase STARTING está dentro del área de pantalla,
se ignora cualquier campo fuera del área de pantalla.

El literal-3 de la frase STARTING debe ser un literal numérico. El identificador-4


debe ser un ítem numérico elemental.

Para utilizar la frase STARTING, debe especificarse la palabra clave a nivel de


registro DDS SLNO(*VAR) para el formato a grabar. Si el formato de registro no
especifica esta palabra clave, se ignora la frase STARTING en tiempo de ejecu-
ción.

204 COBOL/400 Guía del usuario


La palabra clave CLRL de las DDS también afecta a la frase STARTING. CLRL
controla la cantidad de pantalla que se borra cuando se procesa la instrucción
WRITE.

Vea la publicación DDS Reference para obtener más información acerca de las
palabras clave SLNO(*VAR) y CLRL.

Frase ROLLING
La frase ROLLING le permite mover líneas visualizadas en la pantalla de la
estación de trabajo. Todas o algunas líneas de la pantalla pueden girarse hacia
arriba o hacia abajo. Se borran las líneas que dejan desocupadas las líneas
giradas, y pueden tener otro formato de pantalla escritos en ellas. Esta frase sólo
es válida para dispositivos de pantalla.

ROLLING se especifica en la instrucción WRITE que esté grabando un nuevo


formato en la pantalla. El usuario deberá especificar si la grabación es antes o
después de girar, así como el rango de líneas que se desea girar, la cantidad de
líneas que se desea girar dichas líneas y si la operación de girar es hacia arriba o
hacia abajo.

Una vez que las líneas se han girado, los campos en estas líneas retienen sus
atributos de pantalla de las DDS (por ejemplo, el subrayado), pero pierden sus atri-
butos de utilización de las DDS (por ejemplo, la posibilidad de entrada). Los
campos en líneas que se graban y después se giran (frase BEFORE ROLLING)
también pierden sus atributos de utilización.

Si se gira cualquier parte de un formato, todo el formato pierde sus atributos de


utilización. Si hay más de un formato, sólo los formatos girados pierden sus atri-
butos de utilización.

Cuando especifique la frase ROLLING, se aplican las normas generales siguientes.


Ÿ La palabra clave ALWROL a nivel de registro de las DDS debe especificarse
para cada formato de registro grabado en una instrucción WRITE que contiene
la frase ROLLING.
Ÿ No han de utilizarse otras palabras clave DDS que se excluyan mutuamente
con la palabra clave ALWROL.
Ÿ Ambas palabras clave DDS, CLRL u OVERLAY, deben especificarse para un
formato de registro que se va a grabar y girar para evitar que la pantalla de
visualización se borre cuando se graba el formato de registro. Consulte el
manual DDS Reference para más información acerca de las palabras clave
DDS.
Ÿ Todos los identificadores y literales deben representar valores enteros posi-
tivos.
Ÿ El número de la línea inicial del giro (identificador-5 o literal-4) no debe sobre-
pasar el número de línea final (identificador-6 o literal-5).
Ÿ Desaparece el contenido de las líneas que al girar salen fuera de la ventana
especificada por los números de línea inicial y final.

La Figura 67 en la página 207 muestra un ejemplo de operación de giro. Se


escribe un formato de pantalla inicial, FMT1, en la pantalla. El programa procesa
este formato de pantalla y ahora está listo para escribir el siguiente formato de

Capítulo 8. Archivos Transacción 205


pantalla, FMT2, en la pantalla de la estación de trabajo. Una parte del FMT1 se
gira dos líneas hacia abajo antes de que se escriba FMT2 en la pantalla.

El proceso de la instrucción WRITE siguiente provoca que una parte de FMT1 se


gire dos líneas hacia abajo, y que FMT2 se escriba en la pantalla de la estación de
trabajo:
WRITE SCREENREC FORMAT "FMT2"
AFTER ROLLING LINES 14 THROUGH 2ð
DOWN 2 LINES

Cuando se ejecuta la instrucción WRITE, se realizan los pasos siguientes:


1. El contenido de las líneas 14 a 20 se giran hacia abajo dos líneas.
a. El contenido de las líneas 14 a 18 aparecen ahora en las líneas 16 a 20.
b. El contenido de las líneas 14 y 15 está vacío y borrado.
c. El contenido de las líneas 19 y 20 al girar se traslada fuera de la ventana y
desaparece.
2. Una vez que se lleva a cabo la operación de giro, se graba FMT2 en la pan-
talla.
a. Se escribe parte de FMT2 en el área desocupada por la operación de giro.
b. Se escribe parte de FMT2 encima de los datos que quedan de FMT1.
3. Cuando una instrucción READ devuelve el contenido de la pantalla al pro-
grama, sólo se devuelven los campos de FMT2 con capacidad de entrada.

206 COBOL/400 Guía del usuario


PANTALLA ANTES DEL PROCESO DE LA INSTRUCCIÓN WRITE

┌─────────────────────────────────────────────────────────────────────┐
│ │
│ ACTUALIZACIÓN DE REGISTRO DE PEDIDO DE CLIENTE │ Línea 3
│ │
│ │
│ PARA FINALIZAR ESTE TRABAJO, PULSE F7 │ Línea 8
│ │
│ │
│ INTRODUZCA SU NUMERO DE OPERADOR: ___ │ Línea 13
│ ─ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ─ %┐
│ │ Línea 14 │
│ ENTRE EL NUMERO CLIENTE: _____ │ Línea 15 │
│ │ │
│ PULSE F3 PARA VISUALIZAR MENU OPCIÓN │ Línea 17 ├───┐
│ │ │ │
│ │ │ │
│ │ Línea 2ð │ │
│ ─ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ─ ── ── ── ── ── ─ %┘ │
│ │ │
│ │ ┌─────────┘
└─────────────────────────────────────────────────────────────────────┘ │

│ Estas 7 líneas de
PANTALLA DESPUÉS DEL PROCESO DE LA INSTRUCCIÓN WRITE └5FMT1 se girarán
2 líneas hacia
┌─────────────────────────────────────────────────────────────────────┐ abajo.
│ │
│ ACTUALIZACIÓN DE REGISTRO DE PEDIDO DE CLIENTE │ Línea 3
│ │
│ │
│ PARA FINALIZAR ESTE TRABAJO, PULSE F7 │ Línea 8
│ │
│ │
│ ─ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── %┐
│ NÚMERO ARTÍCULO PEDIDO: ______ │ Línea 12 │
│ │ ├─┐
│ CANTIDAD PEDIDA: ______ │ Línea 14 │ │
│ ─ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── %┘ │
│ │ │
│ ENTRE NÚMERO CLIENTE: XXXXX │ Línea 17 │
│ │ │
│ PULSE F3 PARA VISUALIZAR MENÚ OPCIÓN │ Línea 19 │
│ │ │
│ │ ┌───────┘
│ │ │
└─────────────────────────────────────────────────────────────────────┘ │
│ Estas 3 líneas de
└5FMT2 se han grabado
sobre las líneas
anteriores.

Figura 67. Ejemplo de Operación ROLLING

Capítulo 8. Archivos Transacción 207


Instrucción WRITE – Formato 5 – Archivo TRANSACTION (Subarchivo)

╔════════════════════════════════════════════════════════════════════════════╗
║ ║
║ 55───WRITE SUBFILE─nombre-registro-1──────────────────────┬─────────────5 ║
║ └──FROM──identific.-1──┘ ║
║ ║
║ ║
║ 5────FORMAT─┬────┬──┬─identific.-2─┬────────────────────────────────────5 ║
║ └─IS─┘ └─literal-1────┘ ║
║ ║
║ ║
║ 5────┬─────────────────────────────────────┬────────────────────────────5 ║
║ └──TERMINAL─┬────┬──┬─identific.-3─┬──┘ ║
║ └─IS─┘ └─literal-2────┘ ║
║ ║
║ ║
║ 5────┬───────────────────────────────────────┬──────────────────────────5 ║
║ └─┬─INDICATOR──┬──┬─────┬──identific.-4─┘ ║
║ ├─INDICATORS─┤ ├─IS──┤ ║
║ └─INDIC──────┘ └─ARE─┘ ║
║ ║
║ ║
║ 5────┬───────────────────────────────────────────┬──────────────────────5 ║
║ └──INVALID─┬─────┬──sentencia-imperativa-1──┘ ║
║ └─KEY─┘ ║
║ ║
║ ║
║ 5────┬───────────────────────────────────────────────┬─┬───────────┬────5% ║
║ └──NOT INVALID─┬─────┬──sentencia-imperativa-2──┘ └─END-WRITE─┘ ║
║ └─KEY─┘ ║
║ ║
╚════════════════════════════════════════════════════════════════════════════╝

El formato 5 sólo se puede utilizar para dispositivos de pantalla. Si se utiliza el


formato de subarchivo de la instrucción WRITE para cualquier otro tipo de disposi-
tivo, falla la operación WRITE y el estado del archivo se establece en 90.

Si el formato es un registro de subarchivo, y se especifica SUBFILE, tiene que


haberse especificado la cláusula RELATIVE KEY en la cláusula SELECT para el
archivo a grabar. El registro grabado en el subarchivo es el registro del subarchivo
identificado mediante el nombre de formato que tiene un número relativo de
registro igual al valor del ítem de datos RELATIVE KEY. Vea la publicación Guía
para la Gestión de Datos para más información acerca de los subarchivos.

Frase TERMINAL
Consulte la explicación que sigue al Formato 4 para ver las consideraciones gene-
rales concernientes a la frase TERMINAL.

La frase TERMINAL especifica en qué subarchivo de dispositivo de programa va a


grabarse un registro. Si se especifica la frase TERMINAL, el literal-2 o el
identificador-3 deben hacer referencia a una estación de trabajo asociada con el
archivo TRANSACTION. Si el literal-2 o el identificador-3 contienen un valor en
blanco, la frase TERMINAL se trata como si no se hubiera especificado. La

208 COBOL/400 Guía del usuario


estación de trabajo estación de trabajo especificada mediante la frase TERMINAL
debe adquirirse explícita o implícitamente.

Si se omite la frase TERMINAL, el subarchivo utilizado es el subarchivo asociado


con el dispositivo de programa por omisión. Consulte el análisis de la frase TER-
MINAL en la página 191, para ver cómo se determina el dispositivo de programa
por omisión.

Frase INVALID KEY


La condición INVALID KEY existe si un registro ya está en el subarchivo con ese
número de registro, o si el número relativo de registro especificado es mayor que
el máximo número de registro de subarchivo permitido. La frase INVALID KEY
debe especificarse en la instrucción WRITE SUBFILE para todos los archivos en
los que no se especifique un procedimiento USE adecuado.

Para más información acerca de lo que ocurre cuando aparece la condición


INVALID KEY, consulte los diagramas en las páginas 80 a 82.

Frase NOT INVALID KEY


Esta frase le permitirá especificar los procedimientos a realizar cuando la operación
WRITE sea satisfactoria.

Frase END-WRITE
La frase END-WRITE sirve para delimitar explícitamente el ámbito de la instruc-
ción.

Para un análisis más detallado de la instrucción WRITE, de la frase FROM y de la


frase INVALID KEY, vea el manual COBOL/400 Reference. Para más información
acerca de la frase FORMAT, consulte la División de Procedimientos, en el apar-
tado “Recursos Comunes de Proceso” en la página 190.

Instrucción USE
La instrucción USE especifica los procedimientos para el manejo de errores de
entrada/salida que existen junto con los procedimientos estándar proporcionados
por el sistema de control de entrada/salida.

Formato

╔═════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ 55───USE AFTER──┬──────────┬──┬─EXCEPTION─┬───────────────────────────────────5 ║
║ └─STANDARD─┘ └─ERROR─────┘ ║
║ ║
║ ║
║ ║
║ ┌───────────┐ ║
║ 6 │ ║
║ 5────PROCEDURE──┬────┬────┬────nomb-arch-1─┴──┬──────────────────────────────5% ║
║ └─ON─┘ └────I-O────────────┘ ║
║ ║
╚═════════════════════════════════════════════════════════════════════════════════╝

Capítulo 8. Archivos Transacción 209


Consulte la sección “Instrucción USE” de la publicación COBOL/400 Reference
para un análisis más detallado de la instrucción USE.

Programas Ejemplo de Estación de Trabajo


Esta sección contiene ejemplos de programas COBOL que ilustran las aplicaciones
de estaciones de trabajo en el sistema AS/400.

Programa Básico de Consulta


La Figura 68 muestra las DDS asociadas a un programa básico de consulta que
utiliza el archivo TRANSACTION de COBOL

G X 2 1 - 9 8 9 1 - 0 U M / 0 5 0 *
A S / 4 0 0 E S P E C I F I C A C I O N E S D E D E S C R I P C I O N D E D AT O S Impreso en España
Inter national B usiness Machines
*El número de hojas por área de relleno puede variar ligeramente.

Archivo Signo Descripción Página de


Instrucciones

de Grabación
Programador Fecha Tecla
(/b / R / H / J / K / S / O )

Condicionamiento
Datos/Desplazamiento Teclado

(b/O /I/B/H/M/N/P)

Ubicación
(A/O/*)

Espec

Nombre Condición
Formula rio

And/Or/Coment.

Nom bre Longitud Funciones


Referencia (R)
Nombre

Nú mero d e
U t i l i z a c/i ó n
Posiciones

Secuencia
Reservado

D ecimales
Indicador

Indicador

Indicador
de

No (N)

No (N)
No (N)

Línea P o s
Tipo

Tipo

Tipo

1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0

A * A R C H I VO MA E S T R O D E CO N S U L T A D E C L I E N T E - - C U S M I NQ

A *

A R E F ( CU SMS T P )

A R CU S PMT T E X T ( ' SOL I C I T UD D E C L I E N T E ' )

A CA 0 3 ( 1 5 ' F I N D E P R OG R A M A ' )

A 1 3 ' CO N S U L T A MA E S T R A CL I E N T E S '

A 3 3 ' N UME R O C L I E N T E '

A CU S T R I 3 2 /
0

A 9 9 E R RMSG ( ' N UME R O D E CL I E N T E NO E N CO N +

A T R ADO P U L S E R E S T AUR AR , L U E GO I N T RO +

A D UC I R N UME R O VA L I DO ' 9 9 )

A 5 3 ' U T I L I CE F 3 P AR A F I NA L I Z AR P R OG R A M A , +

A U T I L I CE L A T EC L A I N T RO P AR A VO L V E R +

A A SOL I C I T AR P AN T A L L A '

A R CU S F L D S T E X T ( ' P AN T A L L A D E CL I E N T E ' )

A CA 0 3 ( 1 5 ' F I N D E P R OG R A M A ' )

A OV E R L A Y

A 8 3 ' N OM B R E '

A N AM E R 8 1 1

A 9 3 ' D I R E CC I ON '

A ADD R R 9
/ 1 1

A 1 /
0 3 ' C I U D AD '

A C I T Y R 1 0 1 1

A 1 1 3 ' P R OV I NC I A '

A S T A T E R 1 1 1 1

A 1 1 2 1 ' C O D I GO POS T A L '

A Z I P R 1 1 3 1

A 1 2 3 ' B A L A NC E A / R '

A AR B A L R 1 2 1 7

Figura 68. Ejemplo de Programa de Consulta TRANSACTION que Utiliza un Solo Dispositivo de Pantalla

210 COBOL/400 Guía del usuario


Las especificaciones de descripción de datos (DDS) para el archivo de dispositivo
de pantalla (CUSMINQ) que utiliza este programa describen dos formatos de
registro: CUSPMT y CUSFLDS.

El formato de registro CUSPMT contiene la constante ‘Consulta Muestra Clientes’,


que identifica a la pantalla. Contiene, asimismo, el indicador ‘Número Cliente’ y el
campo de entrada (CUST) en el que puede entrar el número de cliente. En la
pantalla en la que se va a entrar el número de cliente, aparecerán cinco caracteres
de subrayado debajo del campo de entrada CUST. El mensaje de error:
Número de cliente no encontrado
también se incluye en este formato de registro. Este mensaje se visualiza si el
programa ACTIVA el indicador 99. Además, este formato de registro define una
tecla de función que se puede pulsar para finalizar el programa. Cuando se pulsa
la tecla de función F3, el indicador 15 se ACTIVA en el programa COBOL. Este
indicador se utiliza para finalizar el programa.

El formato de registro CUSFLDS contiene las constantes siguientes:


Ÿ Nombre
Ÿ Dirección
Ÿ Ciudad
Ÿ Provincia
Ÿ Código Postal
Ÿ Saldo C/C.
Estas constantes identifican los campos a grabar fuera del programa. Este formato
de registro también describe los campos que corresponden a estas constantes.
Todos estos campos se describen como campos de salida (espacio en blanco en
la posición 38) debido a que los rellena el programa; no entre ningún dato en estos
campos. Para entrar otro nombre de cliente, pulse Intro en respuesta a este
registro. Observe que el registro CUSFLDS recubre el registro CUSPMT. Por lo
tanto, cuando el registro CUSFLDS se graba en la pantalla, el registro CUSPMT
permanece en pantalla.

Además de la descripción de constantes, campos y atributos para la pantalla, los


formatos de registro también definen los números de líneas y las posiciones hori-
zontales en las que se van a visualizar las constantes y campos.
Nota: Los atributos de campo se definen en un archivo físico (CUSMSTP) utili-
zado a efectos de referencia de campos, en lugar de hacerlo en las DDS
para el archivo de pantalla. Por ejemplo, EDTCDE(J) se define en
CUSMSTP para el campo ARBAL.

Capítulo 8. Archivos Transacción 211


G X 2 1 - 9 8 9 1 - 0 U M / 0 5 0 *
A S / 4 0 0 E S P E C I F I C A C I O N E S D E D E S C R I P C I O N D E D AT O S Impreso en España
International Business Machines
*El número de hojas por área de relleno puede variar ligeramente.

Archivo Signo Descripción Página de


Instrucciones

de Grabación
Programador Fecha Tecla

(/b / R / H / J / K / S / O )
Condicionamiento

Datos/Desplazamiento Teclado

(b/O /I/B/H/M/N/P)
Ubicación
(A/O/*)

Espec

Nombre Condición
Formula rio

And/Or/Coment.

Nom bre Longitud Funciones

Referencia (R)
Nombre

Nú mero d e

Utilización
Posiciones
Secuencia
Reservado

D ecimales
Indicador

Indicador

Indicador
de

No (N)

No (N)
No (N)

Línea P o s
Tipo

Tipo

Tipo
1 2 3 4 5 6 7 8 9 10 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0

A * * F I S I CO CU SMS T P A R C H I VO MA E S T R O D E CL I E N T E S

A R CU SMS T T E X T ( ' R EG I S T RO D E CA B E C E R A D E P E D I DO S ' )

A CU S T 5 T E X T ( ' N UME R O D E C L I E N T E ' )

A N AM E 2 5 T E X T ( ' N OM B R E D E C L I E N T E ' )

A ADD R 2 0 / T E X T ( ' D I R E CC I ON D E C L I E N T E ' )


/
A C I T Y 2 0 T E X T ( ' C I U D AD D E C L I E N T E ' )

A S T A T E 2 T E X T ( ' P R OV I NC I A ' )

A Z I P 5 0 0 / / T E X T ( ' C O D I GO POS T A L ' )

A S R H C OD 6 T E X T ( ' C O D I GO B U S QU E DA N UM C L I E N T E ' )

A CU S T Y P 1 0 0 / / T E X T ( ' T I PO C L I E N T E 1 = GO B 2 = P L AN +

A 3 = B U S 4 = P V T 5 =O T ' )

A AR B A L 8 0 2 / T E X T ( ' S A L DO CU E N T A S P OR CO B R A R ' )

A OR D B A L 8 0 2 / T E X T ( ' I MP OR T E A / R E N ARCH P E D I DO S ' )

A L S T AM T 8 0 2 / T E X T ( ' U L T I MO I MP OR T E P AG A D O E N A / R ' )

A L S T DA T 6 0 0 / / T E X T ( ' U L T I MA F E CHA P AG A D A E N A / R ' )

A CRD L M T 8 0 2 / T E X T ( ' L I M I T E CR E D I T O C L I E N T E ' )

A S L S Y R 1 0 0 /
2 / T E X T ( ' V E N T A S C L I E N T E E S T E A ÑO ' )

A S L S L Y R 1 0 0 /
2 / T E X T ( ' V E N T A S C L I E N T E A ÑO P A S ADO ' )

A K CU S T

Figura 69. Especificaciones de Descripción de Datos para un Formato de Registro CUSMST

Las especificaciones de descripción de datos (DDS) para el archivo de base de


datos que utiliza este programa describen un formato de registro: CUSMST. Se
describe cada campo en el formato de registro, y el campo CUST se identifica
como el campo de clave para el formato de registro.

212 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Listado Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ððð1ðð IDENTIFICATION DIVISION. ð1/22/94
2 ððð2ðð PROGRAM-ID. XMPLE766. ð3/22/94
ððð3ðð\ EJEMPLO PROG. DE CONSULTA TRANSACTION QUE UTILIZA 1 DISP. DE PANT. ð1/22/94
3 ððð4ðð AUTHOR. PROGRAMMER NAME. ð1/22/94
4 ððð5ðð INSTALLATION. TORONTO COBOL DEVELOPMENT CENTRE. ð1/22/94
5 ððð6ðð DATE-WRITTEN. 12/21/88. ð1/22/94
6 ðððð7ð DATE-COMPILED. ð5/24/94 13:42:5ð .
7 ððð8ðð ENVIRONMENT DIVISION. ð1/22/94
8 ððð9ðð CONFIGURATION SECTION. ð1/22/94
9 ðð1ððð SOURCE-COMPUTER. IBM-AS4ðð. ð1/22/94
1ð ðð11ðð OBJECT-COMPUTER. IBM-AS4ðð. ð1/22/94
11 ðð12ðð INPUT-OUTPUT SECTION. ð1/22/94
12 ðð13ðð FILE-CONTROL. ð1/22/94
13 ðð14ðð SELECT CUST-DISPLAY ð1/22/94
14 ðð15ðð ASSIGN TO WORKSTATION-CUSMINQ ð1/22/94
15 ðð16ðð ORGANIZATION IS TRANSACTION ð1/22/94
16 ðð17ðð CONTROL-AREA IS WS-CONTROL. ð1/22/94
17 ðð18ðð SELECT CUST-MASTER ð1/22/94
18 ðð19ðð ASSIGN TO DATABASE-CUSMSTP ð1/22/94
19 ðð2ððð ORGANIZATION IS INDEXED ð1/22/94
2ð ðð21ðð ACCESS IS RANDOM ð1/22/94
21 ðð22ðð RECORD KEY IS CUST OF CUSMST ð1/22/94
22 ðð23ðð FILE STATUS IS CM-STATUS. ð1/22/94
23 ðð24ðð DATA DIVISION. ð1/22/94
24 ðð25ðð FILE SECTION. ð1/22/94
25 ðð26ðð FD CUST-DISPLAY ð1/22/94
26 ðð27ðð LABEL RECORDS ARE OMITTED. ð1/22/94
27 ðð28ðð ð1 DISP-REC. ð1/22/94
28 ðð29ðð COPY DDS-ALL-FORMATS OF CUSMINQ. ð1/22/94
29 +ððððð1 ð5 CUSMINQ-RECORD PIC X(8ð). <-ALL-FMTS
+ððððð2\ FORMATO ENTRADA:CUSPMT DESDE ARCHIVO CUSMINQ DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ððððð3\ SOLICITUD CLIENTE <-ALL-FMTS
3ð +ððððð4 ð5 CUSPMT-I REDEFINES CUSMINQ-RECORD. <-ALL-FMTS
31 +ððððð5 ð6 CUSPMT-I-INDIC. <-ALL-FMTS
32 +ððððð6 ð7 IN15 PIC 1 INDIC 15. <-ALL-FMTS
+ððððð7\ FIN DE PROGRAMA <-ALL-FMTS
33 +ððððð8 ð7 IN99 PIC 1 INDIC 99. <-ALL-FMTS
+ððððð9\ NÚMERO CLIENTE NO HALLADO, PULSAR REST, EL <-ALL-FMTS
34 +ðððð1ð ð6 CUST PIC X(5). <-ALL-FMTS
+ðððð11\ NÚMERO CLIENTE <-ALL-FMTS
+ðððð12\FORMATO SALIDA:CUSPMT DESDE ARCHIVO CUSMINQ DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ðððð13\ SOLICITUD CLIENTE <-ALL-FMTS
35 +ðððð14 ð5 CUSPMT-O REDEFINES CUSMINQ-RECORD. <-ALL-FMTS
36 +ðððð15 ð6 CUSPMT-O-INDIC. <-ALL-FMTS
37 +ðððð16 ð7 IN99 PIC 1 INDIC 99. <-ALL-FMTS
+ðððð17\ NÚMERO CLIENTE NO HALLADO, PULSAR REST, EL <-ALL-FMTS
+ðððð18\ FORMATO ENTRADA:CUSFLDS DESDE ARCHIVO CUSMINQ DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ðððð19\ PANTALLA CLIENTE <-ALL-FMTS
38 +ðððð2ð ð5 CUSFLDS-I REDEFINES CUSMINQ-RECORD. <-ALL-FMTS
39 +ðððð21 ð6 CUSFLDS-I-INDIC. <-ALL-FMTS
4ð +ðððð22 ð7 IN15 PIC 1 INDIC 15. <-ALL-FMTS
+ðððð23\ FIN DE PROGRAMA <-ALL-FMTS
+ðððð24\FORMATO SALIDA:CUSFLDS DESDE ARCHIVO CUSMINQ DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ðððð25\ PANTALLA CLIENTE <-ALL-FMTS
41 +ðððð26 ð5 CUSFLDS-O REDEFINES CUSMINQ-RECORD. <-ALL-FMTS
42 +ðððð27 ð6 NAME PIC X(25). <-ALL-FMTS
+ðððð28\ NOMBRE CLIENTE <-ALL-FMTS
43 +ðððð29 ð6 ADDR PIC X(2ð). <-ALL-FMTS
+ðððð3ð\ DIRECCIÓN CLIENTE <-ALL-FMTS
44 +ðððð31 ð6 CITY PIC X(2ð). <-ALL-FMTS
+ðððð32\ CIUDAD CLIENTE <-ALL-FMTS
45 +ðððð33 ð6 STATE PIC X(2). <-ALL-FMTS
+ðððð34\ PROVINCIA <-ALL-FMTS
46 +ðððð35 ð6 ZIP PIC S9(5). <-ALL-FMTS
+ðððð36\ CÓDIGO POSTAL <-ALL-FMTS
47 +ðððð37 ð6 ARBAL PIC S9(6)V9(2). <-ALL-FMTS
+ðððð38\ SALDO CUENTAS PEND <-ALL-FMTS
ðð3ððð
48 ðð31ðð FD CUST-MASTER
49 ðð32ðð LABEL RECORDS ARE STANDARD.
5ð ðð33ðð ð1 CUST-REC.
51 ðð34ðð COPY DDS-CUSMST OF CUSMSTP.
+ððððð1\ FORMATO E-S:CUSMST DESDE CUSMSTP DE BIBLIOTECA XMPLIB CUSMST

Figura 70 (Parte 1 de 2). Listado Fuente de un Programa de Consulta TRANSACTION que Utiliza un Solo Disposi-
tivo de Pantalla

Capítulo 8. Archivos Transacción 213


5763CB1 V3RðM5 Listado Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
+ððððð2\ REGISTRO MAESTRO CLIENTE CUSMST
+ððððð3\DEFINICIONES CLAVE PARA FORMATO DE REGISTRO CUSMST CUSMST
+ððððð4\ NÚMERO NOMBRE RECUPERACIÓN TIPO SECALT CUSMST
+ððððð5\ ððð1 CUST ASCENDENTE AN NO CUSMST
52 +ððððð6 ð5 CUSMST. CUSMST
53 +ððððð7 ð6 CUST PIC X(5). CUSMST
+ððððð8\ NÚMERO CLIENTE CUSMST
54 +ððððð9 ð6 NAME PIC X(25). CUSMST
+ðððð1ð\ NOMBRE CLIENTE CUSMST
55 +ðððð11 ð6 ADDR PIC X(2ð). CUSMST
+ðððð12\ DIRECCIÓN CLIENTE CUSMST
56 +ðððð13 ð6 CITY PIC X(2ð). CUSMST
+ðððð14\ CIUDAD CLIENTE CUSMST
57 +ðððð15 ð6 STATE PIC X(2). CUSMST
+ðððð16\ PROVINCIA CUSMST
58 +ðððð17 ð6 ZIP PIC S9(5) COMP-3. CUSMST
+ðððð18\ CÓDIGO POSTAL CUSMST
59 +ðððð19 ð6 SRHCOD PIC X(6). CUSMST
+ðððð2ð\ CÓDIGO BÚSQUEDA NÚMERO CLIENTE CUSMST
6ð +ðððð21 ð6 CUSTYP PIC S9(1) COMP-3. CUSMST
+ðððð22\ TIPO CLIENTE 1=GOB 2=PLA 3=NEG 4=FAB 5=OTR CUSMST
61 +ðððð23 ð6 ARBAL PIC S9(6)V9(2) COMP-3. CUSMST
+ðððð24\ SALDO CUENTAS PEND CUSMST
62 +ðððð25 ð6 ORDBAL PIC S9(6)V9(2) COMP-3. CUSMST
+ðððð26\ CANTIDAD C/C EN ARCH. PEDIDOS CUSMST
63 +ðððð27 ð6 LSTAMT PIC S9(6)V9(2) COMP-3. CUSMST
+ðððð28\ ULTIMA CANTIDAD PAGADA EN C/C CUSMST
64 +ðððð29 ð6 LSTDAT PIC S9(6) COMP-3. CUSMST
+ðððð3ð\ ULTIMA FECHA PAGADA EN C/C CUSMST
65 +ðððð31 ð6 CRDLMT PIC S9(6)V9(2) COMP-3. CUSMST
+ðððð32\ LÍMITE CRÉDITO CLIENTE CUSMST
66 +ðððð33 ð6 SLSYR PIC S9(8)V9(2) COMP-3. CUSMST
+ðððð34\ VENTAS CLIENTE ESTE AÑO CUSMST
67 +ðððð35 ð6 SLSLYR PIC S9(8)V9(2) COMP-3. CUSMST
+ðððð36\ VENTAS CLIENTE AÑO PASADO CUSMST
ðð35ðð
68 ðð36ðð WORKING-STORAGE SECTION.
69 ðð37ðð ð1 ONE PIC 1 VALUE B"1".
7ð ðð38ðð ð1 CM-STATUS PIC X(2).
71 ðð39ðð ð1 WS-CONTROL.
72 ðð4ððð ð2 WS-IND PIC X(2).
73 ðð41ðð ð2 WS-FORMAT PIC X(1ð).
74 ðð42ðð PROCEDURE DIVISION.
ðð43ðð BEGIN.
75 ðð44ðð OPEN I-O CUST-DISPLAY, INPUT CUST-MASTER.
76 ðð45ðð MOVE ZERO TO IN99 OF CUSPMT-O.
ðð46ðð LOOP.
77 ðð47ðð WRITE DISP-REC FORMAT IS "CUSPMT".
78 ðð48ðð READ CUST-DISPLAY RECORD.
79 ðð49ðð IF IN15 OF CUSPMT-I
ðð5ððð IS EQUAL TO ONE
8ð ðð51ðð THEN GO TO FINIS.
81 ðð52ðð MOVE CUST OF CUSPMT-I TO CUST OF CUSMST.
82 ðð53ðð READ CUST-MASTER RECORD.
83 ðð54ðð IF CM-STATUS IS NOT EQUAL "ðð" THEN
84 ðð55ðð MOVE ONE TO IN99 OF CUSPMT-O, GO TO LOOP.
86 ðð56ðð MOVE CORRESPONDING CUSMST TO CUSFLDS-O.
87 ðð57ðð WRITE DISP-REC FORMAT IS "CUSFLDS".
88 ðð58ðð READ CUST-DISPLAY RECORD.
89 ðð59ðð IF IN15 OF CUSFLDS-I
ðð6ððð IS EQUAL TO ONE
9ð ðð61ðð THEN GO TO FINIS.
91 ðð62ðð MOVE ZERO TO IN99 OF CUSPMT-O.
92 ðð63ðð GO TO LOOP.
ðð64ðð FINIS.
93 ðð65ðð CLOSE CUST-DISPLAY, CUST-MASTER.
ðð66ðð RETURN-TO-CALLER.
94 ðð67ðð EXIT PROGRAM.
\ \ \ \ \ F I N D E F U E N T E \ \ \ \ \

Figura 70 (Parte 2 de 2). Listado Fuente de un Programa de Consulta TRANSACTION que Utiliza un Solo Disposi-
tivo de Pantalla

El listado fuente para este programa de ejemplo se muestra aquí en su totalidad.


En especial, observe las entradas FILE-CONTROL y FD y las estructuras de datos
generadas por las instrucciones COPY de Formato 2.

214 COBOL/400 Guía del usuario


La operación WRITE en la instrucción 77 escribe el formato CUSPMT en la pan-
talla. Este registro solicita que el usuario entre un número de cliente. Si entra un
número de cliente y pulsa Intro, entonces la operación READ lee el registro de
nuevo en el programa.

La operación READ en la instrucción 82 utiliza el campo de número de cliente


(CUST) para recuperar el registro CUSMST correspondiente del archivo
CUSMSTP. Si no se encuentra ningún registro en el archivo CUSMSTP, el indi-
cador 99 se activa. La operación GO TO en la instrucción 84, que se ejecuta
cuando se activa el indicador 99, provoca que el programa se bifurque hacia el
comienzo. El mensaje:
Número cliente no hallado
se visualiza cuando se escribe el formato, porque está condicionado por el indi-
cador 99 en las DDS para el archivo. Al recibir este mensaje, el teclado se
bloquea. Debe pulsar la tecla Reset en respuesta a ese mensaje para desblo-
quear el teclado. El usuario puede entonces entrar otro número de cliente.

Si la operación READ recupera un registro del archivo CUSMSTP, la operación


WRITE escribe el registro CUSFLDS en la estación de trabajo de la pantalla. Este
registro contiene el nombre de cliente, la dirección y el saldo de cuentas por
cobrar.

Puede entonces pulsar Intro, y el programa se bifurca hacia el comienzo. Puede


introducir otro número de cliente o finalizar el programa. Para finalizar el pro-
grama, pulse F3, que activa el indicador 15 en el programa.

Cuando se activa el indicador 15, el programa cierra todos los archivos y procesa
la instrucción EXIT PROGRAM. El programa devuelve el control a la persona que
llamó al programa COBOL.

Esta es la pantalla inicial grabada por la operación WRITE en la instrucción 77:

à ð
Consulta Maestro de Clientes

Número Cliente ________

Utilice F3 para finalizar programa, utilice la tecla Intro para regresar a


pantalla de solicitud

Esta pantalla aparece si se encuentra un registro en el archivo CUSMSTP para el


número de cliente entrado en respuesta a la primera pantalla:

Capítulo 8. Archivos Transacción 215


à ð
Consulta Maestro de Clientes

Número Cliente 1ððð

Utilice F3 para finalizar programa, utilice la tecla Intro para regresar a


pantalla de solicitud

Nombre EXAMPLE WHOLESALERS LTD.


Dirección ANYWHERE STREET
Ciudad ACITY
Provincia IL Cód. Postal 12345
Saldo C/C 137.ð2

Esta pantalla aparece si el archivo CUSMSTP no contiene un registro para el


número de cliente entrado en respuesta a la primera pantalla:

à ð
Consulta Maestro de Clientes

Número Cliente

Utilice F3 para finalizar programa, utilice la tecla Intro para regresar a


pantalla de solicitud

No encontrado número cliente, pulsar Reset, luego entrar número válido

Programas de Consulta de Pedidos que utilizan Subarchivos


La Figura 72 en la página 220 muestra un ejemplo de un programa de consulta de
pedidos, XMPLE773, que utiliza subarchivos. Se muestran asimismo las DDS aso-
ciadas, excepto las DDS del archivo maestro de clientes, CUSMSTP. Consulte la
Figura 69 en la página 212 para las DDS de CUSMSTP.

XMPLE773 visualiza todos los registros de detalle del pedido para el número de
pedido solicitado. El programa solicita al usuario que entre el número de pedido
que debe revisarse. El número de pedido se comprueba con el archivo de cabe-
cera de pedido, ORDHDRP. Si existe el número de pedido, el número de cliente
accedido desde el archivo de cabecera de pedido se comprueba con el archivo
maestro de clientes, CUSMSTP. Se leen y se graban en el subarchivo todos los
registros de detalle de pedido en ORDDTLP para el pedido solicitado. Se procesa
una grabación para el formato de registro de control de subarchivo, y los registros
de detalle de pedido en el subarchivo se visualizan en la pantalla para que los
revise el usuario. El programa finaliza pulsando F12.

216 COBOL/400 Guía del usuario


GX21-9891-0 UM/050*
A S / 4 0 0 E S P E C I F I C A C I O N E S D E D E S C R I P C I O N D E D AT O S Impreso en España
International Business Machines
*El número de hojas por área de relleno puede variar ligeramente.

Archivo Signo Descripción Página de


Instrucciones
de Grabación
Programador Fecha Tecla

T i p o N o m b r e o E s p e c (/b / R / H / J / K / S / O )
Condicionamiento

Tipo Datos/Desplazamiento Teclado


Ubicación

U t i l i z a c/i ó n ( b / O / I / B / H / M / N / P )
And/Or/Com ent. (A/O/*)

Nombre Condición
Tipo de Formula rio

Nom bre Longitud Funciones

Referencia (R)
Nú mero d e

Posiciones
Secuencia
Reservado

D ecimales
Indicador

Indicador

Indicador
No (N)

No (N)
No (N)

Línea Pos

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80

A * * P H Y S I CA L OR DD T L P A R C H I VO DE DE TAL L E DE P E D I DO
A T E X T ( ' U B I C AC I ON A L MA C E N ' )
A *
A R OR DD T L T E X T ( ' R EG I S T RO DE TAL L E P E D I DO ' )
A *
A CU S T 5 CH E CK ( MF )
A CO L H D G ( ' C L I E N T E ' ' N UME R O ' )
A *
A OR D E R N 5 /0 CO L H D G ( ' P E D I D O ' ' N UME R O ' )
A *
A L I N N UM 3 /0
A CO L H D G ( ' L I N E A ' ' NO ' )
A T E X T ( ' N UM L I NEA DE L I NEA EN P E D I DO ' +
A )
A *
A I T EM 5 /0 / )
CH E CK ( M1 0
A CO L H D G ( ' I T E M ' ' N UME R O ' )
A Q T YOR D 3 /0
A CO L H D G ( ' C A N T I D A D ' ' P E D I DA ' )
A T E X T ( ' CAN T I D AD P ED I DA ' )
A *
A D E SCR P 3 /0 CO L H D G ( ' D E S C R I P C I ON I T EM ' )
A *
A P R I CE 6 2 CM P ( G T / )
0
A CO L H D G ( ' P R E C I O ' )
A T E X T ( ' PR EC I O VENTA ' )
A E D T CD E ( J )
A E X T ENS 8 2 CO L H D G ( ' E X T E N S I ON ' )
A T E X T ( ' CA L CU L O I MP OR T E DE PR EC I O X+
A Q T Y OR D ' )
A *
A W H S L OC 3 CH E CK ( MF )
A CO L H D G ( ' B I N ' ' NO . ' )
A *
A OR DD A T 6 /0 T E X T ( ' I N T R OD U C I D O E L P E D I DO+
A DE F E CHA ' )
A CU S T Y P 1 /0 R A NG E ( 1 5 )
A CO L H D G ( ' C L I E N ' ' T I PO ' )
A T E X T ( ' T I PO CL I EN T E 1 = GO B 2 = P L AN +
A 3=B U S 4=PV T 5 =O T ' )
A *
A S TA T E 2 CH E CK ( MF )
A CO L H D G ( ' P R O V I NC I A ' )
A *
A *
A AC T M T H 2 /0 CO L H D G ( ' M E S ' ' CO N T ' )
A T E X T ( ' ME S CON T A B L E DE VEN TA ' )
A *
A AC T Y R 2 /0 CO L H D G ( ' A ÑO ' ' CO N T ' )
A T E X T ( ' A ÑO CON T A B L E DE VEN TA ' )
A K OR D E R N
A K L I N N UM
A

Figura 71 (Parte 1 de 3). Especificaciones de Descripción de Datos para un Programa de Consulta de Pedidos

Capítulo 8. Archivos Transacción 217


AS /400 E S P EC IF ICA C IO N E S D E D E S C RIP CIO N D E D ATO S GX21-9891-0 UM/050*
Impreso en España
International Business Machines
*E l núm ero de hojas por áre a de relle no puede variar ligeram ente .

Ar c hiv o Signo Descripción Pág ina de


Instrucciones
de Gra bación
Programador Fec ha Tecla

Tipo Datos/Desplazamiento Teclado


T i p o N o m b r e o E s p e c (/b / R / H / J / K / S / O )
Condicionamiento

Ub icación

U t i l i z a c/i ó n ( b / O / I / B / H / M / N / P )
And /Or/Coment. (A/O/*)

Nombre Condición
Tipo de Formulario

N o mbr e Lo ngit ud Funcione s

Referencia ( R)
Nú mero de
Secuencia

Posiciones
Reservado

D ecimales
Indicador

Indicador

Indicador
No (N)

No (N)

No (N)

Línea Pos

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80

A* * /
O R D I N QD R E V I S I ON DE P E D I DO E X I S T ENT E
A R S UB 1 S F L
A I T EM 5 /0 1 /0 2 T E X T ( ' N UM E R O AR T I CU L O ' )
A Q T Y OR D 3 /0 1 /0 9 T E X T ( ' CA N T I D AD P ED I DA ' )
A D E SCR P /
30 1 /0 1 4 T E X T ( ' D E S C R I P C I ON I T EM ' )
A P R I CE 6 2 1 /0 4 6 T E X T ( ' PR EC I O VENTA ' )
A E X T ENS 8 2 1 /0 5 6 E D T CD E ( J )
A T E X T ( ' CA L CU L O V A L OR DE +
A P E D I DO Q T Y OR D X ' )
A R S UBC T L 1 S F LCT L ( S UB 1 )
A 58 S F LCL R
A 57 S F LDSP
A N5 8 S F L D S PC T L
A S F L S I Z ( 57 )
A S F L P AG ( 1 4 )
A 57 S F L E ND
A OV E R L A Y
A L OC K
A N4 5
AON 4 7 ROL L UP ( 9 7 ' CO N T I N U A R V I S UAL I Z . ' )
A CA 1 2 ( 9 8 ' F I N DE P R OG R AM A ' )
A S E TOF F ( 5 7 ' S U B A R C H I VO DE P AN T A L L A ' )
A S E TOF F ( 5 8 ' D E S AC = V I S U . S UBC T L 1 AC = +
A B OR R A R S U B A R C H I VO ' )
A 1 2 ' CON S U L T A P E D I DO E X I S T ENT E '
A 3 2 ' P E D I DO '
A OR D E R N 5Y /0 B 3 8 T E X T ( ' N UM E R O P E D I DO ' )
A 6 1 E R R M S G ( ' N UM P E D I DO NO E NCON T R AD O ' 6 1 )
A 47 E R RMSG ( ' S I N L I NEA P AR A P E D I DO ' 4 7 )
A 62 E R R M S G ( ' NO S E E NCON T R O R EG I S T RO DE +
A CL I EN T E P AR A E S T E P E D I DO ' 6 2 )
A 4 2 ' F E CHA '
A OR D D A T 6 /0 4 7 T E X T ( ' I N T R OD U C I D O P E D I DO DE F E CHA ' )
A 5 2 ' CL I # '
A CU S T 5 5 9 T E X T ( ' N UM E R O DE CL I ENT E ' )
A N AM E 25 3 1 6 T E X T ( ' N OM B R E DE CL I ENT E ' )
A ADD R 20 4 1 6 T E X T ( ' D I R E CC I ON DE CL I E N T E ' )
A C I T Y 20 5 1 6 T E X T ( ' C I UD AD DE CL I ENT E ' )
A S TAT E 2 6 1 6 T E X T ( ' P R OV I NC I A DE CL I E N T E ' )
A Z I P 5 /0 6 3 1 T E X T ( ' C OD I GO POS T AL ' )
A 1 4 4 ' TOTAL '
A O R D AM T 8 2 1 5 1 T E X T ( ' CA N T I D AD TOTAL DE L P E D I DO EN+
A DO L A R E S ' )
A 2 4 4 ' P R OV I NC I A '
A S T S OR D 12 2 5 1
A 3 4 4 ' AB I E R TO '
A S T S OP N 12 3 5 1
A 4 4 4 ' P E D I DO DE CL I EN T E '
A C U S OR D 15 4 5 9 T E X T ( ' N UM E R O DE P E D I DO DE C OM +
A PRA DE CL I ENT E ' )
A 5 4 4 ' ME D I O E NV I O '
A S HP V I A 15 5 5 9 T E X T ( ' I N S T R U CC I ON E S DE E NV I O ' )
A 6 4 4 ' F E CHA I MP R E S O '
A P R T DA T 6 /0 6 5 7 T E X T ( ' I MP R E S O P E D I DO DE F ECHA ' )
A 7 2 9 ' F AC T U R A '
A I N V N UM 5 /0 7 3 8 T E X T ( ' N UM E R O DE F AC T U R A ' )
A 7 6 4 ' ME S '
A AC T M T H 2 /0 7 6 8 T E X T ( ' ME S CON T A B L E DE VENTA ' )
A 7 7 2 ' A ÑO '
A AC T Y R 2 /0 7 7 7 T E X T ( ' A ÑO CON T A B L E DE VENTA ' )
A 8 2 ' I T EM '
A 8 8 ' CAN T '
A 8 1 4 ' D E S C R I P C I ON I T EM '
A 8 4 6 ' PR EC I O '
A 8 5 5 ' CA L CU L O '

Figura 71 (Parte 2 de 3). Especificaciones de Descripción de Datos para un Programa de Consulta de Pedidos

218 COBOL/400 Guía del usuario


A S /4 00 E S P E CI FIC AC IO N E S D E DE S CR IP C IO N D E D ATO S GX21-9891-0 UM/050*
Impreso en España
International Business Machines
*El núm e ro de hojas por área de re lleno puede variar lige ram ente .

Archivo Signo Descripción Página de


Instrucciones
de Grabación
Programador Fecha Tecla

T i p o N o m b r e o E s p e c (/b / R / H / J / K / S / O )
Condicionamiento

Tipo Datos/Desp lazamien to Teclado


Ubicación

U t i l i z a c/i ó n ( b / O / I / B / H / M / N / P )
And/Or/Coment. (A/O/*)

Nombre Co ndición
Tipo de Formula rio

N om b re Longitud Funciones

Referencia (R)
Nú mero de
Secuencia

Posiciones
Reservado

D ecimales
Indicador

Indicador

Indicador
No (N)

No (N)
No (N)

Línea Pos

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80

A* * F I S I CO OR D HD R P A R C H I VO DE CAB E C E R A DE P E D I DO
A R OR D HD R T E X T ( ' R EG I S T RO CA B E C E R A P E D I DO ' )
A CU S T 5 T E X T ( ' N UM E R O DE CL I EN T E ' )
A OR D E R N 5 /0 /0 T E X T ( ' N UM E R O DE P E D I DO ' )
A OR DD A T 6 /0 /0 T E X T ( ' F E CHA I N T R OD U C C I O N P E D I DO ' )
A C U S OR D 15 T E X T ( ' N UM E R O DE P E D I DO COM P R A +
A DE CL I EN T E ' )
A S HPV I A 15 T E X T ( ' I N S T R U CC I ON E S DE E NV I O ' )
A OR D S T S 1 /0 /0 T E X T ( ' E S T ADO P E D I DO 1PCS 2CN T 3CHK +
A 4RDY 5PR T 6 P CK ' )
A O P R N AM 1 /0 T E X T ( ' OP E R ADOR QU E I N T R OD U J O +
A P ED ' )
A O R D AM T 8 /0 2 T E X T ( ' I MP OR T E DE P E D I DO+
A EN DOL AR E S ' )
A CU S T Y P 1 /0 /0 T E X T ( ' T I PO CL I ENT E 1 = GO V 2 = S CH +
A 3=BUS 4=PV T 5 =O T ' )
A I N V N UM 5 /0 /0 T E X T ( ' N UM E R O DE F AC T U R A ' )
A P R T DA T 6 /0 /0 T E X T ( ' F E CHA I MP R E S I ON DE P E D I DO ' )
A OP N S T S 1 /0 /0 T E X T ( ' E S T AP E R T UR A P ED I D 1 =AB R I R +
A 2 =C E R R AR 3 = C A NC E L A R ' )
A TOT L I N 3 /0 /0 T E X T ( ' TOTAL I T EMS L I NEA DE P E D I DO ' )
A AC T M T H 2 /0 /0 T E X T ( ' ME S CON T A B L E DE VENTA ' )
A AC T Y R 2 /0 /0 T E X T ( ' A ÑO CON T A B L E DE VENTA ' )
A S TAT E 2 T E X T ( ' P R OV I NC I A ' )
A AM P A I D 8 /0 2 T E X T ( ' I MP OR T E TOTAL P AG A D O ' )
A K OR D E R N
A
A
A
A
A
A
A
A
A

Figura 71 (Parte 3 de 3). Especificaciones de Descripción de Datos para un Programa de Consulta de Pedidos

Capítulo 8. Archivos Transacción 219


5763CB1 V3RðM5 Listado Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ððð1ðð IDENTIFICATION DIVISION. ð1/25/94
2 ððð2ðð PROGRAM-ID. XMPLE773. ð3/22/94
ððð3ðð\ EJEMPLO PROG. DE CONSULTA DE PEDIDOS ð3/22/94
3 ððð4ðð AUTHOR. PROGRAMMER NAME. ð1/25/94
4 ððð5ðð INSTALLATION. TORONTO COBOL DEVELOPMENT CENTRE. ð1/25/94
5 ððð6ðð DATE-WRITTEN. 12/22/88. ð1/25/94
8 ðððð8ð DATE-COMPILED. ð5/24/94 13:29:54 . ð3/ð1/94
7 ððð8ðð ENVIRONMENT DIVISION. ð1/25/94
8 ððð9ðð CONFIGURATION SECTION. ð1/25/94
9 ðð1ððð SOURCE-COMPUTER. IBM-AS4ðð. ð1/25/94
1ð ðð11ðð OBJECT-COMPUTER. IBM-AS4ðð. ð1/25/94
11 ðð12ðð INPUT-OUTPUT SECTION. ð1/25/94
12 ðð13ðð FILE-CONTROL. ð1/25/94
13 ðð14ðð SELECT ORDER-HEADER-FILE ð1/25/94
14 ðð15ðð ASSIGN TO DATABASE-ORDHDRP ð3/21/94
15 ðð16ðð ORGANIZATION IS INDEXED ð1/25/94
16 ðð17ðð ACCESS MODE IS RANDOM ð1/26/94
17 ðð18ðð RECORD KEY IS ORDERN OF ORDER-HEADER-RECORD. ð1/26/94
18 ðð19ðð SELECT ORDER-DETAIL-FILE ð1/25/94
19 ðð2ððð ASSIGN TO DATABASE-ORDDTLP ð3/21/94
2ð ðð21ðð ORGANIZATION IS INDEXED ð1/25/94
21 ðð22ðð ACCESS IS DYNAMIC ð1/25/94
22 ðð23ðð RECORD KEY IS ORDER-DETAIL-RECORD-KEY. ð1/27/94
23 ðð24ðð SELECT CUSTOMER-MASTER-FILE ð1/25/94
24 ðð25ðð ASSIGN TO DATABASE-CUSMSTP ð1/25/94
25 ðð26ðð ORGANIZATION IS INDEXED ð1/25/94
26 ðð27ðð ACCESS IS RANDOM ð1/25/94
27 ðð28ðð RECORD KEY IS CUST OF CUSTOMER-MASTER-RECORD. ð1/26/94
28 ðð29ðð SELECT EXISTING-ORDER-DISPLAY-FILE ð1/25/94
29 ðð3ððð ASSIGN TO WORKSTATION-ORDINQD ð3/23/94
3ð ðð31ðð ORGANIZATION IS TRANSACTION ð1/25/94
31 ðð32ðð ACCESS IS DYNAMIC ð1/25/94
32 ðð33ðð RELATIVE KEY IS SUBFILE-RECORD-NUMBER ð1/25/94
33 ðð34ðð FILE STATUS IS STATUS-CODE-ONE. ð1/25/94
34 ðð35ðð DATA DIVISION. ð1/25/94
35 ðð36ðð FILE SECTION. ð1/25/94
36 ðð37ðð FD ORDER-HEADER-FILE ð1/25/94
37 ðð38ðð LABEL RECORDS ARE STANDARD. ð1/25/94
38 ðð39ðð ð1 ORDER-HEADER-RECORD. ð1/25/94
39 ðð4ððð COPY DDS-ORDHDR OF ORDHDRP. ð3/21/94
+ððððð1\ FORMATO E-S:ORDHDR DESDE ORDHDRP DE BIBLIOTECA XMPLIB ORDHDR
+ððððð2\ REGISTRO CABECERA PEDIDO ORDHDR
+ððððð3\DEFINICIONES CLAVE PARA FORMATO DE REGISTRO ORDHDR ORDHDR
+ððððð4\ NÚMERO NOMBRE RECUPERACIÓN TIPO SECALT ORDHDR
+ððððð5\ ððð1 ORDERN ASCENDENTE SIGNO NO ORDHDR
4ð +ððððð6 ð5 ORDHDR. ORDHDR
41 +ððððð7 ð6 CUST PIC X(5). ORDHDR
+ððððð8\ NÚMERO CLIENTE ORDHDR
42 +ððððð9 ð6 ORDERN PIC S9(5) COMP-3. ORDHDR
+ðððð1ð\ NÚMERO PEDIDO ORDHDR
43 +ðððð11 ð6 ORDDAT PIC S9(6) COMP-3. ORDHDR
+ðððð12\ SE ENTRÓ FECHA PEDIDO ORDHDR
44 +ðððð13 ð6 CUSORD PIC X(15). ORDHDR
+ðððð14\ NÚMERO PEDIDO COMPRA CLIENTE ORDHDR
45 +ðððð15 ð6 SHPVIA PIC X(15). ORDHDR
+ðððð16\ INSTRUCCIONES ENVÍO ORDHDR
46 +ðððð17 ð6 ORDSTS PIC S9(1) COMP-3. ORDHDR
+ðððð18\ ESTADO PEDIDO 1PEND 2CONT 3COM 4LIS 5IMP 6ENP ORDHDR
47 +ðððð19 ð6 OPRNAM PIC X(1ð). ORDHDR
+ðððð2ð\ NOMBRE OPERADOR QUE ENTRÓ EL PEDIDO ORDHDR
48 +ðððð21 ð6 ORDAMT PIC S9(6)V9(2) COMP-3. ORDHDR
+ðððð22\ TOTAL SUMA PESETAS DEL PEDIDO ORDHDR
49 +ðððð23 ð6 CUSTYP PIC S9(1) COMP-3. ORDHDR
+ðððð24\ TIPO CLIENTE 1=GOB 2=PLA 3=NEG 4=FAB 5=OTR ORDHDR
5ð +ðððð25 ð6 INVNUM PIC S9(5) COMP-3. ORDHDR
+ðððð26\ NÚMERO FACTURA ORDHDR
51 +ðððð27 ð6 PRTDAT PIC S9(6) COMP-3. ORDHDR
+ðððð28\ FECHA IMPRESIÓN PEDIDO ORDHDR
52 +ðððð29 ð6 OPNSTS PIC S9(1) COMP-3. ORDHDR
+ðððð3ð\ EST.PEDIDO ABIERTO 1=ABIERTO 2= CERRADO 3=CANCELAD.ORDHDR
53 +ðððð31 ð6 TOTLIN PIC S9(3) COMP-3. ORDHDR
+ðððð32\ TOTAL LÍNEAS ÍTEMS EN PEDIDO ORDHDR
54 +ðððð33 ð6 ACTMTH PIC S9(2) COMP-3. ORDHDR
+ðððð34\ MES CONTABLE DE VENTA ORDHDR
55 +ðððð35 ð6 ACTYR PIC S9(2) COMP-3. ORDHDR
+ðððð36\ AÑO CONTABLE DE VENTA ORDHDR

Figura 72 (Parte 1 de 7). Ejemplo de un Programa de Consulta de Pedidos

220 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Listado Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
56 +ðððð37 ð6 STATE PIC X(2). ORDHDR
+ðððð38\ PROVINCIA ORDHDR
57 +ðððð39 ð6 AMPAID PIC S9(6)V9(2) COMP-3. ORDHDR
+ðððð4ð\ TOTAL SUMA PESETAS PAGADAS ORDHDR
ðð41ðð
58 ðð42ðð FD ORDER-DETAIL-FILE
59 ðð43ðð LABEL RECORDS ARE STANDARD.
6ð ðð44ðð ð1 ORDER-DETAIL-RECORD.
61 ðð45ðð COPY DDS-ORDDTL OF ORDDTLP.
+ððððð1\ FORMATO E-S:ORDDTL DESDE ORDDTLP DE BIBLIOTECA XMPLIB ORDDTL
+ððððð2\ REGISTRO DETALLE PEDIDO ORDDTL
+ððððð3\DEFINICIONES CLAVE PARA FORMATO DE REGISTRO ORDDTL ORDDTL
+ððððð4\ NÚMERO NOMBRE RECUPERACIÓN TIPO SECALT ORDDTL
+ððððð5\ ððð1 ORDERN ASCENDENTE SIGNO NO ORDDTL
+ððððð6\ ððð2 LINNUM ASCENDENTE SIGNO NO ORDDTL
62 +ððððð7 ð5 ORDDTL. ORDDTL
63 +ððððð8 ð6 CUST PIC X(5). ORDDTL
+ððððð9\ NÚMERO CLIENTE ORDDTL
64 +ðððð1ð ð6 ORDERN PIC S9(5) COMP-3. ORDDTL
+ðððð11\ NÚMERO PEDIDO ORDDTL
65 +ðððð12 ð6 LINNUM PIC S9(3) COMP-3. ORDDTL
+ðððð13\ NÚMERO LÍNEA DE LÍNEA DE PEDIDO ORDDTL
66 +ðððð14 ð6 ITEM PIC S9(5) COMP-3. ORDDTL
+ðððð15\ NÚMERO ÍTEM ORDDTL
67 +ðððð16 ð6 QTYORD PIC S9(3) COMP-3. ORDDTL
+ðððð17\ CANTIDAD PEDIDA ORDDTL
68 +ðððð18 ð6 DESCRP PIC X(3ð). ORDDTL
+ðððð19\ DESCRIPCIÓN ÍTEM ORDDTL
69 +ðððð2ð ð6 PRICE PIC S9(4)V9(2) COMP-3. ORDDTL
+ðððð21\ PRECIO DE VENTA ORDDTL
7ð +ðððð22 ð6 EXTENS PIC S9(6)V9(2) COMP-3. ORDDTL
+ðððð23\ VALOR CALCULADO: CANTIDAD PEDIDA X PRECIO ORDDTL
71 +ðððð24 ð6 WHSLOC PIC X(3). ORDDTL
+ðððð25\ BIN NÚM. ORDDTL
72 +ðððð26 ð6 ORDDAT PIC S9(6) COMP-3. ORDDTL
+ðððð27\ SE ENTRÓ FECHA PEDIDO ORDDTL
73 +ðððð28 ð6 CUSTYP PIC S9(1) COMP-3. ORDDTL
+ðððð29\ TIPO CLIENTE 1=GOB 2=PLA 3=NEG 4=FAB 5=OTR ORDDTL
74 +ðððð3ð ð6 STATE PIC X(2). ORDDTL
+ðððð31\ PROVINCIA ORDDTL
75 +ðððð32 ð6 ACTMTH PIC S9(2) COMP-3. ORDDTL
+ðððð33\ MES CONTABLE DE VENTA ORDDTL
76 +ðððð34 ð6 ACTYR PIC S9(2) COMP-3. ORDDTL
+ðððð35\ AÑO CONTABLE DE VENTA ORDDTL
77 ðð46ðð 66 ORDER-DETAIL-RECORD-KEY RENAMES ORDERN THRU LINNUM.
ðð47ðð
78 ðð48ðð FD CUSTOMER-MASTER-FILE
79 ðð49ðð LABEL RECORDS ARE STANDARD.
8ð ðð5ððð ð1 CUSTOMER-MASTER-RECORD.
81 ðð51ðð COPY DDS-CUSMST OF CUSMSTP.
+ððððð1\ FORMATO E-S:CUSMST DESDE CUSMSTP DE BIBLIOTECA XMPLIB CUSMST
+ððððð2\ REGISTRO MAESTRO CLIENTES CUSMST
+ððððð3\DEFINICIONES CLAVE PARA FORMATO DE REGISTRO CUSMST CUSMST
+ððððð4\ NÚMERO NOMBRE RECUPERACIÓN TIPO SECALT CUSMST
+ððððð5\ ððð1 CUST ASCENDENTE AN NO CUSMST
82 +ððððð6 ð5 CUSMST. CUSMST
83 +ððððð7 ð6 CUST PIC X(5). CUSMST
+ððððð8\ NÚMERO CLIENTE CUSMST
84 +ððððð9 ð6 NAME PIC X(25). CUSMST
+ðððð1ð\ NOMBRE CLIENTE CUSMST
85 +ðððð11 ð6 ADDR PIC X(2ð). CUSMST
+ðððð12\ DIRECCIÓN CLIENTE CUSMST
86 +ðððð13 ð6 CITY PIC X(2ð). CUSMST
+ðððð14\ CIUDAD CLIENTE CUSMST
87 +ðððð15 ð6 STATE PIC X(2). CUSMST
+ðððð16\ PROVINCIA CUSMST
88 +ðððð17 ð6 ZIP PIC S9(5) COMP-3. CUSMST
+ðððð18\ CÓDIGO POSTAL CUSMST
89 +ðððð19 ð6 SRHCOD PIC X(6). CUSMST
+ðððð2ð\ CÓDIGO BÚSQUEDA NÚMERO CLIENTE CUSMST
9ð +ðððð21 ð6 CUSTYP PIC S9(1) COMP-3. CUSMST
+ðððð22\ TIPO CLIENTE 1=GOB 2=PLA 3=NEG 4=FAB 5=OTR CUSMST
91 +ðððð23 ð6 ARBAL PIC S9(6)V9(2) COMP-3. CUSMST
+ðððð24\ SALDO CUENTAS PEND. CUSMST
92 +ðððð25 ð6 ORDBAL PIC S9(6)V9(2) COMP-3. CUSMST

Figura 72 (Parte 2 de 7). Ejemplo de un Programa de Consulta de Pedidos

Capítulo 8. Archivos Transacción 221


5763CB1 V3RðM5 Listado Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
+ðððð26\ CANTIDAD C/C EN ARCH. PEDIDOS CUSMST
93 +ðððð27 ð6 LSTAMT PIC S9(6)V9(2) COMP-3. CUSMST
+ðððð28\ ULTIMA CANTIDAD PAGADA EN C/C CUSMST
94 +ðððð29 ð6 LSTDAT PIC S9(6) COMP-3. CUSMST
+ðððð3ð\ ULTIMA FECHA PAGADA EN C/C CUSMST
95 +ðððð31 ð6 CRDLMT PIC S9(6)V9(2) COMP-3. CUSMST
+ðððð32\ LÍMITE CRÉDITO CLIENTE CUSMST
96 +ðððð33 ð6 SLSYR PIC S9(8)V9(2) COMP-3. CUSMST
+ðððð34\ VENTAS CLIENTE ESTE AÑO CUSMST
97 +ðððð35 ð6 SLSLYR PIC S9(8)V9(2) COMP-3. CUSMST
+ðððð36\ VENTAS CLIENTE AÑO PASADO CUSMST
ðð52ðð
98 ðð53ðð FD EXISTING-ORDER-DISPLAY-FILE
99 ðð54ðð LABEL RECORDS ARE OMITTED.
1ðð ðð55ðð ð1 EXISTING-ORDER-DISPLAY-RECORD.
1ð1 ðð56ðð COPY DDS-ALL-FORMATS OF ORDINQD.
1ð2 +ððððð1 ð5 ORDINQD-RECORD PIC X(171). <-ALL-FMTS
+ððððð2\ FORMATO E-S:SUB1 DESDE ARCHIVO ORDINQD DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ððððð3\ <-ALL-FMTS
1ð3 +ððððð4 ð5 SUB1 REDEFINES ORDINQD-RECORD. <-ALL-FMTS
1ð4 +ððððð5 ð6 ITEM PIC S9(5). <-ALL-FMTS
+ððððð6\ NÚMERO ÍTEM <-ALL-FMTS
1ð5 +ððððð7 ð6 QTYORD PIC S9(3). <-ALL-FMTS
+ððððð8\ CANTIDAD PEDIDA <-ALL-FMTS
1ð6 +ððððð9 ð6 DESCRP PIC X(3ð). <-ALL-FMTS
+ðððð1ð\ DESCRIPCIÓN ÍTEM <-ALL-FMTS
1ð7 +ðððð11 ð6 PRICE PIC S9(4)V9(2). <-ALL-FMTS
+ðððð12\ PRECIO DE VENTA <-ALL-FMTS
1ð8 +ðððð13 ð6 EXTENS PIC S9(6)V9(2). <-ALL-FMTS
+ðððð14\ VALOR CALCULADO: CANTIDAD PEDIDA X PRECIO <-ALL-FMTS
+ðððð15\ FORMATO ENTRADA:SUBCTL1 DESDE ARCHIVO ORDINQD DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ðððð16\ <-ALL-FMTS
1ð9 +ðððð17 ð5 SUBCTL1-I REDEFINES ORDINQD-RECORD. <-ALL-FMTS
11ð +ðððð18 ð6 SUBCTL1-I-INDIC. <-ALL-FMTS
111 +ðððð19 ð7 IN97 PIC 1 INDIC 97. <-ALL-FMTS
+ðððð2ð\ CONTINUAR VISUALIZACIÓN <-ALL-FMTS
112 +ðððð21 ð7 IN98 PIC 1 INDIC 98. <-ALL-FMTS
+ðððð22\ FIN DE PROGRAMA <-ALL-FMTS
113 +ðððð23 ð7 IN57 PIC 1 INDIC 57. <-ALL-FMTS
+ðððð24\ VISUALIZAR SUBARCHIVO <-ALL-FMTS
114 +ðððð25 ð7 IN58 PIC 1 INDIC 58. <-ALL-FMTS
+ðððð26\ DESACTIVADO=VISUALIZAR SUBCTLQ ACTIVADO=BORRAR SUBARCHIVO <-ALL-FMTS
115 +ðððð27 ð7 IN61 PIC 1 INDIC 61. <-ALL-FMTS
+ðððð28\ NO ENCONTRADO NÚMERO PEDIDO <-ALL-FMTS
116 +ðððð29 ð7 IN47 PIC 1 INDIC 47. <-ALL-FMTS
+ðððð3ð\ NO HAY LÍNEA PARA ESTE PEDIDO <-ALL-FMTS
117 +ðððð31 ð7 IN62 PIC 1 INDIC 62. <-ALL-FMTS
+ðððð32\ NO HAY REGISTRO CLIENTE <-ALL-FMTS
118 +ðððð33 ð6 ORDERN PIC S9(5). <-ALL-FMTS
+ðððð34\ NÚMERO PEDIDO <-ALL-FMTS
+ðððð35\FORMATO SALIDA:SUBCTL1 DESDE ARCHIVO ORDINQD DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ðððð36\ <-ALL-FMTS
119 +ðððð37 ð5 SUBCTL1-O REDEFINES ORDINQD-RECORD. <-ALL-FMTS
12ð +ðððð38 ð6 SUBCTL1-O-INDIC. <-ALL-FMTS
121 +ðððð39 ð7 IN58 PIC 1 INDIC 58. <-ALL-FMTS
+ðððð4ð\ DESACTIVADO=VISUALIZAR SUBCTL1 ON=BORRAR SUBARCHIVO <-ALL-FMTS
122 +ðððð41 ð7 IN57 PIC 1 INDIC 57. <-ALL-FMTS
+ðððð42\ VISUALIZAR SUBARCHIVO <-ALL-FMTS
123 +ðððð43 ð7 IN45 PIC 1 INDIC 45. <-ALL-FMTS
124 +ðððð44 ð7 IN47 PIC 1 INDIC 47. <-ALL-FMTS
+ðððð45\ NO HAY LÍNEA PARA ESTE PEDIDO <-ALL-FMTS
125 +ðððð46 ð7 IN61 PIC 1 INDIC 61. <-ALL-FMTS
+ðððð47\ NO ENCONTRADO NÚMERO PEDIDO <-ALL-FMTS
126 +ðððð48 ð7 IN62 PIC 1 INDIC 62. <-ALL-FMTS
+ðððð49\ NO HAY REGISTRO CLIENTE <-ALL-FMTS
127 +ðððð5ð ð6 ORDERN PIC S9(5). <-ALL-FMTS
+ðððð51\ NÚMERO PEDIDO <-ALL-FMTS
128 +ðððð52 ð6 ORDDAT PIC S9(6). <-ALL-FMTS
+ðððð53\ SE ENTRÓ FECHA PEDIDO <-ALL-FMTS
129 +ðððð54 ð6 CUST PIC X(5). <-ALL-FMTS
+ðððð55\ NÚMERO CLIENTE <-ALL-FMTS
13ð +ðððð56 ð6 NAME PIC X(25). <-ALL-FMTS
+ðððð57\ NOMBRE CLIENTE <-ALL-FMTS
131 +ðððð58 ð6 ADDR PIC X(2ð). <-ALL-FMTS
+ðððð59\ DIRECCIÓN CLIENTE <-ALL-FMTS
132 +ðððð6ð ð6 CITY PIC X(2ð). <-ALL-FMTS

Figura 72 (Parte 3 de 7). Ejemplo de un Programa de Consulta de Pedidos

222 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Listado Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
+ðððð61\ CIUDAD CLIENTE <-ALL-FMTS
133 +ðððð62 ð6 STATE PIC X(2). <-ALL-FMTS
+ðððð63\ PROVINCIA CLIENTE <-ALL-FMTS
134 +ðððð64 ð6 ZIP PIC S9(5). <-ALL-FMTS
+ðððð65\ CÓDIGO POSTAL <-ALL-FMTS
135 +ðððð66 ð6 ORDAMT PIC S9(6)V9(2). <-ALL-FMTS
+ðððð67\ IMPORTE TOTAL DEL PEDIDO <-ALL-FMTS
136 +ðððð68 ð6 STSORD PIC X(12). <-ALL-FMTS
137 +ðððð69 ð6 STSOPN PIC X(12). <-ALL-FMTS
138 +ðððð7ð ð6 CUSORD PIC X(15). <-ALL-FMTS
+ðððð71\ NÚMERO PEDIDO COMPRA CLIENTE <-ALL-FMTS
139 +ðððð72 ð6 SHPVIA PIC X(15). <-ALL-FMTS
+ðððð73\ INSTRUCCIONES DE ENVÍO <-ALL-FMTS
14ð +ðððð74 ð6 PRTDAT PIC S9(6). <-ALL-FMTS
+ðððð75\ FECHA IMPRESIÓN PEDIDO <-ALL-FMTS
141 +ðððð76 ð6 INVNUM PIC S9(5). <-ALL-FMTS
+ðððð77\ NÚMERO FACTURA <-ALL-FMTS
142 +ðððð78 ð6 ACTMTH PIC S9(2). <-ALL-FMTS
+ðððð79\ MES CONTABLE DE VENTA <-ALL-FMTS
143 +ðððð8ð ð6 ACTYR PIC S9(2). <-ALL-FMTS
+ðððð81\ AÑO CONTABLE DE VENTA <-ALL-FMTS
ðð57ðð
144 ðð58ðð WORKING-STORAGE SECTION.
145 ðð59ðð ð1 EXISTING-ORDER-DISPLAY-KEY.
146 ðð6ððð ð5 SUBFILE-RECORD-NUMBER PIC 9(2)
147 ðð61ðð VALUE ZERO.
ðð62ðð
148 ðð63ðð ð1 ORDER-STATUS-COMMENT-VALUES.
149 ðð64ðð ð5 FILLER PIC X(12)
15ð ðð65ðð VALUE "1-IN PROCESS".
151 ðð66ðð ð5 FILLER PIC X(12)
152 ðð67ðð VALUE "2-CONTINUED ".
153 ðð68ðð ð5 FILLER PIC X(12)
154 ðð69ðð VALUE "3-CREDIT CHK".
155 ðð7ððð ð5 FILLER PIC X(12)
156 ðð71ðð VALUE "4-READY PRT ".
157 ðð72ðð ð5 FILLER PIC X(12)
158 ðð73ðð VALUE "5-PRINTED ".
159 ðð74ðð ð5 FILLER PIC X(12)
16ð ðð75ðð VALUE "6-PICKED ".
161 ðð76ðð ð5 FILLER PIC X(12)
162 ðð77ðð VALUE "7-INVOICED ".
163 ðð78ðð ð5 FILLER PIC X(12)
164 ðð79ðð VALUE "8-INVALID ".
165 ðð8ððð ð5 FILLER PIC X(12)
166 ðð81ðð VALUE "9-CANCELED ".
ðð82ðð
167 ðð83ðð ð1 ORDER-STATUS-COMMENT-TABLE
168 ðð84ðð REDEFINES ORDER-STATUS-COMMENT-VALUES.
169 ðð85ðð ð5 ORDER-STATUS OCCURS 9 TIMES.
17ð ðð86ðð 1ð ORDER-STATUS-COMMENT PIC X(12).
ðð87ðð
171 ðð88ðð ð1 OPEN-STATUS-COMMENT-VALUES.
172 ðð89ðð ð5 FILLER PIC X(12)
173 ðð9ððð VALUE "1-OPEN ".
174 ðð91ðð ð5 FILLER PIC X(12)
175 ðð92ðð VALUE "2-CLOSED ".
176 ðð93ðð ð5 FILLER PIC X(12)
177 ðð94ðð VALUE "3-CANCELED ".
ðð95ðð
178 ðð96ðð ð1 OPEN-STATUS-COMMENT-TABLE
179 ðð97ðð REDEFINES OPEN-STATUS-COMMENT-VALUES.
18ð ðð98ðð ð5 OPEN-STATUS OCCURS 3 TIMES.
181 ðð99ðð 1ð OPEN-STATUS-COMMENT PIC X(12).
ð1ðððð
182 ð1ð1ðð ð1 ERRHDL-PARAMETERS.
183 ð1ð2ðð ð5 STATUS-CODE-ONE PIC X(2).
184 ð1ð3ðð 88 SUBFILE-IS-FULL VALUE "9M".
ð1ð4ðð
185 ð1ð5ðð ð1 ERRPGM-PARAMETERS.
186 ð1ð6ðð ð5 DISPLAY-PARAMETER PIC X(8)
187 ð1ð7ðð VALUE "ORD22ðD ".
188 ð1ð8ðð ð5 DUMMY-ONE PIC X(6)
189 ð1ð9ðð VALUE SPACES.
19ð ð11ððð ð5 DUMMY-TWO PIC X(8)
191 ð111ðð VALUE SPACES.

Figura 72 (Parte 4 de 7). Ejemplo de un Programa de Consulta de Pedidos

Capítulo 8. Archivos Transacción 223


5763CB1 V3RðM5 Listado Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
192 ð112ðð ð5 STATUS-CODE-TWO.
193 ð113ðð 1ð PRIMARY PIC X(1).
194 ð114ðð 1ð SECONDARY PIC X(1).
195 ð115ðð 1ð FILLER PIC X(5)
196 ð116ðð VALUE SPACES.
ð117ðð
197 ð118ðð ð1 SWITCH-AREA.
198 ð119ðð ð5 SWð1 PIC 1.
199 ð12ððð 88 NO-MORE-DETAIL-LINE-ITEMS VALUE B"1".
2ðð ð121ðð 88 MORE-DETAIL-LINE-ITEMS-EXIST VALUE B"ð".
2ð1 ð122ðð ð5 SWð2 PIC 1.
2ð2 ð123ðð 88 WRITE-DISPLAY VALUE B"1".
2ð3 ð124ðð 88 READ-DISPLAY VALUE B"ð".
2ð4 ð125ðð ð5 SWð3 PIC 1.
2ð5 ð126ðð 88 SUBCTL1-FORMAT VALUE B"1".
2ð6 ð127ðð 88 NOT-SUBCTL1-FORMAT VALUE B"ð".
2ð7 ð128ðð ð5 SWð4 PIC 1.
2ð8 ð129ðð 88 SUB1-FORMAT VALUE B"1".
2ð9 ð13ððð 88 NOT-SUB1-FORMAT VALUE B"ð".
ð131ðð
21ð ð132ðð ð1 INDICATOR-AREA.
211 ð133ðð ð5 IN98 PIC 1 INDIC 98.
212 ð134ðð 88 END-OF-EXISTING-ORDER-INQUIRY VALUE B"1".
213 ð135ðð ð5 IN97 PIC 1 INDIC 97.
214 ð136ðð 88 CONTINUE-DETAIL-LINES-DISPLAY VALUE B"1".
215 ð137ðð ð5 IN62 PIC 1 INDIC 62.
216 ð138ðð 88 CUSTOMER-NOT-FOUND VALUE B"1".
217 ð139ðð 88 CUSTOMER-EXIST VALUE B"ð".
218 ð14ððð ð5 IN61 PIC 1 INDIC 61.
219 ð141ðð 88 ORDER-NOT-FOUND VALUE B"1".
22ð ð142ðð 88 ORDER-EXIST VALUE B"ð".
221 ð143ðð ð5 IN58 PIC 1 INDIC 58.
222 ð144ðð 88 CLEAR-SUBFILE VALUE B"1".
223 ð145ðð 88 DISPLAY-SUBFILE-CONTROL VALUE B"ð".
224 ð146ðð ð5 IN57 PIC 1 INDIC 57.
225 ð147ðð 88 DISPLAY-SUBFILE VALUE B"1".
226 ð148ðð ð5 IN47 PIC 1 INDIC 47.
227 ð149ðð 88 NO-DETAIL-LINES-FOR-ORDER VALUE B"1".
228 ð15ððð 88 DETAIL-LINES-FOR-ORDER-EXIST VALUE B"ð".
229 ð151ðð ð5 IN45 PIC 1 INDIC 45.
23ð ð152ðð 88 END-OF-ORDER VALUE B"1".
ð153ðð
231 ð154ðð PROCEDURE DIVISION.
ð155ðð
ð156ðð DECLARATIVES.
ð157ðð TRANSACTION-ERROR SECTION.
ð158ðð USE AFTER STANDARD ERROR PROCEDURE
ð159ðð EXISTING-ORDER-DISPLAY-FILE.
ð16ððð WORK-STATION-ERROR-HANDLER.
232 ð161ðð IF SUBFILE-IS-FULL THEN
ð162ðð NEXT SENTENCE
ð163ðð ELSE
233 ð164ðð DISPLAY "WORK-STATION ERROR" STATUS-CODE-ONE.
ð165ðð END DECLARATIVES.
ð166ðð
ð167ðð INQUIRY-INTO-EXISTING-ORDER SECTION.
ð168ðð MAINLINE-ROUTINE.
234 ð169ðð PERFORM SET-UP-ROUTINE.
235 ð17ððð PERFORM EXISTING-ORDER-INQUIRY
ð171ðð UNTIL END-OF-EXISTING-ORDER-INQUIRY.
236 ð172ðð PERFORM CLEAN-UP-ROUTINE.
ð173ðð
ð174ðð SET-UP-ROUTINE.
237 ð175ðð OPEN INPUT ORDER-HEADER-FILE
ð176ðð ORDER-DETAIL-FILE
ð177ðð CUSTOMER-MASTER-FILE
ð178ðð I-O EXISTING-ORDER-DISPLAY-FILE.
238 ð179ðð MOVE SPACES TO CUST OF SUBCTL1-O
ð18ððð NAME OF SUBCTL1-O
ð181ðð ADDR OF SUBCTL1-O
ð182ðð CITY OF SUBCTL1-O
ð183ðð STATE OF SUBCTL1-O
ð184ðð STSORD OF SUBCTL1-O
ð185ðð STSOPN OF SUBCTL1-O
ð186ðð CUSORD OF SUBCTL1-O.

Figura 72 (Parte 5 de 7). Ejemplo de un Programa de Consulta de Pedidos

224 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Listado Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
239 ð187ðð MOVE ZEROS TO ORDERN OF SUBCTL1-O
ð188ðð ORDDAT OF SUBCTL1-O
ð189ðð ZIP OF SUBCTL1-O
ð19ððð ORDAMT OF SUBCTL1-O
ð191ðð PRTDAT OF SUBCTL1-O
ð192ðð INVNUM OF SUBCTL1-O
ð193ðð ACTMTH OF SUBCTL1-O
ð194ðð ACTYR OF SUBCTL1-O.
24ð ð195ðð MOVE ALL B'ð' TO INDICATOR-AREA.
241 ð196ðð SET READ-DISPLAY
ð197ðð NOT-SUBCTL1-FORMAT
ð198ðð NOT-SUB1-FORMAT TO TRUE.
242 ð199ðð MOVE CORR INDICATOR-AREA TO SUBCTL1-O-INDIC.
243 ð2ðððð WRITE EXISTING-ORDER-DISPLAY-RECORD FORMAT IS "SUBCTL1".
244 ð2ð1ðð READ EXISTING-ORDER-DISPLAY-FILE RECORD.
245 ð2ð2ðð MOVE CORR SUBCTL1-I-INDIC TO INDICATOR-AREA.
ð2ð3ðð
ð2ð4ðð EXISTING-ORDER-INQUIRY.
246 ð2ð5ðð IF CONTINUE-DETAIL-LINES-DISPLAY THEN
247 ð2ð6ðð PERFORM READ-NEXT-ORDER-DETAIL-RECORD
248 ð2ð7ðð IF MORE-DETAIL-LINE-ITEMS-EXIST THEN
249 ð2ð8ðð IF ORDERN OF ORDER-DETAIL-RECORD IS NOT EQUAL TO
ð2ð9ðð ORDERN OF ORDER-HEADER-RECORD THEN
25ð ð21ððð SET DISPLAY-SUBFILE TO TRUE
251 ð211ðð SET NO-DETAIL-LINES-FOR-ORDER TO TRUE
ð212ðð ELSE
252 ð213ðð PERFORM SUBFILE-SET-UP
ð214ðð ELSE
253 ð215ðð SET DISPLAY-SUBFILE TO TRUE
254 ð216ðð SET NO-DETAIL-LINES-FOR-ORDER TO TRUE
ð217ðð ELSE
255 ð218ðð PERFORM ORDER-NUMBER-VALIDATION.
256 ð219ðð MOVE CORR INDICATOR-AREA TO SUBCTL1-O-INDIC.
257 ð22ððð SET WRITE-DISPLAY TO TRUE.
258 ð221ðð SET SUBCTL1-FORMAT TO TRUE.
259 ð222ðð WRITE EXISTING-ORDER-DISPLAY-RECORD FORMAT IS "SUBCTL1".
26ð ð223ðð READ EXISTING-ORDER-DISPLAY-FILE RECORD.
261 ð224ðð MOVE CORR SUBCTL1-I-INDIC TO INDICATOR-AREA.
ð225ðð ORDER-NUMBER-VALIDATION.
262 ð226ðð PERFORM READ-ORDER-HEADER-FILE.
263 ð227ðð IF ORDER-EXIST THEN
264 ð228ðð PERFORM READ-CUSTOMER-MASTER-FILE
265 ð229ðð IF CUSTOMER-EXIST THEN
266 ð23ððð PERFORM READ-FIRST-ORDER-DETAIL-RECORD
267 ð231ðð IF DETAIL-LINES-FOR-ORDER-EXIST THEN
268 ð232ðð PERFORM SUBFILE-SET-UP
ð233ðð ELSE
ð234ðð NEXT SENTENCE
ð235ðð ELSE
ð236ðð NEXT SENTENCE
ð237ðð ELSE
ð238ðð NEXT SENTENCE.
ð239ðð READ-ORDER-HEADER-FILE.
269 ð24ððð MOVE ORDERN OF SUBCTL1-I OF EXISTING-ORDER-DISPLAY-RECORD
ð241ðð TO ORDERN OF ORDER-HEADER-RECORD.
27ð ð242ðð READ ORDER-HEADER-FILE
271 ð243ðð INVALID KEY SET ORDER-NOT-FOUND TO TRUE.
ð244ðð READ-CUSTOMER-MASTER-FILE.
272 ð245ðð MOVE CUST OF ORDER-HEADER-RECORD
ð246ðð TO CUST OF CUSTOMER-MASTER-RECORD.
273 ð247ðð READ CUSTOMER-MASTER-FILE
274 ð248ðð INVALID KEY SET CUSTOMER-NOT-FOUND TO TRUE.
ð249ðð READ-FIRST-ORDER-DETAIL-RECORD.
275 ð25ððð MOVE ORDERN OF ORDER-HEADER-RECORD
ð251ðð TO ORDERN OF ORDER-DETAIL-RECORD.
276 ð252ðð MOVE 1 TO LINNUM OF ORDER-DETAIL-RECORD.
277 ð253ðð READ ORDER-DETAIL-FILE
278 ð254ðð INVALID KEY SET NO-DETAIL-LINES-FOR-ORDER TO TRUE.
ð255ðð SUBFILE-SET-UP.
279 ð256ðð SET CLEAR-SUBFILE TO TRUE.
28ð ð257ðð MOVE CORR INDICATOR-AREA TO SUBCTL1-O-INDIC.
281 ð258ðð SET WRITE-DISPLAY TO TRUE.
282 ð259ðð SET SUBCTL1-FORMAT TO TRUE.
283 ð26ððð WRITE EXISTING-ORDER-DISPLAY-RECORD FORMAT IS "SUBCTL1".
284 ð261ðð SET DISPLAY-SUBFILE-CONTROL TO TRUE.

Figura 72 (Parte 6 de 7). Ejemplo de un Programa de Consulta de Pedidos

Capítulo 8. Archivos Transacción 225


5763CB1 V3RðM5 Listado Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
285 ð262ðð PERFORM BUILD-DISPLAY-SUBFILE
ð263ðð UNTIL NO-MORE-DETAIL-LINE-ITEMS
ð264ðð OR SUBFILE-IS-FULL.
286 ð265ðð MOVE CORR ORDHDR OF ORDER-HEADER-RECORD
ð266ðð TO SUBCTL1-O OF EXISTING-ORDER-DISPLAY-RECORD.
287 ð267ðð MOVE CORR CUSMST OF CUSTOMER-MASTER-RECORD
ð268ðð TO SUBCTL1-O OF EXISTING-ORDER-DISPLAY-RECORD.
288 ð269ðð MOVE ORDER-STATUS(ORDSTS) TO STSORD.
289 ð27ððð MOVE OPEN-STATUS(OPNSTS) TO STSOPN.
29ð ð271ðð SET MORE-DETAIL-LINE-ITEMS-EXIST TO TRUE.
291 ð272ðð MOVE ZEROS TO SUBFILE-RECORD-NUMBER.
ð273ðð BUILD-DISPLAY-SUBFILE.
292 ð274ðð MOVE CORR ORDDTL OF ORDER-DETAIL-RECORD
ð275ðð TO SUB1 OF EXISTING-ORDER-DISPLAY-RECORD.
293 ð276ðð SET WRITE-DISPLAY TO TRUE.
294 ð277ðð SET SUB1-FORMAT TO TRUE.
295 ð278ðð ADD 1 TO SUBFILE-RECORD-NUMBER.
296 ð279ðð WRITE SUBFILE EXISTING-ORDER-DISPLAY-RECORD FORMAT IS "SUB1".
297 ð28ððð IF SUBFILE-IS-FULL THEN
298 ð281ðð SET DISPLAY-SUBFILE TO TRUE
ð282ðð ELSE
299 ð283ðð PERFORM READ-NEXT-ORDER-DETAIL-RECORD
3ðð ð284ðð IF NO-MORE-DETAIL-LINE-ITEMS THEN
ð285ðð NEXT SENTENCE
ð286ðð ELSE
3ð1 ð287ðð IF ORDERN OF ORDER-DETAIL-RECORD IS NOT EQUAL TO
ð288ðð ORDERN OF ORDER-HEADER-RECORD THEN
3ð2 ð289ðð SET DISPLAY-SUBFILE TO TRUE
3ð3 ð29ððð SET NO-MORE-DETAIL-LINE-ITEMS TO TRUE
ð291ðð ELSE
ð292ðð NEXT SENTENCE.
ð293ðð READ-NEXT-ORDER-DETAIL-RECORD.
3ð4 ð294ðð READ ORDER-DETAIL-FILE NEXT RECORD
3ð5 ð295ðð AT END SET DISPLAY-SUBFILE TO TRUE
3ð6 ð296ðð SET NO-MORE-DETAIL-LINE-ITEMS TO TRUE.
ð297ðð CLEAN-UP-ROUTINE.
3ð7 ð298ðð CLOSE ORDER-HEADER-FILE
ð299ðð ORDER-DETAIL-FILE
ð3ðððð CUSTOMER-MASTER-FILE
ð3ð1ðð EXISTING-ORDER-DISPLAY-FILE.
3ð8 ð3ð2ðð STOP RUN.
\ \ \ \ \ F I N D E F U E N T E \ \ \ \ \

Figura 72 (Parte 7 de 7). Ejemplo de un Programa de Consulta de Pedidos

Esta es la pantalla inicial de solicitud de entrada de pedidos grabada para la


estación de trabajo:

à Entrada Pedido Existente Total ððððððððð


ð
Estado
Pedido 124ðð Abierto
Fecha ðððððð Pedido cliente
Cli # Medio envío
ððððð Fecha Impreso ðððððð
Factura ððððð Mes ðð Año ðð
Item Cant Descripción Item Precio Cálculo

Esta pantalla aparece si existen registros de detalle del pedido para el cliente cuyo
número de pedido se ha entrado en la primera pantalla:

226 COBOL/400 Guía del usuario


à Entrada Pedido Existente Total ðð7426656
ð
Estado 7-INVOICED
Pedido 17924 ABC HARDWARE LTD. Abierto 2-CLOSED
Fecha 11ð587 123 ANYWHERE AVE. Pedido cliente TESTCS17933ðð1I
Cli # 112ðð TORONTO Medio envío TRUCKCO
ONT M4K ðAð Fecha impreso ð82788
Factura 17924 Mes 12 Año 88
Item Cant Descripción Item Precio Cálculo
33ðð1 ðð3 TORQUE WRENCH 75LB 14 INCH ðð9115 273.45
331ðð ðð1 TORQUE WRENCH W/GAUGE 2ðð LB ð15777 65ð.95
44529 ðð4 WOOD CHISEL - 3 1/4 ðð684ð 56.87
44958 ðð2 POWER DRILL 1/2 REV ðð82ðð 797.5ð
461ð2 ðð1 WROUGHT IRON RAILING 4FTX6FT ðð793ð 237.75
462ð1 ðð1 WROUGHT IRON HAND RAIL 6FT ðð7178 77.35
479ð2 ðð2 ESCUTCHEON BRASS 15X4 INCHES ð44488 213.ðð

Esta pantalla aparece si el archivo ORDHDRP no contiene ningún registro para el


número de pedido entrado en la primera pantalla:

à Entrada Pedido Existente Total ððððððððð


ð
Estado
Pedido 124ðð Abierto
Fecha ðððððð Pedido cliente
Cli # Medio envío
ððððð Fecha Impreso ðððððð
Factura ððððð Mes ðð Año ðð
Item Cant Descripción Item Precio Cálculo

No encontrado número de pedido

á ñ

Un Programa de Actualización de Pagos


La Figura 74 en la página 231 muestra un ejemplo de un programa de actuali-
zación de pagos, PAYUPDT. Para las DDS relacionadas, consulte la Figura 73 en
la página 228. Para los ejemplos de pantallas asociadas, consulte la página 238.
Para las DDS correspondientes al archivo maestro de clientes, CUSMSTP, con-
sulte la Figura 69 en la página 212.

En este ejemplo, se registran los pagos de los clientes. Se solicita al empleado que
entre uno o más números de clientes y la cantidad de dinero a abonar a cada
cuenta de los clientes. El programa comprueba el número de cliente y acepta
incondicionalmente cualquier pago para un cliente dado que tenga facturas pen-
dientes de pago. Si la cantidad pagada por un cliente resulta excesiva, el
empleado tiene la opción de aceptar o rechazar el pago. Si no existe ningún
registro del cliente, se emite un mensaje de error. Los pagos pueden entrarse
hasta que el empleado finalice el programa pulsando F12.

Capítulo 8. Archivos Transacción 227


G X 2 1 - 9 8 9 1 - 0 U M / 0 5 0 *
A S / 4 0 0 E S P E C I F I C A C I O N E S D E D E S C R I P C I O N D E D AT O S Impreso en España
International Business Machines
*El núm e ro de hojas por área de re lleno puede variar lige ram ente .

Archivo Signo Descripción Página de


Instrucciones

de Grabación
Programador Fecha Tecla

(/b / R / H / J / K / S / O )
Condicionamiento

Tipo Datos/Desp lazamien to Teclado

(b/O/I/B/H/M/N/P)
Ubicación
(A/O/*)

Nombre Co ndición
Espec
de Formula rio

And/Or/Coment.

N om b re Longitud Funciones

Referencia (R)
Nombre

Nú mero de

U t i l i z a c/i ó n
Posiciones
Secuencia
Reservado

D ecimales
Indicador

Indicador

Indicador
No (N)

No (N)
No (N)

Línea P os
Tipo

Tipo

1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0

A * * L OG I C O OR D HD R L A R C H I VO D E P E D I DO S D E OR D HD R

A R OR D HD R P F I L E ( OR D HD R P )

A *

A CU S T

A I N V N UM

A OR D E R N

A OR DD A T

A C U S OR D

A S HP V I A

A OR D S T S

A O P R N AM

A O R D AM T

A CU S T Y P

A P R T DA T

A OP N S T S

A T O T L I N

A AC T M T H

A AC T Y R

A S T A T E

A AM P A I D

A K CU S T

A K I N V N UM

Figura 73 (Parte 1 de 3). Ejemplo de una Especificación de Descripción de Datos para un Programa de Actuali-
zación de Pagos

228 COBOL/400 Guía del usuario


G X 2 1 - 9 8 9 1 - 0 U M / 0 5 0 *
A S / 4 0 0 E S P E C I F I C A C I O N E S D E D E S C R I P C I O N D E D AT O S Impreso en España
International Business Machines
*El núm e ro de hojas por área de re lleno puede variar lige ram ente .

Archivo Signo Descripción Página de


Instrucciones

de Grabación
Programador Fecha Tecla

(/b / R / H / J / K / S / O )
Condicionamiento

Tipo Datos/Desp lazamien to Teclado

(b/O/I/B/H/M/N/P)
Ubicación
(A/O/*)

Nombre Co ndición
Espec
de Formula rio

And/Or/Coment.

N om b re Longitud Funciones

Referencia (R)
Nombre

Nú mero de

U t i l i z a c/i ó n
Posiciones
Secuencia
Reservado

D ecimales
Indicador

Indicador

Indicador
No (N)

No (N)
No (N)

Línea P os
Tipo

Tipo

1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0

A * DD S P AR A A R C H I VO D I S P O S I T I VO P AN T A L /
L A/ P AY UPD T D

A * AC T U A L I Z AC I ON D E P A GO I N T E R AC T I VO D E CU E N T A S P OR CO B R A R

A *

A R S U B F I L E 1 S F L

A T E X T ( ' S U B ARCH P AR A P AGO D E CL I E N T E ' )

A *

A AC P P M T 4 A I 5 4 T E X T ( ' AC E P T A R P A GO ' )

A VA L U E S ( ' * Y E S ' ' * NO ' )

A 5 1 D S P A T R ( R I MD T )

A N 5 1 D S P A T R ( ND P R )

A *

A CU S T 5 B 5 1 5 T E X T ( ' N UM E R O D E CL I E N T E ' )

A 5 2 D S P A T R ( R I )

A 5 3 D S P A T R ( ND )

A 5 4 D S P A T R ( P R )

A *

A AM P A I D 8 /
0 2 B 5 2 4 T E X T ( ' I MP OR T E P AG A D O ' )

A CH E CK ( F E )

A AU T O ( R AB )

A CM P ( G T /0 )

A 5 2 D S P A T R ( R I )

A 5 3 D S P A T R ( ND )

A 5 4 D S P A T R ( P R )

A *

A ECPMSG 3 1A O 5 3 7 T E X T ( ' ME N S A J E D E E X C E P C I ON ' )

A 5 2 D S P A T R ( R I )

A 5 3 D S P A T R ( ND )

A 5 4 D S P A T R ( P R )

A *

A OV R P M T 8 Y 2O 5 7 /0 T E X T ( ' P A GO E X C E S I VO ' )

A E D T CD E ( 1 )

A 5 5 D S P A T R ( B L )

A N 5 6 D S P A T R ( ND )

A *

A S T S CD E 1A H T E X T ( ' COD I GO E S T ADO ' )

Figura 73 (Parte 2 de 3). Ejemplo de una Especificación de Descripción de Datos para un Programa de Actuali-
zación de Pagos

Capítulo 8. Archivos Transacción 229


G X 2 1 - 9 8 9 1 - 0 U M / 0 5 0 *
A S / 4 0 0 E S P E C I F I C A C I O N E S D E D E S C R I P C I O N D E D AT O S Impreso en España
International Business Machines
*El número de hojas por área de relleno puede variar ligeramente.

Archivo Signo Descripción Página de


Instrucciones

de Grabación
Programador Fecha Tecla

(/b / R / H / J / K / S / O )
Condicionamiento

Tipo Datos/Desplazamiento Teclado

(b/O/I/B/H/M/N/P)
Ubicación
(A/O/*)

Espec

Nombre Condición
Formula rio

And/Or/Coment.

Nom bre Longitud Funciones

Referencia (R)
Nombre

Nú mero d e

U t i l i z a c/i ó n
Posiciones
Secuencia
Reservado

D ecimales
Indicador

Indicador

Indicador
de

No (N)

No (N)
No (N)

Línea P os
Tipo

Tipo

1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 16 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0

A * R CO N T R O L 1 T E X T ( ' S U B A R C H I VO D E CO N T R O L ' )

A S F L C T L ( S U B A R C H I VO 1 )

A S F L S I Z ( 1 7 )

A S F L P AG ( 1 7 )

A 6 1 S F L CL R

A 6 2 S F L D S P

A 6 2 S F L D S PC T L

A OV E R L A Y

A L OC K

A *

A H E L P ( 9 9 ' T ECL A D E A Y UDA ' )

A CA 1 2 ( 9 8 ' F I N D E AC T U A L I Z AC I ON P A GO ' )

A CA 1 1 ( 9 7 ' I GNOR A R E N T R AD A ' )

A *

A 9 9 S F L MSG ( ' F 1 1 - I GNOR A R E N T R NO VA L I DA +

A F 1 2 - F I N D E AC T U A +

A L I Z AC I ON D E P A GO ' )

A *

A 1 2 ' SOL I C I T UD AC T U A L I Z P A GO S D E CL I E N T E '

A 1 6 5 ' F E CHA '

A 1 7 8 F E CHA E D T CD E ( Y )

A 6 3 3 2 ' AC E P T A R '

A 6 3 4 2 ' P A GO '

A 3 1 4 ' CL I E N T E '

A 3 2 6 ' P A GO '

A 6 4 3 3 7 ' ME N S A J E D E E X C E P C I ON '

A *

A R M E S S AG E 1 T E X T ( ' R EG I S T RO D E ME N S A J E ' )

A OV E R L A Y

A L OC K

A *

A 7 1 2 4 2 ' AC E P T A R V A L OR E S P A GO : ( * NO * S I ) '

A D S P A T R ( R I )

Figura 73 (Parte 3 de 3). Ejemplo de una Especificación de Descripción de Datos para un Programa de Actuali-
zación de Pagos

230 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Listado Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ððð1ðð IDENTIFICATION DIVISION. ð2/ð1/94
2 ððð2ðð PROGRAM-ID. PAYUPDT. ð3/22/94
3 ððð3ðð ENVIRONMENT DIVISION. ð2/ð1/94
4 ððð4ðð CONFIGURATION SECTION. ð2/ð1/94
5 ððð5ðð SOURCE-COMPUTER. IBM-AS4ðð. ð2/ð2/94
6 ððð6ðð OBJECT-COMPUTER. IBM-AS4ðð. ð2/ð2/94
7 ððð7ðð INPUT-OUTPUT SECTION. ð2/ð1/94
8 ððð8ðð FILE-CONTROL. ð2/ð1/94
9 ððð9ðð SELECT CUSTOMER-INVOICE-FILE ð2/ð1/94
1ð ðð1ððð ASSIGN TO DATABASE-ORDHDRL ð2/ð1/94
11 ðð11ðð ORGANIZATION IS INDEXED ð2/ð1/94
12 ðð12ðð ACCESS MODE IS SEQUENTIAL ð2/ð1/94
13 ðð13ðð RECORD KEY IS COMP-KEY ð2/ð1/94
14 ðð14ðð FILE STATUS IS STATUS-CODE-ONE. ð2/ð1/94
15 ðð15ðð SELECT CUSTOMER-MASTER-FILE ð2/ð1/94
16 ðð16ðð ASSIGN TO DATABASE-CUSMSTP ð2/ð1/94
17 ðð17ðð ORGANIZATION IS INDEXED ð2/ð1/94
18 ðð18ðð ACCESS IS RANDOM ð2/ð1/94
19 ðð19ðð RECORD KEY IS CUST OF CUSTOMER-MASTER-RECORD. ð2/ð1/94
2ð ðð2ððð SELECT PAYMENT-UPDATE-DISPLAY-FILE ð2/ð1/94
21 ðð21ðð ASSIGN TO WORKSTATION-PAYUPDTD ð3/22/94
22 ðð22ðð ORGANIZATION IS TRANSACTION ð2/ð1/94
23 ðð23ðð ACCESS IS DYNAMIC ð2/ð1/94
24 ðð24ðð RELATIVE KEY IS REL-NUMBER ð2/ð1/94
25 ðð25ðð FILE STATUS IS STATUS-CODE-ONE ð2/ð1/94
26 ðð26ðð CONTROL-AREA IS WS-CONTROL. ð2/ð1/94
ðð27ðð ð2/ð1/94
27 ðð28ðð DATA DIVISION. ð2/ð1/94
28 ðð29ðð FILE SECTION. ð2/ð1/94
29 ðð3ððð FD CUSTOMER-INVOICE-FILE ð2/ð1/94
3ð ðð31ðð LABEL RECORDS ARE STANDARD. ð2/ð1/94
31 ðð32ðð ð1 CUSTOMER-INVOICE-RECORD. ð2/ð1/94
32 ðð33ðð COPY DDS-ORDHDR OF ORDHDRL. ð3/14/94
+ððððð1\ FORMATO E-S:ORDHDR DESDE ARCHIVO ORDHDRL DE BIBLIOTECA XMPLIB ORDHDR
+ððððð2\ ORDHDR
+ððððð3\DEFINICIONES CLAVE PARA FORMATO DE REGISTRO ORDHDR ORDHDR
+ððððð4\ NÚMERO NOMBRE RECUPERACIÓN TIPO SECALT ORDHDR
+ððððð5\ ððð1 CUST ASCENDENTE AN NO ORDHDR
+ððððð6\ ððð2 INVNUM ASCENDENTE SIGNO NO ORDHDR
33 +ððððð7 ð5 ORDHDR. ORDHDR
34 +ððððð8 ð6 CUST PIC X(5). ORDHDR
+ððððð9\ NÚMERO CLIENTE ORDHDR
35 +ðððð1ð ð6 INVNUM PIC S9(5) COMP-3. ORDHDR
+ðððð11\ NÚMERO FACTURA ORDHDR
36 +ðððð12 ð6 ORDERN PIC S9(5) COMP-3. ORDHDR
+ðððð13\ NÚMERO PEDIDO ORDHDR
37 +ðððð14 ð6 ORDDAT PIC S9(6) COMP-3. ORDHDR
+ðððð15\ SE ENTRÓ FECHA PEDIDO ORDHDR
38 +ðððð16 ð6 CUSORD PIC X(15). ORDHDR
+ðððð17\ NÚMERO PEDIDO COMPRA CLIENTE ORDHDR
39 +ðððð18 ð6 SHPVIA PIC X(15). ORDHDR
+ðððð19\ INSTRUCCIONES ENVÍO ORDHDR
4ð +ðððð2ð ð6 ORDSTS PIC S9(1) COMP-3. ORDHDR
+ðððð21\ ESTADO PEDIDO 1PEND 2CONT 3COM 4LIS 5IMP 6ENP ORDHDR
41 +ðððð22 ð6 OPRNAM PIC X(1ð). ORDHDR
+ðððð23\ NOMBRE OPERADOR QUE ENTRÓ EL PEDIDO ORDHDR
42 +ðððð24 ð6 ORDAMT PIC S9(6)V9(2) COMP-3. ORDHDR
+ðððð25\ TOTAL SUMA PESETAS DEL PEDIDO ORDHDR
43 +ðððð26 ð6 CUSTYP PIC S9(1) COMP-3. ORDHDR
+ðððð27\ TIPO CLIENTE 1=GOB 2=PLA 3=NEG 4=FAB 5=OTR ORDHDR
44 +ðððð28 ð6 PRTDAT PIC S9(6) COMP-3. ORDHDR
+ðððð29\ FECHA IMPRESIÓN PEDIDO ORDHDR
45 +ðððð3ð ð6 OPNSTS PIC S9(1) COMP-3. ORDHDR
+ðððð31\ EST.PEDIDO ABIERTO 1=ABIERTO 2= CERRADO 3=CANCELAD.ORDHDR
46 +ðððð32 ð6 TOTLIN PIC S9(3) COMP-3. ORDHDR
+ðððð33\ TOTAL LÍNEAS ÍTEMS EN PEDIDO ORDHDR
47 +ðððð34 ð6 ACTMTH PIC S9(2) COMP-3. ORDHDR
+ðððð35\ MES CONTABLE DE VENTA ORDHDR
48 +ðððð36 ð6 ACTYR PIC S9(2) COMP-3. ORDHDR
+ðððð37\ AÑO CONTABLE DE VENTA ORDHDR
49 +ðððð38 ð6 STATE PIC X(2). ORDHDR
+ðððð39\ PROVINCIA ORDHDR
5ð +ðððð4ð ð6 AMPAID PIC S9(6)V9(2) COMP-3. ORDHDR
+ðððð41\ TOTAL SUMA PESETAS PAGADAS ORDHDR
51 ðð34ðð 66 COMP-KEY RENAMES CUST THRU INVNUM.
ðð35ðð

Figura 74 (Parte 1 de 8). Listado Fuente de un Ejemplo de Programa de Actualización de Pagos

Capítulo 8. Archivos Transacción 231


5763CB1 V3RðM5 Listado Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
52 ðð36ðð FD CUSTOMER-MASTER-FILE
53 ðð37ðð LABEL RECORDS ARE STANDARD.
54 ðð38ðð ð1 CUSTOMER-MASTER-RECORD.
55 ðð39ðð COPY DDS-CUSMST OF CUSMSTP.
+ððððð1\ FORMATO E-S:CUSMST DESDE CUSMSTP DE BIBLIOTECA XMPLIB CUSMST
+ððððð2\ REGISTRO MAESTRO CLIENTES CUSMST
+ððððð3\DEFINICIONES CLAVE PARA FORMATO DE REGISTRO CUSMST CUSMST
+ððððð4\ NÚMERO NOMBRE RECUPERACIÓN TIPO SECALT CUSMST
+ððððð5\ ððð1 CUST ASCENDENTE AN NO CUSMST
56 +ððððð6 ð5 CUSMST. CUSMST
57 +ððððð7 ð6 CUST PIC X(5). CUSMST
+ððððð8\ NÚMERO CLIENTE CUSMST
58 +ððððð9 ð6 NAME PIC X(25). CUSMST
+ðððð1ð\ NOMBRE CLIENTE CUSMST
59 +ðððð11 ð6 ADDR PIC X(2ð). CUSMST
+ðððð12\ DIRECCIÓN CLIENTE CUSMST
6ð +ðððð13 ð6 CITY PIC X(2ð). CUSMST
+ðððð14\ CIUDAD CLIENTE CUSMST
61 +ðððð15 ð6 STATE PIC X(2). CUSMST
+ðððð16\ PROVINCIA CUSMST
62 +ðððð17 ð6 ZIP PIC S9(5) COMP-3. CUSMST
+ðððð18\ CÓDIGO POSTAL CUSMST
63 +ðððð19 ð6 SRHCOD PIC X(6). CUSMST
+ðððð2ð\ CÓDIGO BÚSQUEDA NÚMERO CLIENTE CUSMST
64 +ðððð21 ð6 CUSTYP PIC S9(1) COMP-3. CUSMST
+ðððð22\ TIPO CLIENTE 1=GOB 2=PLA 3=NEG 4=FAB 5=OTR CUSMST
65 +ðððð23 ð6 ARBAL PIC S9(6)V9(2) COMP-3. CUSMST
+ðððð24\ SALDO CUENTAS PEND. CUSMST
66 +ðððð25 ð6 ORDBAL PIC S9(6)V9(2) COMP-3. CUSMST
+ðððð26\ CANTIDAD C/C EN ARCH. PEDIDOS CUSMST
67 +ðððð27 ð6 LSTAMT PIC S9(6)V9(2) COMP-3. CUSMST
+ðððð28\ ULTIMA CANTIDAD PAGADA EN C/C CUSMST
68 +ðððð29 ð6 LSTDAT PIC S9(6) COMP-3. CUSMST
+ðððð3ð\ ULTIMA FECHA PAGADA EN C/C CUSMST
69 +ðððð31 ð6 CRDLMT PIC S9(6)V9(2) COMP-3. CUSMST
+ðððð32\ LÍMITE CRÉDITO CLIENTE CUSMST
7ð +ðððð33 ð6 SLSYR PIC S9(8)V9(2) COMP-3. CUSMST
+ðððð34\ VENTAS CLIENTE ESTE AÑO CUSMST
71 +ðððð35 ð6 SLSLYR PIC S9(8)V9(2) COMP-3. CUSMST
+ðððð36\ VENTAS CLIENTE AÑO PASADO CUSMST
ðð4ððð
72 ðð41ðð FD PAYMENT-UPDATE-DISPLAY-FILE
73 ðð42ðð LABEL RECORDS ARE OMITTED.
74 ðð43ðð ð1 PAYMENT-UPDATE-DISPLAY-RECORD.
75 ðð44ðð COPY DDS-ALL-FORMATS OF PAYUPDTD.
76 +ððððð1 ð5 PAYUPDTD-RECORD PIC X(59). <-ALL-FMTS
+ððððð2\ FORMATO ENTRADA:SUBFILE1 DESDE ARCHIVO PAYUPDTD DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ððððð3\ SUBARCHIVO PARA PAGOS CLIENTE <-ALL-FMTS
77 +ððððð4 ð5 SUBFILE1-I REDEFINES PAYUPDTD-RECORD. <-ALL-FMTS
78 +ððððð5 ð6 ACPPMT PIC X(4). <-ALL-FMTS
+ððððð6\ ACEPTAR PAGO <-ALL-FMTS
79 +ððððð7 ð6 CUST PIC X(5). <-ALL-FMTS
+ððððð8\ CUSTOMER NUMBER <-ALL-FMTS
8ð +ððððð9 ð6 AMPAID PIC S9(6)V9(2). <-ALL-FMTS
+ðððð1ð\ CANTIDAD PAGADA <-ALL-FMTS
81 +ðððð11 ð6 ECPMSG PIC X(31). <-ALL-FMTS
+ðððð12\ MENSAJE DE EXCEPCIÓN <-ALL-FMTS
82 +ðððð13 ð6 OVRPMT PIC S9(6)V9(2). <-ALL-FMTS
+ðððð14\ PAGO EXCESIVO <-ALL-FMTS
83 +ðððð15 ð6 STSCDE PIC X(1). <-ALL-FMTS
+ðððð16\ CÓDIGO DE ESTADO <-ALL-FMTS
+ðððð17\FORMATO SALIDA:SUBFILE1 DESDE ARCHIVO PAYUPDTD DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ðððð18\ SUBARCHIVO PARA PAGOS CLIENTE <-ALL-FMTS
84 +ðððð19 ð5 SUBFILE1-O REDEFINES PAYUPDTD-RECORD. <-ALL-FMTS
85 +ðððð2ð ð6 SUBFILE1-O-INDIC. <-ALL-FMTS
86 +ðððð21 ð7 IN51 PIC 1 INDIC 51. <-ALL-FMTS
87 +ðððð22 ð7 IN52 PIC 1 INDIC 52. <-ALL-FMTS
88 +ðððð23 ð7 IN53 PIC 1 INDIC 53. <-ALL-FMTS
89 +ðððð24 ð7 IN54 PIC 1 INDIC 54. <-ALL-FMTS
9ð +ðððð25 ð7 IN55 PIC 1 INDIC 55. <-ALL-FMTS
91 +ðððð26 ð7 IN56 PIC 1 INDIC 56. <-ALL-FMTS
92 +ðððð27 ð6 CUST PIC X(5). <-ALL-FMTS
+ðððð28\ NÚMERO CLIENTE <-ALL-FMTS
93 +ðððð29 ð6 AMPAID PIC S9(6)V9(2). <-ALL-FMTS
+ðððð3ð\ CANTIDAD PAGADA <-ALL-FMTS
94 +ðððð31 ð6 ECPMSG PIC X(31). <-ALL-FMTS
+ðððð32\ MENSAJE DE EXCEPCIÓN <-ALL-FMTS

Figura 74 (Parte 2 de 8). Listado Fuente de un Ejemplo de Programa de Actualización de Pagos

232 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Listado Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
95 +ðððð33 ð6 OVRPMT PIC S9(6)V9(2). <-ALL-FMTS
+ðððð34\ PAGO EXCESIVO <-ALL-FMTS
96 +ðððð35 ð6 STSCDE PIC X(1). <-ALL-FMTS
+ðððð36\ CÓDIGO DE ESTADO <-ALL-FMTS
+ðððð37\ FORMATO ENTRADA:CONTROL1 DESDE ARCHIVO PAYUPDTD DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ðððð38\ CONTROL SUBARCHIVO <-ALL-FMTS
97 +ðððð39 ð5 CONTROL1-I REDEFINES PAYUPDTD-RECORD. <-ALL-FMTS
98 +ðððð4ð ð6 CONTROL1-I-INDIC. <-ALL-FMTS
99 +ðððð41 ð7 IN99 PIC 1 INDIC 99. <-ALL-FMTS
+ðððð42\ TECLA AYUDA <-ALL-FMTS
1ðð +ðððð43 ð7 IN98 PIC 1 INDIC 98. <-ALL-FMTS
+ðððð44\ FIN ACTUALIZACIÓN PAGOS <-ALL-FMTS
1ð1 +ðððð45 ð7 IN97 PIC 1 INDIC 97. <-ALL-FMTS
+ðððð46\ IGNORAR ENTRADA <-ALL-FMTS
+ðððð47\FORMATO SALIDA:CONTROL1 DESDE ARCHIVO PAYUPDTD DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ðððð48\ CONTROL SUBARCHIVO <-ALL-FMTS
1ð2 +ðððð49 ð5 CONTROL1-O REDEFINES PAYUPDTD-RECORD. <-ALL-FMTS
1ð3 +ðððð5ð ð6 CONTROL1-O-INDIC. <-ALL-FMTS
1ð4 +ðððð51 ð7 IN61 PIC 1 INDIC 61. <-ALL-FMTS
1ð5 +ðððð52 ð7 IN62 PIC 1 INDIC 62. <-ALL-FMTS
1ð6 +ðððð53 ð7 IN99 PIC 1 INDIC 99. <-ALL-FMTS
+ðððð54\ TECLA AYUDA <-ALL-FMTS
1ð7 +ðððð55 ð7 IN63 PIC 1 INDIC 63. <-ALL-FMTS
1ð8 +ðððð56 ð7 IN64 PIC 1 INDIC 64. <-ALL-FMTS
+ðððð57\ FORMATO ENTRADA:MESSAGE1 DESDE ARCHIVO PAYUPDTD DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ðððð58\ REGISTRO MENSAJES <-ALL-FMTS
+ðððð59\ ð5 MESSAGE1-I REDEFINES PAYUPDTD-RECORD. <-ALL-FMTS
+ðððð6ð\FORMATO SALIDA:MESSAGE1 DESDE ARCHIVO PAYUPDTD DE BIBLIOTECA XMPLIB <-ALL-FMTS
+ðððð61\ REGISTRO MENSAJES <-ALL-FMTS
1ð9 +ðððð62 ð5 MESSAGE1-O REDEFINES PAYUPDTD-RECORD. <-ALL-FMTS
11ð +ðððð63 ð6 MESSAGE1-O-INDIC. <-ALL-FMTS
111 +ðððð64 ð7 IN71 PIC 1 INDIC 71. <-ALL-FMTS
ðð45ðð
112 ðð46ðð WORKING-STORAGE SECTION.
ðð47ðð
113 ðð48ðð ð1 REL-NUMBER PIC 9(ð5)
114 ðð49ðð VALUE ZEROS.
ðð5ððð
115 ðð51ðð ð1 WS-CONTROL.
116 ðð52ðð ð5 WS-IND PIC X(ð2).
117 ðð53ðð ð5 WS-FORMAT PIC X(1ð).
118 ðð54ðð ð1 SYSTEM-DATE.
119 ðð55ðð ð5 SYSTEM-YEAR PIC 99.
12ð ðð56ðð ð5 SYSTEM-MONTH PIC 99.
121 ðð57ðð ð5 SYSTEM-DAY PIC 99.
122 ðð58ðð ð1 PROGRAM-DATE.
123 ðð59ðð ð5 PROGRAM-MONTH PIC 99.
124 ðð6ððð ð5 PROGRAM-DAY PIC 99.
125 ðð61ðð ð5 PROGRAM-YEAR PIC 99.
126 ðð62ðð ð1 FILE-DATE REDEFINES PROGRAM-DATE
127 ðð63ðð PIC S9(6).
128 ðð64ðð ð1 EXCEPTION-STATUS.
129 ðð65ðð ð5 STATUS-CODE-ONE PIC XX.
13ð ðð66ðð 88 SUBFILE-IS-FULL VALUE '9M'.
131 ðð67ðð ð1 EXCEPTION-MESSAGES.
132 ðð68ðð ð5 MESSAGE-ONE PIC X(31)
133 ðð69ðð VALUE 'CUSTOMER DOES NOT EXIST '.
134 ðð7ððð ð5 MESSAGE-TWO PIC X(31)
135 ðð71ðð VALUE 'NO INVOICES EXIST FOR CUSTOMER '.
136 ðð72ðð ð5 MESSAGE-THREE PIC X(31)
137 ðð73ðð VALUE 'CUSTOMER HAS AN OVER PAYMENT OF'.
138 ðð74ðð ð1 PROGRAM-VARIABLES.
139 ðð75ðð ð5 AMOUNT-OWED PIC S9(6)V99.
14ð ðð76ðð ð5 AMOUNT-PAID PIC S9(6)V99.
141 ðð77ðð ð5 INVOICE-BALANCE PIC S9(6)V99.
142 ðð78ðð ð1 ERRPGM-PARAMETERS.
143 ðð79ðð ð5 DISPLAY-PARAMETER PIC X(8)
144 ðð8ððð VALUE 'PAYUPDTD'.
145 ðð81ðð ð5 DUMMY-ONE PIC X(6)
146 ðð82ðð VALUE SPACES.
147 ðð83ðð ð5 DUMMY-TWO PIC X(6)
148 ðð84ðð VALUE SPACES.
149 ðð85ðð ð5 STATUS-CODE-TWO.
15ð ðð86ðð 1ð PRIMARY PIC X(1).
151 ðð87ðð 1ð SECONDARY PIC X(1).

Figura 74 (Parte 3 de 8). Listado Fuente de un Ejemplo de Programa de Actualización de Pagos

Capítulo 8. Archivos Transacción 233


5763CB1 V3RðM5 Listado Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
152 ðð88ðð 1ð FILLER PIC X(5)
153 ðð89ðð VALUE SPACES.
154 ðð9ððð ð5 DUMMY-THREE PIC X(1ð)
155 ðð91ðð VALUE SPACES.
ðð92ðð
156 ðð93ðð ð1 SWITCH-AREA.
157 ðð94ðð ð5 SWð1 PIC 1.
158 ðð95ðð 88 WRITE-DISPLAY VALUE B'1'.
159 ðð96ðð 88 READ-DISPLAY VALUE B'ð'.
16ð ðð97ðð ð5 SWð2 PIC 1.
161 ðð98ðð 88 SUBFILE1-FORMAT VALUE B'1'.
162 ðð99ðð 88 NOT-SUBFILE1-FORMAT VALUE B'ð'.
163 ð1ðððð ð5 SWð3 PIC 1.
164 ð1ð1ðð 88 CONTROL1-FORMAT VALUE B'1'.
165 ð1ð2ðð 88 NOT-CONTROL1-FORMAT VALUE B'1'.
166 ð1ð3ðð ð5 SWð4 PIC 1.
167 ð1ð4ðð 88 NO-MORE-TRANSACTIONS-EXIST VALUE B'1'.
168 ð1ð5ðð 88 TRANSACTIONS-EXIST VALUE B'ð'.
169 ð1ð6ðð ð5 SWð5 PIC 1.
17ð ð1ð7ðð 88 CUSTOMER-NOT-FOUND VALUE B'1'.
171 ð1ð8ðð 88 CUSTOMER-EXIST VALUE B'ð'.
172 ð1ð9ðð ð5 SWð6 PIC 1.
173 ð11ððð 88 NO-MORE-INVOICES-EXIST VALUE B'1'.
174 ð111ðð 88 CUSTOMER-INVOICE-EXIST VALUE B'ð'.
175 ð112ðð ð5 SWð7 PIC 1.
176 ð113ðð 88 NO-MORE-PAYMENT-EXIST VALUE B'ð'.
177 ð114ðð 88 PAYMENT-EXIST VALUE B'ð'.
178 ð115ðð ð5 SWð8 PIC 1.
179 ð116ðð 88 INPUT-ERRORS-EXIST VALUE B'1'.
18ð ð117ðð 88 NO-INPUT-ERRORS-EXIST VALUE B'ð'.
181 ð118ðð ð5 SWð9 PIC 1.
182 ð119ðð 88 OVER-PAYMENT-DISPLAYED-ONCE VALUE B'1'.
183 ð12ððð 88 OVER-PAYMENT-NOT-DISPLAYED VALUE B'ð'.
ð121ðð
184 ð122ðð ð1 INDICATOR-AREA.
185 ð123ðð ð5 IN99 PIC 1 INDIC 99.
186 ð124ðð 88 HELP-IS-NEEDED VALUE B'1'.
187 ð125ðð 88 HELP-IS-NOT-NEEDED VALUE B'ð'.
188 ð126ðð ð5 IN98 PIC 1 INDIC 98.
189 ð127ðð 88 END-OF-PAYMENT-UPDATE VALUE B'1'.
19ð ð128ðð ð5 IN97 PIC 1 INDIC 97.
191 ð129ðð 88 IGNORE-INPUT VALUE B'1'.
192 ð13ððð ð5 IN51 PIC 1 INDIC 51.
193 ð131ðð 88 DISPLAY-ACCEPT-PAYMENT VALUE B'1'.
194 ð132ðð 88 DO-NOT-DISPLAY-ACCEPT-PAYMENT VALUE B'ð'.
195 ð133ðð ð5 IN52 PIC 1 INDIC 52.
196 ð134ðð 88 REVERSE-FIELD-IMAGE VALUE B'1'.
197 ð135ðð 88 DO-NOT-REVERSE-FIELD-IMAGE VALUE B'ð'.
198 ð136ðð ð5 IN53 PIC 1 INDIC 53.
199 ð137ðð 88 DO-NOT-DISPLAY-FIELD VALUE B'1'.
2ðð ð138ðð 88 DISPLAY-FIELD VALUE B'ð'.
2ð1 ð139ðð ð5 IN54 PIC 1 INDIC 54.
2ð2 ð14ððð 88 PROTECT-INPUT-FIELD VALUE B'1'.
2ð3 ð141ðð 88 DO-NOT-PROTECT-INPUT-FIELD VALUE B'ð'.
2ð4 ð142ðð ð5 IN55 PIC 1 INDIC 55.
2ð5 ð143ðð 88 MAKE-FIELD-BLINK VALUE B'1'.
2ð6 ð144ðð 88 DO-NOT-MAKE-FIELD-BLINK VALUE B'ð'.
2ð7 ð145ðð ð5 IN56 PIC 1 INDIC 56.
2ð8 ð146ðð 88 DISPLAY-OVER-PAYMENT VALUE B'1'.
2ð9 ð147ðð 88 DO-NOT-DISPLAY-OVER-PAYMENT VALUE B'ð'.
21ð ð148ðð ð5 IN61 PIC 1 INDIC 61.
211 ð149ðð 88 CLEAR-SUBFILE VALUE B'1'.
212 ð15ððð 88 DO-NOT-CLEAR-SUBFILE VALUE B'ð'.
213 ð151ðð ð5 IN62 PIC 1 INDIC 62.
214 ð152ðð 88 DISPLAY-SCREEN VALUE B'1'.
215 ð153ðð 88 DO-NOT-DISPLAY-SCREEN VALUE B'ð'.
216 ð154ðð ð5 IN63 PIC 1 INDIC 63.
217 ð155ðð 88 DISPLAY-ACCEPT-HEADING VALUE B'1'.
218 ð156ðð 88 DO-NOT-DISPLAY-ACCEPT-HEADING VALUE B'ð'.
219 ð157ðð ð5 IN64 PIC 1 INDIC 64.
22ð ð158ðð 88 DISPLAY-EXCEPTION VALUE B'1'.
221 ð159ðð 88 DO-NOT-DISPLAY-EXCEPTION VALUE B'ð'.
222 ð16ððð ð5 IN71 PIC 1 INDIC 71.
223 ð161ðð 88 DISPLAY-ACCEPT-MESSAGE VALUE B'1'.
224 ð162ðð 88 DO-NOT-DISPLAY-ACCEPT-MESSAGE VALUE B'ð'.
ð163ðð

Figura 74 (Parte 4 de 8). Listado Fuente de un Ejemplo de Programa de Actualización de Pagos

234 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Listado Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
225 ð164ðð PROCEDURE DIVISION.
ð165ðð
ð166ðð DECLARATIVES.
ð167ðð
ð168ðð TRANSACTION-ERROR SECTION.
ð169ðð USE AFTER STANDARD ERROR PROCEDURE
ð17ððð PAYMENT-UPDATE-DISPLAY-FILE.
ð171ðð WORK-STATION-ERROR-HANDLER.
226 ð172ðð IF SUBFILE-IS-FULL THEN
ð173ðð NEXT SENTENCE
ð174ðð ELSE
227 ð175ðð DISPLAY 'ERROR IN PAYMENT-UPDATE' STATUS-CODE-ONE.
ð176ðð END DECLARATIVES.
ð177ðð
ð178ðð CUSTOMER-PAYMENT-UPDATE SECTION.
ð179ðð MAINLINE-ROUTINE.
228 ð18ððð PERFORM SET-UP-ROUTINE.
229 ð181ðð PERFORM PROCESS-TRANSACTION-FILE
ð182ðð UNTIL END-OF-PAYMENT-UPDATE.
23ð ð183ðð PERFORM CLEAN-UP-ROUTINE.
ð184ðð
ð185ðð SET-UP-ROUTINE.
231 ð186ðð OPEN I-O CUSTOMER-INVOICE-FILE
ð187ðð CUSTOMER-MASTER-FILE
ð188ðð PAYMENT-UPDATE-DISPLAY-FILE.
232 ð189ðð MOVE ALL B'ð' TO INDICATOR-AREA
ð19ððð SWITCH-AREA.
233 ð191ðð ACCEPT SYSTEM-DATE FROM DATE.
234 ð192ðð MOVE SYSTEM-YEAR TO PROGRAM-YEAR.
235 ð193ðð MOVE SYSTEM-MONTH TO PROGRAM-MONTH.
236 ð194ðð MOVE SYSTEM-DATE TO PROGRAM-DAY.
237 ð195ðð SET WRITE-DISPLAY
ð196ðð CONTROL1-FORMAT
ð197ðð DO-NOT-DISPLAY-OVER-PAYMENT
ð198ðð DO-NOT-PROTECT-INPUT-FIELD
ð199ðð DO-NOT-REVERSE-FIELD-IMAGE
ð2ðððð DO-NOT-MAKE-FIELD-BLINK
ð2ð1ðð CLEAR-SUBFILE TO TRUE.
238 ð2ð2ðð MOVE CORR INDICATOR-AREA TO CONTROL1-O-INDIC.
239 ð2ð3ðð WRITE PAYMENT-UPDATE-DISPLAY-RECORD
ð2ð4ðð FORMAT IS 'CONTROL1'.
24ð ð2ð5ðð SET DO-NOT-CLEAR-SUBFILE TO TRUE.
241 ð2ð6ðð PERFORM INITIALIZE-SUBFILE-RECORD 17 TIMES.
242 ð2ð7ðð SET DISPLAY-SCREEN TO TRUE.
243 ð2ð8ðð MOVE CORR INDICATOR-AREA TO CONTROL1-O-INDIC.
244 ð2ð9ðð WRITE PAYMENT-UPDATE-DISPLAY-RECORD
ð21ððð FORMAT IS 'CONTROL1'.
245 ð211ðð READ PAYMENT-UPDATE-DISPLAY-FILE RECORD
ð212ðð FORMAT IS 'CONTROL1'.
246 ð213ðð MOVE CORR CONTROL1-I-INDIC TO INDICATOR-AREA.
ð214ðð PROCESS-TRANSACTION-FILE.
247 ð215ðð IF HELP-IS-NOT-NEEDED THEN
248 ð216ðð IF IGNORE-INPUT THEN
249 ð217ðð SET WRITE-DISPLAY
ð218ðð CONTROL1-FORMAT
ð219ðð CLEAR-SUBFILE
ð22ððð DISPLAY-FIELD
ð221ðð DO-NOT-DISPLAY-OVER-PAYMENT
ð222ðð DO-NOT-PROTECT-INPUT-FIELD
ð223ðð DO-NOT-REVERSE-FIELD-IMAGE
ð224ðð DO-NOT-DISPLAY-ACCEPT-PAYMENT
ð225ðð DO-NOT-DISPLAY-ACCEPT-HEADING
ð226ðð DO-NOT-DISPLAY-ACCEPT-MESSAGE
ð227ðð DO-NOT-MAKE-FIELD-BLINK TO TRUE
25ð ð228ðð MOVE CORR INDICATOR-AREA TO CONTROL1-O-INDIC
251 ð229ðð WRITE PAYMENT-UPDATE-DISPLAY-RECORD
ð23ððð FORMAT IS 'CONTROL1'
252 ð231ðð SET DO-NOT-CLEAR-SUBFILE TO TRUE
253 ð232ðð MOVE ð TO REL-NUMBER
254 ð233ðð PERFORM INITIALIZE-SUBFILE-RECORD 17 TIMES
ð234ðð ELSE
255 ð235ðð SET TRANSACTIONS-EXIST
ð236ðð DO-NOT-DISPLAY-ACCEPT-HEADING
ð237ðð DO-NOT-DISPLAY-ACCEPT-MESSAGE
ð238ðð DO-NOT-DISPLAY-EXCEPTION TO TRUE
256 ð239ðð PERFORM READ-MODIFIED-SUBFILE-RECORD

Figura 74 (Parte 5 de 8). Listado Fuente de un Ejemplo de Programa de Actualización de Pagos

Capítulo 8. Archivos Transacción 235


5763CB1 V3RðM5 Listado Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
257 ð24ððð PERFORM TRANSACTION-VALIDATION
ð241ðð UNTIL NO-MORE-TRANSACTIONS-EXIST
258 ð242ðð SET NO-INPUT-ERRORS-EXIST TO TRUE
259 ð243ðð PERFORM TEST-FOR-RECORD-INPUT-ERRORS
ð244ðð VARYING REL-NUMBER
ð245ðð FROM 1
ð246ðð BY 1
ð247ðð UNTIL REL-NUMBER IS GREATER THAN 17
ð248ðð OR INPUT-ERRORS-EXIST
26ð ð249ðð IF NO-INPUT-ERRORS-EXIST THEN
261 ð25ððð IF OVER-PAYMENT-DISPLAYED-ONCE THEN
262 ð251ðð SET WRITE-DISPLAY
ð252ðð CONTROL1-FORMAT
ð253ðð DO-NOT-DISPLAY-OVER-PAYMENT
ð254ðð DO-NOT-PROTECT-INPUT-FIELD
ð255ðð DO-NOT-REVERSE-FIELD-IMAGE
ð256ðð DO-NOT-MAKE-FIELD-BLINK
ð257ðð DO-NOT-DISPLAY-ACCEPT-PAYMENT
ð258ðð DO-NOT-DISPLAY-ACCEPT-HEADING
ð259ðð DO-NOT-DISPLAY-ACCEPT-MESSAGE
ð26ððð DO-NOT-DISPLAY-EXCEPTION
ð261ðð CLEAR-SUBFILE
ð262ðð DISPLAY-FIELD
ð263ðð TO TRUE
263 ð264ðð MOVE CORR INDICATOR-AREA TO CONTROL1-O-INDIC
264 ð265ðð WRITE PAYMENT-UPDATE-DISPLAY-RECORD
ð266ðð FORMAT IS 'CONTROL1'
265 ð267ðð SET DO-NOT-CLEAR-SUBFILE TO TRUE
266 ð268ðð MOVE ð TO REL-NUMBER
267 ð269ðð PERFORM INITIALIZE-SUBFILE-RECORD 17 TIMES
ð27ððð ELSE
268 ð271ðð SET OVER-PAYMENT-DISPLAYED-ONCE TO TRUE
ð272ðð ELSE
ð273ðð NEXT SENTENCE
ð274ðð ELSE
ð275ðð NEXT SENTENCE.
269 ð276ðð SET WRITE-DISPLAY, DISPLAY-SCREEN TO TRUE.
27ð ð277ðð MOVE CORR INDICATOR-AREA TO MESSAGE1-O-INDIC.
271 ð278ðð WRITE PAYMENT-UPDATE-DISPLAY-RECORD
ð279ðð FORMAT IS 'MESSAGE1'.
272 ð28ððð SET WRITE-DISPLAY, CONTROL1-FORMAT TO TRUE.
273 ð281ðð MOVE CORR INDICATOR-AREA TO CONTROL1-O-INDIC.
274 ð282ðð WRITE PAYMENT-UPDATE-DISPLAY-RECORD
ð283ðð FORMAT IS 'CONTROL1'.
275 ð284ðð READ PAYMENT-UPDATE-DISPLAY-FILE RECORD
ð285ðð FORMAT IS 'CONTROL1'.
276 ð286ðð MOVE CORR CONTROL1-I-INDIC TO INDICATOR-AREA.
ð287ðð READ-MODIFIED-SUBFILE-RECORD.
277 ð288ðð READ SUBFILE PAYMENT-UPDATE-DISPLAY-FILE
ð289ðð NEXT MODIFIED RECORD FORMAT IS 'SUBFILE1'
278 ð29ððð AT END SET NO-MORE-TRANSACTIONS-EXIST TO TRUE.
ð291ðð TEST-FOR-RECORD-INPUT-ERRORS.
279 ð292ðð READ SUBFILE PAYMENT-UPDATE-DISPLAY-FILE RECORD
ð293ðð FORMAT IS 'SUBFILE1'.
28ð ð294ðð IF STSCDE OF SUBFILE1-I IS EQUAL TO '1' THEN
281 ð295ðð SET INPUT-ERRORS-EXIST TO TRUE
ð296ðð ELSE
ð297ðð NEXT SENTENCE.
ð298ðð TRANSACTION-VALIDATION.
282 ð299ðð MOVE CUST OF SUBFILE1-I OF PAYMENT-UPDATE-DISPLAY-RECORD
ð3ðððð TO CUST OF CUSTOMER-MASTER-RECORD.
283 ð3ð1ðð SET CUSTOMER-EXIST TO TRUE.
284 ð3ð2ðð READ CUSTOMER-MASTER-FILE
285 ð3ð3ðð INVALID KEY SET CUSTOMER-NOT-FOUND TO TRUE.
286 ð3ð4ðð IF CUSTOMER-EXIST THEN
287 ð3ð5ðð MOVE CUST OF CUSMST TO CUST OF ORDHDR
288 ð3ð6ðð MOVE ZEROES TO INVNUM
289 ð3ð7ðð SET CUSTOMER-INVOICE-EXIST TO TRUE
29ð ð3ð8ðð PERFORM START-ON-CUSTOMER-INVOICE-FILE
291 ð3ð9ðð IF CUSTOMER-INVOICE-EXIST THEN
292 ð31ððð PERFORM READ-CUSTOMER-INVOICE-RECORD
293 ð311ðð IF CUSTOMER-INVOICE-EXIST THEN
294 ð312ðð PERFORM CUSTOMER-MASTER-FILE-UPDATE
295 ð313ðð MOVE AMPAID OF SUBFILE1-I TO AMOUNT-PAID
296 ð314ðð SET PAYMENT-EXIST TO TRUE

Figura 74 (Parte 6 de 8). Listado Fuente de un Ejemplo de Programa de Actualización de Pagos

236 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Listado Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
297 ð315ðð PERFORM PAYMENT-UPDATE
ð316ðð UNTIL NO-MORE-INVOICES-EXIST
ð317ðð OR NO-MORE-PAYMENT-EXIST
298 ð318ðð IF ARBAL OF CUSTOMER-MASTER-RECORD IS NEGATIVE
299 ð319ðð SET MAKE-FIELD-BLINK
ð32ððð DISPLAY-FIELD
ð321ðð DO-NOT-REVERSE-FIELD-IMAGE
ð322ðð OVER-PAYMENT-NOT-DISPLAYED
ð323ðð DISPLAY-OVER-PAYMENT
ð324ðð DISPLAY-EXCEPTION
ð325ðð DO-NOT-DISPLAY-ACCEPT-PAYMENT
ð326ðð PROTECT-INPUT-FIELD TO TRUE
3ðð ð327ðð MOVE ARBAL TO OVRPMT OF SUBFILE1-O
3ð1 ð328ðð MOVE MESSAGE-THREE TO ECPMSG OF SUBFILE1-O
3ð2 ð329ðð MOVE 'ð' TO STSCDE OF SUBFILE1-O
3ð3 ð33ððð PERFORM REWRITE-DISPLAY-SUBFILE-RECORD
ð331ðð ELSE
3ð4 ð332ðð SET DO-NOT-DISPLAY-FIELD
ð333ðð DO-NOT-DISPLAY-OVER-PAYMENT
ð334ðð DO-NOT-REVERSE-FIELD-IMAGE
ð335ðð DO-NOT-MAKE-FIELD-BLINK
ð336ðð DO-NOT-DISPLAY-ACCEPT-PAYMENT
ð337ðð PROTECT-INPUT-FIELD TO TRUE
3ð5 ð338ðð MOVE SPACES TO ECPMSG OF SUBFILE1-O
3ð6 ð339ðð MOVE ZEROES TO OVRPMT OF SUBFILE1-O
3ð7 ð34ððð MOVE 'ð' TO STSCDE OF SUBFILE1-O
3ð8 ð341ðð PERFORM REWRITE-DISPLAY-SUBFILE-RECORD
ð342ðð ELSE
3ð9 ð343ðð PERFORM NO-CUSTOMER-INVOICE-ROUTINE
ð344ðð ELSE
31ð ð345ðð PERFORM NO-CUSTOMER-INVOICE-ROUTINE
ð346ðð ELSE
311 ð347ðð SET REVERSE-FIELD-IMAGE
ð348ðð DO-NOT-PROTECT-INPUT-FIELD
ð349ðð DISPLAY-FIELD
ð35ððð DO-NOT-DISPLAY-OVER-PAYMENT
ð351ðð DO-NOT-MAKE-FIELD-BLINK
ð352ðð DISPLAY-EXCEPTION
ð353ðð DO-NOT-DISPLAY-ACCEPT-PAYMENT
ð354ðð DO-NOT-PROTECT-INPUT-FIELD TO TRUE
312 ð355ðð MOVE ZEROES TO OVRPMT OF SUBFILE1-O
313 ð356ðð MOVE MESSAGE-ONE TO ECPMSG OF SUBFILE1-O
314 ð357ðð MOVE '1' TO STSCDE OF SUBFILE1-O
315 ð358ðð PERFORM REWRITE-DISPLAY-SUBFILE-RECORD.
316 ð359ðð PERFORM READ-MODIFIED-SUBFILE-RECORD.
ð36ððð START-ON-CUSTOMER-INVOICE-FILE.
317 ð361ðð START CUSTOMER-INVOICE-FILE
ð362ðð KEY IS GREATER THAN COMP-KEY
318 ð363ðð INVALID KEY SET NO-MORE-INVOICES-EXIST TO TRUE.
ð364ðð READ-CUSTOMER-INVOICE-RECORD.
319 ð365ðð READ CUSTOMER-INVOICE-FILE NEXT RECORD
32ð ð366ðð AT END SET NO-MORE-INVOICES-EXIST TO TRUE.
321 ð367ðð IF CUST OF CUSTOMER-MASTER-RECORD
ð368ðð IS NOT EQUAL TO CUST OF CUSTOMER-INVOICE-RECORD THEN
322 ð369ðð SET NO-MORE-INVOICES-EXIST TO TRUE
ð37ððð ELSE
ð371ðð NEXT SENTENCE.
ð372ðð CUSTOMER-MASTER-FILE-UPDATE.
323 ð373ðð MOVE FILE-DATE TO LSTDAT OF CUSTOMER-MASTER-RECORD.
324 ð374ðð MOVE AMPAID OF SUBFILE1-I
ð375ðð TO LSTAMT OF CUSTOMER-MASTER-RECORD.
325 ð376ðð SUBTRACT AMPAID OF SUBFILE1-I
ð377ðð FROM ARBAL OF CUSTOMER-MASTER-RECORD.
326 ð378ðð REWRITE CUSTOMER-MASTER-RECORD.
ð379ðð REWRITE-DISPLAY-SUBFILE-RECORD.
327 ð38ððð MOVE AMPAID OF SUBFILE1-I TO AMPAID OF SUBFILE1-O.
328 ð381ðð MOVE CUST OF SUBFILE1-I TO CUST OF SUBFILE1-O.
329 ð382ðð SET WRITE-DISPLAY TO TRUE.
33ð ð383ðð SET SUBFILE1-FORMAT TO TRUE.
331 ð384ðð MOVE CORR INDICATOR-AREA TO SUBFILE1-O-INDIC.
332 ð385ðð REWRITE SUBFILE PAYMENT-UPDATE-DISPLAY-RECORD
ð386ðð FORMAT IS 'SUBFILE1'.
ð387ðð NO-CUSTOMER-INVOICE-ROUTINE.
333 ð388ðð IF STSCDE OF SUBFILE1-I IS EQUAL TO '1' THEN
334 ð389ðð IF ACPPMT OF SUBFILE1-I IS EQUAL TO '\NO' THEN
335 ð39ððð SET DO-NOT-DISPLAY-FIELD

Figura 74 (Parte 7 de 8). Listado Fuente de un Ejemplo de Programa de Actualización de Pagos

Capítulo 8. Archivos Transacción 237


5763CB1 V3RðM5 Listado Fuente AS/4ðð COBOL
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
ð391ðð DO-NOT-DISPLAY-OVER-PAYMENT
ð392ðð DO-NOT-REVERSE-FIELD-IMAGE
ð393ðð DO-NOT-MAKE-FIELD-BLINK
ð394ðð DO-NOT-DISPLAY-ACCEPT-PAYMENT
ð395ðð PROTECT-INPUT-FIELD
ð396ðð TO TRUE
336 ð397ðð MOVE SPACES TO ECPMSG OF SUBFILE1-O
337 ð398ðð MOVE ZEROES TO OVRPMT OF SUBFILE1-O
338 ð399ðð MOVE 'ð' TO STSCDE OF SUBFILE1-O
339 ð4ðððð PERFORM REWRITE-DISPLAY-SUBFILE-RECORD
ð4ð1ðð ELSE
34ð ð4ð2ðð PERFORM CUSTOMER-MASTER-FILE-UPDATE
341 ð4ð3ðð SET MAKE-FIELD-BLINK
ð4ð4ðð DISPLAY-FIELD
ð4ð5ðð DO-NOT-REVERSE-FIELD-IMAGE
ð4ð6ðð OVER-PAYMENT-NOT-DISPLAYED
ð4ð7ðð DISPLAY-OVER-PAYMENT
ð4ð8ðð DISPLAY-EXCEPTION
ð4ð9ðð DO-NOT-DISPLAY-ACCEPT-PAYMENT
ð41ððð PROTECT-INPUT-FIELD
ð411ðð TO TRUE
342 ð412ðð MOVE ARBAL TO OVRPMT OF SUBFILE1-O
343 ð413ðð MOVE MESSAGE-THREE TO ECPMSG OF SUBFILE1-O
344 ð414ðð MOVE 'ð' TO STSCDE OF SUBFILE1-O
345 ð415ðð PERFORM REWRITE-DISPLAY-SUBFILE-RECORD
ð416ðð ELSE
346 ð417ðð SET REVERSE-FIELD-IMAGE
ð418ðð DISPLAY-FIELD
ð419ðð DO-NOT-PROTECT-INPUT-FIELD
ð42ððð DO-NOT-DISPLAY-OVER-PAYMENT
ð421ðð DISPLAY-EXCEPTION
ð422ðð DISPLAY-ACCEPT-PAYMENT
ð423ðð DISPLAY-ACCEPT-HEADING
ð424ðð DISPLAY-ACCEPT-MESSAGE
ð425ðð DO-NOT-MAKE-FIELD-BLINK
ð426ðð TO TRUE
347 ð427ðð MOVE ZEROS TO OVRPMT OF SUBFILE1-O
348 ð428ðð MOVE MESSAGE-TWO TO ECPMSG OF SUBFILE1-O
349 ð429ðð MOVE '1' TO STSCDE OF SUBFILE1-O
35ð ð43ððð PERFORM REWRITE-DISPLAY-SUBFILE-RECORD.
ð431ðð PAYMENT-UPDATE.
351 ð432ðð SUBTRACT AMPAID OF CUSTOMER-INVOICE-RECORD
ð433ðð FROM ORDAMT OF CUSTOMER-INVOICE-RECORD
ð434ðð GIVING AMOUNT-OWED.
352 ð435ðð SUBTRACT AMOUNT-PAID
ð436ðð FROM AMOUNT-OWED
ð437ðð GIVING INVOICE-BALANCE.
353 ð438ðð IF INVOICE-BALANCE IS LESS THAN .ð1 THEN
354 ð439ðð MOVE 2 TO OPNSTS OF CUSTOMER-INVOICE-RECORD
355 ð44ððð MOVE ORDAMT OF CUSTOMER-INVOICE-RECORD
ð441ðð TO AMPAID OF CUSTOMER-INVOICE-RECORD
356 ð442ðð SUBTRACT AMOUNT-OWED
ð443ðð FROM AMOUNT-PAID
ð444ðð ELSE
357 ð445ðð ADD AMOUNT-PAID TO AMPAID OF CUSTOMER-INVOICE-RECORD
358 ð446ðð SET NO-MORE-PAYMENT-EXIST TO TRUE.
359 ð447ðð REWRITE CUSTOMER-INVOICE-RECORD.
36ð ð448ðð IF NO-MORE-PAYMENT-EXIST THEN
ð449ðð NEXT SENTENCE
ð45ððð ELSE
361 ð451ðð PERFORM READ-CUSTOMER-INVOICE-RECORD.
ð452ðð INITIALIZE-SUBFILE-RECORD.
362 ð453ðð MOVE SPACES TO CUST OF SUBFILE1-O.
363 ð454ðð MOVE SPACES TO ECPMSG OF SUBFILE1-O.
364 ð455ðð MOVE 'ð' TO STSCDE OF SUBFILE1-O.
365 ð456ðð MOVE ZEROS TO AMPAID OF SUBFILE1-O.
366 ð457ðð MOVE ZEROS TO OVRPMT OF SUBFILE1-O.
367 ð458ðð ADD 1 TO REL-NUMBER.
368 ð459ðð MOVE CORR INDICATOR-AREA TO SUBFILE1-O-INDIC.
369 ð46ððð WRITE SUBFILE PAYMENT-UPDATE-DISPLAY-RECORD
ð461ðð FORMAT IS 'SUBFILE1'.
ð462ðð CLEAN-UP-ROUTINE.
37ð ð463ðð CLOSE CUSTOMER-INVOICE-FILE
ð464ðð CUSTOMER-MASTER-FILE
ð465ðð PAYMENT-UPDATE-DISPLAY-FILE.
371 ð466ðð STOP RUN.
\ \ \ \ \ F I N D E F U E N T E \ \ \ \ \

Figura 74 (Parte 8 de 8). Listado Fuente de un Ejemplo de Programa de Actualización de Pagos

Esta es la pantalla incial que se graba en la estación de trabajo para solicitar al


usuario la entrada del número de cliente y pago:

238 COBOL/400 Guía del usuario


à ð
Solicitud de Actualización Pagos de Cliente Fecha ð5/24/94

Cliente Pago

______ __________
______ __________
______ __________
______ __________
______ __________
______ __________
______ __________
______ __________
______ __________
______ __________

______ __________
______ __________
______ __________
______ __________
______ __________

á ñ
El usuario entra los números de cliente y pagos:

à ð
Solicitud de Actualización Pagos de Cliente Fecha ð5/24/94

Cliente Pago

345ðð 2ððð
4ð5ðð 3ðððð
36ððð 25ðð
125ðð 2ðð
22799 45ðð
419ðð 75ðð
1ððð1 5ððð
495ðð 25ðð
133ðð 35ðð
569ðð 4ððð

á ñ
Los pagos excesivos o que tengan números incorrectos de cliente se dejan en la
pantalla y se añaden mensajes adecuados:

Capítulo 8. Archivos Transacción 239


à Solicitud de Actualización Pagos de Cliente Fecha ð5/24/94
ð
Aceptar Cliente Pago Mensaje de Excepción
Pago

_____ 4ð5ðð 3ðððð NO EXISTEN FACTURAS PARA CLIENTES

_____ 125ðð 2ðð NO EXISTEN FACTURAS PARA CLIENTES

_____ 419ðð 75ðð NO EXISTEN FACTURAS PARA CLIENTES


1ððð1 5ððð CLIENTE NO EXISTE

_____ 133ðð 35ðð NO EXISTEN FACTURAS PARA CLIENTES

Aceptar valores de pago: (\NO \YES)

á ñ
Indique qué pagos hay que aceptar:

à Solicitud de Actualización Pagos de Cliente Fecha ð5/24/94


ð
Aceptar Cliente Pago Mensaje de Excepción
Pago

\NO 4ð5ðð 3ðððð NO EXISTEN FACTURAS PARA CLIENTES

\YES 125ðð 2ðð NO EXISTEN FACTURAS PARA CLIENTES

\NO 419ðð 75ðð NO EXISTEN FACTURAS PARA CLIENTES


1ððð1 5ððð CLIENTE NO EXISTE

\NO 133ðð 35ðð NO EXISTEN FACTURAS PARA CLIENTES

Aceptar valores de pago: (\NO \YES)

á ñ
Se procesan los pagos aceptados y se visualiza la información de pagos exce-
sivos:

240 COBOL/400 Guía del usuario


à Solicitud de Actualización Pagos de Cliente Fecha ð5/24/94
ð
Aceptar Cliente Pago Mensaje de Excepción
Pago

125ðð 2ðð CLIENTE TIENE PAGO EXCESIVO DE 58.5ð

1ððð1 5ððð CLIENTE NO EXISTE

á ñ
Fin de Ampliación de IBM

Capítulo 8. Archivos Transacción 241


242 COBOL/400 Guía del usuario
Capítulo 9. Archivos de Impresora
En este capítulo se describe cómo COBOL/400 interactúa con los distintos tipos de
archivos de impresora.

Es posible obtener salida impresa de un programa COBOL emitiendo instrucciones


WRITE a uno o más archivos de impresora. Cada archivo de impresora debe
tener un nombre único y debe estar asignado a un dispositivo PRINTER o
FORMATFILE en la cláusula ASSIGN de esa entrada FILE-CONTROL del archivo.

Debe utilizarse un dispositivo PRINTER (impresora) para los archivos descritos por
programa, y debe utilizarse un dispositivo FORMATFILE para archivos de impre-
sora descritos externamente. El mandato Crear Archivo de Impresión (CRTPRTF)
puede utilizarse para crear un archivo de impresora (consulte el manual CL
Reference para obtener más información sobre el mandato CRTPRTF) o un
archivo de dispositivo de impresora suministrado por IBM, como por ejemplo
QPRINT.

Las operaciones de archivo válidas para un archivo de impresora son WRITE,


OPEN y CLOSE. Para obtener una descripción completa de estas operaciones,
consulte el manual COBOL/400 Reference.

Consulte la publicación DDS Reference para obtener más información sobre DDS
para archivos de impresora descritos externamente. Para obtener más información
acerca de los archivos FORMATFILE, consulte el apartado “Archivos
FORMATFILE” en la página 244.

Párrafo SPECIAL-NAMES y Frase ADVANCING


Cuando se especifica el nombre mnemotécnico asociado con el nombre de función
CSP en la frase ADVANCING de una instrucción WRITE para un archivo de impre-
sora, se obtiene el mismo resultado que si se especifica ADVANCING 0 LINES.

Cuando se especifica el nombre mnemotécnico asociado con el nombre de función


C01 en la frase ADVANCING de una instrucción WRITE para un archivo de impre-
sora, se obtiene el mismo resultado que si se especifica ADVANCING PAGE.

La frase ADVANCING no puede especificarse en instrucciones WRITE para


archivos asignados a FORMATFILE.

Cláusula LINAGE
Cuando se especifica la cláusula LINAGE para un archivo asignado a PRINTER,
todos los controles de espaciado y paginación se manejan internamente por el
código generado por el compilador.

La colocación del papel sólo se realiza cuando se ejecuta la primera instrucción


WRITE. El papel de la impresora se coloca en una nueva página física y
LINAGE-COUNTER se establece en 1. Cuando se comparte el archivo de impre-
sora y otros programas poseen registros escritos en el archivo, la instrucción
COBOL WRITE aún se considera la primera instrucción WRITE. El compilador
COBOL/400 maneja la colocación del papel aunque no sea la primera instrucción
WRITE para ese archivo.

 Copyright IBM Corp. 1994 243


Todo el espaciado y la paginación de las instrucciones WRITE se controla inter-
namente. El tamaño físico de la página se ignora cuando la posición del papel no
se define correctamente para el compilador COBOL/400. Para un archivo con una
cláusula LINAGE y que esté asignado a PRINTER, la paginación incluye el espa-
ciado hasta el final de la página lógica (cuerpo de la página) y en el espaciado
hasta los márgenes inferiores y superiores.

La utilización de la cláusula LINAGE degrada el rendimiento. La cláusula LINAGE


sólo debe utilizarse cuando sea necesaria. Si la paginación física es aceptable, no
se necesita la cláusula LINAGE.

La claúsula LINAGE no debe utilizarse para los archivos asignados a


FORMATFILE.

Archivos FORMATFILE
Los archivos de impresora descritos externamente deben asignarse a un disposi-
tivo de FORMATFILE. El término FORMATFILE se utiliza porque la frase
FORMAT es válida en instrucciones WRITE para el archivo, y el formato de los
datos se especifica en las DDS para el archivo.

Cuando se ha especificado un dispositivo FORMATFILE, se puede obtener el


formato de la salida impresa de dos maneras:
1. Elija los formatos que han de imprimirse y en qué orden utilizando valores
apropiados en las frases FORMAT especificadas en las instrucciones WRITE.
Por ejemplo, utilice un formato una sola vez por página para producir un enca-
bezamiento, y utilice otro formato para producir las líneas de detalle en la
página.
2. Elija las opciones apropiadas que han de tomarse cuando se imprime cada
formato estableciendo los valores de los indicadores y transfiriendo estos indi-
cadores a la frase INDICATOR para la instrucción WRITE. Por ejemplo, los
campos pueden subrayarse, las líneas en blanco pueden producirse antes o
después de imprimir el formato o puede saltarse la impresión de ciertos
campos.

El uso de descripciones externas para archivos de impresora disfruta de las


siguientes ventajas con respecto a las descripciones de programa:
Ÿ Pueden imprimirse varias líneas mediante una instrucción WRITE. Cuando
una instrucción WRITE escribe varias líneas y se alcanza la condición
END-OF-PAGE, la instrucción imperativa END-OF-PAGE se procesa cuando
se han imprimido todas las líneas. Es posible imprimir líneas en el área de
desbordamiento, y en la página siguiente antes de que se procese la instruc-
ción imperativa END-OF-PAGE.
La Figura 75 en la página 245 muestra un ejemplo de una aparición de la con-
dición END-OF-PAGE en FORMATFILE.
Ÿ Se pueden imprimir opcionalmente campos basándose en valores del indi-
cador.
Ÿ La edición de los valores de campos se define fácilmente.
Ÿ Es más fácil el mantenimiento de formatos de impresión, especialmente los uti-
lizados por múltiples programas.

244 COBOL/400 Guía del usuario


La utilización de la frase ADVANCING para archivos FORMATFILE origina la
emisión de un mensaje de error. El avance de líneas se controla en un archivo
FORMATFILE mediante palabras clave DDS, como por ejemplo SKIPA y SKIPB,
así como mediante el uso de números de línea.

Para los archivos FORMATFILE, la cláusula LINAGE no es válida.

5763CB1 V3RðM5 Fuente COBOL AS/4ðð


INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ððð1ðð IDENTIFICATION DIVISION. ð2/ð1/94
2 ððð2ðð PROGRAM-ID. FRMTFILE. ð3/22/94
3 ððð3ðð AUTHOR. PROGRAMMER NAME. ð1/27/94
4 ððð4ðð INSTALLATION. TORONTO COBOL DEVELOPMENT CENTRE. ð1/27/94
5 ððð5ðð DATE-WRITTEN. ð2/ð2/89. ð2/ð4/94
8 ðððð8ð DATE-COMPILED. ð5/24/94 14:29:31 . ð3/ð1/94
7 ððð7ðð ENVIRONMENT DIVISION. ð1/27/94
8 ððð8ðð CONFIGURATION SECTION. ð1/27/94
9 ððð9ðð SOURCE-COMPUTER. IBM-AS4ðð. ð1/27/94
1ð ðð1ððð OBJECT-COMPUTER. IBM-AS4ðð. ð1/27/94
11 ðð11ðð INPUT-OUTPUT SECTION. ð1/27/94
12 ðð12ðð FILE-CONTROL. ð1/27/94
13 ðð13ðð SELECT PERSREPT ASSIGN TO FORMATFILE-PERSREPT-SI .1/ ð2/ð4/94
14 ðð14ðð ORGANIZATION IS SEQUENTIAL. ð2/ð4/94
15 ðð15ðð SELECT PERSFILE ASSIGN TO DATABASE-PERSFILE ð2/ð4/94
16 ðð16ðð ORGANIZATION IS INDEXED ð2/ð4/94
17 ðð17ðð ACCESS MODE IS SEQUENTIAL ð2/ð4/94
18 ðð18ðð RECORD IS EXTERNALLY-DESCRIBED-KEY. ð2/ð4/94
19 ðð19ðð DATA DIVISION. ð1/27/94
2ð ðð2ððð FILE SECTION. ð1/27/94
21 ðð21ðð FD PERSREPT ð2/ð4/94
22 ðð22ðð LABEL RECORDS ARE STANDARD. ð2/ð4/94
23 ðð23ðð ð1 PERSREPT-REC. ð2/ð4/94
24 ðð24ðð COPY DDS-ALL-FORMATS-O OF PERSREPT. .2/
25 +ððððð1 ð5 PERSREPT-RECORD PIC X(13ð). <-ALL-FMTS
+ððððð2\ FORMATO SALIDA:HEADING DESDE ARCHIVO PERSREPT DE BIBLIOT. XMPLIB <-ALL-FMTS
+ððððð3\ <-ALL-FMTS
26 +ððððð4 ð5 HEADING-O REDEFINES PERSREPT-RECORD. <-ALL-FMTS
27 +ððððð5 ð6 ORDERTYPE PIC X(15). <-ALL-FMTS
+ððððð6\ FORMATO SALIDA:DETAIL DESDE ARCHIVO PERSREPT DE BIBLIOT. XMPLIB <-ALL-FMTS
+ððððð7\ <-ALL-FMTS
28 +ððððð8 ð5 DETAIL-O REDEFINES PERSREPT-RECORD. .3/ <-ALL-FMTS
29 +ððððð9 ð6 NAME PIC X(3ð). <-ALL-FMTS
3ð +ðððð1ð ð6 EMPLNO PIC S9(6). <-ALL-FMTS
31 +ðððð11 ð6 BIRTHDATE PIC X(6). <-ALL-FMTS
32 +ðððð12 ð6 ADDRESS1 PIC X(35). <-ALL-FMTS
33 +ðððð13 ð6 MARSTAT PIC X(1). <-ALL-FMTS
34 +ðððð14 ð6 SPOUSENAME PIC X(3ð). <-ALL-FMTS
35 +ðððð15 ð6 ADDRESS2 PIC X(2ð). <-ALL-FMTS
36 +ðððð16 ð6 NUMCHILD PIC S9(2). <-ALL-FMTS
37 ðð25ðð FD PERSFILE
38 ðð26ðð LABEL RECORDS ARE STANDARD.
39 ðð27ðð ð1 PERSFILE-REC.
4ð ðð28ðð COPY DDS-ALL-FORMATS-O OF PERSFILE.
41 +ððððð1 ð5 PERSFILE-RECORD PIC X(13ð). <-ALL-FMTS
+ððððð2\ FORMATO E-S:PERSREC DESDE ARCHIVO PERSFILE DE BIBLOTE. XMPLIB <-ALL-FMTS
+ððððð3\ <-ALL-FMTS
+ððððð4\DEFINICIONES CLAVE PARA FORMATO DE REGISTRO PERSREC <-ALL-FMTS
+ððððð5\ NÚMERO NOMBRE RECUPERACIÓN TIPO ALTSEQ <-ALL-FMTS
+ððððð6\ ððð1 EMPLNO ASCENDENTE SIGNO NO <-ALL-FMTS
42 +ððððð7 ð5 PERSREC REDEFINES PERSFILE-RECORD. <-ALL-FMTS
43 +ððððð8 ð6 EMPLNO PIC S9(6). <-ALL-FMTS
44 +ððððð9 ð6 NAME PIC X(3ð). <-ALL-FMTS
45 +ðððð1ð ð6 ADDRESS1 PIC X(35). <-ALL-FMTS
46 +ðððð11 ð6 ADDRESS2 PIC X(2ð). <-ALL-FMTS
47 +ðððð12 ð6 BIRTHDATE PIC X(6). <-ALL-FMTS
48 +ðððð13 ð6 MARSTAT PIC X(1). <-ALL-FMTS
49 +ðððð14 ð6 SPOUSENAME PIC X(3ð). <-ALL-FMTS
5ð +ðððð15 ð6 NUMCHILD PIC S9(2). <-ALL-FMTS
51 ðð29ðð WORKING-STORAGE SECTION.
52 ðð3ððð 77 HEAD-ORDER PIC X(15)
53 ðð31ðð VALUE "EMPLOYEE NUMBER".
54 ðð32ðð ð1 PERSREPT-INDICS.
55 ðð33ðð COPY DDS-ALL-FORMATS-O-INDIC OF PERSREPT. .4/

Figura 75 (Parte 1 de 2). Ejemplo de la Condición END-OF-PAGE

Capítulo 9. Archivos de Impresora 245


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
56 +ððððð1 ð5 PERSREPT-RECORD. <-ALL-FMTS
+ððððð2\ FORMATO SALIDA:HEADING DESDE ARCHIVO PERSREPT DE BIBLIOT. XMPLIB <-ALL-FMTS
+ððððð3\ <-ALL-FMTS
+ððððð4\ ð6 HEADING-O-INDIC. <-ALL-FMTS
+ððððð5\ FORMATO SALIDA:DETAIL DESDE ARCHIVO PERSREPT DE BIBLIOT. XMPLIB <-ALL-FMTS
+ððððð6\ <-ALL-FMTS
57 +ððððð7 ð6 DETAIL-O-INDIC. <-ALL-FMTS
58 +ððððð8 ð7 INð1 PIC 1 INDIC ð1. <-ALL-FMTS
ðð34ðð
59 ðð35ðð 77 EOF-FLAG PIC X(1)
6ð ðð36ðð VALUE "ð".
61 ðð37ðð 88 NOT-END-OF-FILE VALUE "ð".
62 ðð38ðð 88 END-OF-FILE VALUE "1".
63 ðð39ðð 77 MARRIED PIC X(1)
64 ðð4ððð VALUE "M".
ðð41ðð
65 ðð42ðð PROCEDURE DIVISION.
ðð43ðð FIRST-SECT SECTION.
ðð44ðð FIRST-PARA.
66 ðð45ðð OPEN INPUT PERSFILE
ðð46ðð OUTPUT PERSREPT.
67 ðð47ðð PERFORM HEADING-LINE.
68 ðð48ðð PERFORM PROCESS-RECORD UNTIL END-OF-FILE.
69 ðð49ðð CLOSE PERSFILE
ðð5ððð PERSREPT.
7ð ðð51ðð STOP RUN.
ðð52ðð
ðð53ðð PROCESS-RECORD.
71 ðð54ðð READ PERSFILE AT END SET END-OF-FILE TO TRUE.
73 ðð55ðð IF NOT-END-OF-FILE THEN
74 ðð56ðð PERFORM PRINT-RECORD. .5/
ðð57ðð
ðð58ðð PRINT-RECORD.
75 ðð59ðð MOVE CORR PERSREC TO DETAIL-O. .6/
76 ðð6ððð IF MARSTAT IN PERSFILE-REC IS EQUAL MARRIED THEN .7/
77 ðð61ðð MOVE B"1" TO INð1 IN DETAIL-O-INDIC
ðð62ðð ELSE
78 ðð63ðð MOVE B"ð" TO INð1 IN DETAIL-O-INDIC.
79 ðð64ðð WRITE PERSREPT-REC FORMAT IS "DETAIL" .8/
ðð65ðð INDICATORS ARE DETAIL-O-INDIC
8ð ðð66ðð AT EOP PERFORM HEADING-LINE. .9/
ðð67ðð HEADING-LINE.
81 ðð68ðð MOVE HEAD-ORDER TO ORDERTYPE
82 ðð69ðð WRITE PERSREPT-REC FORMAT IS "HEADING".
ðð7ððð
\ \ \ \ \ F I N D E F U E N T E \ \ \ \ \

Figura 75 (Parte 2 de 2). Ejemplo de la Condición END-OF-PAGE

.1/ El archivo de impresora descrito externamente se asigna al dispositivo


FORMATFILE.
.2/ La instrucción COPY de Formato 2 se utiliza para copiar los campos para el
archivo de impresora en el programa.
.3/ Tenga en cuenta que, a pesar de que los campos del formato DETAIL se
imprimirán en tres líneas separadas, están definidos en un registro.
.4/ COPY-DDS se utiliza para copiar los indicadores utilizados en el archivo de
impresora del programa.
.5/ El párrafo PROCESS-RECORD procesa PRINT-RECORD para cada registro
de empleado.
.6/ Todos los campos en el registro de empleado se trasladan al registro para el
formato DETAIL.
.7/ Si el empleado está casado, se activa el indicador 01; si no, el indicador se
desactiva, evitando que se imprima el campo de nombre de la esposa en
DETAIL.

246 COBOL/400 Guía del usuario


.8/ Se imprime el formato DETAIL con el indicador 01, transferido para controlar
la impresión.
.9/ Si se ha excedido el número de líneas por página, se produce
END-OF-PAGE. El formato HEADING se imprime en la página siguiente.

AS/400 ESPECIFICACIONES DE DESCRIPCION DE DATOS GX21-9891-0 UM/050*


Impreso en España
International Business Machines
*El núm ero de hojas por área de re lleno puede variar lige ram ente.

Archivo Signo Descripción Página de


Instrucciones
de Grabación
Programador Fecha Tecla
T i p o N o m b r e o E s p e c (/b / R / H / J / K / S / O )

Condicionamiento

Tipo Datos/Desplazamiento Teclado


Ubicación

U t i l i z a c/i ó n ( b / O / I / B / H / M / N / P )
And/Or/Com ent. (A/O/*)

Nombre Condición
Tipo de Formula rio

Nom bre Longitud Funciones


Referencia (R)

Nú mero d e
Secuencia

Posiciones
Reservado

D ecimales
Indicador

Indicador

Indicador
No (N)

No (N)
No (N)

Línea Pos

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80

A * AR CH I VO F I S I CO DD S P AR A A R CH I VO P E R S ONA L E N E J E MP L O F OR MA T F I L E
A
A * R P E R S R EC
A E MP L NO 6 S
A N AM E 3 0
A ADD R E S S 1 3 5
A ADD R E S S 2 2 0
A B I R T HDA T E 6
A MA R S T A T 1
A S P O U S E N AM E 3 0
A N U MC H I L D 2 S
A K E MP L NO
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A

Figura 76 (Parte 1 de 2). Ejemplo de DDS de la Utilización de Archivos de Impresora Descritos Externamente Asig-
nados a un Dispositivo de FORMATFILE

Capítulo 9. Archivos de Impresora 247


G X 2 1 - 9 8 9 1 - 0 U M / 0 5 0 *
A S / 4 0 0 E S P E C I F I C A C I O N E S D E D E S C R I P C I O N D E D AT O S Impreso en España
Inter national B usiness Machines
*El número de hojas por área de relleno puede variar ligeramente.

Archivo Signo Descripción Página de


Instrucciones

de Grabación
Programador Fecha Tecla

(/b / R / H / J / K / S / O )
Condicionamiento

Datos/Desplazamiento Teclado

(b/O /I/B/H/M/N/P)
Ubicación
(A/O/*)

Espec

Nombre Condición
Formula rio

And/Or/Coment.

Nom bre Longitud Funciones

Referencia (R)
Nombre

Nú mero d e

U t i l i z a c/i ó n
Posiciones
Secuencia
Reservado

D ecimales
Indicador

Indicador

Indicador
de

No (N)

No (N)
No (N)

Línea P o s
Tipo

Tipo

Tipo
1 2 3 4 5 6 7 8 9 10 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0

A * A R C H I VO I MP R E S OR A D D S P A R A E J E MP L O F O R MA T F I L E

A *

A I ND A R A R E F ( P E R S F I L E )

A R H E AD I NG S K I P B ( 1 ) S P AC E A ( 3 )

A 1 5 ' L I S T A DO P E R S ON A L '

A U ND E R L I N E

A 3 3 ' - P E D I DO P O R '

A OR D E R T Y P E 1 5 4 6

A 8 0 D A T E E D T CD E ( Y )

A 9 3 T I M E

A 1 1 5 ' P AG I N A : '

A + 1 P AGN B R E D T CD E ( 3 )

A *

A R D E T A I L S P AC E A ( 3 )

A * L I N E 1

A 1 ' N OM B R E : '

A N AM E R 1 1 U ND E R L I N E

A 5 5 ' N UM E R O E MP L E A DO : '

A E MP L NO R 7 3

A 8 7 ' F E C H A D E N AC I M I E N T O : '

A B I R T H D A T E R 1 0 3 S P AC E A ( 1 )

A * L I N E 2

A 1 ' D I R E CC I ON : '

A A D D R E S S 1 R 1 1

A 5 5 ' E S T AD O C I V I L : '

A MA R S T A T R 7 3

A 0 1 8 7 ' N OM B R E E S P O S A : '

A 0 1 S P O U S E N AM E R 1 0 3

A * L I N E 3

A A D D R E S S 2 R 1 1 S P AC E B ( 1 )

A 5 5 ' H I J O S : '

A N U MC H I L D R 7 3 E D T CD E ( 3 )

Figura 76 (Parte 2 de 2). Ejemplo de DDS de la Utilización de Archivos de Impresora Descritos Externamente Asig-
nados a un Dispositivo de FORMATFILE

.1/ INDARA especifica que el archivo utilizará un área de indicadores separada.


.2/ HEADING es el nombre de formato que proporciona encabezamientos para
cada página.
.3/ SKIPB(1) y SPACEA(3) se utilizan para:
1. Saltar a la línea 1 de la página siguiente antes de que se imprima el
formato HEADING.
2. Dejar 3 líneas en blanco después de que imprima el formato HEADING.
.4/ DATE, TIME y PAGNBR se utilizan para imprimir automáticamente la fecha,
hora y número de página actual cuando se imprime el formato HEADING.

248 COBOL/400 Guía del usuario


.5/ DETAIL es el nombre de formato que se utiliza para imprimir la línea de
detalle para cada empleado en el archivo de personal.
.6/ SPACEA(3) hace que se dejen tres líneas en blanco a la izquierda después
de cada línea de detalle de empleado.
.7/ SPACEA(1) hace que se imprima una línea en blanco después de que
imprima el campo BIRTHDATE. Como resultado, los campos subsiguientes
en el mismo formato se imprimen en una línea nueva.
.8/ 01 significa que estos campos sólo se imprimen si el programa COBOL
activa el indicador 01 y lo transfiere cuando se imprime el formato DETAIL.
.9/ EDTCDE(3) se utiliza para eliminar los ceros a la izquierda cuando se
imprime este campo numérico.

Capítulo 9. Archivos de Impresora 249


250 COBOL/400 Guía del usuario
Capítulo 10. Archivos DISK y DATABASE
Los archivos de base de datos, que se asocian con los dispositivos COBOL de
DATABASE y DISK, pueden ser:
Ÿ Archivos descritos externamente, cuyos campos se describen a OS/400
mediante las DDS
Ÿ Archivos descritos por el programa, cuyos campos se describen en el pro-
grama que utiliza el archivo.

Todos los archivos de base de datos se crean mediante los mandatos Crear
Archivo de OS/400. Consulte el manual Guía para la Base de Datos para obtener
una descripción sobre el mandato Crear Archivo para archivos de bases de datos.

Archivos DATABASE frente a Archivo DISK


La asignación de un archivo a DISK en COBOL limita al usuario al proceso tradi-
cional DISK. La utilización de DATABASE como dispositivo permite que el usuario
utilice las características especiales de COBOL/400, como por ejemplo formatos y
claves de registro duplicadas.

Métodos de Proceso para Archivos DISK y DATABASE

Archivos Indexados COBOL


Un archivo indexado es un archivo cuya vía de acceso se ha creado mediante
valores de claves. El usuario debe crear una vía de acceso por clave para un
archivo indexado utilizando las DDS.

Para escribir programas en ANSI X3.23-1985 COBOL estándar que acceden a un


archivo indexado, es preciso crear un archivo con una serie de características
determinadas. La tabla siguiente lista estas características así como los elementos
que las controlan:

Característica Control
El archivo debe ser un archivo físico. El mandato CL CRTPF
El archivo no puede tener registros con La palabra clave UNIQUE de
valores de clave duplicados. las DDS
El archivo no puede ser un archivo compartido El mandato CL CRTPF
Debe definirse una clave para el archivo. DDS
Las claves deben estar en secuencia ascen- DDS
dente.
Las claves han de ser contiguas dentro del DDS
registro.
Los campos de clave deben ser DDS
alfanuméricos. No pueden ser sólo numéricos.
El valor de la clave utilizada para poner en DDS
secuencia debe incluir 8 bits de cada byte.
No puede especificarse una posición inicial El mandato CL OVRDBF
para recuperar registros.

 Copyright IBM Corp. 1994 251


Característica Control
No pueden utilizarse para el archivo palabras DDS
clave a nivel de seleccionar/omitir.

Un archivo indexado se identifica mediante la cláusula ORGANIZATION IS


INDEXED de la instrucción SELECT.

Los campos de clave identifican los registros en un archivo indexado. El usuario


especifica el campo de clave en la cláusula RECORD KEY de la instrucción
SELECT. El ítem de datos RECORD KEY debe definirse dentro de una descrip-
ción de registro para el archivo indexado. Si hay múltiples descripciones de registro
para el archivo, sólo una necesita contener el nombre de datos RECORD KEY. No
obstante, se accede a las mismas posiciones en la descripción de registro que
contienen el ítem de datos RECORD KEY en las otras descripciones de registro
como el valor KEY para cualquier referencia a otras descripciones para ese
archivo.

Se puede accederse a un archivo indexado de forma secuencial dinámicamente o


al azar mediante una clave.

RECORD KEYS Válidas


Las DDS para el archivo especifican los campos a utilizar como campo de clave. Si
el archivo posee campos de clave múltiples, el campo de clave debe ser contiguo
en cada registro a no ser que se especifique RECORD KEY IS
EXTERNALLY-DESCRIBED-KEY.

Cuando las DDS especifican sólo un campo clave para el archivo, RECORD KEY
debe ser un sólo campo con la misma longitud que el campo clave definido en las
DDS.

Si una instrucción COPY de Formato 2 se especifica para el archivo, la cláusula


RECORD KEY debe especificar una de las siguientes condiciones:
Ÿ El nombre utilizado en las DDS para el campo de clave si el nombre no es una
palabra reservada de COBOL.
Ÿ El nombre utilizado en las DDS para el campo de clave añadiendo -DDS al
final si el nombre es una palabra reservada de COBOL.
Ÿ El nombre de datos definido en una descripción de registro descrita por pro-
grama para el archivo, con la longitud apropiada y en la ubicación correcta.
Ÿ EXTERNALLY-DESCRIBED-KEY. Esta palabra clave especifica que las claves
definidas en DDS para cada formato de registro deben utilizarse para acceder
al archivo. No es preciso que estas claves sean contiguas. Pueden definirse
en distintas posiciones dentro del formato de registro.

Cuando las DDS especifican múltiples campos clave contiguos, el nombre de clave
RECORD KEY debe ser un campo único cuya longitud sea igual a la suma de las
longitudes de múltiples campos de clave en las DDS. Si se especifica para el
archivo una instrucción COPY de Formato 2, también debe haber una descripción
de registro descrita por programa para el archivo que define el nombre de datos
RECORD KEY con la longitud y ubicación adecuada en el registro.

252 COBOL/400 Guía del usuario


Los Ítems contiguos son ítems de grupo o elementales consecutivos en la Divi-
sión de Datos que forman parte de una jerarquía de datos única.

Referencia a una Clave Parcial


Una instrucción START genérica permite utilizar una clave parcial. Se necesita la
frase KEY IS.

Consulte el apartado “Instrucción START” de la publicación COBOL/400 Reference


para obtener más información acerca de las normas necesarias para especificar un
argumento de búsqueda que haga referencia a una clave parcial.

La Figura 77 en la página 254 muestra un ejemplo de instrucciones START gené-


ricas que utilizan un archivo descrito por el programa.

Capítulo 10. Archivos DISK y DATABASE 253


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
7 ððð7ðð FILE-CONTROL.
8 ððð8ðð SELECT FILE-1 ASSIGN TO DISK-FILE1
9 ððð9ðð ACCESS IS DYNAMIC RECORD KEY IS FULL-NAME IN FILE-1
1ð ðð1ððð ORGANIZATION IS INDEXED.
11 ðð11ðð DATA DIVISION.
12 ðð12ðð FILE SECTION.
13 ðð13ðð FD FILE-1 LABEL RECORDS ARE STANDARD.
14 ðð14ðð ð1 RECORD-DESCRIPTION.
15 ðð15ðð ð3 FULL-NAME.
16 ðð16ðð ð5 LAST-AND-FIRST-NAMES.
17 ðð17ðð ð7 LAST-NAME PIC X(2ð).
18 ðð18ðð ð7 FIRST-NAME PIC X(2ð).
19 ðð19ðð ð5 MIDDLE-NAME PIC X(2ð).
2ð ðð2ððð ð3 LAST-FIRST-MIDDLE-INITIAL-NAME REDEFINES FULL-NAME
21 ðð21ðð PIC X(41).
22 ðð22ðð ð3 REST-OF-RECORD
ðð23ðð/
23 ðð24ðð PROCEDURE DIVISION.
ðð25ðð START-PROGRAM.
24 ðð26ðð OPEN INPUT FILE-1.
ðð27ðð\
ðð28ðð\ SITÚA EL ARCHIVO COMENZANDO CON REGISTROS QUE TENGAN EL APELLIDO
ðð29ðð\ "SMITH"
25 ðð3ððð MOVE "SMITH" TO LAST-NAME.
26 ðð31ðð START FILE-1 KEY IS EQUAL TO LAST-NAME
27 ðð32ðð INVALID KEY DISPLAY "NO DATA IN SYSTEM FOR " LAST-NAME
28 ðð33ðð GO-TO ERROR ROUTINE.
ðð34ðð\
ðð35ðð\
ðð36ðð\
ðð37ðð\
ðð38ðð\ SITÚA EL ARCHIVO COMENZANDO CON REGISTROS QUE TENGAN EL APELLIDO
ðð39ðð\ "SMITH" Y EL NOMBRE DE "ROBERT"
29 ðð4ððð MOVE "SMITH" TO LAST-NAME.
3ð ðð41ðð MOVE "ROBERT" TO FIRST-NAME.
31 ðð42ðð START FILE-1 KEY IS EQUAL TO LAST-AND-FIRST-NAMES
32 ðð43ðð INVALID KEY DISPLAY "NO DATA IN SYSTEM FOR "
ðð44ðð LAST-AND-FIRST-NAMES
33 ðð45ðð GO-TO ERROR ROUTINE.
ðð46ðð\
ðð47ðð\
ðð48ðð\
ðð49ðð\
ðð5ððð\ SITÚA EL ARCHIVO COMENZANDO CON REGISTROS QUE TENGAN EL APELLIDO
ðð51ðð\ "SMITH", EL NOMBRE "ROBERT", Y LA INICIAL DEL SEGUNDO NOMBRE SEA "M"
34 ðð52ðð MOVE "SMITH" TO LAST-NAME.
35 ðð53ðð MOVE "ROBERT" TO FIRST-NAME.
36 ðð54ðð MOVE "M" TO MIDDLE-NAME.
37 ðð55ðð START FILE-1 KEY IS EQUAL TO LAST-AND-FIRST-MIDDLE-INITIAL-NAME
38 ðð56ðð INVALID KEY DISPLAY "NO DATA IN SYSTEM FOR "
ðð57ðð LAST-FIRST-MIDDLE-INITIAL-NAME
39 ðð58ðð GO-TO ERROR ROUTINE.
ðð59ðð
ðð6ððð
ðð61ðð ERROR-ROUTINE.
4ð ðð62ðð STOP-RUN.

Figura 77. Instrucciones START que utilizan un archivo descrito por el programa

La Figura 78 y la Figura 79 muestran un ejemplo de instrucciones START gené-


ricas que utilizan un archivo descrito externamente.

254 COBOL/400 Guía del usuario


FUENTE DE DESCRIPCION DE DATOS
NUMSEC \... ... 1 ... ... 2 ... ... 3 ... ... 4 ... ... 5 ... ... 6 ... ... 7 ... ... 8 FECH
1ðð A UNIQUE
2ðð A R RDE TEXT('DESCRIPCIÓN DE REGISTRO')
3ðð A FNAME 2ð TEXT('NOMBRE')
4ðð A MINAME 1 TEXT('INICIAL/SEGUNDO NOMBRE')
5ðð A MNAME 19 TEXT('RESTO DEL SEGUNDO NOMBRE')
6ðð A LNAME 2ð TEXT('APELLIDO')
7ðð A PHONE 1ð ð TEXT('NÚMERO DE TELÉFONO')
8ðð A DATA 4ð TEXT('DATOS RESTANTES')
9ðð A K LNAME
1ððð A K FNAME
11ðð A K MINAME
12ðð A K MNAME

Figura 78. Instrucciones START Genéricas que Utilizan un archivo Descrito Externamente -- DDS

Capítulo 10. Archivos DISK y DATABASE 255


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
7 ððð7ðð FILE-CONTROL.
8 ððð8ðð SELECT FILE-1 ASSIGN TO DATABASE-NAMES
9 ððð9ðð ACCESS IS DYNAMIC RECORD KEY IS EXTERNALLY-DESCRIBED-KEY
1ð ðð1ððð ORGANIZATION IS INDEXED.
11 ðð11ðð DATA DIVISION.
12 ðð12ðð FILE SECTION.
13 ðð13ðð FD FILE-1 LABEL RECORDS ARE STANDARD.
14 ðð14ðð ð1 RECORD-DESCRIPTION
15 ðð15ðð COPY DDS-RDE IN NAMES-PUBS.
17 +ððððð1 RDE
+ððððð2\ DESDE FILE NAMES DE BIBLIOTECA XMPLIB RDE
+ððððð3\ DESCRIPCIÓN DE REGISTRO RDE
18 +ððððð4 ð5 RDE. RDE
+ððððð5\ CLAVE DE REG. PARA ARCH. INDEX. CLAVE'ððð2 NOM. CAMPO CLAVE FNAME . RDE
19 +ððððð6 ð6 FNAME PIC X(2ð). RDE
+ððððð7\ NOMBRE RDE
+ððððð8\ CLAVE ARCH. PARA ARCH. INDEX., CLAVE'ððð3 NOMB. CAMPO CLAVE MINAME . RDE
2ð +ððððð9 ð6 MINAME PIC X(1). RDE
+ðððð1ð\ INICIAL SEGUNDO NOMBRE RDE
+ðððð11\ CLAVE ARCH. PARA ARCH. INDEX., CLAVE'ððð4 NOMB. CAMPO CLAVE MNAME . RDE
21 +ðððð12 ð6 MNAME PIC X(19). RDE
+ðððð13\ RESTO SEGUNDO NOMBRE RDE
+ðððð14\ CLAVE ARCH. PARA ARCH. INDEX., CLAVE'ððð1 NOMB. CAMPO CLAVE LNAME . RDE
22 +ðððð15 ð6 LNAME PIC X(2ð). RDE
+ðððð16\ APELLIDO RDE
23 +ðððð17 ð6 PHONE PIC S9(1ð). COMP-3 RDE
+ðððð18\ NÚMERO TELÉFONO RDE
24 +ðððð19 ð6 DATA-DDS PIC X(4ð). RDE
+ðððð2ð\ DATOS RESTANTES RDE
25 ðð16ðð 66 MIDDLE-NAME RENAMES MINAME THRU MNAME.
ðð17ðð/
26 ðð18ðð PROCEDURE DIVISION.
ðð19ðð START PROGRAM.
27 ðð2ððð OPEN INPUT FILE-1.
ðð21ðð\
ðð22ðð\ SITÚA EL ARCHIVO COMENZANDO CON LOS REGISTROS QUE TENGAN EL APELLIDO
ðð23ðð\ "SMITH"
28 ðð24ðð MOVE "SMITH" TO LNAME.
29 ðð25ðð START FILE-1 KEY IS EQUAL TO LNAME
3ð ðð26ðð INVALID KEY DISPLAY "NO DATA IN SYSTEM FOR " LNAME
31 ðð27ðð GO TO ERROR-ROUTINE.
ðð28ðð\ .
ðð29ðð\ .
ðð3ððð\ .
ðð31ðð\
ðð32ðð\ SITÚA EL ARCHIVO COMENZANDO CON LOS REGISTROS QUE TENGAN EL APELLIDO
ðð33ðð\ "SMITH" Y EL NOMBRE "ROBERT"
32 ðð34ðð MOVE "SMITH" TO LNAME.
33 ðð35ðð MOVE "ROBERT" TO FNAME.
34 ðð36ðð START FILE-1 KEY IS EQUAL TO LNAME, FNAME
35 ðð37ðð INVALID KEY DISPLAY "NO DATA IN SYSTEM FOR "
ðð38ðð LNAME " " FNAME
36 ðð39ðð GO TO ERROR-ROUTINE.
ðð4ððð\ .
ðð41ðð\ .
ðð42ðð\ .
ðð43ðð\
ðð44ðð\ SITÚA EL ARCHIVO COMENZANDO CON REGISTROS QUE TENGAN EL APELLIDO
ðð45ðð\ "SMITH", EL NOMBRE "ROBERT", Y LA INICIAL DEL SEGUNDO NOMBRE SEA "M"
32 ðð46ðð MOVE "SMITH" TO LNAME.
33 ðð47ðð MOVE "ROBERT" TO FNAME.
33 ðð48ðð MOVE "M" TO MINAME.
34 ðð49ðð START FILE-1 KEY IS EQUAL TO LNAME, FNAME, MINAME
35 ðð5ððð INVALID KEY DISPLAY "NO DATA IN SYSTEM FOR "
ðð51ðð LNAME SPACE FNAME SPACE MINAME
42 ðð52ðð GO TO ERROR-ROUTINE.
ðð53ðð
ðð54ðð
ðð55ðð ERROR-ROUTINE.
ðð56ðð STOP-RUN.

Figura 79. Instrucciones START Genéricas que Utilizan un Archivo Descrito Externamente

256 COBOL/400 Guía del usuario


Consideraciones Sobre Archivos Lógicos
Cuando un archivo lógico con múltiples formatos de registro, cada uno con campos
de clave asociados, se procesa como archivo indexado en COBOL, se aplican las
restricciones y consideraciones siguientes:
Ÿ La frase FORMAT debe especificarse en todas las instrucciones WRITE para
el archivo a menos que exista el Programa Selector de Formato de Registro y
se haya especificado en el parámetro FMTSLR del mandato Crear Archivo
Lógico (CRTLF), el mandato Cambiar Archivo Lógico (CHGLF) o el mandato
Alterar Temporalmente Archivo de Base de Datos (OVRDBF). Para obtener
más información acerca de la utilización de programas selectores de formato,
consulte la publicación Guía para la Base de Datos.
Ÿ Si la modalidad de acceso es RANDOM o DYNAMIC, y no se especifica para
el archivo la frase DUPLICATES, la frase FORMAT debe especificarse en
todas las instrucciones DELETE y REWRITE.
Ÿ Cuando no se especifica la frase FORMAT, el sistema utiliza solamente la
parte del ítem de datos RECORD KEY que es común a todos los formatos de
registro del archivo como la clave para la instrucción de E/S. Cuando se espe-
cifica la frase FORMAT, el sistema utiliza como clave sólo la parte del ítem de
datos RECORD KEY que se define para el formato de registro especificado.
Consulte la publicación Guía para la Base de Datos para obtener más infor-
mación sobre el proceso de archivos lógicos.
Ÿ Cuando se especifica *NONE como el primer campo de clave para cualquier
formato en un archivo, sólo se puede acceder a los registros secuencialmente.
Cuando un archivo se lee al azar:
– Si se especifica un nombre de formato, se devuelve el primer registro con
el formato especificado.
– Si no se especifica un nombre de formato, se devuelve el primer registro
del archivo.
En ambos casos, se hace caso omiso del ítem de datos RECORD KEY.
Ÿ Para un campo de clave definido por programa:
– Los campos de clave dentro de cada formato de registro deben ser conti-
guos.
– El primer campo de clave para cada formato de registro debe comenzar en
la misma posición relativa dentro de cada registro.
– La longitud del ítem de datos RECORD KEY debe ser igual a la longitud
de la clave más larga de cualquier formato del archivo.
Ÿ Para una EXTERNALLY-DESCRIBED-KEY:
– Los campos de clave dentro de cada formato de registro pueden no ser
contiguos.
– Los campos de clave pueden comenzar en posiciones distintas en cada
formato de registro.

La Figura 80 en la página 258 y la Figura 81 en la página 259 muestran ejemplos


de cómo utilizar las DDS para describir la vía de acceso para archivos indexados.

Capítulo 10. Archivos DISK y DATABASE 257


G X 2 1 - 9 8 9 1 - 0 U M / 0 5 0 *
A S / 4 0 0 E S P E C I F I C A C I O N E S D E D E S C R I P C I O N D E D AT O S Impreso en España
Inter national Business Machines
*El núm e ro de hojas por área de re lleno puede variar ligeramente.

Archivo Signo Descripción Página de


Instrucciones

de Grabación
Programador Fecha Tecla

(/b / R / H / J / K / S / O )
Condicionamiento

Tipo Datos/Desp lazamien to Teclado

(b/O/I/B/H/M/N/P)
Ubicación
(A/O/*)

Nombre Co ndición
Espec
Formula rio

And/Or/Coment.

N om b re Longitud Funciones

Referencia (R)
Nombre

Nú mero de

U t i l i z a c/i ó n
Posiciones
Secuencia
Reservado

D ecimales
Indicador

Indicador

Indicador
de

No (N)

No (N)
No (N)

Línea P os
Tipo

Tipo

1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 19 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0

A R F O R MA T A P F I L E ( OR D D T L P )

A T E X T ( ' V I A ACC E S O P A R A A R C I ND E X A DO ' )

A F L D A 1 4

A OR D E R N 5 S 0

A F L D B 1 0 1

A K OR D E R N

Figura 80. Utilización de Especificaciones de Descripción de Datos para Definir la Vía de Acceso de un Archivo

Las especificaciones de descripción de datos deben utilizarse para crear la vía de


acceso para un archivo indexado descrito por programa.

En las DDS para el formato de registro FORMATA del archivo lógico ORDDTLL, el
campo ORDERN, que tiene una longitud de cinco dígitos, se define como el campo
de clave. La definición de ORDERN como campo de clave establece el acceso
por clave para este archivo. Otros dos campos, FLDA y FLDB, describen las posi-
ciones restantes en este registro como campos de tipo carácter.

El campo de entrada descrito por programa ORDDTLL se describe en la sección


FILE-CONTROL de la cláusula SELECT como un archivo indexado.

258 COBOL/400 Guía del usuario


Las descripciones COBOL de cada campo en la entrada FD deben coincidir con la
descripción correspondiente en el archivo DDS. El ítem de datos RECORD KEY
debe definirse como entero numérico de cinco dígitos empezando en la posición 15
del registro.

AS/400 ES PECIFICACIONES DE DESCRIPCION DE DATOS GX21-9891-0 UM/050*


Impreso en España
International Business Machines
*El núm e ro de hojas por área de re lleno puede variar lige ram ente .

Archivo Signo Descripción Página de


Instrucciones
de Grabación
Programador Fecha Tecla

T i p o N o m b r e o E s p e c (/b / R / H / J / K / S / O )

Condicionamiento

Tipo Datos/Desp lazamien to Teclado


Ubicación

U t i l i z a c/i ó n ( b / O / I / B / H / M / N / P )
And/Or/Coment. (A/O/*)

Nombre Co ndición
Tipo de Formula rio

N om b re Longitud Funciones
Referencia (R)

Nú mero de
Secuencia

Posiciones
Reservado

D ecimales
Indicador

Indicador

Indicador
No (N)

No (N)
No (N)

Línea Pos

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80

A R F OR MA T P F I L E ( OR DD T L P )
A T E X T ( ' V I A ACC E S O P AR A ARC I ND E X ADO ' )
A F L DA 1 4
A OR D E R N 5 S 0
A I T EM 5
A F L DB 9 6
A K OR D E R N
A K I T EM
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A

Figura 81. Especificaciones de Descripción de Datos para la Definición de la Vía de acceso (una Clave Compuesta)
de un Archivo Indexado

En este ejemplo, las especificaciones de descripción de datos definen dos campos


de clave para el formato de registro FORMAT en el archivo lógico ORDDTLL.
Para los dos campos a utilizar como clave compuesta para un archivo indexado
descrito por programa, los campos de clave deben ser contiguos en el registro.

La descripción COBOL de cada campo debe coincidir con la descripción corres-


pondiente en el archivo DDS. En la cláusula RECORD-KEY de la entrada de

Capítulo 10. Archivos DISK y DATABASE 259


control de archivo debe definirse un ítem de diez caracteres que empiece en la
posición 15 del registro. Las descripciones COBOL de los campos DDS ORDERN
e ITEM deberían subordinarse al ítem de 10 caracteres en la cláusula RECORD
KEY.

Archivos Relativos COBOL


Un archivo relativo COBOL es un archivo que se va a procesar mediante un
número relativo de registro. Para procesar un archivo mediante un número relativo
de registro, se debe especificar ORGANIZATION IS RELATIVE en la instrucción
SELECT para el archivo. Se puede acceder a un archivo relativo de forma secuen-
cial, al azar mediante un número de registro o dinámicamente.

Para escribir programas en COBOL ANSI X3.23-1985 estándar que accedan a un


archivo relativo, es preciso crear el archivo con unas características determinadas.
En la siguiente tabla se listan estas características así como los elementos que las
controlan.

Característica Control
El archivo debe ser un archivo físico. El mandato CL CRTPF
El archivo no puede ser un archivo compartido El mandato CL CRTPF
No puede especificarse ninguna clave en el DDS
archivo.
No puede especificarse una posición inicial El mandato CL OVRDBF
para recuperar registros.
No pueden utilizarse para el archivo palabras DDS
clave a nivel de seleccionar/omitir.
No se pueden volver a utilizar los registros del El mandato CL CRTPF
archivo.

Para un archivo COBOL con una organización RELATIVE, el mandato CL Reorga-


nizar Miembro de Archivo Físico (RGZPFM) puede:
Ÿ Eliminar todos los registros suprimidos del archivo. Debido a que COBOL
inicializa todos los registros del archivo relativo a registros suprimidos, se elimi-
nará del archivo cualquier registro que no se haya grabado explícitamente.
Los números relativos de registro de todos los registros que estén después del
primer registro suprimido en el archivo se cambiarán.
Ÿ Cambiar los números relativos de registro si el archivo tiene una clave y se
modifica la secuencia de llegada para que coincida con una secuencia de
clave (con el parámetro KEYFILE).

Además, el mandato CL Cambiar Archivo Físico (CHGPF) que da soporte la opción


REUSEDLT, puede modificar el orden de los registros recuperados o grabados
cuando el archivo trabaja de forma secuencial, ya que permite volver a utilizar los
registros eliminados.

260 COBOL/400 Guía del usuario


Archivos Secuenciales COBOL
Un archivo secuencial COBOL es un archivo en el que se procesan registros en el
mismo orden en que han sido colocados en el archivo, es decir, en secuencia de
llegada. Por ejemplo, el décimo registro colocado en el archivo ocupa la décima
posición de registro y será el décimo registro que se procese. Para procesar un
archivo como secuencial, es preciso especificar ORGANIZATION IS SEQUENTIAL
en la cláusula SELECT o hacer caso omiso de la cláusula ORGANIZATION. A un
archivo secuencial sólo puede accederse secuencialmente.

Para escribir programas en COBOL ANSI X3.23-1985 estándar que accedan a un


archivo secuencial, es preciso crear dicho archivo a partir de unas características
determinadas. En la siguiente tabla se listan estas características así como los
elementos que las controlan.

Característica Control
El archivo debe ser un archivo físico. El mandato CL CRTPF
El archivo no puede ser un archivo compartido El mandato CL CRTPF
No puede especificarse ninguna clave en el DDS
archivo.
El archivo debe tener un tipo de archivo de El mandato CL CRTPF
DATA.
No puede utilizarse la edición de campo. DDS
No puede especificarse información de línea DDS
ni posición.
No pueden especificarse palabras clave de DDS
espaciar ni saltar.
No pueden utilizarse los indicadores. DDS
No pueden utilizarse funciones suministradas DDS
por el sistema, tales como fecha, hora y
número de página.
No pueden utilizarse para el archivo palabras DDS
clave a nivel de seleccionar/omitir.
No se pueden volver a utilizar los registros del El mandato CL CRTPF
archivo.

Para conservar la secuencia de registros de un archivo que se abre en modalidad


de E/S (actualización), no modifique el archivo, ya que de lo contrario no podrá
volver a utilizar los registros que contenga. Es decir, no utilice el parámetro CL
Cambiar Archivo Físico (CHGPF) que da soporte a la opción REUSEDLT.

Nota: El compilador COBOL/400 no comprueba si el dispositivo asociado con el


archivo externo es del tipo especificado en la parte de dispositivo del
nombre de asignación. El dispositivo especificado en el nombre de asig-
nación debe coincidir con el dispositivo real al que se asigna el archivo.
Consulte la sección “Cláusula ASSIGN” de la publicación COBOL/400
Reference para obtener más información.

Capítulo 10. Archivos DISK y DATABASE 261


Consideraciones sobre la Organización de Archivos COBOL y la Vía
de Acceso del Archivo AS/400
EN COBOL, puede procesarse un archivo con una vía de acceso por secuencia de
claves como un archivo con una organización INDEXED, RELATIVE o
SEQUENTIAL.

Para procesar un archivo en secuencia por claves como un archivo relativo


COBOL, debe ser un archivo físico, o un archivo lógico cuyos miembros se basen
en un miembro del archivo físico. Para procesar un archivo en secuencia de
claves como un archivo secuencial en COBOL, debe ser un archivo físico, o un
archivo lógico que se base en un miembro del archivo físico y que no contenga
lógica de selección/omisión.

Una archivo con una vía de acceso en secuencia de llegada puede procesarse en
COBOL como un archivo con organización RELATIVE o SEQUENTIAL. El archivo
debe ser un archivo físico o lógico en el que cada miembro del archivo lógico úni-
camente esté basado en un solo miembro del archivo físico.

Cuando se especifica el acceso secuencial para un archivo lógico, se accede a los


registros del archivo mediante la vía de acceso creada con las opciones de
creación de archivos.

Métodos de Proceso de Archivos


La Figura 82 en la página 264 muestra los métodos de proceso válidos, así como
la operación esperada para las combinaciones de organización, modalidad de
acceso, estado de apertura, verbo de E/S y modificadores de verbo de E/S.

Se borran todos los archivos de base de datos físicos que se abren para OUTPUT.
Los archivos de bases de datos con organización RELATIVE y con modalidad de
acceso dinámica o al azar, también se inicializan con registros suprimidos.

Los archivos relativos nuevos que se han abierto para OUTPUT en modalidad de
acceso secuencial se tratan de forma diferente. La Tabla 4 en la página 263
resume las condiciones que los afectan.

262 COBOL/400 Guía del usuario


Tabla 4. Inicialización de Archivos Relativos de Salida
Acceso a Condiciones Condiciones
Archivos y durante durante Límite de Archivo
Especificaciones la Apertura el Cierre
CL
Secuencial Los registros no Todos los incre-
*INZDLT escritos mentos
se inicializan
Secuencial CLOSE satisfac- Hasta el límite de
*INZDLT torio registros escritos
Tamaño *NOMAX El estado de
archivo es 0Q
Secuencial Hasta el límite de
*NOINZDLT registros escritos
Al azar o dinámi- Los registros Todos los incre-
camente se inicializan mentos
Se abre el archivo
Al azar o dinámi- OPEN no satisfac- Archivo vacío
camente torio
Tamaño *NOMAX Estado de archivo
9Q

Para extender el límite de archivo más allá del número actual de registros, pero
permaneciendo dentro del tamaño del archivo, utilice el mandato INZPFM para
añadir registros eliminados antes de procesar el archivo. Es preciso efectuar esta
operación si recibe un estado de archivo de 0Q y todavía quiere añadir más regis-
tros al archivo.

Cualquier intento de ampliar un archivo relativo más allá de su tamaño actual da


como resultado una violación de límite.

Para recuperar el estado de archivo de 9Q, utilice el mandato CHGPF tal como se
describe en el texto de mensaje en tiempo de ejecución asociado.

Las demoras de larga duración son normales cuando hay gran cantidad de regis-
tros (más de un 1 000 000) que se deben inicializar para registros suprimidos
cuando se ejecuta la instrucción CLOSE.

Cuando la primera instrucción OPEN para el archivo no es OPEN OUTPUT, los


archivos relativos deben borrarse e inicializarse con registros suprimidos antes de
utilizarlos. Consulte la descripción sobre los mandatos CLRPFM y INZPFM en el
manual CL Reference para obtener más información.

El parámetro RECORDS del mandato INZPFM debe especificar *DLT. Las alte-
raciones temporales deben aplicarse cuando COBOL procesa las operaciones de
borrado e inicialización, pero no cuando se procesan con mandatos CL.

Las demoras de larga duración son normales en el proceso OPEN OUTPUT para
archivos sumamente grandes (más de 1 000 000 registros) a los que se accede en
modalidad dinámica o al azar.

Capítulo 10. Archivos DISK y DATABASE 263


┌─────┬─────┬──────┬────────┬──────┬───────┬───────┬─────────┬────────┬───────┬────────┬────────┐
│ │ │ │ │ │ │ │ │ │ │ │ SELECT │
│ │ │ │ │ │ │ │ │ │ │ │ CLAUSE │
│ ORG │ ACC │ DEV │ OPEN │ READ │ WRITE │ START │ REWRITE │ DELETE │ CLOSE │ FORMAT │ KEY IS │
├─────┼─────┼──────┼────────┼──────┼───────┼───────┼─────────┼────────┼───────┼────────┼────────┤
│ S │ S │ ANY │ INPUT │ X │ │ │ │ │ X │ │ │
│ S │ S │ ANY │ OUTPUT │ │ X(F1) │ │ │ │ X │ A1 │ │
│ S │ S │ ANY │ I-O │ X │ │ │ X │ │ X │ │ │
│ S │ S │ ANY │ EXTEND │ │ X │ │ │ │ X │ │ │
├─────┼─────┼──────┼────────┼──────┼───────┼───────┼─────────┼────────┼───────┼────────┼────────┤
│ I │ S │ D/DB │ INPUT │ X │ │ X │ │ │ X │ B1 │ C1 │
│ I │ S │ D/DB │ OUTPUT │ │ X(F1) │ │ │ │ X │ B1 │ C1 │
│ I │ S │ D/DB │ I-O │ X │ │ X │ X │ X │ X │ B1 │ C1 │
├─────┼─────┼──────┼────────┼──────┼───────┼───────┼─────────┼────────┼───────┼────────┼────────┤
│ I │ R │ D/DB │ INPUT │ X │ │ │ │ │ X │ B1 │ D1 │
│ I │ R │ D/DB │ OUTPUT │ │ X(F1) │ │ │ │ X │ B1 │ D1 │
│ I │ R │ D/DB │ I-O │ X │ X │ │ X │ X │ X │ B1 │ D1 │
├─────┼─────┼──────┼────────┼──────┼───────┼───────┼─────────┼────────┼───────┼────────┼────────┤
│ I │ D │ D/DB │ INPUT │ X │ │ X │ │ │ X │ B1 │ D1 │
│ I │ D │ D/DB │ OUTPUT │ │ X(F1) │ │ │ │ X │ B1 │ D1 │
│ I │ D │ D/DB │ I-O │ X │ X │ X │ X │ X │ X │ B1 │ D1 │
├─────┼─────┼──────┼────────┼──────┼───────┼───────┼─────────┼────────┼───────┼────────┼────────┤
│ R │ S │ D/DB │ INPUT │ X │ │ X │ │ │ X │ │ C1 │
│ R │ S │ D/DB │ OUTPUT │ │ X(G1) │ │ │ │ X │ │ C1 │
│ R │ S │ D/DB │ I-O │ X │ │ X │ X │ X │ X │ │ C1 │
├─────┼─────┼──────┼────────┼──────┼───────┼───────┼─────────┼────────┼───────┼────────┼────────┤
│ R │ R │ D/DB │ INPUT │ X │ │ │ │ │ X │ │ E1 │
│ R │ R │ D/DB │ OUTPUT │ │ X(G1) │ │ │ │ X │ │ E1 │
│ R │ R │ D/DB │ I-O │ X │ X │ │ X │ X │ X │ │ E1 │
├─────┼─────┼──────┼────────┼──────┼───────┼───────┼─────────┼────────┼───────┼────────┼────────┤
│ R │ D │ D/DB │ INPUT │ X │ │ X │ │ │ X │ │ E1 │
│ R │ D │ D/DB │ OUTPUT │ │ X(G1) │ │ │ │ X │ │ E1 │
│ R │ D │ D/DB │ I-O │ X │ X │ X │ X │ X │ X │ │ E1 │
├─────┼─────┼──────┼────────┼──────┼───────┼───────┼─────────┼────────┼───────┼────────┼────────┤
│ T │ S │ W │ I-O │ X │ X │ │ │ │ X │ H1 │ │
├─────┼─────┼──────┼────────┼──────┼───────┼───────┼─────────┼────────┼───────┼────────┼────────┤
│ T │ D │ W │ I-O │ X(K1)│ X(K1) │ │ X │ │ X │ I1 │ J1 │
├─────┴─────┴──────┴────────┼──────┴───────┴───────┴─────────┼────────┴───────┴────────┴────────┤
│ORG: │ ACC: │ DEV: │
│ │ │ │
│ S = Secuencial │ S = Secuencial │ ANY = Cualquier dispositivo │
│ R = Relativo │ R = Al azar │ D = DISK │
│ I = Indexado │ D = Dinámico │ DB = DATABASE │
│ T = TRANSACTION │ │ W = WORKSTATION │
└───────────────────────────┴────────────────────────────────┴──────────────────────────────────┘

Figura 82. Tabla Resumen de Métodos de Proceso

Los párrafos siguientes explican las claves utilizadas en la Figura 82.


X Se permite la combinación.
A1 Se requiere la frase FORMAT para archivos FORMATFILE con formatos múl-
tiples y no se permite para todos los otros archivos de dispositivo.
B1 La frase FORMAT es opcional para archivos DATABASE y no se permite
para archivos DISK. Si no se especifica la frase FORMAT, se utiliza el
nombre de formato por omisión del archivo. El nombre de formato por
omisión del archivo es el primer nombre de formato definido en el archivo.
Puede utilizarse el registro especial DB-FORMAT-NAME para recuperar el
nombre de formato que se ha utilizado en la última operación satisfactoria de
E/S.
C1 Se hace caso omiso de la frase KEY en la cláusula SELECT excepto en las
instrucciones START. Si no se especifica la frase KEY en la instrucción
START, la frase RECORD KEY o RELATIVE KEY de la cláusula SELECT se
utiliza y entonces se asume KEY =.
D1 Se utiliza la frase KEY con la cláusula SELECT excepto para la instrucción
START. Si no se especifica la frase KEY en la instrucción START, se utiliza
la frase RECORD KEY en la cláusula SELECT y se asume KEY =.
NEXT, PRIOR, FIRST, o LAST sólo pueden especificarse en la instrucción
READ para archivos DATABASE con acceso DYNAMIC. Si se especifica
NEXT, PRIOR, FIRST o LAST, se hace caso omiso de la frase KEY de la
cláusula SELECT.

264 COBOL/400 Guía del usuario


E1 Se utiliza la frase RELATIVE KEY en la cláusula SELECT.
La frase NEXT sólo puede especificarse en la instrucción READ para un
archivo con modalidad de acceso DYNAMIC. Si se especifica NEXT, se hace
caso omiso de la frase KEY en la cláusula SELECT.
El ítem de datos RELATIVE KEY se actualiza con el número relativo de
registro para archivos con acceso secuencial en operaciones READ.
F1 Se borra un archivo físico abierto para salida.
G1 Se borra un archivo físico abierto para salida y se inicializa a registros supri-
midos. Existe una serie de excepciones según el tamaño del archivo y las
opciones especificadas. Para obtener más información, consulte la Tabla 4
en la página 263.
H1 La frase FORMAT es necesaria para la instrucción WRITE.
I1 La frase FORMAT es necesaria para distinguir entre los registros del subar-
chivo y el registro de control del subarchivo. El nombre del formato de
registro de control WRITE FORMAT IS visualiza el subarchivo, pero se nece-
sita un nombre de formato de registro de control READ FORMAT IS para que
los datos puedan entrarse y al mismo tiempo para que la entrada del ope-
rador de los registros del subarchivo se coloque en el subarchivo.
J1 Se utiliza la frase RELATIVE KEY en la cláusula SELECT para las instruc-
ciones READ, WRITE y REWRITE que utilizan la frase SUBFILE, excepto
cuando READ SUBFILE NEXT MODIFIED utilice el número relativo de
registro actual del sistema en lugar del ítem de datos RELATIVE KEY. El
ítem de datos RELATIVE KEY se actualiza con el número relativo de registro
para registros del subarchivo en las instrucciones READ con la cláusula
NEXT MODIFIED.
K1 Se requiere la frase SUBFILE cuando una operación de E/S trata con un
registro particular en lugar de con un archivo completo.

Consideraciones sobre el Archivo Descendente


Los archivos creados con una secuencia en clave descendente (en DDS) provocan
que las frases NEXT, PRIOR, FIRST y LAST de la instrucción READ se comporten
de forma exactamente opuesta a la de un archivo con una secuencia de clave
ascendente. En la secuencia de clave descendente, los datos se ubican a partir
del valor más alto del campo de clave hasta el valor más bajo de dicho campo.

Por ejemplo, READ FIRST recupera el registro con el valor de campo más alto,
mientras que READ LAST recupera el registro del valor de campo más bajo. Los
archivos que tienen una secuencia de clave descendente también provocan que
los calificadores START se comporten de forma contraria. Por ejemplo, START
GREATER THAN coloca el puntero del registro actual en un registro con una clave
menor que la clave actual.

Capítulo 10. Archivos DISK y DATABASE 265


266 COBOL/400 Guía del usuario
Capítulo 11. Consideraciones de Programación en
COBOL/400
Este capítulo describe:
Ÿ La emisión de un mandato CL desde un programa COBOL
Ÿ La frase CORRESPONDING
Ÿ La cláusula LIKE
Ÿ La modificación de referencias
Ÿ Cómo deshacer edición
Ÿ Consideraciones sobre el rendimiento.
Interfaz de Programación de Uso General

Emisión de un Mandato CL desde un Programa COBOL


El usuario podrá emitir un mandato CL desde un programa COBOL mediante una
llamada (CALL) a QCMDEXC.

En el programa ejemplo siguiente, la instrucción CALL a QCMDEXC (en el número de


secuencia 001600) da como resultado el proceso del mandato CL Añadir Entrada
de Lista de Bibliotecas (ADDLIBLE) (en el número de secuencia 001100). La ter-
minación satisfactoria del mandato CL da como resultado la adición de la biblio-
teca, COBOLTEST, a la lista de bibliotecas.

-A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..
ððð1ðð IDENTIFICATION DIVISION.
ððð2ðð PROGRAM-ID. CMDXMPLE.
ððð3ðð ENVIRONMENT DIVISION.
ððð4ðð CONFIGURATION SECTION.
ððð5ðð SOURCE-COMPUTER. IBM-AS4ðð.
ððð6ðð OBJECT-COMPUTER. IBM-AS4ðð.
ððð7ðð DATA DIVISION.
ððð8ðð WORKING-STORAGE SECTION.
ððð9ðð ð1 PROGRAM-VARIABLES.
ðð1ððð ð5 CL-CMD PIC X(33)
ðð11ðð VALUE "ADDLIBLE COBOLTEST".
ðð12ðð ð5 PACK-VAL PIC 9(1ð)V9(5) COMP-3
ðð13ðð VALUE 18.
ðð14ðð PROCEDURE DIVISION.
ðð15ðð MAINLINE.
ðð16ðð CALL "QCMDEXC" USING CL-CMD PACK-VAL.
ðð17ðð STOP RUN.

Nota: No utilice el mandato Reclamar Recurso (RCLRSC) en esta situación, ya


que cancela todos los programas superiores en la pila de programas de
forma que la instrucción STOP RUN en el programa causaría una excep-
ción en tiempo de ejecución.

Para más información acerca de QCMDEXC, consulte la publicación CL Guía del


Programador.

Fin de Interfaz de Programación de Uso General

 Copyright IBM Corp. 1994 267


Utilización de la Frase CORRESPONDING
En el programa ejemplo siguiente, la instrucción ADD CORRESPONDING en el
número de secuencia 000270 añade GROUP1 ITEM1 al GROUP2 ITEM1 y
GROUP1 ITEM2 al GROUP2 ITEM2. La instrucción MOVE CORRESPONDING en
el número de secuencia 000290 mueve GROUP1 ITEM1, ITEM2, ITEM3 e ITEM4
al GROUP2 ITEM1, ITEM2, ITEM3 e ITEM4.

La instrucción MOVE CORRESPONDING en el número de secuencia 000300 no


se procesa porque no hay ítems correspondientes que mover y se genera un
mensaje de error.

La Figura 83 en la página 269 se ha producido con la opción PRTCORR activada.

268 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Fuente COBOL AS/4ðð XMPLIB/CORR
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ðððð1ð IDENTIFICATION DIVISION.
2 ðððð2ð PROGRAM-ID. CORRPHRASE.
3 ðððð3ð AUTHOR. PROGRAMMER NAME.
4 ðððð4ð INSTALLATION. TORONTO COBOL DEVELOPMENT CENTRE.
5 ðððð5ð DATE-WRITTEN. ð5/24/91.
6 ðððð6ð DATE-COMPILED. ð5/24/94 11:ð9:11 .
7 ðððð7ð ENVIRONMENT DIVISION.
8 ðððð8ð CONFIGURATION SECTION.
9 ðððð9ð SOURCE-COMPUTER. IBM-AS4ðð.
1ð ððð1ðð OBJECT-COMPUTER. IBM-AS4ðð.
11 ððð11ð DATA DIVISION.
12 ððð12ð WORKING-STORAGE SECTION.
13 ððð13ð ð1 GROUP1.
14 ððð14ð ð5 ITEM1 PIC 99 VALUE 1.
15 ððð15ð ð5 ITEM2 PIC 99 VALUE 2.
16 ððð16ð ð5 ITEM3 PIC X(1ð) VALUE "GREEN".
17 ððð17ð ð5 ITEM4 PIC X(1ð) VALUE "BLUE".
18 ððð18ð ð1 GROUP2.
19 ððð19ð ð5 ITEM1 PIC 99 VALUE 8.
2ð ððð2ðð ð5 ITEM2 PIC 99 VALUE 9.
21 ððð21ð ð5 ITEM3 PIC XXBX(8) VALUE SPACES.
22 ððð22ð ð5 ITEM4 PIC X(1ð) VALUE SPACES.
23 ððð23ð ð1 GROUP3.
24 ððð24ð ð5 SPECIAL PIC XX.
25 ððð25ð PROCEDURE DIVISION.
ððð26ð MAINLINE.
26 ððð27ð ADD CORRESPONDING GROUP1 TO GROUP2.
\ \\ Ítems CORRESPONDING para instrucción 26:
\ \\ ITEM1
\ \\ ITEM2
\ \\ Fin de ítems CORRESPONDING para instrucción 26
27 ððð28ð SUBTRACT CORRESPONDING GROUP1 FROM GROUP2.
\ \\ Ítems CORRESPONDING para instrucción 27:
\ \\ ITEM1
\ \\ ITEM2
\ \\ Fin de ítems CORRESPONDING para instrucción 27
28 ððð29ð MOVE CORRESPONDING GROUP1 TO GROUP2.
\ \\ Ítems CORRESPONDING para instrucción 28:
\ \\ ITEM1
\ \\ ITEM2
\ \\ ITEM3
\ \\ ITEM4
\ \\ Fin de ítems CORRESPONDING para instrucción 28
29 ððð3ðð MOVE CORRESPONDING GROUP3 TO GROUP2.
\ \\ Ítems CORRESPONDING para instrucción 29:
\ \\ No se han encontrado ítems CORRESPONDING
\ \\ Fin de ítems CORRESPONDING para instrucción 29
3ð ððð31ð STOP RUN.
\ \ \ \ \ F I N D E F U E N T E \ \ \ \ \
5763CB1 V3RðM5 Mensajes COBOL AS/4ðð XMPLIB/CORR
INST
\ 29 MSGID: LBLð336 GRAVEDAD: 1ð NUMSEC: ððð3ðð
Mensaje . . . . : No se han encontrado ítems CORRESPONDING. Sentencia
ignorada.
\ \ \ \ \ F I N D E M E N S A J E S \ \ \ \ \
Resumen Mensajes
Total Info(ð-4) Aviso(5-19) Error(2ð-29) Grave(3ð-39) Terminal(4ð-99)
1 ð 1 ð ð ð
Registros fuente leídos . . . . . . : 31
Registros de copia leídos . . . . . : ð
Miembros de copia procesados . . . : ð
Errores de secuencia . . . . . . . : ð
Mensaje de gravedad más alta emitido: 1ð
LBLð9ð1 ðð Programa CORR creado en biblioteca XMPLIB.
\ \ \ \ \ F I N D E C O M P I L A C I O N \ \ \ \ \

Figura 83. Ejemplo de la Frase CORRESPONDING

Capítulo 11. Consideraciones de Programación en COBOL/400 269


Ampliación de IBM

Cláusula LIKE
La cláusula LIKE sirve para definir las características PICTURE, USAGE, SIGN y
BLANK WHEN ZERO de un nombre de datos copiándolas de un nombre de datos
definido con anterioridad. LIKE sólo puede referirse a un nombre de datos o un
nombre de índice, y tales nombres deben calificarse únicamente si se han definido
anteriormente. También sirve para cambiar la longitud de los nombres de datos
definidos por el usuario.

Esta cláusula es particularmente útil, ya que el usuario puede utilizarla para definir
los identificadores en la Sección de Almacenamiento del programa que tengan los
mismos atributos como variables definidas utilizando la instrucción COPY.

Para crear el nombre de datos DEPTH con los mismos atributos que el nombre de
datos HEIGHT, escriba:
DEPTH LIKE HEIGHT

Para crear el nombre de datos PROVINCE con los mismos atributos que el nombre
de datos STATE, sólo que con un byte más, escriba:
PROVINCE LIKE STATE (+1)

Este ejemplo le muestra cómo puede crear el ítem de datos WS-KEY3 con los
mismos atributos que el ítem de datos KEY3 en la Sección de Almacenamiento de
Trabajo:

5763CB1 V3RðM5 Fuente AS/4ðð COBOL


INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S
ðð14ðð FILE SECTION.
ðð15ðð FD FILE1.
ðð16ðð ð1 FILE1-REC.
ðð17ðð COPY DDS-ALL-FORMATS OF COPYDDS2.
+ððððð1 ð5 COPYDDS2-RECORD PIC X(2ð).
+ððððð2\ FORMATO E-S: RECORD1 DESDE ARCHIVO COPYDDS2 DE BIBLIOTECA COPYLIB
+ððððð3\
+ððððð4\LAS DEFINICIONES DE CLAVE PARA FORMATO DE REGISTRO RECORD1
+ððððð5\ NUMERO NOMBRE RECUPERAC. TIPO
+ððððð6\ ððð1 KEY1-DDS ASCENDENTE
+ððððð7\ NOMBRE CLAVE ORIGINAL DEL ARCHIVO FÍSICO
+ððððð8 ð5 RECORD1 REDEFINES COPYDDS2-RECORD.
+ððððð9 ð6 KEY3 PIC X(8).
+ðððð1ð ð6 FILLER REDEFINES KEY3.
+ðððð11 ð7 KEY1-DDS PIC X(4).
+ðððð12 ð7 FILLER PIC X(4).
+ðððð13 ð6 DATA1 PIC X(12).
ðð18ðð WORKING-STORAGE SECTION.
ðð19ðð ð1 WS-KEY3 LIKE KEY3.
\ PICTURE IS X(8)

Figura 84. COPY DDS con la Cláusula LIKE.

La cláusula LIKE no puede utilizarse conjuntamente con las cláusulas REDE-


FINES, SIGN, USAGE o PICTURE. Si utiliza alguna de estas cláusulas con la
cláusula LIKE, se producirá un error de duplicación. Igualmente, sólo puede espe-
cificarse BLANK WHEN ZERO conjuntamente con la cláusula LIKE si el atributo
BLANK WHEN ZERO no ha sido heredado por la cláusula LIKE.

270 COBOL/400 Guía del usuario


Una cláusula LIKE válida tiene uno de los formatos siguientes:
nombre-datos-1 cláusula LIKE xxxxx.
nombre-datos-1 xxxxx cláusula LIKE.
nombre-datos-1 xxxxx cláusula LIKE xxxxx.
Las xxxxx son una cláusula o una combinación de las cláusulas siguientes:
JUSTIFIED, SYNCHRONIZED, BLANK WHEN ZERO, VALUE, OCCURS.

El ejemplo siguiente muestra lo que la cláusula LIKE puede hacer:


ð1 INCOME.
ð5 ANNUAL-WAGES PIC 9(6)V9(2) COMP-3.
ð1 YTD-WAGES LIKE ANNUAL-WAGES.
\ PICTURE IS 9(6)V9(2)
\ USAGE IS PACKED-DECIMAL

ð1 RATES.
ð5 MONTHLY-RATE PIC 9(3).
66 GROSS-RATE RENAMES MONTHLY-RATE.
ð1 NET-RATE LIKE GROSS-RATE.
\ PICTURE IS 9(3)

ð1 FAMILY-NAME PIC X(2ð) VALUE "JONES".


ð1 GIVEN-NAME LIKE FAMILY-NAME.
\ PICTURE IS X(2ð)

ð1 EMPLOYEE-NUMBER PIC X(6).


ð1 DEPARTMENT-MEMBERS.
ð5 DEPT-EMPLOYEE-NUMBER LIKE EMPLOYEE-NUMBER
OCCURS 1ð TIMES.
\ PICTURE IS X(6)
Nota: DEPARTMENT-MEMBERS, en el ejemplo anterior, tiene una longitud de 60
bytes.

ð5 TENANT-NAME PIC X(2ð) OCCURS 1ð TIMES.


ð1 RENEWAL-RECORD.
ð5 RENEWAL-MONTH PIC X(3).
ð5 RENEWAL-NAME LIKE TENANT-NAME.
\ PICTURE IS X(2ð)
Nota: RENEWAL-RECORD, en el ejemplo anterior, sólo tiene una longitud de 23
bytes.

La parte de PICTURE del comentario generado se muestra en un formato conciso.


Nota: Un campo numérico con el atributo BLANK WHEN ZERO se considera un
campo numérico editado.

Capítulo 11. Consideraciones de Programación en COBOL/400 271


ð1 ORDER-DETAILS.
ð5 ORDER-TYPE PIC XX.
ð5 ORDER-CODE LIKE ORDER-TYPE.
\ PICTURE IS X(2)

ð1 FASTENINGS.
ð5 NAILS PIC 9V99 BLANK WHEN ZERO.
ð5 RIVETS LIKE NAILS.
\ PICTURE IS 9V9(2)
\ BLANK WHEN ZERO

ð1 MORTGAGE-PAYMENT.
ð5 MORTGAGE-TOTAL PIC S999V99 SIGN IS LEADING SEPARATE.
ð5 MORTGAGE-INTEREST LIKE MORTGAGE-TOTAL.
\ PICTURE IS S9(3)V9(2)
\ SIGN IS LEADING SEPARATE

ð1 PROFIT.
ð5 GROSS-PROFIT PIC 999(3)PP(5).
ð5 NET-PROFIT LIKE GROSS-PROFIT.
\ PICTURE IS 9(5)P(6)

Puede utilizar un entero para aumentar o disminuir la longitud del campo. El


ejemplo siguiente muestra cómo aumentar la longitud de campo de
WEEKLY-AMOUNT:

ð1 WEEKLY-AMOUNT PIC 9(3).


ð1 ANNUAL-AMOUNT LIKE WEEKLY-AMOUNT (+3).
\ PICTURE IS 9(6)

Asimismo, tenga en cuenta que:


Ÿ Cualquier campo que tenga atributos de BLANK WHEN ZERO se considera un
campo editado.
Ÿ Si se especifica un entero de cero, se genera un mensaje informativo.

Sólo se puede aumentar o disminuir la parte del entero de la longitud de campo.


No se puede cambiar el número de posiciones decimales de un ítem de datos.

Los atributos por omisión, SIGN IS TRAILING y USAGE IS DISPLAY, nunca se


imprimen como comentarios después de una operación LIKE.

Cuando utiliza la cláusula LIKE, las reglas normales de calificación de nombres de


datos se aplican en el nombre de datos principal; sin embargo, el nombre de datos
referenciado debe estar calificado exclusivamente si se definió anteriormente más
de una vez. Por ejemplo:
ð1 COMBINATIONS.
ð5 PHENOTYPE PIC XX.
ð5 GENOTYPE LIKE PHENOTYPE.
\ PICTURE IS X(2)
ð1 PHENOTYPE-TRAITS.
ð5 PHENOTYPE PIC X(3ð).
ð5 PHENO-GROUP LIKE PHENOTYPE OF COMBINATIONS.
\ PICTURE IS X(2)

272 COBOL/400 Guía del usuario


Si el usuario no califica exclusivamente el nombre de datos principal, el compilador
le asigna una cláusula PICTURE de X(2) y recibirá un mensaje de error.

La utilización de la cláusula LIKE a veces puede dar como resultado ítems de


grupo que no sean válidos. Por ejemplo, si define un ítem de grupo COMP-4 y
luego utiliza la cláusula LIKE para definir un ítem COMP-3 que está subordinado a
él, se producirá un error.

El ejemplo siguiente es válido:


77 SWITCHES-IN-STOCK PIC S99.
ð1 PARTS-ON-ORDER SIGN IS LEADING SEPARATE.
ð5 SWITCHES-ON-ORDER LIKE SWITCHES-IN-STOCK.
\ PICTURE IS S9(2)
Nota: SWITCHES-ON-ORDER tiene el mismo atributo SIGN (SIGN IS TRAILING)
que SWITCHES-IN-STOCK.

En el caso de B LIKE A, donde A es un ítem de grupo, B no puede estar subordi-


nado a A. En el resto de casos, B se definirá como un ítem alfanumérico con una
longitud en bytes igual a la longitud de grupo A.
ð1 GARAGE-1.
ð5 STD-PARKING-1 PIC 9(3).
ð1 GARAGE-2.
ð5 STD-PARKING-2 PIC 9(3) COMP-3.
77 VACANCIES-1 LIKE GARAGE-1.
\ PICTURE IS X(3)
77 VACANCIES-2 LIKE GARAGE-2.
\ PICTURE IS X(2)

STD-PARKING-1 es un campo numérico con zona, de forma que VACANCIES-1


necesita 3 bytes de almacenamiento. STD-PARKING-2 es un campo numérico
empaquetado, de manera que VACANCIES-2 sólo necesita 2 bytes de almace-
namiento.

Podrá utilizar la cláusula LIKE con la cláusula USAGE IS POINTER:


ð1 CUSTOMER-RECORD.
ð5 CUST-NAME PIC X(16).
ð5 CUST-ADDR-POINTER POINTER.
ð5 CUST-STATS-POINTER LIKE CUST-ADDR-POINTER.
\ USAGE IS POINTER
ð5 CUST-NUMBER PIC S9(8).
Nota: No se puede utilizar la cláusula LIKE para cambiar la longitud de un
puntero.

Para información adicional acerca de la cláusula LIKE, consulte la publicación


COBOL/400 Reference.

Fin de Ampliación de IBM

Capítulo 11. Consideraciones de Programación en COBOL/400 273


Modificación de Referencias
La modificación de referencias permite referenciar subseries de un ítem de datos.
Simplemente debe especificar la posición en el ítem de datos en el que desee
iniciar la subserie, así como la longitud de la subserie. La longitud es opcional: si
la omite, se amplía automáticamente hasta el final del ítem de datos.

El usuario puede escribir la posición inicial y el valor de la longitud como literales


enteros, ítems de datos o expresiones aritméticas.

La posición inicial debe ser, como mínimo, 1, y no puede ser mayor que la longitud
del ítem de datos referenciado. La longitud debe ser, como mínimo, 1.

El resultado de añadir la posición inicial a la especificación de longitud, y después


sustraerle 1, debe estar entre 1 y la longitud total del ítem de datos referenciado,
ambos inclusive. Cuando el valor de longitud es mayor que la longitud total del
ítem de datos, se produce un error.

Para información adicional acerca de la modificación de referencias, vea la publi-


cación COBOL/400 Reference.

La opción de generación *RANGE produce códigos para detectar situaciones de


modificación de referencias fuera del rango, así como para señalar las violaciones
con un mensaje en tiempo de ejecución.

Imagine que quiere recuperar la hora actual del sistema y visualizar su valor en un
formato ampliado. Puede recuperarla con la instrucción ACCEPT, que devuelve
las horas, minutos, segundos y centésimas de segundo en el formato:
HHMMSSss
Sin embargo, es posible que quiera visualizar la hora actual en el formato:
HH:MM:SS

Sin la modificación de referencias, deberá definir los ítems de datos siguientes:


ð1 TIME-GROUP.
ð5 INTERESTING-FIELDS.
1ð HOURS PIC XX.
1ð MINUTES PIC XX.
1ð SECONDS PIC XX.
ð5 UNINTERESTING-FIELDS.
1ð HUNDREDTHS-OF-SECONDS PIC XX.
ð1 EXPANDED-TIME-GROUP.
ð5 INTERESTING-FIELDS.
1ð HOURS PIC XX.
1ð FILLER PIC X VALUE ":".
1ð MINUTES PIC XX.
1ð FILLER PIC X VALUE ":".
1ð SECONDS PIC XX.
El código siguiente recuperaría el valor de hora, lo convertiría al formato ampliado
y visualizaría el valor nuevo:

274 COBOL/400 Guía del usuario


ACCEPT TIME-GROUP FROM TIME
MOVE CORRESPONDING
INTERESTING-FIELDS OF TIME-GROUP TO
INTERESTING-FIELDS OF EXPANDED-TIME-GROUP
DISPLAY "CURRENT TIME IS: " EXPANDED-TIME-GROUP

Con la modificación de referencias, el usuario no necesita proporcionar nombres


para los subcampos que describen los ítems de la hora. La única definición de
datos que debe tener es:
ð1 REFMOD-TIME-ITEM PIC X(8).

El código para recuperar y ampliar el valor de la hora aparece de la siguiente


manera:
ACCEPT REFMOD-TIME-ITEM FROM TIME
DISPLAY "CURRENT TIME IS: "
REFMOD-TIME-ITEM (1:2)
":"
REFMOD-TIME-ITEM (3:2)
":"
REFMOD-TIME-ITEM (5:2)

El ejemplo siguiente muestra una referencia que empieza en la posición de carac-


teres 1, para una longitud 2, de forma que se recupera la parte del valor de la hora
que corresponde al número de horas:
REFMOD-TIME-ITEM (1:2)

El ejemplo siguiente muestra una referencia que empieza en la posición de carac-


teres 3, para una longitud 2, de forma que se recupera la parte del valor de la hora
que corresponde al número de minutos:
REFMOD-TIME-ITEM (3:2)

El ejemplo siguiente muestra un referencia que comienza en la posición de carac-


teres 5, para una longitud 2, de forma que se recupera la parte del valor de la hora
que corresponde al número de segundos:
REFMOD-TIME-ITEM (5:2)

Modificación de Referencias con Tablas de Longitud Variable


Suponga que utiliza las tablas de longitud variable para contener nombres:
ð1 NAME-GROUP.
ð5 NAME-LENGTH PIC 99.
ð5 NAME-PORTION.
1ð FILLER PIC X
OCCURS 1 TO 17 TIMES
DEPENDING ON NAME-LENGTH.
ð1 NEW-NAME-GROUP.
ð5 NEW-NAME-LENGTH PIC 99.
ð5 NEW-NAME-PORTION.
1ð FILLER PIC X
OCCURS 1 TO 17 TIMES
DEPENDING ON NEW-NAME-LENGTH.

Capítulo 11. Consideraciones de Programación en COBOL/400 275


El objeto OCCURS DEPENDING ON de la tabla NAME-PORTION se coloca en 8
de forma que sólo se referencien las primeras ocho apariciones de la tabla, aunque
se rellenen los 17 bytes de NAME-PORTION.
┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│ð│8│W│I│L│L│I│A│M│S│ │T│H│O│M│A│S│ │J│
└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘

Suponga que quiere cambiar el valor en el ítem NAME-PORTION sin cambiar la


parte del ítem que se define más allá de la longitud definida actualmente. Podría
intentar la codificación:
MOVE NEW-NAME-GROUP TO NAME-GROUP
en la que el contenido de NEW-NAME-GROUP es:
┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│ð│5│S│M│I│T│H│ │ │ │ │ │M│I│C│H│A│E│L│
└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘

Según las reglas para la instrucción MOVE, se sustituirá todo el contenido del
campo de recepción NAME-GROUP. Este problema puede evitarse utilizando la
modificación de referencias en la instrucción MOVE:
MOVE NEW-NAME-GROUP TO NAME-GROUP ( 1 :LENGTH OF NAME-GROUP )
Al especificar la modificación de referencias con la longitud (LENGTH OF) de
registro especial, la longitud de NAME-GROUP queda determinada por el valor de
la variable NAME-LENGTH.

El nuevo valor de NAME-GROUP será:


┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│ð│5│S│M│I│T│H│ │ │ │ │T│H│O│M│A│S│ │J│
└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘

Modificación de Referencias Utilizando los Nombres de Datos


Hasta aquí, todos los ejemplos de modificación de referencias han mostrado lite-
rales numéricos simples como posición inicial y valores de longitud de la modifi-
cación de referencias. Estos valores también pueden ser ítems de datos o
expresiones aritméticas.

Suponga que un campo contiene algunos caracteres alineados a la derecha, y


quiere moverlos a otro campo, pero alineados a la izquierda en lugar de estar a la
derecha. Podrá hacerlo utilizando la modificación de referencias y una instrucción
INSPECT.

El programa tendría los datos siguientes:


ð1 LEFTY PIC X(3ð).
ð1 RIGHTY PIC X(3ð)
JUSTIFIED RIGHT.
ð1 I PIC 9(9)
USAGE BINARY.

A continuación, el programa cuenta el número de espacios iniciales y, utilizando


expresiones aritméticas en una expresión de modificación de referencias, mueve
los caracteres alineados a la derecha a otro campo (alineado a la izquierda):

276 COBOL/400 Guía del usuario


MOVE SPACES TO LEFTY
MOVE ZERO TO I
INSPECT RIGHTY
TALLYING I FOR LEADING SPACE
IF I IS LESS THAN 3ð THEN
MOVE RIGHTY ( I + 1 : 3ð - I ) TO LEFTY
END-IF

La instrucción MOVE transfiere caracteres de RIGHTY, comenzando en la posición


calculada en I + 1, para una longitud que se calcula en 30 − I, en el campo LEFTY.

Modificación de Referencias con Subíndices


Defina una tabla como ésta:
ð1 ANY-TABLE.
ð5 TABLE-ELEMENT PIC X(1ð)
OCCURS 3 TIMES
VALUE "ABCDEFGHIJ".

Puede cambiar el tercer y cuarto byte del primer ítem de TABLE-ELEMENT al valor
“??” con la instrucción MOVE siguiente:
MOVE "??" TO TABLE-ELEMENT ( 1 ) ( 3 : 2 )

Esta instrucción moverá el valor “??” al ítem de la tabla número 1, comenzando en


la posición del carácter 3, para una longitud 2.

ANY-TABLE tendría este aspecto antes del cambio:


┌──────────┐
│ABCDEFGHIJ│
├──────────┤
│ABCDEFGHIJ│
├──────────┤
│ABCDEFGHIJ│
└──────────┘

Y éste es el aspecto que tendría después del cambio:


┌──────────┐
│AB??EFGHIJ│
├──────────┤
│ABCDEFGHIJ│
├──────────┤
│ABCDEFGHIJ│
└──────────┘

Deseditar
La acción Deseditar sirve para mover un ítem de datos editados de forma numé-
rica a un ítem de datos de recepción numéricos o editados de forma numérica. El
compilador realiza esta acción estableciendo en primer lugar el valor no editado del
ítem editado de forma numérica. A continuación mueve el valor no editado al
receptor.

La acción Deseditar puede producirse en operaciones del tipo MOVE e INITIALIZE.


Una cláusula VALUE no deshace la edición.

Observe que los valores numéricos no editados pueden significar signos.

Capítulo 11. Consideraciones de Programación en COBOL/400 277


Imagine que utiliza un campo de caracteres para que contenga un valor numérico
que se visualice en el terminal y para que contenga un valor suministrado por el
operador del sistema. Suponga que este campo tiene la siguiente definición:
Ÿ Una posición de caracteres para un signo (para que contenga un espacio si el
campo numérico es positivo o cero, o un signo menos si el campo numérico es
negativo).
Ÿ Seis posiciones de dígitos, en las que los ceros iniciales se representen
mediante espacios;
Ÿ Una coma decimal;
Ÿ Dos posiciones de dígitos decimales.

Los ítems de datos que utilice para definir este campo tendrían el siguiente
aspecto:
ð1 NUM-EDIT PIC −Z(6).9(2) USAGE IS DISPLAY.

Se podría inicializar este campo utilizando la instrucción:


MOVE ZEROS TO NUM-EDIT
y cuando se visualice en el terminal, contendría el valor ␣␣␣␣␣␣␣.00.

Posteriormente, el operador del sistema podría utilizar este campo para la entrada
de datos. Si el operador inserta ␣␣␣␣123,45 en el campo, el usuario podrá obtener
el valor numérico del campo moviéndolo a un ítem de datos definido como:
ð1 NUMERIC-ITEM PIC S9(6)V9(2) USAGE IS PACKED-DECIMAL.

La instrucción:
MOVE NUM-EDIT TO NUMERIC-ITEM
provoca la acción Deshacer Edición, con lo que el ítem numérico recibe el valor
numérico del campo editado de forma numérica NUM-EDIT. Como resultado, el
ítem numérico contiene el valor +123,45.

Ejemplos de Deseditar
La Tabla 5 y la Tabla 6 en la página 279 muestran ejemplos de la acción des-
editar de COBOL/400.

Tabla 5. Mover ítems Editados de Forma Numérica a Receptores Numéricos


Imagen Origen Valor Origen Imagen Recep- Valor Receptor
tora
$+++,+++.++ $␣␣␣+123.45 S9(5)V9(5) +123.45
USAGE IS
DISPLAY
$+++,+++.++ $␣−1,234.56 S9(5)V9(5) −1234.56
USAGE IS
BINARY
*****.999+ **123.450− S9(5)V9(5) −123.45
USAGE IS
PACKED-DECIMAL

278 COBOL/400 Guía del usuario


Tabla 6. Mover ítems Editados de Forma Numérica a Receptores Editados de Forma
Numérica
Imagen Origen Valor Origen Imagen Recep- Valor Receptor
tora
$+++,+++.++ $␣␣␣+123.45 $$$$,$$$.$$CR ␣␣␣␣$123.45␣␣
$+++,+++.++ $␣−1,234.56 −−−−,−−−.99 ␣␣−1,234.56
*****.999+ **123.450− ZZZBZZZBVZZZ ␣␣␣␣123␣450
ZZZ999CR ␣12345␣␣ $++++9999 $␣␣+12345
ZZZ999CR ␣12345CR 999999.99− 012345.00−

Manejo de Errores de Datos


El compilador proporciona comprobaciones de errores en tiempo de compilación
para operaciones de mover que impliquen deshacer edición.

El compilador no realiza esta comprobación para los valores origen de cero e


ignora los caracteres de inserción simples (tales como / B 0 , .).

Prueba de Signo
El compilador valida los signos en ítems fuente editados de forma numérica, según
las reglas que aparecen a continuación.

Definición PICTURE Contenidos admisibles


+ fijo +o−
− fijo ␣o−
CR ␣␣ o CR
DB ␣␣ o DB

Si no se obedecen estas reglas, se produce un error de signo y el programa se


detiene.

Prueba de Flotantes
Si el fuente tiene una serie de caracteres flotantes, esta prueba verifica la correc-
ción de caracteres flotantes iniciales en el campo de datos.

Las reglas para la prueba de flotantes son:


Ÿ Si la cláusula fuente PICTURE contiene símbolos $ flotantes, el primer carácter
que no sea espacio en blanco de la parte pertinente del campo fuente (posi-
ciones 2 a 7 en el ejemplo) debe ser un signo $, y su ubicación debe ser
correcta según las reglas de edición de la cláusula PICTURE. (Vea la publi-
cación COBOL/400 Reference para más información acerca de estas reglas).
Por ejemplo:

Capítulo 11. Consideraciones de Programación en COBOL/400 279


Ubicación de un Carácter Flotante Inicial
ð1 A PIC +$$B,$$$.
.
.
/\ Observe que "b" representa un espacio \/
/\ Serie PIC: +$$B,$$$ \/
/\ Índices Posición: 12345678 \/
MOVE 1 TO A. /\ A = "+bbbbb$1" \/
MOVE 12 TO A. /\ A = "+bbbb$12" \/
MOVE 123 TO A. /\ A = "+bbb$123" \/
MOVE 1234 TO A. /\ A = "+$1b,234" \/

En este ejemplo, el signo $ debe colocarse en la posición 2, 5, 6 o 7.


Ÿ Si la cláusula fuente PICTURE contiene símbolos + flotantes, el primer carácter
que no sea en blanco de la parte pertinente del campo fuente debe ser un
signo + o −, y su ubicación debe ser correcta según las reglas de edición de la
cláusula PICTURE.
Ÿ Si la cláusula PICTURE contiene símbolos − flotantes, la parte pertinente del
campo fuente deberá empezar con:
– Uno o más espacios contiguos, el último de los cuales debe estar correc-
tamente situado según las reglas de edición de la cláusula PICTURE.
– Uno o más espacios contiguos, con un signo − justo a continuación. La
ubicación del signo − debe ser correcta según las reglas de edición de la
cláusula PICTURE.
– A −.

Si estas reglas no se obedecen, se produce un error de flotante y el programa se


detiene.

Consideraciones acerca del Rendimiento

Cláusulas PICTURE para Ítems Numéricos


Dado que las instrucciones de hardware utilizan signos, el usuario puede mejorar
el rendimiento incluyendo una S en una cláusula de imagen siempre que sea
posible.

También se puede mejorar el rendimiento especificando números impares o posi-


ciones de caracteres numéricos en las cláusulas de imagen para ítems COMP-3
(decimales empaquetados). Internamente, el byte más a la derecha de un ítem
decimal empaquetado contiene un dígito y un signo, y cualquier otro byte contiene
dos dígitos. Si utiliza la configuración más eficiente, el compilador no necesita
suministrar el dígito que falta.

280 COBOL/400 Guía del usuario


Ítems Binarios de Ocho Bytes
Evite la utilización de ítems binarios de 8 bytes. Puede especificar estos ítems
según su conveniencia, pero el compilador debe realizar conversiones para utili-
zarlos.

Segmentación
La utilización de la segmentación aumenta los tiempos de compilación y ejecución
del programa COBOL. La característica de segmentación sólo se proporciona para
lograr la compatibilidad con otros sistemas. Al utilizar programas COBOL/400 no
tiene que preocuparse por la gestión de almacenamiento.

Llamadas a un Programa COBOL desde un Programa que no es


COBOL
La repetición de llamadas desde un programa COBOL a otro que no sea COBOL
puede dar como resultado una disminución sustancial en el rendimiento del compi-
lador, puesto que al salir del programa principal COBOL (es decir, el programa que
ha iniciado la unidad de ejecución COBOL) se desactiva el programa.

Se ha añadido una nueva función (MGTFUNC) a la rutina de tiempo de ejecución


de COBOL (QRLMAIN) para evitar dicha desactivación, provocando que el pro-
grama principal COBOL se trate como un subprograma. Dado que esta corrección
depende del tamaño de MGT, se recomienda llamar a la rutina de tiempo de ejecu-
ción, QLRMAIN, desde el programa principal COBOL con MGTFUNC = 9, tal y
como aparece en el ejemplo siguiente:
ð1 mgtstruc.
ð3 FILLER PIC X(277).
ð3 mgtfunc pic 9(2) comp-4 value 9.
77 TEST-VAR PIC X(1ð) value spaces.

if test-var = spaces then


display 'spaces'
move 'faked' to test-var
call 'QLRMAIN' using mgtstruc
else
display 'not spaces ' test-var.

Notas:
1. ð1 Mgtstruc debe estar en un límite de 16 bytes. Si se produce un error de
límite, añada 77 aa PIC X. delante de ð1.
2. Dado que la llamada a QLRMAIN cambia el programa principal COBOL por un
subprograma, deberá utilizar el mandato EXIT PROGRAM y no STOP RUN, ya
que podrían producirse errores.
3. RCLRSC desactivará el programa principal (ahora un subprograma).

Capítulo 11. Consideraciones de Programación en COBOL/400 281


Depuración
La depuración del lenguaje fuente COBOL se proporciona para ayudar al progra-
mador en COBOL a depurar un programa que no funciona según lo esperado. La
utilización de este servicio aumenta los tiempos de compilación y ejecución de un
programa COBOL.

Opción *NORANGE
Esta opción del parámetro GENOPT del mandato CRTCBLPGM suprime las com-
probaciones en tiempo de ejecución para rangos de modificación de subíndices y
referencias.

Esta opción puede aumentar el rendimiento cuando:


Ÿ Realice referencias frecuentes a las tablas, y los subíndices siempre hagan
referencia a ítems que estén en las tablas
Ÿ Utilice frecuentemente la modificación de referencias.
Nota: La opción *RANGE genera códigos para comprobar rangos de subíndice.
Por ejemplo, asegura que el usuario no está intentando acceder al ítem
número 21 de una matriz de 20 ítems.

La opción *NORANGE no genera códigos para comprobar rangos de modificación


de subíndices o referencias.

Estas opciones no eliminan la comprobación de subíndice cero realizada por el


sistema operativo. Si se produce el subíndice cero, el sistema operativo no permi-
tirá su utilización y emitirá el mensaje MCH0603.

Opción *DUPKEYCHK
Esta opción de parámetro GENOPT del mandato CRTCBLPGM indica que se efec-
tuará la comprobación de clave duplicada para archivos INDEXED. La utilización
de DUPKEYCHK durante la lectura de archivos INDEXED puede afectar
negativamente al rendimiento.

Archivos Relativos
Pueden producirse retrasos duraderos si se abren o se cierran archivos relativos
en los que se estén inicializando grandes volúmenes de registros para suprimir
registros.

Consulte la Tabla 4 en la página 263 para más información.

Indicadores
Si utiliza los indicadores en un área de indicadores separada (palabra clave
INDARA especificada en las DDS) en vez de hacerlo en un área de registros, la
utilización de la cláusula OCCURS para especificar una tabla de hasta 99 indi-
cadores puede aumentar el rendimiento. Consulte la Figura 60 en la página 163
para más información.

282 COBOL/400 Guía del usuario


Control de Compromiso
Generalmente, la utilización del control de compromiso aumenta el tiempo de eje-
cución de un programa COBOL. Además, el bloqueo de registros resultante de la
utilización del control de compromiso por un trabajo puede provocar retrasos para
otros usuarios que intenten acceder al mismo archivo.

Lectura sin Bloqueos de Registros


Para evitar registros de bloqueos innecesarios, puede incluir la frase NO LOCK en
la instrucción READ. Para más información acerca de esta frase, consulte la
sección de la instrucción READ en la publicación COBOL/400 Reference.

Inicialización de Variables
Se puede reducir el tiempo de ejecución de un programa eligiendo la posibilidad de
no inicializar variables de programa que no tengan cláusulas de valor asociadas.
Se puede especificar esta no inicialización mediante \NOSTDINZ para el parámetro
GENOPT del mandato CRTCBLPGM, o especificando NOSTDINZ en la instrucción
PROCESS. A continuación, el compilador inicializa únicamente aquellas variables
que tienen cláusulas de valor declaradas. Una ventaja adicional de esta opción
consiste en que el usuario también puede compilar programas más grandes con un
número mayor de variables.

Si se especifica \NOSTDINZ, deberá asegurarse de que todos los ítems de datos


contengan datos válidos antes de intentar manipular los ítems. Si un ítem no con-
tiene datos válidos, pueden producirse errores de datos decimales.

Bloqueo de Registros
Se puede utilizar el bloqueo de registros para mejorar el rendimiento del tiempo de
ejecución. Las ventajas del bloqueo quedan patentes cuando se leen varios regis-
tros de manera secuencial, como una lectura aleatoria seguida de lecturas secuen-
ciales.

Para más información acerca de los bloqueos, consulte el apartado “Desbloqueo


de Registros de Entrada y Bloqueo de Registros de Salida” en la página 107.

Bucles en un Programa
Cuando un programa procesa repetidamente la misma serie de instrucciones, y
parece evidente que así continuará indefinidamente, el programa se encuentra en
un bucle. Para identificar los bucles, puede utilizar la información conocida acerca
del propio programa, de la manera siguiente:
Ÿ Tiempo: Si el tiempo de ejecución real sobrepasa sustancialmente el tiempo
de ejecución esperado, el programa puede estar en un bucle.
Ÿ Operaciones de E/S: Si no se dan operaciones de entrada/salida y se espera
que la E/S se produzca repetidamente, es probable que el programa esté en
un bucle.

Capítulo 11. Consideraciones de Programación en COBOL/400 283


Rastreo de un Bucle en un Programa
Frecuentemente, un bucle abarca muchas instrucciones en un programa. En este
caso, puede utilizar las características de depuración COBOL que aparecen en el
Capítulo 5, “Depuración del Programa” en la página 57.

Errores que Pueden Causar un Bucle


Una instrucción PERFORM con una cláusula UNTIL puede provocar un bucle si no
se puede cumplir la condición especificada en la cláusula UNTIL. Por ejemplo:
PERFORM ... UNTIL COUNTR LESS THAN ZERO

donde COUNTR es un ítem numérico sin signo.

Una instrucción GO TO que hace referencia a un nombre de procedimiento anterior


puede provocar un bucle si no hay ninguna instrucción condicional para impedir
que la instrucción GO TO se procese de nuevo. Por ejemplo:
PARA-1.
MOVE ...
MOVE ...
MOVE ...
PARA-2.
MOVE ...
GO TO PARA-1.

se produce una variación posible de este caso si existe una instrucción condicional,
pero esta condición no puede cumplirse o la instrucción no se bifurca (mediante
una sentencia GO TO) a un párrafo fuera del rango del bucle.

284 COBOL/400 Guía del usuario


Capítulo 12. Comunicaciones entre Programas
En ocasiones, una aplicación es suficiente para que se codifique como un pro-
grama único y autosuficiente. Sin embargo, en la mayoría de los casos, la solu-
ción que ofrece una aplicación consta de varios programas compilados por
separado y utilizados conjuntamente.

El sistema AS/400 proporciona la comunicación entre programas COBOL y entre


programas COBOL y otros que no sean COBOL.

Una unidad de ejecución COBOL es un conjunto de uno o más programas que


funcionan como una unidad en el tiempo de ejecución con el fin de proporcionar
una solución a un problema. Una unidad de ejecución COBOL se inicia con el
primer programa COBOL en la pila de programas, e incluye todos los programas
(de cualquier tipo) que estén por debajo de él. Una pila de programas es una
lista de programas enlazados como resultado de programas que llaman a otros
programas, o de manera implícita desde cualquier otra acción dentro del mismo
trabajo.

Cuando una unidad de ejecución consta de varios programas compilados por sepa-
rado que se llaman mutuamente, dichos programas deben ser capaces de comuni-
carse entre sí. Necesitan transferir el control y normalmente necesitan tener
acceso a datos comunes. Este capítulo describe los métodos seguidos por esta
comunicación entre programas compilados por separado.

Transferencia de Control a Otro Programa


En la División de Procedimientos, un programa puede llamar a otro programa (lo
que, en términos de COBOL, se suele denominar subprograma), y este programa
llamado puede, a su vez, llamar a otro programa. El programa que llama a otro
programa se denomina programa de llamada, y el programa al que ésta llama se
denomina programa llamado.

El programa COBOL llamado empieza a ejecutarse al principio de la División de


Procedimiento.

Cuando el proceso del programa llamado ha finalizado, el programa puede trans-


ferir de nuevo el control al programa de llamada o finalizar la unidad de ejecución.

Un programa llamado no debe ejecutar, directa o indirectamente, su llamador (por


ejemplo, el programa X llamando al programa Y; el programa Y llamando al pro-
grama Z, y el programa Z llamando entonces al programa X). Recibe el nombre
de llamada recurrente. COBOL/400 permite la recurrencia tanto en programas
principales como en subprogramas. Sin embargo, si desea que sus programas se
adecúen a estándares SAA, no utilice llamadas recurrentes.

 Copyright IBM Corp. 1994 285


Programas Principales y Subprogramas
El primer programa COBOL que se va a a ejecutar inicia la unidad de ejecución
COBOL, y no es otro que el programa principal. No existen instrucciones fuente
u opciones específicas que identifiquen un programa COBOL como un programa
principal o un subprograma. Un subprograma es un programa de la unidad de
ejecución que está por debajo del programa principal en la pila de programas.
Para más información acerca de las pilas de programas y de otros términos
relativos a la comunicación entre programas, consulte la publicación CL Guía del
Programador.

Devolución de Control desde un Programa Llamado


Es importante conocer si un programa COBOL es un programa principal o un sub-
programa, con el fin de determinar el modo en que el control se devuelve desde un
programa llamado cuando se produce un error o finaliza un programa.

Puede emitir una instrucción STOP RUN, EXIT PROGRAM o GOBACK para
devolver el control de un programa llamado.

Si la ejecución finaliza en el programa principal, se utiliza STOP RUN o GOBACK.


Estas instrucciones finalizan la unidad de ejecución, y se devuelve el control al lla-
mador del programa principal.

Si la ejecución finaliza en un subprograma, éste podrá finalizar con una instrucción


EXIT PROGRAM, GOBACK o STOP RUN. Si el subprograma finaliza con una
instrucción EXIT PROGRAM o GOBACK, el control vuelve a su inmediato llamador
sin finalizar la unidad de ejecución. Se genera una instrucción EXIT PROGRAM
implícita si no existe ninguna instrucción ejecutable posterior en un programa
llamado. Si finaliza con una instrucción STOP RUN, el efecto es el mismo que se
produce en el programa principal: todos los programas COBOL de la unidad de
ejecución finalizan, y el control vuelve al llamador del programa principal.

Un subprograma se queda en un estado utilizado por última vez cuando finaliza


con EXIT PROGRAM o GOBACK. La próxima vez que se llame en la unidad de
ejecución, sus valores internos serán los que se habían dejado, con la salvedad de
que los valores de retorno para las instrucciones PERFORM se reinicializarán a
sus valores iniciales. Por contra, un programa principal se inicializará cada vez
que se llame.

Los ejemplos siguientes ilustran la utilización de las instrucciones EXIT PROGRAM


y STOP RUN en partes distintas de la unidad de ejecución.
Ÿ El ejemplo de la Figura 85 en la página 287 muestra una única unidad de eje-
cución.
Ÿ El ejemplo de la Figura 86 en la página 288 muestra múltiples unidades de
ejecución que se ejecutan de manera consecutiva.
Ÿ El ejemplo de la Figura 87 en la página 289 muestra una unidad de ejecución
con un programa compartido que es a la vez un subprograma y un programa
principal.
Ÿ El ejemplo de la Figura 88 en la página 290 muestra varias unidades de eje-
cución que se ejecutan simultáneamente.

286 COBOL/400 Guía del usuario


Nota: Puede sustituir una instrucción GOBACK por una instrucción EXIT
PROGRAM que aparezca en un subprograma, o una instrucción STOP
RUN que aparezca en un programa principal.
LLAMADA
UNIDAD EJECUCIÓN A NIVEL
┌─ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ─┐
│ │
┌─────────────────┐
│ │ PGMA │ │
│ │ n
│ │ Programa │ │
│ Principal COBOL │
│ └────────┬────────┘ │

│ ┌─────────────┴──────────────┐ │
│ │
│ │ │ │
┌────────┴────────┐ ┌────────┴────────┐
│ │ PGMB │ │ PGMC │ │
│ │ │ │ n + 1
│ │ │ │ │ │
│ COBOL │ │ No COBOL │
│ └────────┬────────┘ └────────┬────────┘ │
│ │
│ │ │ │
┌───────────┴─────────┐ ┌─────────┴────────────┐
│ │ │ │ │ │
┌──────┴───────┐ ┌───┴────────┴───┐ ┌────────┴───────┐
│ │ PGMD │ │ PGME │ │ PGMF │ │
│ │ │ │ │ │ n + 2
│ │ │ │ │ │ │ │
│ COBOL │ │ COBOL │ │ No COBOL │
│ └──────────────┘ └────────────────┘ └────────────────┘ │
└─ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ─┘

PROGRAMA QUE EJECUTA LA INSTRUCCIÓN


┌─────────┬──────────┬──────────┬─────────┐
INSTRUCCIÓN │ PGMA │ PGMB │ PGMD │ PGME │
┌────────────────────┼─────────┼──────────┼──────────┼─────────┤
│ │ │ │ │ │
│ EXIT PROGRAM │ .1/ │ .2/ │ .2/ │ .2/ │
├────────────────────┼─────────┼──────────┼──────────┼─────────┤
│ │ │ │ │ │
│ STOP RUN │ .3/ │ .3/ │ .3/ │ .3/ │
└────────────────────┴─────────┴──────────┴──────────┴─────────┘

Figura 85. Ejemplo de una Única Unidad de Ejecución

.1/ No se procesa ninguna operación porque la instrucción se procesa en un


programa principal. El proceso continúa con la instrucción siguiente en
PGMA.
.2/ El control se devuelve al llamador del programa que procesa la instrucción
EXIT PROGRAM.
.3/ La unidad de ejecución A finaliza. Para todos los programas en la unidad de
ejecución, se cierran los archivos abiertos.Se libera el almacenamiento para
todos los programas en la unidad de ejecución. El control se devuelve al
programa que está en el nivel de llamada n-1. Si n=1, se aplican las consi-
deraciones siguientes:
Ÿ La unidad de ejecución A opera como un paso de trabajo. Consulte la
publicación CL Guía del Programador para más información.
Ÿ Para trabajos por lotes, la instrucción STOP RUN finaliza el trabajo.
Para trabajos interactivos, el control se devuelve al sistema y éste el
paso del trabajo.

Capítulo 12. Comunicaciones entre Programas 287


LLAMADA
NIVEL
┌─────────────────┐
│ PGMA │
│ │ n
│ │
│ No COBOL │
└────────┬────────┘

┌─────────────┴──────────────┐
UNIDAD EJECUCIÓN B │ │ UNIDAD EJECUCIÓN C
┌─ ── ── ── ── ── ── ┼─ ── ── ── ──┐ ┌─ ── ── ─ ┼─ ── ── ── ── ── ── ─ ─┐
┌────────┴────────┐ │ │ ┌────────┴────────┐ │
│ │ PGMB │ │ PGMC │
│ │ │ │ │ │ │ n + 1
│ │ Programa │ │ Programa │
│ Pincipal COBOL │ │ │ │ Principal COBOL │ │
│ └────────┬────────┘ └────────┬────────┘
│ │ │ │ │
│ │ ┌─ ── ── ── ──┘ │
┌───────────┴──┼──────┐ │ ┌─────────┴────────────┐ │
│ │ │ └── ─┼─ ── ─┐ │
┌──────┴───────┐ │ ┌───┴────────┴───┐ ┌────────┴───────┐ │
│ │ PGMD │ │ PGME │ │ │ PGMF │
│ │ │ │ │ │ │ │ n + 2
│ │ │ │ │ │ │ │
│ No COBOL │ │ │ COBOL │ │ COBOL │ │
│ └──────────────┘ └────────────────┘ │ └────────────────┘
└─ ── ── ── ── ── ── ── ┼─ ── ── ── ── ── ── ──┘ │
└─ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ──┘

PROGRAMA QUE EJECUTA LA INSTRUCCIÓN


┌─────────┬──────────┬──────────┬─────────┬────────┐
│ │ │ PGME │ PGME │ │
│ PGMB │ PGMC │(UNIDAD DE│(UNIDAD │ PGMF │
INSTRUCCIÓN │ │ │ EJEC. B) │ EJEC.C) │ │
┌────────────────────┼─────────┼──────────┼──────────┼─────────┼────────┤
│ │ │ │ │ │ │
│ EXIT PROGRAM │ .1/ │ .1/ │ .2/ │ .2/ │ .2/ │
├────────────────────┼─────────┼──────────┼──────────┼─────────┼────────┤
│ │ │ │ │ │ │
│ STOP RUN │ .3/ │ .4/ │ .3/ │ .4/ │ .4/ │
└────────────────────┴─────────┴──────────┴──────────┴─────────┴────────┘

Figura 86. Ejemplo de Varias Unidades de Ejecución que se Ejecutan de Manera Consecu-
tiva

.1/ No se procesa ninguna operación porque la instrucción se procesa en un


programa principal. El proceso continúa con la instrucción siguiente en el
programa principal.
.2/ El control se devuelve al llamador del programa que procesa la instrucción
EXIT PROGRAM.
.3/ Se finaliza la unidad de ejecución B. Todos los archivos abiertos en la
unidad de ejecución B se cierran. Se libera el almacenamiento para todos
los programas en la unidad de ejecución B. El control se devuelve al lla-
mador del programa principal para la unidad de ejecución (PGMA).
.4/ Se finaliza la unidad de ejecución C. Todos los archivos abiertos en la
unidad de ejecución C se cierran. Se libera el almacenamiento para todos
los programas en la unidad de ejecución C. El control se devuelve al lla-
mador del programa principal para la unidad de ejecución (PGMA).

288 COBOL/400 Guía del usuario


LLAMADA
NIVEL

┌─────────────────┐
│ PGMA │
│ │ n
│ │
│ No COBOL │
└────────┬────────┘

┌─────────────┴──────────────┐
UNIDAD EJECUCIÓN B │ │
┌── ── ── ── ── ── ──│── ── ── ── ─┐ │
│ ┌────────┴────────┐ │ ┌────────┴────────┐
│ PGMB │ │ PGMC │
│ │ │ │ │ │ n + 1
│ Programa │ │ │
│ │ Principal COBOL │ │ │ No COBOL │
└────────┬────────┘ └────────┬────────┘
│ │ └─ ── ── ── ─┐ │
│ │ │
│ ┌───────────┴─────────┐ ┌─────────┴────────────┐
│ UNIDAD EJECUCIÓN E │ │ UNIDAD EJECUCIÓN F
│ │ ┌─ ── ┼─ ── ── ┼─ ── ┐ ┌─ ── ── ──│── ── ── ┐
┌──────┴───────┐ │ ┌───┴────────┴───┐ │ │ ┌────────┴───────┐ │
│ │ PGMD │ │ PGME │ │ │ PGMF │
│ │ │ │ │ │ │ │ │ │ n + 2
│ │ │ │ │ │ │Programa │
│ No COBOL │ │ │ COBOL │ │ │ │Principal COBOL │ │
│ └──────────────┘ └────────────────┘ │ └────────────────┘
└─ ── ── ── ── ── ── ┘ │ └─ ─ ── ── ── ── ── ┘
└── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ──┘

PROGRAMA QUE EJECUTA LA INSTRUCCIÓN


┌─────────┬──────────┬──────────┬──────────┐
│ │ PGME │ PGME │ │
│ PGMB │(UNIDAD DE│(UNIDAD DE│ PGMF │
INSTRUCCIÓN │ │ EJEC. B) │ EJEC. E) │ │
┌────────────────────┼─────────┼──────────┼──────────┼──────────┤
│ │ │ │ │ │
│ EXIT PROGRAM │ .1/ │ .2/ │ .1/ │ .1/ │
├────────────────────┼─────────┼──────────┼──────────┼──────────┤
│ │ │ │ │ │
│ STOP RUN │ .3/ │ .3/ │ .4/ │ .5/ │
└────────────────────┴─────────┴──────────┴──────────┴──────────┘

Figura 87. Ejemplo de una Unidad de Ejecución con un Programa Compartido que es tanto
un subprograma como un programa principal

.1/ No se procesa ninguna operación porque la instrucción se procesa en un


programa principal. El proceso continúa con la instrucción siguiente en el
programa principal.
.2/ El control se devuelve al llamador del programa que procesa la instrucción
EXIT PROGRAM.
.3/ Se finaliza la unidad de ejecución B. Todos los archivos abiertos en la
unidad de ejecución B se cierran. Se libera el almacenamiento para todos
los programas en la unidad de ejecución B. El control se devuelve al lla-
mador del programa principal para la unidad de ejecución (PGMA).

Capítulo 12. Comunicaciones entre Programas 289


.4/ Se finaliza la unidad de ejecución E. Todos los archivos abiertos en la
unidad de ejecución E se cierran. Se libera el almacenamiento para PGME.
El control se devuelve al llamador del programa principal para la unidad de
ejecución (PGMC).
.5/ Se finaliza la unidad de ejecución F. Todos los archivos abiertos en la
unidad de ejecución F se cierran. Se libera el almacenamiento para PGMF.
El control se devuelve al llamador del programa principal para la unidad de
ejecución (PGMC).
NIVEL DE
LLAMADA
┌─────────────────┐
│ PGMA │
│ │ n
│ │
│ No en COBOL │
UNIDAD DE EJECUCIÓN B └────────┬────────┘
┌ ── ── ── ── ── ── ── ── ┼─ ── ── ┐
6 │
│ ┌─────────────────┐
│ PGMB │ │ n+1
│ │ │
│ Programa │ │
│ │ Principal COBOL │
└─────┬───────────┘ │
│ ┌─────────────────┴──┐
6 6 │
│ ┌─────────────────┐ ┌─────────────────┐ n+2
│ PGMC │ │ PGMD │ │
│ │ │ │ │
│ │ │ │ │
│ │ COBOL │ │ no en COBOL │ UNIDAD DE EJECUCIÓN E
└─────────────────┘ └─────────────┬───┘ │ ┌─ ── ── ── ── ── ┐
│ ┌────┴────────┼──────────┐
6 │ 6 │
│ ┌─────────────────┐ │ ┌─────────────────┐
│ PGM QLRCHGCM │ │ │ PGME │ │ n+3
│ │ │ │ │ Programa │
│ │ │ │ Principal │ │
│ │ API │ │ │ 2 COBOL │
└─────────────────┘ │ └────────┬────────┘ │
└─ ── ── ── ── ── ── ── ── ── ── ── ┘ │ │
6 │
│ ┌─────────────────┐
│ PGMF │ │ n+4
│ │ │
│ │ │
│ │ COBOL │
└─────────────────┘ │
└ ── ── ── ── ── ┘

PROGRAMA QUE EJECUTA LA INSTRUCCIÓN


┌─────────┬──────────┬──────────┬──────────┐
│ │ PGMC │ PGME │ │
│ PGMB │(UNIDAD DE│(UNIDAD DE│ PGMF │
INSTRUCCIÓN │ │ EJEC. B) │ EJEC. E) │ │
┌────────────────────┼─────────┼──────────┼──────────┼──────────┤
│ │ │ │ │ │
│ EXIT PROGRAM │ .1/ │ .2/ │ .1/ │ .2/ │
├────────────────────┼─────────┼──────────┼──────────┼──────────┤
│ │ │ │ │ │
│ STOP RUN │ .3/ │ .3/ │ .4/ │ .4/ │
└────────────────────┴─────────┴──────────┴──────────┴──────────┘

Figura 88. Ejemplo de Varias Unidades de Ejecución que se Ejecutan Simultáneamente

.1/ No se procesa ninguna operación porque la instrucción se procesa en un


programa principal. El proceso continúa con la instrucción siguiente en pro-
grama principal.

290 COBOL/400 Guía del usuario


.2/ El control se devuelve al llamador del programa que procesa la instrucción
EXIT PROGRAM.
.3/ La unidad de ejecución B sólo se puede finalizar una vez que la unidad de
ejecución E realiza una instrucción STOP RUN. Cuando la unidad de ejecu-
ción B finaliza, todos los archivos abiertos en la unidad de ejecución B se
cierran. Se libera el almacenamiento para todos los programas de la unidad
de ejecución B, y el control se devuelve al llamador del programa principal
(PGMA).
.4/ Se finaliza la unidad de ejecución E. Todos los archivos abiertos en la
unidad de ejecución E se cierran. Se libera el almacenamiento para todos
los programas en la unidad de ejecución E. El control se devuelve a PGMD
en la unidad de ejecución B.

Las unidades de ejecución concurrentes se consiguen utilizando la API


QLRCHGCM. Consulte la publicación System Programmer’s Interface Reference
para más información acerca de esta API.

Inicialización de Almacenamiento
La primera vez que se llama a un programa COBOL en una unidad de ejecución,
se inicializa su almacenamiento. El almacenamiento se inicializa de nuevo con las
condiciones siguientes:
Ÿ Se termina la unidad de ejecución, luego se vuelve a iniciar.
Ÿ El programa se cancela (utilizando la instrucción CANCEL para COBOL, la
operación FREE para el lenguaje de programación RPG/400* o el mandato
Reclamar Recurso (RCLRSC), y a continuación se llama de nuevo.

Si se nombra un programa que no sea COBOL en una instrucción CANCEL, su


nombre debe respetar las reglas para la formación de un nombre de programa
COBOL.

Llamada a Otro Programa


Con cierta frecuencia, deseará que sus programas COBOL se comuniquen con
otros programas COBOL o que no sean COBOL.

Paso de Datos Utilizando BY REFERENCE o BY CONTENT


BY REFERENCE significa que el subprograma está consultando y procesando los
ítems de datos en el almacenamiento del programa de llamada, y no está traba-
jando sobre una copia de los datos.

BY CONTENT significa que el programa de llamada está pasando únicamente el


contenido del literal o identificador. Con una instrucción CALL . . . BY CONTENT,
el programa llamado no puede cambiar el valor del literal o identificador en el pro-
grama de llamada, incluso si éste modifica la variable en la que ha recibido el
literal o identificador.

El hecho de pasar ítems de datos con BY REFERENCE o con BY CONTENT


depende de lo que el usuario desee que el programa haga con los datos:

Capítulo 12. Comunicaciones entre Programas 291


Ÿ Si desea que la definición del argumento de la instrucción CALL del programa
de llamada y la definición del parámetro en el programa llamado compartan la
misma memoria, especifique:
CALL . . . BY REFERENCE identificador.
Todo cambio realizado por el subprograma en el parámetro afecta al argu-
mento del programa de llamada.
Un identificador en la frase USING de la instrucción CALL . . . BY
REFERENCE puede ser un nombre de archivo, además de un nombre de
datos.
El compilador acepta los nombres de archivos CALL como operandos CALL
como si fueran una extensión.
Ÿ Si desea pasar la dirección de un área de registro a un programa llamado,
especifique:
CALL . . . BY REFERENCE ADDRESS OF nombre-registro.
El subprograma recibe la instrucción ADDRESS OF del registro especial para
el nombre de registro especificado.
El usuario deberá definir el nombre de registro como un ítem de nivel-01 o
nivel-77 en la Sección de Enlace del programa de llamada y del programa
llamado. Se proporciona una instrucción ADDRESS OF del registro especial
para cada registro de la Sección de Enlace.
Ÿ Si no desea que la definición del argumento de la instrucción CALL del pro-
grama de llamada y la definición del parámetro en el programa llamado com-
partan la misma memoria, especifique:
CALL . . . BY CONTENT identificador.
Ÿ Si desea pasar un valor de literal a un programa llamado, especifique:
CALL . . . BY CONTENT literal.
El programa llamado no puede cambiar el valor del literal. El literal no puede
ser numérico.
Ÿ Si desea pasar la longitud de un ítem de datos, especifique:
CALL . . . BY CONTENT LENGTH OF identificador.
El programa de llamada pasa la longitud de identificador desde su longitud de
(LENGTH OF) registro especial. Cuando se pasan los literales por contenido
(BY CONTENT), el programa llamado no puede cambiar sus valores.
Ÿ Si desea pasar tanto un ítem de datos como su longitud a un subprograma,
especifique una combinación de BY REFERENCE y BY CONTENT. Por
ejemplo:
CALL 'ERRPROC' USING BY REFERENCE A
BY CONTENT LENGTH OF A.

Los ítems de datos de un programa de llamada pueden describirse en la Sección


de Enlace de todos los programas a los que llama directa o indirectamente. En
este caso, el almacenamiento para estos ítems se asigna al programa de llamada
superior. Es decir, el programa A llama al programa B, el cual llama al programa
C. Los ítems de datos del programa A pueden describirse en la Sección de Enlace
de los programas B y C, de manera que un conjunto de datos pueda estar dispo-
nible para los tres programas.

292 COBOL/400 Guía del usuario


Descripción de Argumentos en el Programa de Llamada
En el programa de llamada, los argumentos se describen en la División de Datos
del mismo modo que el resto de los ítems de datos de la División de Datos. A
menos que se encuentren en la Sección de Enlace, el almacenamiento de dichos
ítems se asigna al programa de llamada. Si se consultan datos en un archivo, éste
debe estar abierto. Codifique la cláusula USING de la instrucción CALL para pasar
los argumentos.

Descripción de Parámetros en el Programa Llamado


En el programa llamado, los parámetros se describen en la Sección de Enlace.
Codifique la cláusula USING después de la cabecera PROCEDURE-DIVISION
para recibir los parámetros.

En la Sección de Enlace
El usuario deberá conocer lo que esté pasando desde el programa de llamada y
configurar la Sección de Enlace en el programa llamado para aceptarlo. Al pro-
grama llamado no le importa la cláusula de la instrucción CALL que el usuario
utilice para pasar los datos (BY REFERENCE o BY CONTENT). En cualquiera de
los dos casos, el programa llamado debe describir los datos que está recibiendo,
cosa que realiza en la Sección de Enlace.

El número de nombres-datos de la lista de identificador de un programa llamado no


debe ser mayor que el número de nombres-datos de la lista de identificador del
programa de llamada. Existe una correspondencia de posición de uno a uno; es
decir, el primer identificador del programa de llamada se pasa al primer identifi-
cador del programa llamado, y así sucesivamente. El compilador no hace ningún
intento de hacer coincidir argumentos y parámetros.

Agrupación de Datos a Pasar


Piense en agrupar todos los ítems de datos que desee pasar entre programas y en
ponerlos bajo un ítem de nivel-01. Si lo hace, podrá pasar un registro único de
nivel-01 entre programas. Para ver un ejemplo de este método, observe la
Figura 89 en la página 294.

Para que la posibilidad de registros no coincidentes se vea aún reducida, transfiera


el registro de nivel-01 a un miembro de copia y cópielo en ambos programas, es
decir, cópielo en la Sección de Almacenamiento de Trabajo del programa de
llamada y en la Sección de Enlace del programa llamado.

Capítulo 12. Comunicaciones entre Programas 293


Descripción Programa Llamada Descripción Programa Llamado

SECCIÓN ALMACENAMIENTO TRABAJO. SECCIÓN ENLACE.


┌───────────────────────────┐ ┌──────────────────────────┐
│ð1 PARAM─LIST. │ │ð1 USING─LIST. │
│ ð5 PARTCODE PIC A. ├─────────5│ 1ð PART─ID PIC X(5). │
│ ð5 PARTNO PIC X(4). │ │ 1ð SALES PIC 9(5). │
│ ð5 U─SALES PIC 9(5). │ │ │
└──────────────────────┬────┘ └────────────────────┬─────┘
. │ . │
. │ . │
. │ . │
│ │
PROCEDURE DIVISION. │ PROCEDURE DIVISION 6
. │ ┌───────────┐
. │ USING │USING─LIST.│
. │ └───────────┘

CALL CALLED─PROG 6
┌───────────┐
USING │PARAM─LIST.│ En el programa llamado, el código
└───────────┘ de componentes y de número de
componentes se combinan en un ítem
En el programa de llamada, el de datos (PART─ID). En el programa
código de componente (PARTCODE) llamado, la única consulta válida
y el número de componente (PARTNO) es la consulta a un ítem de datos
aparecen por separado. (PART-ID).

Figura 89. Ítem de Datos Comunes en el Enlace de Subprograma

Llamada por Identificador


Se establece un puntero del sistema que asocia un identificador con un objeto la
primera vez que utilice el identificador en una instrucción CALL.

¡Importante para la compatibilidad!

Si realiza una llamada por identificador a un programa que posteriormente


suprimirá o redenominará, debe utilizar la instrucción CANCEL para anular el
puntero del sistema asociado con el identificador. Ello asegura que cuando
utilice otra vez el identificador para llamar al programa, el puntero del sistema
asociado se activará de nuevo.

El ejemplo siguiente muestra cómo aplicar la instrucción CANCEL para un


identificador:
MOVE "ABCD" TO IDENT-1.
CALL IDENT-1.
CANCEL IDENT-1.
Si aplica la instrucción CANCEL directamente al literal "ABCD", no anula el puntero
del sistema asociado con IDENT-1. En su lugar, puede continuar llamando al pro-
grama ABCD con sólo utilizar IDENT-1 en la instrucción CALL.

El valor del puntero del sistema también cambia si el usuario modifica el valor del
identificador y realiza una llamada utilizando este nuevo valor.

294 COBOL/400 Guía del usuario


Utilización de Punteros en un Programa COBOL/400
Podrá utilizar un puntero (un ítem de datos en el que pueden almacenarse los
valores de la dirección) en un programa COBOL siempre que desee pasar y recibir
direcciones de un ítem de datos asignado de manera variable, así como realizar
direccionamientos de base limitada.

En el sistema AS/400, los punteros tienen una longitud de 16 bytes. Los punteros
COBOL son punteros de espacio de AS/400, dado que se direccionan a objetos
espacio de sistema. Una parte del puntero describe sus atributos (por ejemplo, a
qué objeto espacio del AS/400 se está direccionando). Otra parte del puntero con-
tiene el desplazamiento en el objeto espacio del sistema AS/400.

Para definir un puntero COBOL (llamado ítem de datos puntero), codifique una
cláusula USAGE IS POINTER en el ítem de datos. Un ítem de datos puntero es
un ítem que consta de 16 bytes que se puede comparar por igualdad o utilizar para
establecer el valor de otros ítems de punteros.

Un ítem de datos de puntero sólo puede utilizarse:


En una instrucción SET (sólo Formato 5)
En una relación de condición
En la frase USING de la instrucción CALL o en la cabecera de la División de
Procedimiento.
En el operando de la longitud (LENGTH OF) y dirección (ADDRESS OF) de
registros especiales.

Si los punteros se utilizan en una condición relacional, los únicos operadores


válidos son igual a o no igual a.

Dado que los ítems de datos punteros no son simples números binarios del
sistema AS/400, el manejo de punteros como enteros no funciona.

Los ítems de datos punteros quedan definidos explícitamente con la cláusula


USAGE IS POINTER, y son implícitos al utilizar una instrucción de dirección
(ADDRESS OF) de registro especial o la dirección (ADDRESS OF) de un ítem.

Si un ítem de grupos se describe mediante la cláusula USAGE IS POINTER, los


ítems básicos dentro del ítem de grupos son ítems de punteros. El grupo en sí no
es un ítem de datos puntero, y no puede utilizarse en la sintaxis allí donde se
permita un ítem de datos puntero. La cláusula USAGE de un ítem elemental no
puede contradecir la cláusula USAGE de un grupo al que pertenezca el ítem.

Los ítems de datos puntero pueden formar parte de un grupo referenciado en una
instrucción MOVE o en una instrucción de entrada/salida; sin embargo, si un ítem
de datos puntero forma parte de un grupo, no se produce la conversión de los
valores del puntero a otra forma de representación interna cuando la instrucción se
ejecuta.

Capítulo 12. Comunicaciones entre Programas 295


Definición y Alineación de Punteros
Los ítems de datos puntero pueden definirse a cualquier nivel (excepto el 88) en el
archivo, en el almacenamiento de trabajo o en las secciones de enlace de un pro-
grama.

Cuando un puntero aparece referenciado en el sistema AS/400, debe estar en un


límite de almacenamiento de 16 bits. La alineación de puntero se refiere al
proceso del compilador de COBOL/400 de colocar los ítems de puntero de un ítem
de grupos a desplazamientos que sean múltiplos de 16 bytes desde el principio del
registro. Si un ítem de puntero no se encuentra en un límite de 16 bytes, se envía
una excepción de alineación de puntero (MCH0602) al programa COBOL/400. En
general, las excepciones de alineación de puntero se producen en la Sección de
Enlace, donde corresponde al usuario decidir la alineación de dichos ítems.

En las secciones de Archivo y Almacenamiento de Trabajo, el compilador se


asegura de que esta excepción no se produzca, añadiendo ítems FILLER implí-
citos. Cada vez que el compilador añade un ítem FILLER implícito, emite un
mensaje de aviso. En la Sección de Enlace, el compilador no añade ningún ítem
FILLER implícito; sin embargo, emite mensajes de aviso que indican la cantidad de
bytes FILLER que se habrían añadido si el ítem de grupos hubiera aparecido en
las secciones de Archivo o de Almacenamiento de Trabajo.

Podrá definir un ítem de datos como un puntero especificando la cláusula USAGE


IS POINTER, tal como se muestra en el ejemplo siguiente:

WORKING-STORAGE SECTION.
77 APTR USAGE POINTER.
ð1 AB.
ð5 BPTR USAGE POINTER.
ð5 BVAR PIC S9(3) PACKED-DECIMAL.
LINKAGE SECTION.
ð1 AVAR.
ð5 CVAR PIC X(3ð).
PROCEDURE DIVISION.
SET APTR TO ADDRESS OF AVAR.

Figura 90. Definición de un Ítem de Datos Puntero

En el ejemplo anterior, AVAR es un ítem de datos de nivel 01, de modo que la


dirección de AVAR (ADDRESS OF AVAR) es la dirección (ADDRESS OF) del
registro especial. Dado que un registro especial es un área de almacenamiento
real, la instrucción SET traslada el contenido de ADDRESS OF AVAR a un ítem de
datos de puntero APTR.

En el ejemplo que hemos visto, si la instrucción SET utilizara ADDRESS OF


CVAR, no existiría ningún registro especial. En su lugar, al ítem de datos de
puntero APTR se le asigna la dirección calculada de CVAR.

296 COBOL/400 Guía del usuario


En las Secciones de Archivo y Almacenamiento de Trabajo
En las secciones de Archivo y Almacenamiento de Trabajo, todos los ítems de
nivel 01 (y algunos ítems de nivel 66 y 77) se colocan en límites de 16 bytes.

Dentro de una estructura de grupos, los ítems de datos de puntero deben estar
también en un límite de 16 bytes. Para asegurarse de ello, el compilador de
COBOL/400 añade ítems FILLER inmediatamente antes de los ítems de datos de
puntero. Para evitar dichos ítems FILLER, deberá colocar los ítems de datos de
puntero al principio del ítem de grupo.

Si el ítem de datos de puntero forma parte de una tabla, el primer ítem de dicha
tabla se sitúa en un límite de 16 bytes. Con el fin de asegurarse de que todas las
apariciones posteriores se sitúen en un límite de 16 bytes, se añade un ítem
FILLER al final de la tabla, siempre que sea necesario.

Un ejemplo de alineación de ítems de datos de puntero sería el siguiente:

WORKING-STORAGE SECTION.
77 APTR USAGE POINTER.
ð1 AB.
ð5 ALPHA-NUM PIC X(1ð).
ð5 BPTR USAGE POINTER.
ð1 EF.
ð5 ARRAY-1 OCCURS 3 TIMES.
1ð ALPHA-NUM-TWO PIC X(14).
1ð CPTR USAGE POINTER.
1ð ALPHA-NUM-THREE PIC X(5).
Figura 91. Alineación de Ítems de Datos de Puntero

En el ejemplo anterior, APTR es un ítem de datos de puntero. Por lo tanto, el ítem


de nivel 77 se sitúa en un límite de 16 bytes. El ítem de grupo AB es un ítem de
nivel 01 y se sitúa automáticamente en un límite de 16 bytes. Dentro del ítem de
grupo AB, BPTR no está en un límite de 16 bytes. Con el fin de alinearlo conve-
nientemente, el compilador inserta un ítem FILLER de 6 bytes después de
ALPHA-NUM. Finalmente, CPTR requiere un FILLER de 2 bytes para alinear su
primera aparición. Dado que ALPHA-NUM-THREE tiene sólo una longitud de 5
bytes, debe añadirse otro ítem FILLER de 11 bytes al final ARRAY-1 para alinear
todas las apariciones posteriores de CPTR.

Cuando se define un puntero en la Sección de Archivos, y existe un archivo que no


tiene agrupaciones en activo, cada ítem de nivel 01 estará en un límite de 16
bytes. Si un archivo tiene bloques en activo, únicamente el primer registro de un
bloque tiene la seguridad de estar en un límite de 16 bytes. De esta manera, no
deberían definirse ítems de datos de puntero para archivos con bloques en activo.
Para más información acerca de los bloques, consulte el apartado “Desbloqueo de
Registros de Entrada y Bloqueo de Registros de Salida” en la página 107.

Los Punteros y la Cláusula REDEFINES


Un ítem de datos puntero puede ser el sujeto o el objeto de una cláusula REDE-
FINES.

Cuando un puntero es el sujeto de una cláusula REDEFINES, el ítem de datos


objeto debe estar en un límite de 16 bytes.

Capítulo 12. Comunicaciones entre Programas 297


Por ejemplo:

WORKING-STORAGE SECTION.
ð1 AB.
ð5 ALPHA-NUM PIC X(16).
ð5 APTR REDEFINES ALPHA-NUM USAGE POINTER.
ð5 BPTR USAGE POINTER.
ð5 CPTR REDEFINES BPTR USAGE POINTER.
Figura 92. REDEFINES e Ítems Alineados de Datos Puntero

En el ejemplo anterior, tanto APTR como CPTR son ítems de datos puntero que
vuelven a definir ítems alineados de 16 bytes. En el ejemplo siguiente, el ítem
redefinido daría como resultado un error grave de compilador:

WORKING-STORAGE SECTION.
ð1 EF.
ð5 ALPHA-NUM PIC X(5).
ð5 HI.
1ð ALPHA-NUM-TWO PIC X(11).
1ð APTR USAGE POINTER.
ð5 BPTR REDEFINES HI USAGE POINTER.
Figura 93. REDEFINES e Ítems Alineados de Datos Puntero - Método Incorrecto

En el ejemplo anterior, APTR se alinea en un límite de 16 bytes. Es decir, el com-


pilador de COBOL/400 no necesitaba añadir ítems FILLER para alinear APTR. El
ítem de grupos HI no está en el límite de 16 bytes y, por lo tanto, tampoco lo está
el ítem de datos puntero BPTR. Dado que el compilador de COBOL/400 no puede
añadir ítems FILLER para colocar el BPTR en un límite de 16 bytes, se producirá
un error grave. En el ejemplo que se muestra a continuación, similar al anterior, el
compilador de COBOL/400 es capaz de colocar el ítem de datos puntero en un
límite de 16 bytes:

WORKING-STORAGE SECTION.
ð1 EF.
ð5 ALPHA-NUM PIC X(5).
ð5 HI.
1ð ALPHA-NUM-TWO PIC X(11).
1ð APTR USAGE POINTER.
1ð ALPHA-NUM-THREE PIC X(5).
ð5 KL REDEFINES HI.
1ð BPTR USAGE POINTER.
Figura 94. REDEFINES e Ítems no Alineados de Datos Puntero - Método Correcto

En el ejemplo anterior, el ítem de grupos KL no está en un límite de 16 bytes; no


obstante, el compilador añade un ítem FILLER de 11 bytes antes del ítem de datos
puntero BPTR para asegurarse de que se sitúa en un límite de 16 bytes.

Lectura y Grabación de Punteros


Los ítems de datos puntero pueden definirse en la Sección de Archivos, y su utili-
zación y configuración puede ser la misma que la de cualquier ítem de datos
puntero del Almacenamiento de Trabajo. Existen, no obstante, algunas
restricciones:

298 COBOL/400 Guía del usuario


Ÿ Si un archivo tiene bloques en activo, únicamente el primer registro de un
bloque tiene la seguridad de estar en un límite de 16 bytes. Por consiguiente,
no deberían definirse ítems de datos puntero para archivos con bloques en
activo.
Ÿ Un registro que contenga punteros puede grabarse en un archivo; sin
embargo, en una lectura ulterior de dicho registro, los ítems de datos puntero
dan igual a NULL.

Inicialización de Punteros Utilizando la Constante Figurativa NULL


La constante figurativa NULL representa un valor que se utiliza para indicar que los
ítems de datos definidos con USAGE IS POINTER, ADDRESS OF o la dirección
(ADDRESS OF) del registro especial no contienen una dirección válida. Por
ejemplo:

WORKING-STORAGE SECTION.
77 APTR USAGE POINTER VALUE NULL.
PROCEDURE DIVISION.
IF APTR = NULL THEN
DISPLAY 'APTR IS NULL'
END-IF.
Figura 95. Utilización de NULL para Inicializar un Puntero

En el ejemplo anterior, el puntero APTR se establece en NULL en la sección de


Almacenamiento de Trabajo. La comparación en la división de procedimiento será
verdadera y la instrucción en pantalla se ejecutará.

En el sistema AS/400, el valor inicial de un ítem de datos de puntero, con o sin


una cláusula de valor (VALUE) de NULL, da igual a NULL.

Longitud (LENGTH OF) de Registro Especial


La longitud (LENGTH OF) de registro especial contiene el número de bytes utili-
zado por un identificador. Éste devuelve un valor de 16 para un ítem de datos
puntero.

Podrá utilizar la instrucción LENGTH OF en la División de Procedimiento allí donde


se utilice un ítem de datos numéricos cuya definición sea la misma que la defi-
nición de la longitud (LENGHT OF) del registro especial; sin embargo, LENGHT OF
no puede utilizarse como subíndice ni recibir ítems de datos. LENGTH OF tiene la
siguiente definición implícita:
USAGE IS BINARY, PICTURE 9(9)

El siguiente ejemplo muestra de qué manera podrá utilizar LENGHT OF con


punteros:

Capítulo 12. Comunicaciones entre Programas 299


WORKING-STORAGE SECTION.
77 APTR USAGE POINTER.
ð1 AB.
ð5 BPTR USAGE POINTER.
ð5 BVAR PIC S9(3) PACKED-DECIMAL.
ð5 CVAR PIC S9(3) PACKED-DECIMAL.
PROCEDURE DIVISION.
MOVE LENGTH OF AB TO BVAR.
MOVE LENGTH OF BPTR TO CVAR.
Figura 96. Utilización de LENGTH OF con Punteros

En el ejemplo anterior, la longitud del ítem de grupo AB se traslada a la variable


BVAR. BVAR tiene un valor de 20 porque BPTR tiene 16 bytes de longitud, y
ambas variables, BVAR y CVAR, tienen dos bytes de longitud. CVAR recibe un
valor de 16.

También podrá utilizar el registro especial LENGHT OF para configurar estructuras


de datos dentro de espacios de usuario, así como para incrementar direcciones
recibidas desde otro programa. Para ver un ejemplo de un programa que utiliza el
registro especial LENGTH OF para definir estructuras de datos dentro de espacios
de usuario, consulte la Figura 99 en la página 305.

Configuración de la Dirección de Ítems de Enlace


Por norma general, cuando un programa COBOL llama a otro programa, los datos
pasan entre los dos programas del siguiente modo: el programa de llamada utiliza
la instrucción CALL USING para pasar operandos al programa llamado, y el pro-
grama llamado especifica la frase USING en la cabecera de la División de Proce-
dimiento. Tiene que haber una correlación uno a uno entre los operandos de las
frases USING de cada programa.

Al utilizar la dirección (ADDRESS OF) del registro especial, ya no será necesario


que asegure una correlación una a una entre las frases USING de los dos pro-
gramas. Para aquellos ítems de datos de la Sección de Enlace que no estén
especificados en la frase USING de la cabecera de la División de Procedimiento, el
usuario podrá utilizar una instrucción SET para especificar la dirección de inicio de
la estructura de datos. Una vez ejecutada la instrucción SET, el ítem de datos se
trata como si se hubiera pasado desde otro programa. Para ver un ejemplo de
una instrucción SET utilizada de este modo, consulte la Figura 100 en la
página 306. El apartado .16/ de la página 309 muestra de qué manera la instruc-
ción SET se utiliza para establecer la dirección de inicio de las estructuras de
datos ls-header-record y ls-user-space al comienzo del espacio de usuario.

Utilización de ADDRESS OF y de ADDRESS OF del Registro Especial


Cuando especifique ADDRESS OF en un programa COBOL, el compilador deter-
minará si utilizar la dirección calculada de un ítem de datos, conocida como
ADDRESS OF, o la dirección (ADDRESS OF) del registro especial. La dirección
(ADDRESS OF) del registro especial es la dirección de inicio de la estructura de
datos desde la que se determinan todas las direcciones calculadas. Dado que la
dirección (ADDRESS OF) del registro especial es una dirección de inicio de una
estructura, debe consistir en un ítem de datos de nivel 01 o de nivel 77. Si modi-
fica la referencia de este ítem de datos, dejará de ser la dirección de inicio de la
estructura de datos. Se trata de una dirección calculada o ADDRESS OF. Si toma

300 COBOL/400 Guía del usuario


la dirección (ADDRESS OF) de un ítem básico, y la dirección (ADDRESS OF) del
ítem de nivel 01 se ha establecido en NULL, el resultado será una excepción de
puntero (MCH3601).

No podrá utilizar la dirección calculada ADDRESS OF donde un ítem pueda ser


susceptible de cambio. Sólo se puede modificar la dirección (ADDRESS OF) del
registro especial. Por ejemplo, en la Figura 100, la instrucción SET del apartado
.18/ de la página 309 utiliza la dirección (ADDRESS OF) de registro especial
porque se trata de un ítem de nivel 01. En el apartado .19/ de la página 309 se
utiliza ADDRESS OF porque, aunque se trata de un ítem de nivel 01, viene modifi-
cado por referencia.

Utilización de Punteros en una Instrucción MOVE


Los ítems básicos de datos puntero no se pueden mover mediante la instrucción
MOVE, sino que debe utilizarse una instrucción SET. Sin embargo, los ítems de
datos puntero se mueven de manera implícita cuando forman parte de un ítem de
grupos.

Al compilar una instrucción MOVE, el compilador de COBOL/400 genera un código


para mantener (puntero MOVE) o no mantener (no puntero MOVE) punteros dentro
de un ítem de grupos.

Se realiza un puntero MOVE cuando se dan todas las condiciones siguientes:


1. El fuente del receptor de una instrucción MOVE contiene un puntero
2. Ambos ítems tienen, como mínimo, 16 bytes de longitud
3. Los ítems de datos están alineados convenientemente
4. Los ítems de datos son alfanuméricos o bien son ítems de grupos.

De todas las condiciones enumeradas anteriormente, la más compleja puede ser la


de determinar si los dos ítems de datos están convenientemente alineados.

Si los ítems que se trasladan son ítems de nivel 01, o forman parte de un ítem de
nivel 01, deben encontrarse en el mismo desplazamiento en relación a un límite de
16 bytes para que se produzca un puntero MOVE. (Se envía un mensaje de aviso
si no es verdadero). El ejemplo siguiente muestra tres estructuras de datos, así
como los resultados cuando se envía una instrucción MOVE:

Capítulo 12. Comunicaciones entre Programas 301


WORKING-STORAGE SECTION.
ð1 A.
ð5 B PIC X(1ð).
ð5 C.
1ð D PIC X(6).
1ð E POINTER.
ð1 A2.
ð5 B2 PIC X(6).
ð5 C2.
1ð D2 PIC X(1ð).
1ð E2 POINTER.
ð1 A3.
ð5 B3 PIC X(22).
ð5 C3.
1ð D3 PIC X(1ð).
1ð E3 POINTER.

PROCEDURE DIVISION.
MOVE A to A2. .1/
MOVE A to A3. .1/
MOVE C to C2. .2/
MOVE C2 to C3. .3/

.1/ Da como resultado un movimiento del puntero porque el desplazamiento


de cada ítem de grupos que se han de mover es cero. La integridad
del puntero se mantiene.
.2/ Da como resultado un movimiento sin puntero, puesto que los despla-
zamientos no coinciden. El desplazamiento del ítem de grupos C es 10
y el del ítem del grupos C2 es 6. La integridad del puntero no se man-
tiene.
.3/ Da como resultado un movimiento del puntero, puesto que el despla-
zamiento del grupo de artículos C2 es 6 y el desplazamiento de C3
relativo a un límite de 16 bytes es también de 6. (Cuando el despla-
zamiento es mayor que 16, el desplazamiento relativo al límite de 16
bytes se calcula dividiendo el desplazamiento entre 16. El recordatorio
es el desplazamiento relativo. En este caso, el desplazamiento era 22,
lo que, dividido entre 16, da un recordatorio, o desplazamiento relativo,
de 6). La integridad del puntero se mantiene.
Si un ítem de grupos contiene un puntero, y el compilador no puede
determinar el desplazamiento relativo a un límite de 16 bytes, el compi-
lador envía un mensaje de aviso y se intenta el traslado del puntero.
Sin embargo, es posible que la integridad no se mantenga. El compi-
lador no puede determinar el desplazamiento si el ítem se define en la
Sección de Enlace, o si el ítem viene modificado por referencia con una
posición de inicio desconocida. Deberá asegurarse de que la alineación
del puntero se mantiene; de lo contrario, puede darse un MCH0602.

El compilador de COBOL/400 coloca todos los ítems de nivel 01 en un límite de 16


bytes tanto si contienen ítems de datos puntero como si no.

Si uno de los ítems de la instrucción MOVE es un ítem de nivel 01 con un puntero,


y el otro es un ítem de Almacenamiento de Trabajo de nivel 77, este último ítem va
forzosamente a un límite de 16 bytes.

302 COBOL/400 Guía del usuario


Utilización de Punteros en una Instrucción CALL
Cuando un ítem de datos puntero se pasa a una instrucción CALL, dicho ítem se
trata como todos los ítems USING. Dicho de otro modo, se pasa al programa
llamado un puntero al ítem de datos puntero (o una copia del ítem de datos
puntero).

Deberá prestarse una especial atención cuando se utilice una instrucción CALL con
la frase BY CONTENT para pasar punteros e ítems de grupos que contengan
punteros. Es un caso parecido al de la instrucción MOVE. Para una instrucción
CALL BY CONTENT, se efectúa una instrucción MOVE implícita de un ítem para
crearlo en un área temporal. Si el compilador puede determinar el desplazamiento
de un ítem relativo a un límite de 16 bytes, este mismo desplazamiento se utiliza
cuando la instrucción implícita MOVE del ítem BY CONTENT se realiza en un área
temporal. Cuando el compilador no puede determinar el desplazamiento de un
ítem relativo a un límite de 16 bytes, la instrucción implícita MOVE del ítem BY
CONTENT se realiza en un área temporal que se alinea en un límite de 16 bytes.

El compilador no puede determinar el desplazamiento de un ítem relativo a un


límite de 16 bytes cuando el ítem BY CONTENT:
Ÿ Viene modificado por referencia con una posición de inicio desconocida, o
Ÿ Está definido en la Sección de Enlace.

Cuando un operando está modificado por referencia, el desplazamiento es la posi-


ción de inicio de la modificación de referencia menos uno, más el desplazamiento
del operando de la estructura de datos. Cuando un operando se encuentre en la
Sección de Enlace, podrá determinarse su desplazamiento desde el programa de
llamada.

Para evitar problemas con la alineación del puntero, pase los ítems por referencia.

A continuación aparece un ejemplo de paso de ítems que contienen punteros, en


el que su integridad se mantiene en algunos casos y en otros no.

WORKING-STORAGE SECTION.

ð1 A. .1/
ð5 B PIC X(3).
ð5 C..2/
1ð FILLER PIC X(13).
1ð D POINTER.

PROCEDURE DIVISION.

CALL "B" USING A C.


Figura 97. Programa A -- Programa Principal

Capítulo 12. Comunicaciones entre Programas 303


WORKING-STORAGE SECTION.

ð1 E.
ð5 F PIC X(16).
ð5 G POINTER.
77 K PIC S9(3) VALUE 8.

LINKAGE SECTION.

ð1 A. .3/
ð5 B PIC X(3).
ð5 C.
1ð FILLER PIC X(13).
1ð D POINTER.
ð1 C2..4/
ð5 FILLER PIC X(13).
ð5 D2 POINTER.

PROCEDURE DIVISION USING A C2.

CALL "C" USING BY CONTENT


A, C2,.5/ E(5: ),.6/ E(K: ),.7/ F. .8/

Figura 98. Programa B -- Subprograma

En el ejemplo anterior, el Programa A pasa dos ítems de grupo al Programa B.


.1/ es un ítem de grupo de nivel 01, con un desplazamiento cero. .2/ es un ítem
de grupo de nivel 05 y tiene un desplazamiento de 3. Dado que los ítems se
pasan por referencia, la integridad del puntero se mantiene para los dos ítems de
grupos, A y C.

El programa B pasa cinco ítems a otro programa, C. Los ítems se pasan, por
contenido, al Programa C. Puesto que se pasan por contenido, el Programa C
recibe una copia de los ítems, y la integridad del puntero no se mantiene en todos
los casos.
Ÿ .3/ Dado que este ítem está definido en la Sección de Enlace, tiene un des-
plazamiento desconocido. El compilador asume que se alinea a 16 bytes; en
este caso, cuando A se pasa, la integridad del puntero de D se mantiene, pero
se envía un mensaje de aviso del compilador en la instrucción CALL.
Ÿ .4/ Este ítem contiene un puntero, y un movimiento del puntero se realiza
mediante .5/. Sin embargo, puesto que el ítem está definido en la Sección de
Enlace y el desplazamiento es desconocido, la integridad del puntero no se
mantiene. El compilador intenta mover C2 a un área de alineación de 16
bytes, y se envía un mensaje de aviso del compilador.
Ÿ .6/ Puesto que E contiene un puntero, se produce un movimiento de puntero.
El desplazamiento se puede calcular porque la posición de inicio de la modifi-
cación de referencia es un literal numérico. En este caso, la integridad del
puntero se mantiene y el ítem se sitúa en un desplazamiento de 4 desde el
límite de 16 bytes.
Ÿ .7/ Dado que E contiene un puntero, se intenta un movimiento de puntero. Ya
que E está modificado por referencia con una posición de inicio desconocida
(K), el compilador no puede calcular el desplazamiento y asume que está ali-
neado en un límite de 16 bytes. Se envía un mensaje de aviso del compilador.

304 COBOL/400 Guía del usuario


Si el valor de K provoca que E se alinee en un límite de 16 bytes, la integridad
del puntero se mantiene. Para que esto ocurra, K debe ser 1 ó 17.
Ÿ .8/ F es un ítem definido en la Sección de Almacenamiento de Trabajo y no
contiene punteros, de manera que no son de esperar movimientos de puntero.

Utilización de Punteros y API para Acceder a Espacios de Usuario


El ejemplo siguiente muestra de qué manera puede utilizar punteros para acceder
a espacios de usuario y encadenar registros.

POINTA es un programa que lee los nombres y direcciones de los clientes en un


espacio de usuario y a continuación visualiza la información en una lista. El pro-
grama asume que la información del cliente existe en un archivo llamado
POINTACU.

El campo de la dirección del cliente es un campo de longitud variable, lo que


permite la inserción de direcciones largas.

A\ ESTE ES UN ARCHIVO DE INFORMACIÓN DEL CLIENTE - POINTACUST


A
A
A R FSCUST TEXT('CUSTOMER MASTER RECORD')
A FS_CUST_NO 8Sðð TEXT('CUSTOMER NUMBER')
A ALIAS(FS_CUST_NUMBER)
A FS_CUST_NM 2ð TEXT('CUSTOMER NAME')
A ALIAS(FS_CUST_NAME)
A FS_CUST_AD 1ðð TEXT('CUSTOMER ADDRESS')
A ALIAS(FS_CUST_ADDRESS)
A VARLEN

Figura 99. Ejemplo de Utilización de Punteros para Acceder a Espacios de Usuario -- DDS

Capítulo 12. Comunicaciones entre Programas 305


5763CB1 V3RðM5 ðð1ððð IBM SAA COBOL/4ðð TESTER/POINTA AS4ððSYS ð5/ð1/94 18:ð1:14 Página 1
Programa . . . . . . . . . . . . . . : POINTA
Biblioteca . . . . . . . . . . . . : TESTER
Archivo fuente . . . . . . . . . . . : QLBLSRC
Biblioteca . . . . . . . . . . . . : TESTER
Miembro fuente . . . . . . . . . . . : POINTA ð5/ð1/94 17:55:27
Nivel de gravedad de generación . . : 29
"Descripción" del texto. . . . . . . : \BLANK
Opciones de listado fuente . . . . . : \NONE
Opciones de generación . . . . . . . : \NONE
Opciones de conversión . . . . . . . : \NONE
Límite de mensaje:
Cantidad de mensajes.. . . . . . . : \NOMAX
Gravedad límite de mensaje . . . : 29
Imprimir archivo. . . . . . . . . . : QSYSPRT
Biblioteca . . . . . . . . . . . . : \LIBL
Señalización FIPS. . . . . . . . . . : \NOFIPS \NOSEG \NODEB \NOOBSOLETE
Señalización SAA . . . . . . . . . . : \NOFLAG
Opciones de visualización ampliada . :
Gravedad de señalización . . . . . . : ð
Sustituir programa . . . . . . . . . : \YES
Release de destino . . . . . . . . . : \CURRENT
Perfil de usuario. . . . . . . . . . : \USER
Autorización . . . . . . . . . . . . : \LIBCRTAUT
Compilador . . . . . . . . . . . . . : IBM SAA COBOL/4ðð
Pantalla de Información del Cliente .1/
5763CB1 V3RðM5 ðð1ððð Fuente COBOL AS/4ðð TESTER/POINTA AS4ððSYS ð5/ð1/94 18:ð1:14 Página 2
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ðððð1ð PROCESS extaccdsp varchar .2/
2 ðððð2ð ID DIVISION. CBTððð1ð

ðððð4ð\ Este programa lee un archivo de registros de longitud variable


ðððð5ð\ en un espacio de usuario. A continuación muestra los
ðððð6ð\ registros en la pantalla.
3 ðððð7ð PROGRAM-ID. pointa.
4 ðððð8ð ENVIRONMENT DIVISION.
5 ðððð9ð CONFIGURATION SECTION.
6 ððð1ðð SPECIAL-NAMES. CONSOLE IS CRT,
7 ððð11ð CRT STATUS IS ws-crt-status. .3/
8 ððð12ð INPUT-OUTPUT SECTION.
9 ððð13ð FILE-CONTROL.
1ð ððð14ð SELECT cust-file ASSIGN TO DATABASE-pointacu
11 ððð15ð ORGANIZATION IS SEQUENTIAL
12 ððð16ð FILE STATUS IS ws-file-status.
13 ððð17ð DATA DIVISION.
14 ððð18ð FILE SECTION.
15 ððð19ð FD cust-file.
16 ððð2ðð ð1 fs-cust-record.
ððð21ð\ copiar nombres de campos transformando los subrayados
ððð22ð\ en guiones y utilizando nombres de alias
17 ððð23ð COPY DDR-ALL-FORMATS-I OF pointacu.
18 +ððððð1 ð5 POINTACU-RECORD PIC X(13ð). <-ALL-FMTS
+ððððð2\ FORMATO E-S:FSCUST DESDE ARCHIVO POINTACU DE BIBLO TESTER <-ALL-FMTS
+ððððð3\ CUSTOMER MASTER RECORD <-ALL-FMTS
19 +ððððð4 ð5 FSCUST REDEFINES POINTACU-RECORD. <-ALL-FMTS
2ð +ððððð5 ð6 FS-CUST-NUMBER PIC S9(8). <-ALL-FMTS
+ððððð6\ CUSTOMER NUMBER <-ALL-FMTS
21 +ððððð7 ð6 FS-CUST-NAME PIC X(2ð). <-ALL-FMTS
+ððððð8\ CUSTOMER NAME <-ALL-FMTS
22 +ððððð9 ð6 FS-CUST-ADDRESS. .4/ <-ALL-FMTS
+ðððð1ð\ (Campo de longitud variable) <-ALL-FMTS
23 +ðððð11 49 FS-CUST-ADDRESS-LENGTH <-ALL-FMTS
24 +ðððð12 PIC S9(4) COMP-4. <-ALL-FMTS
25 +ðððð13 49 FS-CUST-ADDRESS-DATA <-ALL-FMTS
26 +ðððð14 PIC X(1ðð). <-ALL-FMTS
+ðððð15\ DIRECCIÓN DEL CLIENTE <-ALL-FMTS
27 ððð24ð WORKING-STORAGE SECTION.
28 ððð25ð ð1 ws-file-status.
29 ððð26ð ð5 ws-file-status-1 PIC X.
3ð ððð27ð 88 ws-file-stat-good VALUE "ð".
31 ððð28ð 88 ws-file-stat-at-end VALUE "1".
32 ððð29ð ð5 ws-file-status-2 PIC X.
33 ððð3ðð ð1 ws-crt-status. .5/
34 ððð31ð ð5 ws-status-1 PIC 9(2).
35 ððð32ð 88 ws-status-1-ok VALUE ð.
36 ððð33ð 88 ws-status-1-func-key VALUE 1.

Figura 100 (Parte 1 de 7). Ejemplo de Utilización de Punteros para Acceder a Espacios de Usuario

306 COBOL/400 Guía del usuario


Pantalla de Información del Cliente
5763CB1 V3RðM5 ðð1ððð Fuente COBOL AS/4ðð TESTER/POINTA AS4ððSYS ð5/ð1/94 18:ð1:14 Página 3
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
37 ððð34ð 88 ws-status-1-error VALUE 9.
38 ððð35ð ð5 ws-status-2 PIC 9(2).
39 ððð36ð 88 ws-func-ð3 VALUE 3.
4ð ððð37ð 88 ws-func-ð7 VALUE 7.
41 ððð38ð 88 ws-func-ð8 VALUE 8.
42 ððð39ð ð5 ws-status-3 PIC 9(2).
43 ððð4ðð ð1 ws-params. .6/
44 ððð41ð ð5 ws-space.
45 ððð42ð 1ð ws-space-name PIC X(1ð) VALUE "MYSPACE".
46 ððð43ð 1ð ws-space-lib PIC X(1ð) VALUE "QTEMP".
47 ððð44ð ð5 ws-attr PIC X(1ð) VALUE "PF".
48 ððð45ð ð5 ws-init-size PIC S9(5) VALUE 32ððð BINARY.
49 ððð46ð ð5 ws-init-char PIC X VALUE SPACE.
5ð ððð47ð ð5 ws-auth PIC X(1ð) VALUE "\ALL".
51 ððð48ð ð5 ws-text PIC X(5ð) VALUE
52 ððð49ð "Registros de Información del Cliente".
53 ððð5ðð ð5 ws-replace PIC X(1ð) VALUE "\YES".
54 ððð51ð ð5 ws-err-data. .7/
55 ððð52ð 1ð ws-input-l PIC S9(6) BINARY VALUE ZERO.
56 ððð53ð 1ð ws-output-l PIC S9(6) BINARY VALUE ZERO.
57 ððð54ð 1ð ws-exception-id PIC X(7).
58 ððð55ð 1ð ws-reserved PIC X(1).
59 ððð56ð 1ð ws-exception-data PIC X(87).
6ð ððð57ð ð5 ws-space-ptr POINTER. .8/
61 ððð58ð ð5 ws-map-ptr POINTER.
ððð59ð
62 ððð6ðð 77 ws-accept-data PIC X.
63 ððð61ð 88 ws-acc-create-space VALUE "Y", "y".
64 ððð62ð 88 ws-acc-delete-space VALUE "Y", "y".
65 ððð63ð 88 ws-acc-no-space VALUE "N", "n".
ððð64ð
66 ððð65ð 77 ws-prog-indicator PIC X VALUE "G".
67 ððð66ð 88 ws-prog-continue VALUE "G".
68 ððð67ð 88 ws-prog-end VALUE "C".
69 ððð68ð 88 ws-prog-loop VALUE "L".
ððð69ð
7ð ððð7ðð 77 ws-line PIC S99.
ððð71ð\ línea de mensajes de error
71 ððð72ð 77 ws-error-msg PIC X(5ð) VALUE SPACES.
ððð73ð\ más indicadores de información de dirección
72 ððð74ð 77 ws-plus PIC X.
ððð75ð\ longitud la información de dirección a visualizar
73 ððð76ð 77 ws-temp-size PIC 9(2).
ððð77ð
74 ððð78ð 77 ws-current-rec PIC S9(4) VALUE 1.
75 ððð79ð 77 ws-old-rec PIC S9(4) VALUE 1.
76 ððð8ðð 77 ws-old-space-ptr POINTER.
ððð81ð\ cantidad máxima de líneas a visualizar
77 ððð82ð 77 ws-displayed-lines PIC S99 VALUE 2ð.
ððð83ð\ línea en la que iniciar la visualización de registros
78 ððð84ð 77 ws-start-line PIC S99 VALUE 5.
ððð85ð\ variables para crear un registro nuevo en el espacio
79 ððð86ð 77 ws-addr-inc PIC S9(4) PACKED-DECIMAL.
8ð ððð87ð 77 ws-temp PIC S9(4) PACKED-DECIMAL.
81 ððð88ð 77 ws-temp-2 PIC S9(4) PACKED-DECIMAL.
ððð89ð\ puntero al registro anterior
82 ððð9ðð 77 ws-cust-prev-ptr POINTER VALUE NULL.
83 ððð91ð LINKAGE SECTION.
84 ððð92ð ð1 ls-header-record. .9/
85 ððð93ð ð5 ls-hdr-cust-ptr USAGE POINTER.
ððð94ð\ cantidad de registros leídos desde el archivo
86 ððð95ð ð5 ls-record-counter PIC S9(3) BINARY.
87 ððð96ð ð5 FILLER PIC X(14). .1ð/
88 ððð97ð ð1 ls-user-space. .11/
89 ððð98ð ð5 ls-customer-rec.
ððð99ð\ puntero al registro anterior del cliente
9ð ðð1ððð 1ð ls-cust-prev-ptr USAGE POINTER.
91 ðð1ð1ð 1ð ls-cust-rec-length PIC S9(4) BINARY.
92 ðð1ð2ð 1ð ls-cust-name PIC X(2ð).
93 ðð1ð3ð 1ð ls-cust-number PIC S9(8).

Figura 100 (Parte 2 de 7). Ejemplo de Utilización de Punteros para Acceder a Espacios de Usuario

Capítulo 12. Comunicaciones entre Programas 307


Pantalla de Información del Cliente
5763CB1 V3RðM5 ðð1ððð Fuente COBOL AS/4ðð TESTER/POINTA AS4ððSYS ð5/ð1/94 18:ð1:14 Página 4
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
ðð1ð4ð\ longitud total del registro incluyendo bytes de relleno para
ðð1ð5ð\ asegurarse de que el siguiente registro está en el límite de 16 bytes
94 ðð1ð6ð 1ð ls-cust-address-length PIC S9(4) BINARY.
95 ðð1ð7ð ð5 ls-cust-address-data PIC X(116).
ðð1ð8ð
ðð1ð9ð\ Tamaño de ls-user-space es 16 más grande de lo necesario.
ðð11ðð\ Así pues, la dirección de inicio del siguiente registro
ðð111ð\ permite establecerlo sin exceder el tamaño declarado
ðð112ð\ El tamaño es 16 más grande para permitir la alineación del puntero
ðð113ð
96 ðð114ð PROCEDURE DIVISION.
ðð115ð\ nota no necesaria para la entrada "USING" en PROC... DIV.
ðð116ð DECLARATIVES.
ðð117ð cust-file-para SECTION.
ðð118ð USE AFTER ERROR PROCEDURE ON cust-file.
ðð119ð cust-file-para-2.
97 ðð12ðð MOVE "Error XX on file pointacu" TO ws-error-msg.
98 ðð121ð MOVE ws-file-status TO ws-error-msg(7:2).
ðð122ð END DECLARATIVES.
ðð123ð main-section section.
ðð124ð main-proc.
ðð125ð\ siga leyendo la pantalla inicial hasta que los datos sean correctos
99 ðð126ð SET ws-prog-loop to TRUE.
1ðð ðð127ð PERFORM initial-display THRU read-initial-display
ðð128ð UNTIL NOT ws-prog-loop.
ðð129ð\ si desea continuar el programa y quiere crear un área de
ðð13ðð\ información de cliente, rellene el espacio con
ðð131ð\ registros del archivo del cliente
1ð1 ðð132ð IF ws-prog-continue and
ðð133ð ws-acc-create-space THEN
1ð2 ðð134ð PERFORM read-customer-file
1ð3 ðð135ð MOVE 1 TO ws-current-rec
ðð136ð\ establezca ptr en el registro de cabecera
1ð4 ðð137ð SET ADDRESS OF ls-header-record TO ws-space-ptr
ðð138ð\ establezca en el primer registro del cliente en espacio
1ð5 ðð139ð SET ADDRESS OF ls-user-space TO ls-hdr-cust-ptr
ðð14ðð END-IF.
1ð6 ðð141ð IF ws-prog-continue THEN
1ð7 ðð142ð PERFORM main-loop UNTIL ws-prog-end
ðð143ð END-IF.
ðð144ð end-program.
1ð8 ðð145ð PERFORM clean-up.
1ð9 ðð146ð STOP RUN.
ðð147ð initial-display. .12/
11ð ðð148ð DISPLAY "Crear Área de Información del Cliente" AT ð118 WITH
ðð149ð BLANK SCREEN REVERSE-VIDEO
ðð15ðð "Crear área de información del cliente (Y/N)=> <="
ðð151ð AT 1ð15
ðð152ð "F3=Salir" AT 22ð2.
111 ðð153ð IF ws-error-msg NOT = SPACES THEN
112 ðð154ð DISPLAY ws-error-msg at 23ð2 with beep highlight
113 ðð155ð MOVE SPACES TO ws-error-msg
ðð156ð END-IF.
ðð157ð read-initial-display. .13/
114 ðð158ð ACCEPT ws-accept-data AT 1ð56 WITH REVERSE-VIDEO
ðð159ð ON EXCEPTION
115 ðð16ðð IF ws-status-1-func-key THEN
116 ðð161ð IF ws-func-ð3 THEN
117 ðð162ð SET ws-prog-end TO TRUE
ðð163ð ELSE
118 ðð164ð MOVE "Tecla de Función Incorrecta" TO ws-error-msg
ðð165ð END-IF
ðð166ð ELSE
119 ðð167ð MOVE "Error Desconocido" TO we-error-msg
ðð168ð END-IF
ðð169ð NOT ON EXCEPTION

Figura 100 (Parte 3 de 7). Ejemplo de Utilización de Punteros para Acceder a Espacios de Usuario

308 COBOL/400 Guía del usuario


Pantalla de Información del Cliente
5763CB1 V3RðM5 ðð1ððð Fuente COBOL AS/4ðð TESTER/POINTA AS4ððSYS ð5/ð1/94 18:ð1:14 Página 5
12ð ðð17ðð IF ws-acc-create-space THEN
121 ðð171ð PERFORM create-space THRU get-space
122 ðð172ð SET ws-prog-continue TO TRUE
ðð173ð ELSE
123 ðð174ð IF NOT ws-acc-no-space THEN
124 ðð175ð MOVE "Entrado Carácter incorrecto" TO ws-error-msg
ðð176ð ELSE
125 ðð177ð SET ws-prog-continue TO TRUE
126 ðð178ð PERFORM get-space
ðð179ð END-IF
ðð18ðð END-IF
ðð181ð END-ACCEPT.
ðð182ð create-space.
127 ðð183ð CALL "QUSCRTUS" .14/
ðð184ð USING ws-space, ws-attr, ws-init-size,
ðð185ð ws-init-char, ws-auth, ws-text,
ðð186ð ws-replace, ws-err-data.
ðð187ð\ compruebe los errores al crear espacio
ðð188ð get-space.
128 ðð189ð CALL "QUSPTRUS" USING ws-space, ws-space-ptr. .15/
ðð19ðð\ establezca el registro de cabecera al comienzo del espacio
129 ðð191ð SET ADDRESS OF ls-header-record .16/
ðð192ð ADDRESS OF ls-user-space .17/
ðð193ð TO ws-space-ptr.
ðð194ð\ establezca el primer registro del cliente después del registro de cabecera
13ð ðð195ð SET ADDRESS OF ls-user-space TO .18/
ðð196ð ADDRESS OF ls-user-space(LENGTH OF ls-header-record .19/
ðð197ð + 1:1).
ðð198ð\ guarde ptr para el primer registro del registro de cabecera
131 ðð199ð SET ls-hdr-cust-ptr TO ADDRESS OF ls-user-space.
ðð2ððð delete-space.
132 ðð2ð1ð CALL "QUSDLTUS" USING ws-space, ws-err-data. .2ð/
ðð2ð2ð read-customer-file.
ðð2ð3ð\ lea todos los registros del archivo del cliente y colóquese en el espacio
133 ðð2ð4ð OPEN INPUT cust-file.
134 ðð2ð5ð IF ws-file-stat-good THEN
135 ðð2ð6ð READ cust-file AT END CONTINUE
136 ðð2ð7ð END-READ
137 ðð2ð8ð PERFORM VARYING ls-record-counter FROM 1 BY 1
ðð2ð9ð UNTIL not ws-file-stat-good
138 ðð21ðð SET ls-cust-prev-ptr TO ws-cust-prev-ptr
ðð211ð\ Coloque la información del archivo al espacio
139 ðð212ð MOVE fs-cust-name TO ls-cust-name
14ð ðð213ð MOVE fs-cust-number TO ls-cust-number
141 ðð214ð MOVE fs-cust-address-length TO ls-cust-address-length
142 ðð215ð MOVE fs-cust-address-data(1:fs-cust-address-length)
ðð216ð TO ls-cust-address-data(1:ls-cust-address-length)
ðð217ð\ Guarde ptr para el registro actual
143 ðð218ð SET ws-cust-prev-ptr TO ADDRESS OF ls-user-space
ðð219ð\ asegúrese de que el siguiente registro está en el límite de 16 bytes
144 ðð22ðð ADD LENGTH OF ls-customer-rec .21/
ðð221ð ls-cust-address-length TO 1 GIVING ws-addr-inc
145 ðð222ð DIVIDE ws-addr-inc BY 16 GIVING ws-temp
ðð223ð REMAINDER ws-temp-2
146 ðð224ð SUBTRACT ws-temp-2 FROM 16 GIVING ws-temp
ðð225ð\ Guarde la longitud total del registro en el espacio del usuario
147 ðð226ð ADD ws-addr-inc TO ws-temp GIVING ls-cust-rec-length
148 ðð227ð SET ADDRESS OF ls-user-space
ðð228ð TO ADDRESS OF ls-user-space(ls-cust-rec-length + 1:1)
ðð229ð\ Obtenga el siguiente registro del archivo
149 ðð23ðð READ cust-file AT END CONTINUE
15ð ðð231ð END-READ
ðð232ð END-PERFORM
ðð233ð\ Al final del bucle coloque un registro más de los
ðð234ð\ que debe haber
151 ðð235ð SUBTRACT 1 FROM ls-record-counter
ðð236ð END-IF.
152 ðð237ð CLOSE cust-file.
ðð238ð
ðð239ð main-loop. .22/
ðð24ðð\ escriba los registros en la pantalla hasta que se pulse F3

Figura 100 (Parte 4 de 7). Ejemplo de Utilización de Punteros para Acceder a Espacios de Usuario

Capítulo 12. Comunicaciones entre Programas 309


Pantalla de Información del Cliente
5763CB1 V3RðM5 ðð1ððð Fuente COBOL AS/4ðð TESTER/POINTA AS4ððSYS ð5/ð1/94 18:ð1:14 Página 6
153 ðð241ð DISPLAY "Información del cliente" AT ð124 WITH
ðð242ð BLANK SCREEN REVERSE-VIDEO
ðð243ð "Cust Customer Name Customer"
ðð244ð AT ð3ð5
ðð245ð " Address"
ðð246ð "Number" AT ð4ð5
ðð247ð "F3=Salir" AT 22ð2.
ðð248ð\ si aparece un error pendiente en la pantalla
154 ðð249ð IF ws-error-msg NOT = SPACES THEN
155 ðð25ðð DISPLAY ws-error-msg at 23ð2 with beep highlight
156 ðð251ð MOVE SPACES TO ws-error-msg
ðð252ð END-IF.
ðð253ð\ si en la mitad de la lista se pulsa F7 en la pantalla
157 ðð254ð IF ws-current-rec > 1 THEN .23/
158 ðð255ð DISPLAY "F7=Back" AT 224ð
ðð256ð END-IF.
ðð257ð\ guarde el registro actual
159 ðð258ð MOVE ws-current-rec TO ws-old-rec.
16ð ðð259ð SET ws-old-space-ptr TO ADDRESS OF ls-user-space. .24/
ðð26ðð\ traslade cada registro a la pantalla
161 ðð261ð PERFORM VARYING ws-line FROM ws-start-line BY 1
ðð262ð UNTIL ws-line > ws-displayed-lines or
ðð263ð ws-current-rec > ls-record-counter
ðð264ð\ si la dirección es mayor que el ancho de pantalla "+"
162 ðð265ð IF ls-cust-address-length > 4ð THEN
163 ðð266ð MOVE "+" TO ws-plus
164 ðð267ð MOVE 4ð TO ws-temp-size
ðð268ð ELSE
165 ðð269ð MOVE ls-cust-address-length TO ws-temp-size
166 ðð27ðð MOVE SPACE TO ws-plus
ðð271ð END-IF
167 ðð272ð DISPLAY ls-cust-number at line ws-line column 5
ðð273ð ls-cust-name ls-cust-address-data with
ðð274ð size ws-temp-size ws-plus at line
ðð275ð ws-line column 78
ðð276ð\ coloque el siguiente registro en la pantalla
168 ðð277ð ADD 1 TO ws-current-rec
169 ðð278ð SET ADDRESS OF ls-user-space
ðð279ð TO ADDRESS OF ls-user-space
ðð28ðð (ls-cust-rec-length + 1:1)
ðð281ð END-PERFORM.
ðð282ð\ si se puede seguir pulse F8 en la pantalla
17ð ðð283ð IF ws-current-rec < ls-record-counter THEN .23/
171 ðð284ð DISPLAY "F8=Av Pág" AT 225ð
ðð285ð END-IF.
ðð286ð\ compruebe si continúa, salga u obtenga nuevos registros
ðð287ð\ o registros anteriores
172 ðð288ð ACCEPT ws-accept-data WITH SECURE .25/
ðð289ð ON EXCEPTION
173 ðð29ðð IF ws-status-1-func-key THEN
174 ðð291ð IF ws-func-ð3 THEN
175 ðð292ð SET ws-prog-end TO TRUE
ðð293ð ELSE
176 ðð294ð IF ws-func-ð7 THEN
177 ðð295ð PERFORM back-screen
ðð296ð ELSE
178 ðð297ð IF ws-func-ð8 THEN
179 ðð298ð PERFORM forward-screen
ðð299ð ELSE
18ð ðð3ððð MOVE "Invalid Function Key" TO ws-error-msg
181 ðð3ð1ð MOVE ws-old-rec TO ws-current-rec
182 ðð3ð2ð SET ADDRESS OF ls-user-space TO ws-old-space-ptr
ðð3ð3ð END-IF
ðð3ð4ð END-IF
ðð3ð5ð ELSE
183 ðð3ð6ð MOVE "Unknown Error" TO ws-error-msg
184 ðð3ð7ð MOVE ws-old-rec TO ws-current-rec
185 ðð3ð8ð SET ADDRESS OF ls-user-space TO ws-old-space-ptr
ðð3ð9ð END-IF
ðð31ðð NOT ON EXCEPTION
186 ðð311ð MOVE ws-old-rec TO ws-current-rec
187 ðð312ð SET ADDRESS OF ls-user-space TO ws-old-space-ptr
ðð313ð END-ACCEPT.
ðð314ð clean-up.
ðð315ð\ limpie el programa

Figura 100 (Parte 5 de 7). Ejemplo de Utilización de Punteros para Acceder a Espacios de Usuario

310 COBOL/400 Guía del usuario


Pantalla de Información del Cliente
5763CB1 V3RðM5 ðð1ððð Fuente COBOL AS/4ðð TESTER/POINTA AS4ððSYS ð5/ð1/94 18:ð1:14 Página 7
ðð316ð\ siga leyendo la pantalla final hasta que los datos sean correctos
188 ðð317ð SET ws-prog-loop to TRUE.
189 ðð318ð PERFORM end-display THRU read-end-display .26/
ðð319ð UNTIL NOT ws-prog-loop.
ðð32ðð end-display.
19ð ðð321ð DISPLAY "Eliminar Área de Información del Cliente" AT ð118 WITH .27/
ðð322ð BLANK SCREEN REVERSE-VIDEO
ðð323ð "Eliminar área de información del cliente (Y/N)=> <="
ðð324ð AT 1ð15
ðð325ð "F3=Salir" AT 22ð2.
191 ðð326ð IF ws-error-msg NOT = SPACES THEN
192 ðð327ð DISPLAY ws-error-msg at 23ð2 with beep highlight
193 ðð328ð MOVE SPACES TO ws-error-msg
ðð329ð END-IF.
ðð33ðð read-end-display.
194 ðð331ð ACCEPT ws-accept-data AT 1ð56 WITH REVERSE-VIDEO
ðð332ð ON EXCEPTION
195 ðð333ð IF ws-status-1-func-key THEN
196 ðð334ð IF ws-func-ð3 THEN
197 ðð335ð SET ws-prog-end TO TRUE
ðð336ð ELSE
198 ðð337ð MOVE "Tecla de Función Incorrecta" TO ws-error-msg
ðð338ð END-IF
ðð339ð ELSE
199 ðð34ðð MOVE "Error Desconocido" TO we-error-msg
ðð341ð END-IF
ðð342ð NOT ON EXCEPTION
2ðð ðð343ð IF ws-acc-delete-space THEN
2ð1 ðð344ð PERFORM delete-space
2ð2 ðð345ð SET ws-prog-continue TO TRUE
ðð346ð ELSE
2ð3 ðð347ð IF NOT ws-acc-no-space THEN
2ð4 ðð348ð MOVE "Entrado Carácter incorrecto" TO ws-error-msg
ðð349ð ELSE
2ð5 ðð35ðð SET ws-prog-continue TO TRUE
ðð351ð END-IF
ðð352ð END-IF
ðð353ð END-ACCEPT.
ðð354ð back-screen. .28/
2ð6 ðð355ð IF ws-old-rec <= 1 THEN
2ð7 ðð356ð MOVE "Top of customer records" TO ws-error-msg
2ð8 ðð357ð MOVE ws-old-rec TO ws-current-rec .29/
2ð9 ðð358ð SET ADDRESS OF ls-user-space TO ws-old-space-ptr
ðð359ð ELSE
21ð ðð36ðð MOVE ws-old-rec TO ws-current-rec .29/
211 ðð361ð SET ADDRESS OF ls-user-space TO ws-old-space-ptr
212 ðð362ð PERFORM VARYING ws-line FROM ws-start-line BY 1
ðð363ð UNTIL ws-line > ws-displayed-lines or
ðð364ð ws-current-rec <= 1
ðð365ð\ Efectúa la copia de seguridad de un registro a la vez
213 ðð366ð SET ws-cust-prev-ptr TO ls-cust-prev-ptr
214 ðð367ð SET ADDRESS OF ls-user-space TO ws-cust-prev-ptr .3ð/
215 ðð368ð SUBTRACT 1 FROM ws-current-rec
ðð369ð END-PERFORM
ðð37ðð END-IF.
ðð371ð forward-screen. .31/
ðð372ð\ si el registro actual es igual o mayor que los errores de impersión
ðð373ð\ de registro máximo, alcance los registros máximos
216 ðð374ð IF ws-current-rec >= ls-record-counter
217 ðð375ð MOVE "No more customer records" TO ws-error-msg
218 ðð376ð MOVE ws-old-rec TO ws-current-rec
219 ðð377ð SET ADDRESS OF ls-user-space TO ws-old-space-ptr
ðð378ð ELSE
22ð ðð379ð MOVE ws-current-rec TO ws-old-rec
221 ðð38ðð SET ws-old-space-ptr TO ADDRESS OF ls-user-space
ðð381ð END-IF.
\ \ \ \ \ F I N D E F U E N T E \ \ \ \ \
Pantalla de Información del Cliente
5763CB1 V3RðM5 ðð1ððð Mensajes COBOL AS/4ðð TESTER/POINTA AS4ððSYS ð5/ð1/94 18:ð1:14 Página 8
INST
\ 15 MSGID: LBLð65ð GRAVEDAD: ðð NUMSEC: ððð19ð
Mensaje . . . . : Bloqueo/Desbloqueo para archivo 'CUST-FILE'
se realizará por medio del código generado por el compilador.
\ \ \ \ \ F I N D E M E N S A J E S \ \ \ \ \

Figura 100 (Parte 6 de 7). Ejemplo de Utilización de Punteros para Acceder a Espacios de Usuario

Capítulo 12. Comunicaciones entre Programas 311


Resumen Mensajes
Total Info(ð-4) Aviso(5-19) Error(2ð-29) Grave(3ð-39) Terminal(4ð-99)
1 1 ð ð ð ð
Registros fuente leídos . . . . . . : 381
Registros de copia leídos . . . . . : 15
Miembros de copia procesados . . . : 1
Errores de secuencia . . . . . . . : ð
Mensaje de gravedad emitido más alto: ð
LBLð9ð1 ðð Programa POINTA creado en biblioteca TESTER.
\ \ \ \ \ F I N D E C O M P I L A C I O N \ \ \ \ \

Figura 100 (Parte 7 de 7). Ejemplo de Utilización de Punteros para Acceder a Espacios de Usuario

.1/ La directriz del compilador TITLE se utiliza para crear el título que
aparece al principio de cada página.
.3/ CRT STATUS IS especifica un nombre de datos en el que se coloca un
valor de estado después de la finalización de una instrucción ACCEPT
ampliada. En este ejemplo, el valor de STATUS se utiliza para deter-
minar la tecla de función que se ha pulsado.
.4/ fs-cust-address es un campo de longitud variable. Para ver nombres
con significado real, en lugar de una instrucción FILLER, especifique
*VARCHAR para el parámetro CVTOPT del mandato CRTCBLPGM, o
VARCHAR en la instrucción PROCESS, tal como se muestra en el
apartado .2/. Para más información acerca de los campos de longitud
variable, consulte el apartado “Declaración de Ítems de Datos utilizando
Tipos de Datos de CVTOPT” en la página 137.
.5/ En este apartado se define CRT STATUS tal como se menciona en el
apartado .3/.
.6/ La estructura ws-params contiene los parámetros utilizados al llamar a
las API para acceder a espacios de usuario.
.7/ ws-err-data es la estructura del parámetro de error para las API del
espacio de usuario. Observe que ws-input-l es cero, lo que significa
que toda excepción está señalada y no se pasa en el parámetro de
códigos de error. Para más información acerca de los parámetros de
códigos de error, consulte la publicación System Programmer’s Interface
Reference.
.8/ ws-space-ptr define un ítem de datos puntero establecido por la API
QUSPTRUS. Esta estructura se direcciona al inicio del espacio de
usuario y se utiliza para configurar las direcciones de los ítems en la
Sección de Enlace.
.9/ La primera estructura de datos (ls-header-record) que se va a definir en
el espacio de usuario.
.1ð/ FILLER se utiliza para mantener la alineación del puntero, porque con-
vierte a Is-header-record en un múltiplo de 16 bytes de longitud.
.11/ La segunda estructura de datos (ls-user-space) que se va a definir en el
espacio de usuario.
.12/ initial-display muestra la pantalla Create Customer Information Area
(Crear área de información del cliente). Esta pantalla aparece en la
Figura 101 en la página 314.

312 COBOL/400 Guía del usuario


.13/ read-initial-display lee la primera pantalla y determina si el usuario elige
continuar o concluir el programa. Si el usuario continúa el programa
pulsando Intro, el programa comprobará la estructura ws-accept-data
para ver si el área de información del cliente se va a crear.
.14/ QUSCRTUS es una API utilizada para crear espacios de usuario.
.15/ QUSPTRUS es una API utilizada para devolver un puntero al inicio de
un espacio de usuario.
.16/ Correlaciona la primera estructura de datos (ls-header-record) sobre el
inicio del espacio de usuario.
.17/ Correlaciona la segunda estructura de datos (ls-user-space) sobre el
inicio del espacio de usuario.
.18/ Utiliza la dirección (ADDRESS OF) del registro especial.
.19/ Utiliza ADDRESS OF, no la dirección (ADDRESS OF) del registro espe-
cial, porque está modificado por referencia.
.2ð/ QUSDLTUS es una API utilizada para suprimir un espacio de usuario.
.21/ Las cuatro instrucciones aritméticas siguientes calculan la longitud total
de cada registro y aseguran que cada registro sea un múltiplo de 16
bytes de longitud.
.22/ main-loop contiene la pantalla Información del Cliente. Consulte la
Figura 102 en la página 314.
.23/ Estas instrucciones determinan si el programa debe visualizar las teclas
de función F7 y F8.
.24/ Guarda un puntero al primer registro de cliente de la pantalla.
.25/ Esta instrucción ACCEPT espera la entrada de la pantalla de Infor-
mación del Cliente. Partiendo de la tecla de función pulsada, llama al
párrafo adecuado para visualizar el siguiente conjunto de registros
(forward-screen), o el anterior conjunto de registros (back-screen), o
establece un indicador para finalizar la rutina si se pulsa F3.
.26/ La rutina de borrado visualiza la pantalla Suprimir Área de Información
del Cliente hasta que se pulsa la tecla adecuada.
.27/ Esta instrucción contiene la pantalla Suprimir Área de Información de
Cliente.
.28/ Cada registro contiene un puntero al registro de cliente anterior. La
dirección (ADDRESS OF) del registro especial se direcciona al registro
de cliente actual. Al cambiar la dirección (ADDRESS OF) del registro
especial, cambia el registro de cliente actual.
back-screen retrasa el puntero de registro actual un registro a la vez
.3ð/, moviendo el puntero del registro de cliente anterior al puntero del
registro del cliente actual (ADDRESS OF). Antes de retrasar un registro
a la vez, el programa establece el registro de cliente actual en el primer
registro visualizado actualmente .29/.
.31/ Forward-screen establece la estructura ws-old-space-ptr (que se
direcciona al primer registro de la pantalla) para que se direccione al
registro actual (que está después del último registro visualizado).
Un espacio de usuario siempre empieza en un límite de 16 bytes, de
modo que el método descrito en este apartado asegura que todos los

Capítulo 12. Comunicaciones entre Programas 313


registros están alineados. ls-cust-rec-length también se utiliza para
encadenar los registros.

Cuando ejecute POINTA, observará las pantallas siguientes:

à Crear Área de Información del Cliente


ð

Crear área de información del cliente (Y/N)=> y <=

F3=Salir

á ñ
Figura 101. Crear Pantalla del Área de Información del Cliente

Si se especifica Y para crear el espacio de usuario, el programa lee los registros


del cliente del archivo y coloca la información en el espacio de usuario. Los regis-
tros se encadenan juntos.

Cuando se pulsa Intro en la pantalla anterior, aparece la pantalla de Información


del Cliente:

à Información del Cliente


ð
Núm Nombre Cliente Dirección Cliente
Cliente
ððððððð1 Bakery Unlimited 3ð Bake Way, North York
ððððððð2 Window World 15ð Eglinton Ave E., North York, Ontario
ððððððð3 Jons Clothes 1ð1 Park St, North Bay, Ontario, Canada
ððððððð4 Pizza World 254 Main Street, Toronto, Ontario +
ððððððð5 Marv's Auto Body 9 George St, Peterborough, Ontario, Cana +
ððððððð6 Jack's Snacks 23 North St, Timmins, Ontario, Canada
ððððððð7 Video World 14 Robson St, Vancouver, B.C, Canada
ððððððð8 Pat's Daycare 8 Kingston Rd, Pickering, Ontario, Canad +
ððððððð9 Mary's Pies 3 Front St, Toronto, Ontario, Canada
ðððððð1ð Carol's Fashions 19 Spark St, Ottawa, Ontario, Canada
ðððððð11 Grey Optical 5 Lundy's Lane, Niagara Falls, Ont. Cana +
ðððððð12 Fred's Forage 33 Dufferin St, Toronto, Ontario, Canada +
ðððððð13 Dave's Trucking 15 Water St, Guelph, Ontario, Canada
ðððððð14 Doug's Music 1ð1 Queen St. Toronto, Ontario, Canada +
ðððððð15 Anytime Copiers 3ðð Warden Ave, Scarborough, Ontario, Ca +
ðððððð16 Rosa's Ribs 44ð Avenue Rd, Toronto, Ontario, Canada

F3=Salir F8=Av Pág

á ñ
Figura 102. Pantalla del Área de Información del Cliente

314 COBOL/400 Guía del usuario


Si hay más de 16 registros en el espacio de usuario (según la línea inicial en ws-
start-line), el programa habilita la tecla F8=Av Pág, para permitir al usuario que
avance las páginas de la lista. Cuando el usuario ha avanzado alguna página, se
habilita la tecla F7=Re Pág para que el usuario pueda retroceder las páginas de la
lista, tal como se muestra en la siguiente pantalla:

à Información del Cliente


ð
Núm Nombre Cliente Dirección Cliente
Cliente
ðððððð17 Picture It 33 Kingston Rd, Ajax, Ontario, Canada
ðððððð18 Paula's Flowers 144 Pape Ave, Toronto, Ontario, Canada
ðððððð19 Mom's Diapers 1ð1 Ford St, Toronto, Ontario, Canada
ðððððð2ð Chez Francois 12ð2 Rue Ste Anne, Montreal, PQ, Canada
ðððððð21 Vetements de Louise 892 Rue Sherbrooke, Montreal E, PQ, Cana +
ðððððð22 Good Eats 355 Lake St, Port Hope, Ontario, Canada

F3=Salir F7=Re Pág

á ñ
Figura 103. Pantalla de Información del Cliente (Segunda Pantalla)

Cuando el cliente sale de la pantalla anterior, se muestra la opción que permite


suprimir el espacio de usuario, tal como se muestra en la pantalla siguiente:

à Suprimir Área de Información del Cliente


ð

Surprimir área de información del cliente (Y/N)=> n <=

F3=Salir

á ñ
Figura 104. Suprimir Pantalla de Información del Cliente

Capítulo 12. Comunicaciones entre Programas 315


Proceso de una Lista Encadenada
Una aplicación típica para la utilización de ítems de datos puntero es el proceso de
una lista encadenada (una serie de registros en la que cada uno direcciona al
siguiente).

En este ejemplo, supongamos una lista encadenada compuesta de registros de


salarios individuales. La Figura 105 muestra un modo de visualizar cómo se
enlazan estos registros en el almacenamiento:

┌─────────┐ ┌───────────┐
│ │ │ │
REGISTRO SALARIO6 │ 6 │ 6
┌───────────┴─┐ ┌──────────┴─┐ ┌─────────────┐
PTR─SIG.─REG │dir. de reg. │ │ │ │NULL─dir. │
│siguiente │ │ │ │no válida │
NOMBRE ├─────────────┤ ├────────────┤ . . . ├─────────────┤
│ │ │ │ │ │
SALARIO ├─────────────┤ ├────────────┤ ├─────────────┤
│ │ │ │ │ │
└─────────────┘ └────────────┘ └─────────────┘

Figura 105. Representación de una Lista Encadenada que Acaba en NULL

El primer ítem de cada registro se direcciona al registro siguiente (excepto en el


caso del último registro). El primer ítem del último registro contiene un valor nulo
en lugar de una dirección, con el fin de indicar que se trata del último registro.

La lógica de nivel superior de una aplicación que procesa estos registros puede
tener un aspecto parecido a éste:
OBTAIN ADDRESS OF FIRST RECORD IN CHAINED LIST FROM ROUTINE
CHECK FOR END OF THE CHAINED LIST
DO UNTIL END OF THE CHAINED LIST
PROCESS RECORD
GO ON TO THE NEXT RECORD
END

La Figura 106 en la página 317 contiene un diseño del programa de proceso,


LISTS, utilizado en este ejemplo de proceso de una lista encadenada.

316 COBOL/400 Guía del usuario


IDENTIFICATION DIVISION.
PROGRAM-ID. LISTS.
ENVIRONMENT DIVISION.
DATA DIVISION.
\\\\\\
WORKING-STORAGE SECTION.
77 PTR-FIRST POINTER VALUE IS NULL.
77 DEPT-TOTAL PIC 9(4) VALUE IS ð.
\\\\\\
LINKAGE SECTION.
ð1 SALARY-REC.
ð2 PTR-NEXT-REC POINTER.
ð2 NAME PIC X(2ð).
ð2 DEPT PIC 9(4).
ð2 SALARY PIC 9(6).
ð1 DEPT-X PIC 9(4).
\\\\\\
PROCEDURE DIVISION USING DEPT-X.
\\\\\\
\ PARA TODOS EN EL DEPTO. RECIBIDOS COMO DEPT-X, REVISEN TODOS
\ LOS REGISTROS DE LA LISTA EN CADENA SEGÚN LA DIRECCIÓN DEL
\ PROGRAMA CHAIN-ANCH Y SUMEN LOS SALARIOS EN CADA REGISTRO.
\ EN CADA REGISTRO, PRT-NEXT-REC ES UN PUNTERO PARA EL
\ SIGUIENTE REGISTRO DE LA LISTA; EN EL ÚLTIMO REGISTRO,
\ PRT-NEXT-REC ES NULO.
\ VISUALIZAR EL TOTAL.
\\\\\\
CALL "CHAIN-ANCH" USING PTR-FIRST
SET ADDRESS OF SALARY-REC TO PTR-FIRST
\\\\\\
PERFORM WITH TEST BEFORE UNTIL ADDRESS OF SALARY-REC = NULL
IF DEPT = DEPT-X
THEN ADD SALARY TO DEPT-TOTAL
ELSE CONTINUE
END-IF
SET ADDRESS OF SALARY-REC TO PTR-NEXT-REC
END-PERFORM
\\\\\\
DISPLAY DEPT-TOTAL
GOBACK.

Figura 106. Programa para el Proceso de una Lista Encadenada

Paso de Direcciones entre Programas


Para obtener la dirección de la primera área de registro SALARY-REC, el pro-
grama LISTS llama al programa CHAIN-ANCH:
CALL "CHAIN-ANCH" USING PTR-FIRST

PTR-FIRST está definido en WORKING-STORAGE en el programa de llamada


(LISTS) como un ítem de datos puntero:
WORKING-STORAGE SECTION.
77 PTR-FIRST POINTER VALUE IS NULL.

A la vuelta de la llamada a CHAIN-ANCH, PTR-FIRST contiene la dirección del


primer registro en la lista encadenada.

PTR-FIRST se define inicialmente por tener un valor nulo como comprobación


lógica. Si se produce un error con la llamada, y PTR-FIRST no llega a recibir el
valor de la dirección del primer registro en la cadena, seguirá habiendo un valor
nulo en PTR-FIRST y, en función de la lógica del programa, los registros no se
procesarán.

Capítulo 12. Comunicaciones entre Programas 317


NULL es una constante figurativa utilizada para asignar el valor de una dirección
no válida a ítems puntero. Puede utilizarse en la cláusula VALUE IS NULL, en la
instrucción SET y como operando en una condición de relación con un ítem de
datos puntero.

La Sección de Enlace del programa de llamada contiene la descripción de los


registros en la lista encadenada. Contiene asimismo la descripción del código de
departamento que se pasa a través de la frase USING de la instrucción CALL.
LINKAGE SECTION.
ð1 SALARY-REC.
ð2 PTR-NEXT-REC POINTER.
ð2 NAME PIC X(2ð).
ð2 DEPT PIC 9(4).
ð2 SALARY PIC 9(6).
ð1 DEPT-X PIC 9(4).

Para “basar” la descripción del registro SALARY-REC de la dirección contenida en


PTR-FIRST, utilice la instrucción SET:
CALL "CHAIN-ANCH" USING PTR-FIRST
SET ADDRESS OF SALARY-REC TO PTR-FIRST

Comprobación de la Finalización de una Lista Encadenada


La lista encadenada de este ejemplo se configura de manera que el último registro
contenga una dirección no válida. Para ello, el ítem de datos puntero del último
registro tendría asignado el valor NULL.

Puede asignarse el valor NULL a un ítem de datos puntero de dos modos:


Ÿ Un ítem de datos puntero puede definirse con una cláusula VALUE IS NULL
en su definición de datos.
Ÿ NULL puede ser el campo de envío en una instrucción SET.
Ÿ El valor inicial de un ítem de datos puntero con o sin una cláusula VALUE de
NULL da igual a NULL.

En el caso de una lista encadenada en la que el puntero del último registro con-
tenga un valor nulo, el código para comprobar la finalización de la lista sería:
IF PTR-NEXT-REC = NULL
..
.

(lógica de finalización de cadena)

Si no ha llegado al final de la lista, procese el registro y vaya al siguiente registro.

En el programa LISTS, esta prueba del final de la lista encadenada se realiza con
una estructura “do while”:
PERFORM WITH TEST BEFORE UNTIL ADDRESS OF SALARY-REC = NULL
IF DEPT = DEPT-X
THEN ADD SALARY TO DEPT-TOTAL
ELSE CONTINUE
END-IF
SET ADDRESS OF SALARY-REC TO PTR-NEXT-REC
END-PERFORM

318 COBOL/400 Guía del usuario


Continuación del Proceso del Siguiente Registro
Para ir al siguiente registro, establezca la dirección de éste en la Sección de
Enlace de manera que sea igual a la dirección del siguiente registro. Este acto se
realiza a través del ítem de datos puntero enviado como primer campo en
SALARY-REC:
SET ADDRESS OF SALARY-REC TO PTR-NEXT-REC

A continuación repita la rutina de proceso de registros, que procesará el siguiente


registro en la lista encadenada.

Incremento de las Direcciones Recibidas de Otro Programa


Los datos desde un programa de llamada pueden contener información de cabe-
cera de la cual decida prescindir (por ejemplo, en los datos recibidos desde una
aplicación CICS que no se ha migrado al nivel de mandatos).

Dado que los ítems de datos puntero no son numéricos, el usuario no podrá efec-
tuar aritmética directamente sobre ellos. No obstante, podrá utilizar el verbo SET
para incrementar la dirección pasada para ignorar la información de cabecera.

Puede configurar la Sección de Enlace de la siguiente manera:


LINKAGE SECTION.
ð1 RECORD-A.
ð2 HEADER PIC X(16).
ð2 REAL-SALARY-REC PIC X(3ð).
..
.
ð1 SALARY-REC.
ð2 PTR-NEXT-REC POINTER.
ð2 NAME PIC X(2ð).
ð2 DEPT PIC 9(4).
ð2 SALARY PIC 9(6).

En la División de Procedimiento, sitúe la dirección de SALARY-REC en la dirección


de REAL-SALARY-REC:
SET ADDRESS OF SALARY-REC TO ADDRESS OF REAL-SALARY-REC

SALARY-REC se ha situado ahora en la dirección de RECORD-A + 16.

Áreas de Datos
Un área de datos es un objeto utilizado para comunicar datos tales como valores
de variables entre programas dentro de un trabajo y entre trabajos. Un área de
datos puede crearse y declararse en un programa antes de que se utilice en dicho
programa o trabajo. Para más información acerca de la creación y declaración de
un área de datos, consulte la publicación CL Guía del Programador.

Área de Datos Local


El área de datos local puede utilizarse para pasar cualquier información entre pro-
gramas en un trabajo. Esta información puede consistir en datos en formato libre,
como por ejemplo mensajes informales, o puede ser también un conjunto de
campos totalmente estructurado o con formato.

Capítulo 12. Comunicaciones entre Programas 319


El sistema crea automáticamente un área de datos local para cada trabajo. El área
de datos local está definida fuera del programa COBOL como una área de 1024
bytes.

Cuando se somete un trabajo, el área de datos local del trabajo que se somete se
copia al área de datos local del trabajo sometido. Si no hay ningún trabajo que se
someta, el área de datos local se inicializa a espacios en blanco.

Un programa COBOL puede acceder al área de datos local para su trabajo con las
instrucciones ACCEPT y DISPLAY, utilizando un nombre mnemotécnico asociado
al nombre de función LOCAL-DATA.

Sólo hay un área de datos local asociada a cada trabajo. Incluso si se adquieren
varias estaciones de trabajo mediante un único trabajo, sólo existe un área de
datos local para dicho trabajo. No hay un área de datos local para cada estación
de trabajo.

Área de Datos PIP (Parámetros de Inicialización de Programas)


El área de datos PIP es utilizada por un trabajo de prearranque. Generalmente, un
trabajo de prearranque es un trabajo de un sistema remoto bajo ICF que el usuario
inicia y mantiene listo para ejecutar hasta que lo llama.

Si utiliza un trabajo de prearranque, no tiene que esperar a que un programa que


usted llama vaya a través del proceso de inicialización de un trabajo. La iniciación
de trabajo se realiza antes de que un programa pueda iniciarse realmente. Dado
que ya se ha realizado la iniciación del trabajo, un trabajo de prearranque permite
que el programa se inicie más rápidamente una vez recibida la petición de
arranque del programa.

Un programa COBOL puede acceder al área de datos PIP para su trabajo con la
instrucción ACCEPT, utilizando un nombre mnemotécnico asociado con el nombre
de función PIP-DATA.

El área de datos PIP es un ítem alfanumérico de 2000 bytes que contiene paráme-
tros recibidos desde un programa de llamada. Proporciona los parámetros de
inicialización que, en trabajos que no son de prearranque, se ofrece mediante los
parámetros COBOL estándar.

Utilice una instrucción ACCEPT de Formato 5 para acceder al área de datos PIP,
similar a la manera en que utiliza la instrucción ACCEPT de Formato 4 para leer
desde el área de datos local. Observe que no puede actualizar el área de datos
PIP utilizando COBOL. Consulte la publicación COBOL/400 Reference para
obtener información de sintaxis detallada.

Para más información acerca de los trabajos de prearranque y del área de datos
PIP, consulte la publicación Guía para la Gestión de Trabajos y la publicación CL
Guía del Programador.

320 COBOL/400 Guía del usuario


Consideraciones de Archivo
Puede pasar un nombre de archivo como parámetro en un programa COBOL, pero
no podrá utilizar dicho archivo en el programa llamado. Si se define un archivo en
un programa de llamada y un programa llamado, se trata como dos archivos dis-
tintos. El contenido del área de registro y el puntero del registro actual en cada
programa son independientes, a menos que los archivos compartidos se especifi-
quen en mandatos CL. Consulte la publicación Guía para la Gestión de Datos
para más información acerca de los archivos compartidos.

Las instrucciones siguientes afectan al estado de archivo de manera diferente:


Ÿ Una instrucción EXIT PROGRAM no cambia el estado de cualquier archivo en
una unidad de ejecución.
Ÿ Una instrucción STOP RUN cierra todos los archivos de una unidad de ejecu-
ción.

Ampliación de IBM

Ÿ Una instrucción A GOBACK emitida desde un programa principal cierra todos


los archivos de una unidad de ejecución. Una instrucción GOBACK emitida
desde un subprograma no cambia el estado de ningún archivo en una unidad
de ejecución.

Fin de Ampliación de IBM

Ÿ Una instrucción CANCEL no cambia el estado de ningún archivo en el pro-


grama que se cancela. Libera el almacenamiento que contiene información
acerca del archivo. Si el programa tiene archivos que se abren cuando se
procesa la instrucción CANCEL, esos archivos se cierran cuando se cancela el
programa. El programa ya no puede seguir utilizando el archivo. Si el pro-
grama cancelado se llama de nuevo, el programa considera que el archivo
está cerrado. Si el programa abre el archivo, se establece un nuevo enlace
para dicho archivo. Esto puede hacer que se utilice el almacenamiento auxiliar
del sistema.

Capítulo 12. Comunicaciones entre Programas 321


322 COBOL/400 Guía del usuario
Apéndice A. Características de segmentación
No se preocupe de la gestión del almacenamiento cuando utilice programas
COBOL/400. Sin embargo, la segmentación de almacenamiento está disponible
para ofrecer compatibilidad con otros sistemas.

La característica de segmentación proporciona optimización de almacenamiento de


la División de Procedimientos controlada por el programador, permitiendo que esta
división se subdivida tanto física como lógicamente.

Conceptos referentes a la segmentación


Aunque no es necesaria, la División de Procedimientos de un programa fuente
suele grabarse como un grupo consecutivo de secciones, estando formada, cada
una de ellas, por una serie de operaciones relacionadas que llevan a cabo una
función determinada. Así pues, la totalidad de la División de Procedimientos se
compone de un cierto número de subdivisiones lógicas. La segmentación permite
que el programador divida físicamente la División de Procedimientos en seg-
mentos, cada uno de los cuales tiene unos atributos físicos y lógicos específicos.

Cuando se utiliza la segmentación, la totalidad de la División de Procedimientos se


divide en secciones. Cada sección debe clasificarse de acuerdo con sus atributos
físicos y lógicos. La clasificación se especifica mediante los números de seg-
mento. Todas las secciones que tengan el mismo número de segmento componen
un segmento de programa.

Los números de segmento han de ser enteros del 0 al 99.

Segmentos de Programa
Hay tres tipos de segmentos de programa: permanente fijo, recubrible fijo e inde-
pendiente.

Segmentos Fijos
Los segmentos permanentes fijos y los segmentos recubribles fijos componen la
parte fija, la parte de la División de Procedimientos que se trata lógicamente como
si estuviese siempre presente físicamente en almacenamiento principal. Los
números de segmento de la parte fija han de ser enteros del 0 al 49.

Un segmento permanente fijo queda disponible siempre en su último estado de


utilización.

Un segmento recubrible fijo está siempre lógicamente en el almacenamiento prin-


cipal durante el proceso del programa; por lo tanto, siempre se encuentra dispo-
nible en su último estado de utilización. Cualquier recubrimiento de uno de esos
segmentos es transparente para el usuario. De este modo, un segmento fijo recu-
brible es idéntico lógicamente a un segmento permanente fijo.

 Copyright IBM Corp. 1994 323


Segmentos Independientes
Obviamente, un segmento independiente puede recubrir y ser recubierto por otros
segmentos durante la ejecución de un programa.

Un segmento independiente queda disponible en su estado inicial la primera vez


que se le transfiere control (explícita o implícitamente) durante la ejecución de un
programa.

Un segmento independiente queda disponible en su estado inicial durante poste-


riores transferencias de control cuando:
Ÿ La transferencia es el resultado de una transferencia implícita de control entre
instrucciones consecutivas que se encuentren en segmentos distintos (es decir,
cuando el control llega al segmento independiente desde el segmento físi-
camente anterior).
Ÿ La transferencia es el resultado de una transferencia implícita desde una ins-
trucción SORT o MERGE en un segmento a un procedimiento de entrada
SORT o un procedimiento de salida SORT/MERGE dentro de un segmento
independiente.
Ÿ Una transferencia explícita de control se lleva cabo desde una sección con un
número de segmento distinto (como sucede, por ejemplo, durante la transfe-
rencia de control en una instrucción PERFORM n TIMES).

Un segmento independiente queda disponible en su último estado de utilización


durante posteriores transferencias de control, cuando:
Ÿ Exceptuando los dos tipos anteriores de transferencias implícitas, tiene lugar
una transferencia implícita desde una sección con una prioridad diferente
(como, por ejemplo, cuando se devuelve control al segmento independiente
desde un procedimiento Declarativo).
Ÿ Se obtiene como resultado una transferencia explícita desde una instrucción
EXIT PROGRAM o GOBACK.

Los segmentos independientes han de tener asignados números de segmento del


50 al 99.

Lógica de segmentación
En un programa segmentado, las secciones se clasifican por un sistema de
números de segmento de acuerdo con los criterios siguientes:
Ÿ Frecuencia de Referencia–Las secciones más utilizadas, o aquéllas que han
de estar disponibles en todo momento como referencia, deben estar nor-
malmente dentro de segmentos fijos permanentes. Las secciones que se uti-
lizan con menor frecuencia pueden estar en segmentos fijos recubribles o en
segmentos independientes, según la lógica del programa.
Ÿ Frecuencia de Utilización–Cuanto mayor sea la frecuencia con la que se utilice
una sección, menor será su número de segmento; cuanto menor sea la fre-
cuencia con la que se la referencie, mayor será su número de segmento.
Ÿ Relaciones Lógicas–A las secciones que se comunican más frecuentemente
entre ellas habría que darles números de segmento idénticos.

324 COBOL/400 Guía del usuario


Control de Segmentación
Excepto para transferencias específicas de control, la secuencia lógica y la
secuencia física de instrucciones de programa son iguales. El compilador inserta
cualquier instrucción necesaria para inicializar un segmento. No es necesario
transferir control al principio de un segmento, o al principio de una sección dentro
de un segmento. En su lugar, el control puede transferirse a cualquier párrafo en
la División de Procedimientos.

Consideraciones sobre el Programa Fuente COBOL


Los elementos siguientes de un programa fuente COBOL implantan la caracterís-
tica de segmentación:
Ÿ La cláusula SEGMENT-LIMIT en el párrafo OBJECT-COMPUTER de la Divi-
sión de Características de Entorno. Esta cláusula sirve para controlar la espe-
cificación de segmentos permanentes fijos y recubribles fijos.
Ÿ Los números de segmentos de la División de Procedimientos que agrupan sec-
ciones en segmentos. El esquema de numeración de segmentos permite
además la especificación de segmentos independientes, segmentos perma-
nentes fijos, y (junto con la cláusula SEGMENT-LIMIT) de segmentos recu-
bribles fijos.

Segmentación–División del Entorno


En el párrafo OBJECT-COMPUTER, la cláusula SEGMENT-LIMIT permite que el
usuario vuelva a clasificar los segmentos permanentes fijos mientras se retienen
las propiedades de los segmentos de la parte fija para los segmentos vueltos a
clasificar.

Formato

55───SEGMENT-LIMIT──┬────┬──nombr-segmento───────────── . ───────────────────5%
└─IS─┘

La cláusula SEGMENT-LIMIT permite que el programador especifique ciertos seg-


mentos permanentes como susceptibles de ser recubiertos por segmentos inde-
pendientes, sin perder las propiedades lógicas de los segmentos de la parte fija.

El número-segmento debe ser un entero con un valor dentro del rango de 1 a 49.

Cuando se especifica la cláusula SEGMENT-LIMIT:


Ÿ Los segmentos permanentes fijos son los que poseen números de segmento
del 0 hasta el número de segmento especificado pero sin incluirlo.
Ÿ Los segmentos recubribles fijos son los que poseen números de segmento
desde el número de segmento especificado hasta el 49.

Por ejemplo, si se especifica SEGMENT-LIMIT IS 25, las secciones con números


de segmento del 0 al 24 son segmentos permanentes fijos, y las secciones con
números de segmento del 25 al 49 son segmentos recubribles fijos.

Apéndice A. Características de segmentación 325


Cuando se omite la cláusula SEGMENT-LIMIT, todas las secciones con números
de segmento del 0 al 49 son segmentos permanentes fijos.

Segmentación–División de Procedimientos
En la División de Procedimientos de un programa segmentado, la clasificación de
secciones se especifica mediante los números de segmento en los encabe-
zamientos de sección. El número de segmento ha de ser un entero del 0 al 99.

Formato

55───nomb-sección──SECTION──┬────────────────┬──.────────────────────────────5%
└─nombr-segmento─┘

Todas las secciones con el mismo número de segmento componen un segmento


de programa. No es necesario que dichas secciones sean contiguas en el pro-
grama fuente.

Los segmentos con números de segmento del 0 al 49 están en la parte fija del
programa. Sólo es posible asignar estos números a las secciones declarativas.
Los segmentos con números de segmento del 50 al 99 son segmentos indepen-
dientes. Si se omite el número de segmento del encabezamiento de la sección, se
asume que el número de segmento es 0.

Segmentación–Consideraciones Especiales
Cuando se utiliza la segmentación, existen una serie de restricciones en las ins-
trucciones ALTER, PERFORM, SORT y MERGE. También hay consideraciones
especiales para los programas de llamada y programas llamados.

Instrucción ALTER
No debe hacerse referencia a una instrucción GO TO en un segmento indepen-
diente por medio de una instrucción ALTER en un segmento distinto. Todas las
otras utilizaciones de la instrucción ALTER son válidas y se realizan, incluso si la
instrucción GO TO a la que se haga referencia está en un segmento recubrible fijo.

Instrucción PERFORM
Una instrucción PERFORM en la parte fija puede tener en su rango, además de
cualquier procedimiento Declarativo, cuya ejecución tenga lugar dentro de ese
rango, sólo uno de los elementos siguientes:
Ÿ Secciones y/o párrafos en la parte fija
Ÿ Secciones y/o párrafos dentro de un único segmento independiente.

Una instrucción PERFORM en un segmento independiente puede tener dentro de


su rango, además de los procedimientos Declarativos, cuyo proceso tenga lugar
dentro de ese rango, sólo uno de los elementos siguientes:
Ÿ Secciones y/o párrafos en la parte fija
Ÿ Secciones y/o párrafos contenidos totalmente en el mismo segmento indepen-
diente que la instrucción PERFORM.

326 COBOL/400 Guía del usuario


Instrucciones SORT y MERGE
Si aparece una instrucción SORT o MERGE en la parte fija, cualquier proce-
dimiento de entrada SORT o procedimiento de salida SORT/MERGE debe apa-
recer completamente en una de las siguientes ubicaciones:
Ÿ La parte fija
Ÿ Un único segmento independiente.

Si aparece una instrucción SORT o MERGE dentro de un segmento independiente,


cualquier procedimiento de entrada SORT o procedimiento de salida
SORT/MERGE debe aparecer por completo dentro de una de las siguientes ubi-
caciones:
Ÿ La parte fija
Ÿ El mismo segmento independiente que la instrucción SORT o MERGE.

Programas Llamados y Programas de Llamada


La instrucción CALL puede aparecer en cualquier parte dentro de un programa
segmentado. Cuando una instrucción CALL aparece dentro de un segmento inde-
pendiente, dicho segmento se encuentra en su último estado de utilización cuando
se devuelve el control al programa de llamada.

Apéndice A. Características de segmentación 327


328 COBOL/400 Guía del usuario
Apéndice B. Características de Depuración
Las características de depuración especifican las condiciones bajo las que los pro-
cedimientos se supervisarán durante el tiempo de ejecución del programa.

Se proporcionan las instrucciones de depuración del lenguaje fuente COBOL. El


usuario debe decidir qué supervisar, así como la información que necesita recu-
perar a propósito de la depuración. Las características de depuración COBOL per-
miten simplemente acceder a la información pertinente.

Depuración del Lenguaje Fuente COBOL


Los elementos del lenguaje COBOL que implantan las cracterísticas de depuración
son un conmutador en tiempo de compilación (WITH DEBUGGING MODE), un
conmutador en tiempo de ejecución, una sentencia declarativa USE FOR
DEBUGGING, el registro especial DEBUG-ITEM y las líneas de depuración que
pueden escribirse en las Divisiones de Características de Entorno, Datos y Proce-
dimientos.

Conmutador de Tiempo de Compilación


En el párrafo SOURCE-COMPUTER de la Sección de Configuración, la cláusula
WITH DEBUGGING MODE actúa como un conmutador en tiempo de compilación.

Formato

55───SOURCE-COMPUTER.─┬─────────────────────────────────────────────┬─.──────5%
└─nombr-sistema─┬──────────────────────────┬──┘
└─┬──────┬──DEBUGGING MODE─┘
└─WITH─┘

La cláusula WITH DEBUGGING MODE ejerce como conmutador en tiempo de


compilación para las instrucciones de depuración escritas en el programa fuente.

Cuando se especifica WITH DEBUGGING MODE, todas las secciones y líneas de


depuración se compilan tal como se especifica en este apéndice. Cuando se omite
WITH DEBUGGING MODE, todas las secciones y líneas de depuración se tratan
como documentación.

 Copyright IBM Corp. 1994 329


Conmutador en Tiempo de Ejecución
El conmutador en tiempo de ejecución activa dinámicamente el código de depu-
ración que se genera cuando se especifica WITH DEBUGGING MODE.

Existen dos mandatos para controlar el conmutador en tiempo de ejecución. Para


activar el conmutador en tiempo de ejecución, introduzca el mandato:
STRCBLDBG
y pulse F4.

Se visualiza la siguiente pantalla:

à Iniciar Depuración COBOL (STRCBLDBG)


ð
Escriba la elección, pulse Intro.

Programa . . . . . . . . . . . . Nombre
Biblioteca.. . . . . . . . . . \LIBL Nombre, \LIBL, \CURLIB

Final
F3=Salir F4=Solicitud F5=Renovar F12=Cancelar F13=Cómo util. esta pantalla
F24=Más teclas

á ñ

El siguiente diagrama muestra la sintaxis del mandato STRCBLDBG:

55──STRCBLDBG──┬────────────────────────────────────────────┬─────────────────5%
└─PGM──(─┬─────────────────┬──nombre-prgm.─)─┘
├──\LIBL/─────────┤
├──\CURLIB/───────┤
└──nombre-bibl./──┘

┌───────────────────────────────────┐
│Job: B,I Pgm: B,I REXX: B,I Exec│
└───────────────────────────────────┘

Figura 107. Sintaxis del mandato STRCBLDBG

Se permite utilizar este mandato tanto en procesos interactivos y por lotes como en
programas CL.

Interfaz de Programación de Uso General

Se puede utilizar este mandato en QCMDEXC.

Fin de Interfaz de Programación de Uso General

330 COBOL/400 Guía del usuario


Para desactivar el conmutador en tiempo de ejecución, introduzca el mandato:
ENDCBLDBG
y pulse F4.

Se visualiza el siguiente mandato:

à Final Depuración COBOL (ENDCBLDBG)


ð
Escriba la elección, pulse Intro.

Programa . . . . . . . . . . . . Nombre
Biblioteca.. . . . . . . . . . \LIBL Nombre, \LIBL, \CURLIB

Final
F3=Salir F4=Solicitud F5=Renovar F12=Cancelar F13=Cómo util. esta pantalla
F24=Más teclas

á ñ

EL siguiente diagrama muestra la sintaxis del mandato ENDCBLDBG:

55──ENDCBLDBG ─┬────────────────────────────────────────────┬─────────────────5%
└─PGM──(─┬─────────────────┬─ nombre-prgm.─)─┘
├─ \LIBL/─────────┤
├─ \CURLIB/───────┤
└─ nombre-bibl./──┘

┌───────────────────────────────────┐
│Job: B,I Pgm: B,I REXX: B,I Exec│
└───────────────────────────────────┘

Figura 108. Sintaxis del mandato ENDCBLDBG

Se permite utilizar este mandato tanto en procesos interactivos y por lotes como en
programas CL.

Interfaz de Programación de Uso General

Se puede utilizar este mandato en QCMDEXC.

Fin de Interfaz de Programación de Uso General

El valor por omisión para el conmutador en tiempo de ejecución se desactiva.

Apéndice B. Características de Depuración 331


Cuando se especifica la modalidad de depuración mediante el conmutador en
tiempo de ejecución, se activan todas las secciones y líneas de depuración (D en
la columna 7) compiladas en el programa.

Es necesario introducir el mandato STRCBLDBG para cada programa COBOL


(programa principal o programa llamado) que se deba depurar en la próxima
unidad de ejecución COBOL. Al final de la unidad de ejecución, todos los conmu-
tadores en tiempo de ejecución que estén activos, es desactivado. Si ha de desac-
tivar un conmutador antes de arrancar una unidad de ejecución COBOL, utilice el
mandato ENDCBLDBG. Los conmutadores en tiempo de ejecución pueden estar
activos a la vez hasta para 15 programas.

Cuando se emiten los mandatos STRCBLDBG o ENDCBLDBG en un programa


CL, las expresiones de concatenación pueden utilizarse para todos los valores de
parámetros. Consulte la publicación CL Guía del Programador para obtener más
información acerca de las expresiones de concatenación.

Cuando se suprime la modalidad de depuración, mediante el conmutador en


tiempo de ejecución, se inahabilita cualquier procedimiento Declarativo USE FOR
DEBUGGING. Todas las líneas de depuración (D en la columna 7) permanecen
en vigor.

No es necesaria la recompilación del programa fuente para activar o desactivar el


conmutador en tiempo de ejecución.

Cuando no se especifica WITH DEBUGGING MODE en el párrafo


SOURCE-COMPUTER, el conmutador en tiempo de ejecución no tiene ningún
efecto en la ejecución del programa.

Sentencia Declarativa USE FOR DEBUGGING


La sentencia USE FOR DEBUGGING en la División de Procedimientos identifica
los ítems del programa fuente que se visualizan mediante el procedimiento decla-
rativo de depuración asociado.

Formato

┌────────────────────────────────────────┐
6 │
55───USE─┬─────┬─DEBUGGING─┬────┬─┬─┬───────────────────────┬─identific.-1─┼─5%
└─FOR─┘ └─ON─┘ │ └─ALL─┬───────────────┬─┘ │
│ └─REFERENCES OF─┘ │
├─nomb-arch-1────────────────────────────┤
├─nombre-proced.-1───────────────────────┤
└─ALL PROCEDURES─────────────────────────┘

El Identificador-1 no puede modificarse para su consulta.

Cuando se especifican, todas las secciones de depuración deben escribirse inme-


diatamente después del encabezamiento DECLARATIVES. Excepto para la sen-
tencia USE FOR DEBUGGING, no debe haber ninguna referencia dentro del
procedimiento de depuración a ningún procedimiento que no sea declarativo.

332 COBOL/400 Guía del usuario


Observe que la declarativa USE FOR DEBUGGING provoca que se ignoren todas
las instrucciones subsiguientes hasta llegar a una instrucción USE AFTER
EXCEPTION/ERROR válida o a un delimitador END DECLARATIVES. Es posible
que programas enteros se omitan por esta razón.

La aparición de una instrucción en una sección de depuración no provoca la ejecu-


ción automática de dicha sección.

Una sección de depuración para un operando específico se procesa una sola vez
como resultado de la ejecución de una única instrucción, sin importar cuántas
veces se especifica el operando en la instrucción. Una excepción a esta regla es
que cada especificación de un identificador subindexado o indexado en la que los
subíndices o índices sean distintos, provoca la invocación de la Declarativa de
depuración. Para una instrucción PERFORM que cause la ejecución repetida de
un procedimiento, cualquier nombre del procedimiento asociado a una sección
Declarativa de depuración, se ejecuta una vez por cada ejecución del proce-
dimiento.

A efectos de depuración, cada aparición por separado de un verbo imperativo


dentro de una instrucción imperativa comienza una instrucción distinta.

Las instrucciones que aparecen fuera de las secciones de depuración no deben


hacer referencia a los nombres de procedimientos definidos dentro de las sec-
ciones de depuración.

Excepto para la propia sentencia USE FOR DEBUGGING, las instrucciones dentro
de una sección Declarativa de depuración sólo puede hacer referencia a nombres
de procedimientos definidos en un procedimiento USE distinto mediante la instruc-
ción PERFORM. Los nombres de Procedimientos dentro de las secciones Decla-
rativas de depuración no deben aparecer en las sentencias USE FOR
DEBUGGING.

En la Tabla 7 se definen los puntos en los que se ejecutan los procedimientos


USE FOR DEBUGGING durante el tiempo de ejecución. El identificador-n, el
nombre de archivo-n y el nombre de procedimiento-n hacen referencia a la primera
y a todas las especificaciones posteriores de ese tipo de operando en una sen-
tencia USE FOR DEBUGGING. Cualquier identificador, nombre de archivo, o
nombre de procedimiento en particular puede aparecer en una sola sentencia USE
FOR DEBUGGING, y sólo una vez en esa sentencia.

Un identificador en una sentencia USE FOR DEBUGGING:


Ÿ Debe especificarse sin la subindexación o la indexación necesaria nor-
malmente si contiene una cláusula OCCURS o está subordinada a una entrada
que contenga una cláusula OCCURS. (Una instrucción SEARCH o SEARCH
ALL que haga referencia a uno de esos identificadores, no invoca a los proce-
dimientos USE FOR DEBUGGING.)
Ÿ No debe ser un registro especial.

Cuando se especifica ALL PROCEDURES en una sentencia USE FOR


DEBUGGING, no deben especificarse el nombre de procedimiento-1, el nombre de
procedimiento-2, el nombre de procedimiento-3, etc., en ninguna sentencia USE
FOR DEBUGGING. La frase ALL PROCEDURES sólo puede especificarse una
vez en un programa.

Apéndice B. Características de Depuración 333


Cuando se utiliza una operando USE FOR DEBUGGING como calificador, dicha
referencia en el programa no activa los procedimientos de depuración.

Las referencias al registro especial DEBUG-ITEM sólo se pueden realizar desde


dentro de un procedimiento Declarativo de depuración.

Tabla 7. Ejecución de las Declarativas de Depuración


Operando USE FOR Los procedimientos USE FOR DEBUGGING se ejecutan
DEBUGGING después de lo siguiente:
identificador-n Antes de REWRITE/WRITE identificador-n y después del
movimiento de la frase FROM, si es aplicable.

Después de cada inicialización, modificación, o


evaluación del identificador-n en
PERFORM/VARYING/AFTER/UNTIL identificador-n.

Después de cualquier otra instrucción COBOL que


haga referencia explícitamente al identificador-n y pudiera
cambiar su contenido. (Véase nota adjunta).
ALL REFERENCES OF Antes de GO TO DEPENDING ON identificador-n, se transfiere
identificador-n el control, y antes de que se ejecute ninguna sección de
depuración asociada para el nombre de procedimiento.

Antes REWRITE/WRITE identificador-n y del movimiento


de la frase FROM, si es aplicable.

Después de cada inicialización, modificación o


evaluación del identificador-n en
PERFORM/VARYING/AFTER/UNTIL identificador-n.

Después de cualquier otra instrucción COBOL que se


refiera explícitamente al identificador-n. (Véase nota adjunta).
nombre-archivo-n Después de CLOSE/DELETE/OPEN/START nombre-archivo-n

Después de READ nombre-archivo-n en el que no se ejecutó


AT END/INVALID KEY.
nombre-procedimiento-n Antes de cada ejecución del procedimiento nombrado.

Después de la ejecución de la instrucción ALTER que haga


referencia al procedimiento nombrado.
ALL PROCEDURES Antes de cada ejecución de todos los procedimientos de
no depuración.

Después de la ejecución de toda instrucción ALTER (excepto


las instrucciones ALTER en los procedimientos Declarativos).

Nota: Los operandos sobre los que actúe pero no se nombren explícitamente en
las instrucciones tales como ADD, MOVE, o SUBTRACT
CORRESPONDING nunca causan la activación de un procedimiento USE
FOR DEBUGGING cuando se ejecutan dichas instrucciones. Si se especi-
fica el identificador-n en una frase que no se procesa, no se ejecuta la
sección de depuración asociada.

334 COBOL/400 Guía del usuario


Registro Especial DEBUG-ITEM
El registro especial DEBUG-ITEM proporciona información para un procedimiento
Declarativo de depuración. DEBUG-ITEM tiene la descripción implícita siguiente:

ð1 DEBUG-ITEM.
ð2 DEBUG-LINE PICTURE IS X(6).
ð2 FILLER PICTURE IS X VALUE SPACE.
ð2 DEBUG-NAME PICTURE IS X(3ð).
ð2 FILLER PICTURE IS X VALUE SPACE.
ð2 DEBUG-SUB-1 PICTURE IS S9999 SIGN IS
LEADING SEPARATE CHARACTER.
ð2 FILLER PICTURE IS X VALUE SPACE.
ð2 DEBUG-SUB-2 PICTURE IS S9999 SIGN IS
LEADING SEPARATE CHARACTER.
ð2 FILLER PICTURE IS X VALUE SPACE.
ð2 DEBUG-SUB-3 PICTURE IS S9999 SIGN IS
LEADING SEPARATE CHARACTER.
ð2 FILLER PICTURE IS X VALUE SPACE.
ð2 DEBUG-CONTENTS PICTURE IS X(n).

El registro especial DEBUG-ITEM proporciona información acerca de las con-


diciones que provocan la ejecución de una sección de depuración.

Antes de que se procese cada sección de depuración, DEBUG-ITEM se llena de


espacios. El contenido de los subcampos DEBUG-ITEM se actualiza según las
reglas que rige la instrucción MOVE, con una excepción: DEBUG-CONTENTS se
actualiza como si el movimiento fuera un movimiento alfanumérico a alfanumérico
sin conversión de datos desde una forma de representación interna a otra.
Después de la actualización, cada campo contiene:
Ÿ DEBUG-LINE: El número de instrucción generado por el compilador, ajustado
a la derecha y rellenado con ceros por la izquierda. Por ejemplo, 000112.
Ÿ DEBUG-NAME: Los primeros 30 caracteres del nombre causante de la ejecu-
ción de la sección de depuración. Todos los calificadores se separan mediante
la palabra OF (no se introducen subíndices o índices en DEBUG-NAME).
Ÿ DEBUG-SUB-1, DEBUG-SUB-2, DEBUG-SUB-3: Si DEBUG-NAME está
subindexado o indexado, el número de aparición de cada nivel se introduce en
el DEBUG-SUB-n correspondiente. Si el artículo no está subindexado o
indexado, estos campos permanecen con espacios en blanco.
Ÿ DEBUG-CONTENTS: Los datos se mueven a DEBUG-CONTENTS tal como
se muestra en la Tabla 8. DEBUG-CONTENTS tiene el mismo tamaño que el
identificador más grande del programa.

Apéndice B. Características de Depuración 335


Tabla 8. Contenido del Subcampo DEBUG-ITEM
DEBUG-LINE
Contiene el número
Ítem que causa la de la instrucción
ejecución COBOL Contenido de Contenido de
de la sección de que hace referencia DEBUG-NAME DEBUG-CONTENTS
depuración a
identificador-n identificador-n identificador-n Contenido del identificador-n
cuando el control se transfiere
a la sección de depuración.
nombre-archivo-n nombre-archivo-n nombre-archivo-n Para READ: contenido del
registro recuperado. Otras refe-
rencias: espacios.
nombre- instrucción ALTER nombre- nombre-procedimiento-n en la
procedimiento-n refe- procedimiento-n frase TO PROCEED TO
rencia ALTER
GO TO nombre- instrucción GO TO nombre-
procedimiento-n procedimiento-n
nombre- instrucción nombre- “SORT INPUT” “SORT
procedimiento-n en SORT/MERGE procedimiento-n OUTPUT” “MERGE OUTPUT”
SORT/MERGE según sea aplicable
INPUT/OUTPUT
PROCEDURE
Transferencia de Esta instrucción nombre- “PERFORM LOOP”
control de la instruc- PERFORM procedimiento-n
ción PERFORM
nombre- Instrucción causante nombre- “USE PROCEDURE”
procedimiento en un de la ejecución del procedimiento-n
procedimiento USE procedimiento USE
Transferencia implí- Instrucción anterior nombre- “FALL THROUGH”
cita desde el proce- procesada en un pro- procedimiento-n
dimiento secuencial cedimiento secuencial
anterior previo (véase nota
adjunta)
Primera entrada en el Número de línea de Primer nombre de “START PROGRAM”
primer procedimiento la primera instrucción procedimiento no
no declarativo del procedimiento declarativo

Nota: Si este párrafo está precedido de un encabezamiento de sección y el


control se pasa al encabezamiento de sección, el numero de instrucción
hace referencia al encabezamiento de sección.

336 COBOL/400 Guía del usuario


Líneas de depuración
Las líneas de depuración pueden ayudar a determinar la causa de un error. Una
línea de depuración es cualquier línea en un programa fuente con una D codificada
en la columna 7 (el área de continuación). Si una línea de depuración sólo con-
tiene espacios en blanco en el Área A y B, se considera una línea en blanco.

Cada línea de depuración debe escribirse de tal forma que el resultado sea un
programa sintácticamente correcto, ya sea mediante la compilación de las líneas
de depuración o mediante una corrección sintáctica, aunque se traten como docu-
mentación.

Se permiten líneas de depuración sucesivas. Las líneas de depuración pueden


continuarse. Sin embargo, cada línea de continuación debe contener una D en la
columna 7, y la serie de caracteres no debe partirse en dos líneas.

Las líneas de depuración sólo pueden especificarse después del párrafo


OBJECT-COMPUTER.

Cuando se especifica la cláusula WITH DEBUGGING MODE en el párrafo


SOURCE-COMPUTER, se compilan todas las líneas de depuración como parte del
programa objeto.

Cuando se omite la cláusula WITH DEBUGGING MODE, se comprueba la sintaxis


de las líneas de depuración, pero se tratan como documentación.

Apéndice B. Características de Depuración 337


338 COBOL/400 Guía del usuario
Apéndice C. Nivel de Soporte del Lenguaje

Estándar ANSI X3.23-1985 COBOL


El estándar ANSI X3.23-1985 COBOL está compuesto por once módulos de
proceso funcional, siete de los cuales son imprescindibles y cuatro opcionales.

Los siete módulos necesarios son: Núcleo, E-S Secuencial, E-S Relativa, E-S
Indexada, Comunicación Entre Programas, Clasificación Fusión y Manipulación de
Texto Fuente. Los cuatro módulos opcionales son: Transcriptor de Informes,
Comunicaciones, Depuración y Segmentación.

Los elementos del lenguaje dentro de los módulos pueden clasificarse como ele-
mentos del nivel 1 y elementos de nivel 2. Los elementos de nueve de los
módulos se dividen en elementos del nivel 1 y elementos del nivel 2. Dos de los
módulos (SORT-MERGE y REPORT WRITER) sólo contienen elementos del nivel
1. Por ejemplo, los elementos del nivel 1 del Núcleo realizan operaciones internas
básicas. Los elementos del nivel 2 del Núcleo proporcionan elementos para pro-
cesos internos más amplios y sofisticados.

Los tres subconjuntos del COBOL Estándar son el subconjunto superior, el


subconjunto intermedio y el subconjunto inferior. Cada subconjunto está com-
puesto por un nivel de los siete módulos necesarios: Núcleo, E-S Secuencial, E-S
Relativa, E-S Indexada, Comunicación Entre Programas, Clasificación Fusión, y
Manipulación de Texto Fuente. Los cuatro módulos opcionales (Transcriptor de
Informes, Comunicaciones, Depuración y Segmentación) no son necesarios en los
tres subconjuntos del COBOL Estándar.
El subconjunto superior está compuesto por todos los elementos del lenguaje
del nivel superior de los módulos necesarios. Es decir:
Ÿ Los elementos del nivel 2 del Núcleo, E-S Secuencial, E-S Relativa, E-S
Secuencial, Comunicación Entre Programas, y Manipulación del Texto
Fuente
Ÿ Los elementos del nivel 1 de la Clasificación-Fusión.
El subconjunto intermedio está compuesto por todos los elementos de lenguaje
del nivel 1 de todos los módulos necesarios. Es decir:
Ÿ Los elementos del nivel 1 del Núcleo, E-S Secuencial, E-S Relativa, E-S
Indexada, Comunicación entre Programas, y Manipulación del Texto
Fuente.
El subconjunto inferior se compone de todos los elementos del lenguaje de
nivel 1 de los módulos del Núcleo, E-S Secuencial, y Comunicación Entre Pro-
gramas.

Los cuatro módulos opcionales no son parte integral de ninguno de los


subconjuntos. Sin embargo, ninguna, todas o cualquier combinación de los
módulos opcionales puede asociarse con cualquier subconjunto.

 Copyright IBM Corp. 1994 339


Nivel de Soporte del Lenguaje COBOL/400
El compilador COBOL/400 proporciona soporte para:
Ÿ El nivel 1 de los módulos del Núcleo, E-S Secuencial, E-S Relativa, E-S
Indexada, Comunicación Entre Programas, Clasificación Fusión y Manipulación
de Texto Fuente
Ÿ El nivel 2 de los módulos de Depuración y Segmentación.

El compilador COBOL/400 no proporciona soporte para los módulos del


Transcriptor de Informes y Comunicaciones de ANSI X3.23-1985 COBOL.

El nivel de soporte proporcionado por el compilador COBOL/400 se representa en


la tabla inferior. La siguiente tabla:
Ÿ Muestra el nivel de soporte del compilador COBOL/400 para cada módulo de
proceso funcional del Estándar ANSI X3.23-1985 COBOL
Ÿ Describe cada módulo.

Seguidamente se da una explicación de la notación utilizada en la tabla:

Un código de tres caracteres que


identifica el módulo. En este ejemplo se
explica el módulo de
Segmentación.



6
┌───┐
2 SEG ð,2
└─┘ └───┘
& &
│ │
│ │

El nivel de este módulo soportado por El rango de niveles de soporte


el compilador COBOL/4ðð. En este definido por el estándar
ejemplo, se proporciona soporte para ANSI X3.23-1985 COBOL. Un nivel de ð significa
el más alto de los dos niveles del que un estándar COBOL mínimo no
módulo de Segmentación. necesita soportar este módulo para ajustarse
al estándar.

Tabla 9 (Página 1 de 2). Nivel de Soporte del Compilador COBOL/400


COBOL/400
Nivel de
Lenguaje
Soportado Descripción del Módulo
Núcleo Contiene los elementos del lenguaje necesarios para procesar los
1 NUC 1,2 datos internamente dentro de las cuatro divisiones básicas de un
programa y la posibilidad para la definición y acceso de tablas.
E-S Secuencial Proporciona acceso a los registros de los archivos mediante la
1 SEQ 1,2 secuencia establecida en que se grabaron los registros en el
archivo.
E-S Relativa Proporciona acceso a registros de manera secuencial o al azar.
1 REL 0,2 Cada registro se identifica únicamente mediante un entero que
representa la posición lógica del registro dentro del archivo.

340 COBOL/400 Guía del usuario


Tabla 9 (Página 2 de 2). Nivel de Soporte del Compilador COBOL/400
COBOL/400
Nivel de
Lenguaje
Soportado Descripción del Módulo
E-S Indexada Proporciona acceso a registros de manera secuencial o al azar.
1 INX 0,2 Cada registro dentro de un archivo indexado se identifica
mediante una clave de registro.
Comunicación Permite que un programa COBOL comunique con otros pro-
Entre programas gramas mediante transferencias de control y acceso a elementos
1 IPC 1,2 de datos comunes.
Clasificación-Fusión Ordena uno o más archivos de registros, o combina dos o más
1 SRT 0,1 archivos ordenados de forma idéntica de acuerdo con las claves
especificadas por el usuario.
Manipulación del Permite insertar texto COBOL predefinido dentro de un programa
Texto Fuente en tiempo de ejecución.
1 STM 0,2
Transcriptor Proporciona una producción semiautomática de informes
de informes impresos.
0 RPW 0,1
Comunicaciones Permite acceder, procesar, y crear mensajes o partes de men-
0 COM 0,2 sajes; también permite la comunicación entre un Sistema de
Control de Mensajes con dispositivos de comunicaciones locales
y remotos.
Depuración Permite especificar instrucciones y procedimientos para la depu-
2 DEB 0,2 ración.
Segmentación Proporciona el solapamiento en tiempo de objeto de secciones de
2 SEG 0,2 la División de Procedimientos.

Soporte SAA de la Interfaz de Programación Común (CPI)


El archivo fuente QILBINC en las bibliotecas de productos QLBL y QLBLP contiene
los miembros que mantienen las especificaciones para múltiples Interfaces de Pro-
gramación Común SAA. Estas especificaciones describen las interfaces de pará-
metros. Este archivo es propiedad de IBM y no debe sufrir ninguna modificación.

Si desea personalizar cualquier especificación, debe copiar cualquier miembro que


desee modificar en un archivo fuente de una de las bibliotecas. Puede utilizar el
mandato Copiar Archivo (CPYF) para efectuar esta tarea. Para obtener más infor-
mación acerca del mandato CPYF, consulte la publicación CL Reference.

Si copia estas especificaciones en la biblioteca, debe renovar las copias cuando


cuando se instale una release nueva del producto, o cuando se efectúe cualquier
modificación utilizando un Arreglo Temporal de Programa (PTF). IBM proporciona
el mantenimiento para estas especificaciones sólo en las bibliotecas en las que
esté distribuido.

Apéndice C. Soporte del Lenguaje 341


342 COBOL/400 Guía del usuario
Apéndice D. Mensajes COBOL/400, Señalizador FIPS y
Señalización SAA

Mensajes COBOL/400
Este apéndice proporciona una descripción general de los mensajes que IBM sumi-
nistra con el programa bajo licencia COBOL/400.

Mensajes Interactivos
En un entorno interactivo, los mensajes se visualizan en la pantalla de la estación
de trabajo. Pueden aparecer en la pantalla actual como resultado de la ejecución
del programa o como respuesta a las entradas introducidas desde la línea de man-
datos, menús, pantalla de entrada de mandatos o Herramientas para el Desarrollo
de Aplicaciones (Appl Dev Tools). Los mensajes también pueden aparecer si se
solicitan mediante un mandato de visualización o de una opción del menú.

Los mensajes para el programa bajo licencia COBOL/400 empiezan con un prefijo
LSC, LBE, o LBL.

El comprobador de sintaxis COBOL/400 emite los mensajes LSC cuando se utiliza


el Programa de Utilidad de Entrada Fuente (SEU) para introducir el fuente
COBOL/400. Por ejemplo, se visualiza la pantalla siguiente después de introducir
incorrectamente el nombre del programa en el párrafo PROGRAM-ID.

à Columna . . . : 1 71 Editar
ð
XMPLIB/QLBLSRC
SEU==> TESTPR
FMT CB ......-A+++B+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
\\\\\\\\\\\\\\\ Inicio de datos \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðððð.1ð IDENTIFICATION DIVISION.
ðððð.2ð PROGRAM-ID. #TESTPR.
ðððð.7ð ENVIRONMENT DIVISION.
ðððð.9ð SOURCE-COMPUTER. IBM-AS4ðð.
\\\\\\\\\\\\\\\\\\ Fin de datos \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

F3=Salir F4=Solicitar F5=Renovar F9=Recuperar F1ð=Cursor


F16=Repetir búsqueda F17=Repetir cambio F24=Más teclas
# no está en el juego de caracteres COBOL. Línea rechazada
á ñ
Figura 109. Ejemplo de un Mensaje del Comprobador de Sintaxis COBOL/400.

 Copyright IBM Corp. 1994 343


Los mensajes LBE proporcionan información adicional acerca de la operación del
sistema durante el tiempo de ejecución. Por ejemplo, puede visualizar la pantalla
siguiente si comete un error en tiempo de ejecución:

à Visualizar Mensajes del Programa


ð
Trabajo ð11111/PGMRS/E34 iniciado el ð3/ð4/9ð a las 14:35:ð2 en el
subsistema QINTER en el Mensaje CPF41ð1 en XMPLDUMP en COBOLEX (C D F G).

Escriba respuesta, pulse Intro.


Respuesta ... _______________________________________________________________
________________________________________________________________________________

F3=Salir F12=Cancelar

á ñ
Figura 110. Mensaje de Error en Tiempo de Ejecución

Si desplaza el cursor hasta la línea en la que aparece el número de mensaje


CPF4101 y pulsa la tecla AYUDA o F1, la información del mensale LBE se
visualiza tal como se muestra a continuación:

à Información de Mensaje Adicional


ð
ID de mensaje . . . . . : LBE72ðð Gravedad . . . . . . : 99
Tipo de mensaje . . . . : INQUIRY
Fecha envío . . . . . . : ð3/ð4/9ð Hora envío . . . . . : 14:37:15
Desde programa .. . . . : QLREXHAN Instrucción . . . . : ðððð
A programa . . . . . . : \EXT Instrucción . . . . : ðððð

Mensaje . . . . : Mensaje CPF41ð1 en XMPLDUMP en COBOLEX (C D F).


Causa . . . . . : Se detectó el mensaje CPF41ð1 en la instrucción COBOL. OPEN
(instrucción MI ðð7E) en programa XMPLDUMP en COBOLEX.
Recuperación. . : Entre una G para continuar el programa en el siguiente
instrucción MI, o C si no desea vuelco, una D si desea vuelco de los
identificadores COBOL o una F si desea volcar los identificadores COBOL
y las variable generadas por el compilador. El texto de mensaje para CPF41ð1
es el siguiente: archivo SALES en biblioteca \LIBL no encontrado o archivo
de datos en línea perdido.
Elecciones posibles de respuesta al mensaje. . . . . . . . . . . . . :
C -- No se produce ningún vuelco con formato
D -- Se produce un vuelco de los identificadores COBOL
F -- Se produce un vuelco de todas las variables
G -- Para continuar el programa en la siguiente instrucción MI.
Final
Pulse Intro para continuar.

F3=Salir F1ð=Visualizar mensajes en anotaciones de trabajo F12=Cancelar


á ñ
Figura 111. Mensaje de Error en Tiempo de Ejecución–Texto de Segundo Nivel

Los mensajes LBE 7900 a 7999 se utilizan como encabezamientos para la infor-
mación impresa durante un vuelco con formato COBOL/400.

344 COBOL/400 Guía del usuario


Los mensajes LBL se describen en el apartado “Mensajes de Compilación” que se
muestra a continuación.

El apartado “Respuesta a Mensajes” en la página 345 explica cómo visualizar el


texto de mensaje de segundo nivel y cómo contestar los mensajes.

Mensajes de Compilación
Los mensajes LBL se imprimen en el listado del programa cuando se detectan
errores durante la compilación del programa. Los mensajes LBL incluyen el
mensaje emitido cuando se solicita la señalización de Federal Information
Processing Standard (FIPS); para obtener más información acerca de los mensajes
FIPS, vea la página 347 de este apéndice.

Listados de Programas
En la salida del compilador, el listado de mensajes COBOL/400 sigue al listado
fuente. El listado de mensajes COBOL/400 muestra el identificador del mensaje, la
gravedad, el texto, normalmente la ubicación del error y el resumen de los men-
sajes.

Para obtener más información acerca de los Listados de Programas, consulte el


apartado “Listado Fuente” en la página 42.

Respuestas a Mensajes
En un entorno interactivo, se indica un mensaje mediante una o varias de las con-
diciones siguientes:
Ÿ Un mensaje escueto (llamado texto de primer nivel) en la línea de mensajes
Ÿ Una imagen invertida resaltando el campo de entrada con error
Ÿ Un teclado bloqueado
Ÿ El sonido de una alarma (si se instaló la opción de alarma).

Los siguiente párrafos describen brevemente algunos métodos de respuestas a


mensajes de error; hay más información disponible en la publicaciones Guía para
Nuevos Usuarios y Herramientas para el Desarrollo de Aplicaciones.

Si la corrección necesaria es obvia desde la pantalla inicial, puede pulsar la tecla


Restaurar Error (si el teclado está bloqueado), introduzca la información correcta y
continúe el trabajo.

Si el mensaje indica que debe elegir una respuesta (como por ejemplo C para can-
celar, D para volcar los identificadores COBOL, F para volcar todas las variables, o
G para reanudar el proceso en la siguiente instrucción COBOL), las opciones de
respuesta se muestran entre paréntesis en el texto de mensaje de primer nivel.
Para ver un ejemplo, consulte la Figura 110 en la página 344.

Si la información en la pantalla de información inicial no ofrece los suficientes datos


para manejar el error, puede pulsar la tecla AYUDA (después de colocar el cursor
en la línea de mensajes, si es necesario) para obtener una pantalla de segundo
nivel con información adicional que permite solucionar este error. Para volver a la
pantalla inicial, pulse la tecla Intro; luego pulse la tecla Restaurar Error (si el
teclado está bloqueado) y efectúe la corrección o respuesta.

Apéndice D. Mensajes COBOL/400 345


Si el error se produce cuando compila o ejecuta un programa, puede que necesite
modificar las instrucciones fuente COBOL/400 o los mandatos de lenguaje de
control (CL). Consulte la publicación SEU Guía del Usuario y Manual de Consulta
para obtener información sobre cómo modificar las instrucciones.

Descripciones de Mensajes COBOL


Los mensajes para el programa bajo licencia COBOL/400 empiezan con los pre-
fijos LSC, LBE o LBL.
El comprobador de sintaxis emite los mensajes LSC cuando se utiliza el SEU
para introducir la fuente COBOL.
Los mensajes LBE proporcionan información adicional acerca de la operación
del sistema durante el tiempo de ejecución.
Los mensajes LBL son mensajes generados por el compilador.

Los números de mensajes se asignan de la siguiente forma:

Mensaje de Error Descripción


LBE7000 al LBE7199 Mensajes de Escape
LBE7200 al LBE7999 Mensajes en Tiempo de Ejecución
LBE9001 Mensaje de Escape
LBL0000 al LBL0999 Mensajes con gravedad menor a 30
LBL1000 al LBL1999 Mensajes con gravedad superior o igual a
30
LBL8000 al LBL8799 Mensajes de Señalizador FIPS
LBL8800 al LBL8899 Mensajes de Señalización SAA
LSC0000 al LSC1999 Mensajes del controlador de sintaxis

Niveles de Gravedad
El programa bajo licencia COBOL/400 proporciona los siguientes niveles de gra-
vedad de mensajes:
Gravedad Significado
00 Informativo: Este nivel se utiliza para comunicar información al
usuario. No se ha producido ningún error. Los mensajes infor-
mativos sólo se listan cuando se especifica la opción FLAG (00).
10 Aviso: Este nivel indica que se ha detectado un error pero no es lo
suficientemente grave como para interrumpir la ejecución del pro-
grama.
20 Error: Este nivel indica que se ha producido un error, pero el compi-
lador está efectuando una operación que podría producir el código
deseado.
30 Error Grave: Este nivel indica que se ha detectado un error grave.
La compilación ha finalizado, pero el programa no se puede ejecutar.
40 Irrecuperable: Este nivel indica generalmente un error del usuario
que provoca la finalización del proceso.
50 Irrecuperable: Este nivel indica generalmente un error del compi-
lador que provoca la finalización del proceso.

346 COBOL/400 Guía del usuario


99 Acción: Se requiere alguna acción manual, como por ejemplo intro-
ducir una respuesta, cambiar los formularios de impresora o sustituir
los disquetes.
Nota: Los mensajes 00, 10 y 20 se suprimen cuando se utiliza la opción
FLAG(30) de la instrucción PROCESS o cuando el mandato CRTCBLPGM
especifica FLAG(30) y la instrucción PROCESS no lo altera temporalmente.
Consulte el apartado “Uso de la Instrucción PROCESS para Especificar las
Opciones del Compilador” en la página 33 para más información.

El compilador siempre intenta proporcionar diagnósticos completos de todos los


textos fuente en el programa, incluso cuando se han detectado errores. Si el com-
pilador no puede continuar en una instrucción determinada, el mensaje establece
que el compilador no puede continuar y que el resto de la información se omitirá.
Cuando se produce este error, el programador debe examinar la instrucción entera.

El servicio de mensajes OS/400 se utiliza para producir todos los mensajes. Los
mensajes del compilador COBOL/400 residen en el archivo de mensajes
QLBLMSG, mientras que los mensajes en tiempo de ejecución lo hacen en el
archivo QLBLMSGE.

El programa que envía el mensaje, no la descripción del mensaje almacenada en


el archivo de mensajes, es el que determina las variables de sustitución y los
valores de respuesta válida. Sin embargo, pueden cambiarse ciertos elementos de
una descripción de mensajes: por ejemplo, el texto, el nivel de gravedad, la res-
puesta por omisión o el listado del vuelco. Para ello, es preciso especificar otra
definición de mensaje mediante el mandato Añadir Descripción de Mensaje
(ADDMSGD), colocar la descripción modificada en un archivo de mensajes creado
por el usuario, y especificar1 dicho archivo en el mandato Alterar Temporalmente
Archivo de Mensajes (OVRMSGF). El mandato OVRMSGF sirve para que el com-
pilador recupere mensajes del archivo especificado. Consulte los mandatos
ADDMSGD y OVRMSGF en la publicación CL Reference si desea obtener infor-
mación adicional.

ATENCIÓN: La sustitución temporal de un mensaje suministrado por IBM con un


mensaje creado por el usuario puede provocar resultados imprevisibles. Si no se
retienen los valores de respuesta, el programa puede que no responda a ninguna
respuesta. Cambiar las respuestas por omisión en los mensajes de tipo *NOTIFY
puede afectar la ejecución del programa en modalidad desatendida. Cambiar la
gravedad puede provocar la cancelación de un trabajo que no estuviera cancelado.
Tenga cuidado al alterar los mensajes suministrados por IBM por mensajes
creados por el usuario.

El señalizador Federal Information Processing Standard (FIPS)


El señalizador FIPS puede especificarse para supervisar un subconjunto FIPS
COBOL, cualquier módulo opcional, todos los elementos de lenguaje obsoleto, o
bien una combinación de un subconjunto FIPS COBOL, de módulos opcionales y
de todos los elementos obsoletos.

1 Si es preciso modificar y sustituir un mensaje suministrado por IBM en su archivo de mensajes, póngase en contacto con su
representante de servicio.

Apéndice D. Mensajes COBOL/400 347


La supervisión es un análisis que compara la sintaxis utilizada en el programa
fuente con la sintaxis incluida en el subconjunto FIPS seleccionado por el usuario y
los módulos opcionales. Se identifica cualquier sintaxis utilizada en el programa
fuente que no se ajuste al subconjunto FIPS COBOL seleccionado y los módulos
opcionales. Cualquier sintaxis para un elemento de lenguaje obsoleto utilizada en
el programa fuente también se identificará (según el compilador escogido). Con-
sulte la página 25 para obtener más información acerca de los parámetros para la
señalización FIPS.

Las especificaciones 1986 FIPS COBOL son las especificaciones de lenguaje con-
tenidas en ANSI X3.23-1985 COBOL. FIPS COBOL se subdivide en tres
subconjuntos y en cuatro módulos opcionales. Los tres subconjuntos se identifican
como Inferior, Intermedio y Superior. Los cuatro módulos opcionales son el
Transcriptor de Informes, Comunicaciones, Depuración y Segmentación. Estos
cuatro módulos opcionales no son parte integral de ninguno de los subconjuntos:
sin embargo, ninguna, todas, o cualquier combinación de los módulos opcionales
pueden asociarse a cualquier subconjunto. Cualquier programa grabado que se
ajuste al estándar FIPS debe ajustarse a uno de los subcampos de 1986 FIPS
COBOL. La Tabla 10 muestra los módulos de proceso estándar 1985 ANSI
Standard COBOL que se incluyen en cada uno de los subcampos de 1986 FIPS
COBOL.

A continuación se ofrece una explicación de la notación utilizada dentro de la tabla:

Un código de 3 caracteres que identifica el módulo.


En este ejemplo, se hace referencia el módulo de
Segmentación.



6
┌───┐
2 SEG ð,2
└─┘ └───┘
& &
│ │
│ │

El nivel de este módulo soportado por el El rango de niveles de soporte


estándar 1986 FIPS COBOL. En este ejemplo, definido por el estándar ANSI X3.23-1985
el soporte se proporciona para el más alto COBOL. Un nivel de ð significa que un
de los dos niveles del módulo de estándar COBOL mínimo no necesita
Segmentación. soportar este módulo para ajustarse al
estándar.

Tabla 10 (Página 1 de 2). Estándar 1985 American National COBOL y Niveles FIPS 1986
Nombre de
Módulo FIPS FIPS FIPS
1985 ANSI Superior Intermedio Inferior
Núcleo 2 NUC 1,2 1 NUC 1,2 1 NUC 1,2
E-S Secuencial 2 SEQ 1,2 1 SEQ 1,2 1 SEQ 1,2
E-S Relativa 2 REL 0,2 1 REL 0,2 0 REL 0,2
E-S Indexada 2 INX 0,2 1 INX 0,2 0 INX 0,2
Manipulación del
Texto Fuente 2 STM 0,2 1 STM 0,2 0 STM 0,2

348 COBOL/400 Guía del usuario


Tabla 10 (Página 2 de 2). Estándar 1985 American National COBOL y Niveles FIPS 1986
Nombre de
Módulo FIPS FIPS FIPS
1985 ANSI Superior Intermedio Inferior
Clasificación- 1 SRT 0,1 1 SRT 0,1 0 SRT 0,1
Fusión
Comunicación
Entre Programas 2 IPC 1,2 1 IPC 1,2 1 IPC 1,2
Transcriptor de 0, o 1 RPW 0,1 0, o 1 RPW 0,1 0, o 1 RPW 0,1
Informes
Segmentación 0,1 o 2 SEG 0,2 0,1 o 2 SEG 0,2 0,1 o 2 SEG 0,2
Depuración 0,1 o 2 DEB 0,2 0,1 o 2 DEB 0,2 0,1 o 2 DEB 0,2
Comunicaciones 0,1 o 2 COM 0,2 0,1 o 2 COM 0,2 0,1 o 2 COM 0,2

Nota: El compilador COBOL/400 soporta los módulos opcionales de Segmen-


tación y Depuración.

Los elementos que se especifiquen en el programa fuente COBOL/400 y que no se


incluyen en COBOL FIPS 1986 se señalan tal como se describe en el Apéndice C,
“Nivel de Soporte del Lenguaje” en la página 339.

Señalización SAA
Puede escoger la realización de la señalización SAA para determinar si las fun-
ciones COBOL/400 que utiliza son portables o no a otros entornos SAA COBOL.

La señalización se realiza en aquellas funciones COBOL/400 que se encuentran


fuera de SAA COBOL, como por ejemplo:
Ampliaciones COBOL/400
Límites del compilador COBOL/400
Palabras reservadas no de SAA
Opciones del compilador.

De esta manera, puede escribir programas que se ajusten a la definición COBOL


SAA.

Como ejemplo de señalización SAA en un listado de compilador, consulte la


Figura 12 en la página 48. Para realizar la señalización SAA mediante el mandato
CRTCBLPGM CL, especifique SAAFLAG(*FLAG). Para realizar la señalización
SAA mediante la instrucción PROCESS, especifique SAAFLAG.

Al compilar un programa para que se ajuste a la definición SAA mediante el


mandato CRTCBLPGM, especifique lo siguiente:
OPTION(\QUOTE \NOSEQUENCE \NONUMBER)
GENOPT(\CRTF \DUPKEYCHK \SYNC)
SAAFLAG(\FLAG)

Si utiliza la instrucción PROCESS, especifique lo siguiente:


QUOTE, NOSEQUENCE, NONUMBER, CRTF,
DUPKEYCHK, SYNC, SAAFLAG.

Apéndice D. Mensajes COBOL/400 349


Para obtener más información sobre cómo especificar la opción para la
señalización SAA, consulte el Parámetro SAAFLAG en la página 26 y el apartado
“Uso de la Instrucción PROCESS para Especificar las Opciones del Compilador” en
la página 33.

Para obtener información acerca de los límites del compilador, consulte el apéndice
Límites del Compilador en la publicación COBOL/400 Reference.

350 COBOL/400 Guía del usuario


Apéndice E. Diferencias entre el COBOL ANSI 74 COBOL y el
COBOL ANSI 85
Este apéndice identifica los elementos del lenguaje COBOL ANSI 85 que no son
compatibles con el COBOL ANSI 74. Estos ítems identifican los cambios y con-
diciones que los usuarios del COBOL ANSI 74 necesitan para saber cuándo
migrar al COBOL ANSI 85.

Consulte el apartado “Estándares Industriales Utilizados en el Diseño del


Compilador” en la página xiii para obtener más información acerca del COBOL
ANSI 85.

Migración de Programas COBOL ANSI 74 a COBOL ANSI 85


A continuación se muestran algunas de las características o modificaciones del
COBOL ANSI 85 que pueden afectar a los programas COBOL ANSI 74:
Ÿ La palabra clave ALPHABET debe preceder al nombre del alfabeto en la cláu-
sula nombre del alfabeto en el párrafo SPECIAL-NAMES. Un nombre del alfa-
beto es una palabra definida por el usuario en el párrafo SPECIAL-NAMES que
da nombre a un juego de caracteres o a un orden de clasificación.
Ÿ El ítem de datos de clave relativa especificada en la frase RELATIVE KEY no
debe contener el símbolo PICTURE “P”.
Ÿ La prueba de clase ALPHABETIC es cierta para letras mayúsculas, minúsculas
y para el carácter en blanco.
Ÿ Cuando no hay más instrucciones para procesar en un programa llamado, se
ejecuta una EXIT PROGRAM implícita.
Ÿ En una instrucción MERGE no se pueden especificar dos archivos en la misma
cláusula SAME AREA o SAME SORT-MERGE AREA. Los únicos archivos en
una instrucción MERGE que pueden especificarse en la cláusula SAME
RECORD AREA son los asociados con la frase GIVING.
Ÿ Dentro de la instrucción READ, no puede especificarse la frase INTO a no ser
que:
Todos los registros asociados con el archivo y el ítem de datos especifi-
cado en la frase INTO sean elementos de grupo o ítems alfanuméricos ele-
mentales, o sólo esté subordinada una descripción de registro a la entrada
de descripción del archivo.
Ÿ Dentro de la instrucción RETURN, la frase INTO no se puede especificar a no
ser que:
Todos los registros asociados con el archivo y el ítem de datos especifi-
cado en la frase INTO sean ítems de grupo o ítems alfanuméricos elemen-
tales, o sólo esté subordinada una descripción de registro a la entrada de
descripción del archivo de clasificación-fusión.
Ÿ Indicador de posición del archivo - El concepto de un puntero de registro actual
se ha cambiado a indicador de posición de archivo.
Ÿ Palabras reservadas - Se han añadido nuevas palabras reservadas.
Ÿ Estado de E/S - Se han añadido nuevos valores de estado de E/S.

 Copyright IBM Corp. 1994 351


Ÿ EL pseudotexto-1 de la instrucción COPY no debe estar únicamente com-
puesto por una coma o por dos puntos.
Ÿ Un ítem de datos que aparece en la frase USING de la cabecera de la División
de Procedimiento no debe tener una cláusula REDEFINES en la entrada de
descripción de datos.
Ÿ Si no se especifica la frase FOOTING, no existe ninguna condición de fin de
página independiente de la condición de desbordamiento de página.
Ÿ La frase NO REWIND no puede especificarse en una instrucción CLOSE que
tenga una frase REEL/UNIT.
Ÿ Las instrucciones CANCEL y STOP RUN cierran todos los archivos abiertos.
Ÿ Cuando un ítem receptor es un elemento de datos de longitud variable y con-
tiene el objeto de la frase DEPENDING ON, se utilizará la longitud máxima del
elemento.
Ÿ Dentro de la frase VARYING ... AFTER de la instrucción PERFORM, el
identificador-2 se aumenta antes de establecer el identificador-5.
Ÿ Cualquier subindexación para el identificador-4 de la frase REMAINDER de la
instrucción DIVIDE se evalúa después de que el resultado de la operación
DIVIDE se haya almacenado en el identificador-3 de la frase GIVING.
Ÿ Las frases ADVANCING PAGE y END-OF-PAGE no deben estar en la misma
instrucción WRITE.
Ÿ La serie de caracteres de PICTURE de un ítem alfanumérico sólo puede con-
tener el símbolo “A”. No se permite ninguna edición para la categoría de datos
alfabéticos.
Nota: Un carácter alfabético es una letra o un carácter en blanco.
Ÿ Cuando se hace referencia a un ítem de datos descritos por una PICTURE y
dicho elemento contiene una “P”, se considera que las posiciones del dígito
especificadas por “P” contienen ceros en las operaciones siguientes:
– Toda operación que precise un operando emisor de tipo numérico
– Una instrucción MOVE donde el operando emisor sea numérico y cuya
serie de caracteres PICTURE contenga el símbolo “P”
– Una instrucción MOVE donde el operando emisor sea numérico editado y
cuya serie de caracteres PICTURE contenga el símbolo “P”, y el operando
sea numérico o numérico editado.
– Una operación de comparación donde ambos operandos sean numéricos.
Ÿ El literal en la cláusula CURRENCY SIGN no puede ser una constante figu-
rativa.
Ÿ Si la instrucción COPY aparece en una entrada de comentarios, se considera
parte de la entrada de comentarios.
Ÿ Se definen los siguientes casos de exponenciación:
– Si una expresión con un valor cero se eleva a una potencia negativa o
igual a cero, se produce una condición de error de tamaño.
– Si la evaluación de la exponenciación da un número real a la vez positivo y
negativo, se devuelve el número positivo.

352 COBOL/400 Guía del usuario


– Si como resultado de la evaluación no existe un número real, existe una
condición de error.
Ÿ Cuando el literal de constante figurativa ALL no se asocia a otro ítem de datos,
la longitud de la serie de caracteres es la longitud del literal.

Apéndice E. Comparación entre el COBOL ANSI 74 y el COBOL ANSI 85 353


354 COBOL/400 Guía del usuario
Apéndice F. Soporte del Juego de Caracteres de Idiomas
Internacionales de Doble Byte

Ampliación de IBM

Este apéndice sólo describe las mejoras realizadas en el lenguaje de programación


COBOL para escribir programas que procesan caracteres de doble byte.

En concreto, este apéndice describe dónde se pueden utilizar los caracteres del
Juego de Doble Byte (DBCS) en cada parte de un programa COBOL y las conside-
raciones que hay que saber para trabajar con datos DBCS en el lenguaje
COBOL/400.

Existen dos formas de especificar caracteres DBCS:


Ÿ Caracteres DBCS entre paréntesis
Ÿ Caracteres de datos DBCS gráficos

Por lo general, COBOL maneja caracteres DBCS entre paréntesis de la misma


manera que maneja caracteres alfanuméricos. Los caracteres DBCS entre parén-
tesis pertenecen a una serie de caracteres en la que cada carácter está represen-
tado por dos bytes. El carácter empieza con un carácter de desplazamiento a
teclado ideográfico (SO) y finaliza con un carácter de desplazamiento a teclado
estándar (SI). Por lo tanto, depende exclusivamente del usuario conocer (o dis-
poner de la comprobación del programa COBOL) los ítems de datos que contienen
los caracteres DBCS, así como asegurarse de que el programa recibe y procesa
correctamente esta información.

De este modo, el usuario ya puede utilizar las descripciones DDS que definen los
campos de datos DBCS gráficos con los programas COBOL/400. Los caracteres
DBCS gráficos pertenecen a una serie de caracteres en la que cada carácter está
representado por dos bytes. Esta serie de caracteres no contiene ni caracteres de
desplazamiento a teclado ideográfico ni caracteres de desplazamiento a teclado
estándar. No es posible utilizar programas que contengan datos gráficos. Para
obtener más información sobre cómo especificar ítems de datos gráficos mediante
los programas COBOL/400, consulte el apartado “Campos Gráficos DBCS” en la
página 139.

Utilización de Caracteres DBCS en Literales

Tipos de Literales
Hay dos tipos de literales en los que se pueden utilizar los caracteres DBCS: el
literal DBCS y el literal mixto. Un literal mixto está compuesto por los caracteres
del Juego de Caracteres de Doble Byte (DBCS) y el Juego de Caracteres de un
Sólo Byte (SBCS).

Literales DBCS: El compilador COBOL reconoce los caracteres DBCS en los lite-
rales DBCS cuando se utiliza la opción GRAPHIC en la instrucción PROCESS.
Nota: La opción GRAPHIC en la instrucción PROCESS no debe confundirse con
el valor *GRAPHIC del parámetro CVTOPT del mandato CRTCBLPGM ni
con la opción CVTGRAPHIC en la instrucción PROCESS, que se utilizan

 Copyright IBM Corp. 1994 355


para especificar los datos gráficos de doble byte desde una descripción
DDS. Para obtener más información sobre cómo especificar datos gráficos,
consulte el apartado “Campos Gráficos DBCS” en la página 139.

Literales DBCS/SBCS: El compilador COBOL reconoce caracteres DBCS en lite-


rales DBCS/SBCS (mixtos), cuando se está en un sistema DBCS y no se especi-
fica ni la opción GRAPHIC ni la instrucción PROCESS.

Especificación de Literales que contienen Caracteres DBCS


Cuando se especifica un literal que contiene caracteres DBCS, siga las mismas
normas que se aplican al especificar literales alfanuméricos, además de las
siguientes reglas específicas para los tipos de literal:

Especificación de un Literales DBCS: Cuando se especifica un literal DBCS,


tenga en cuenta lo siguiente:

El formato de un literal DBCS es:


"ðEK1K2ðF"
Ÿ Unas comillas abren y cierran el literal.
Ÿ Un carácter de desplazamiento a teclado ideográfico (ðE) sigue inmediatamente
a la comilla inicial y ocupa 1 byte. Un carácter de desplazamiento a teclado
ideográfico es un carácter de control (hex 0E) que indica el inicio de una serie
de caracteres de doble byte.
Ÿ Un carácter de desplazamiento a teclado estándar (ðF) precede inmedia-
tamente la comilla final y ocupa 1 byte. Un carácter de desplazamiento a
teclado estándar es un carácter de control (HEX 0F) que indica el final de una
serie de caracteres de doble byte.
Ÿ Todos los caracteres DBCS aparecen entre los caracteres de desplazamiento
a teclado ideográfico y de desplazamiento a teclado estándar.
Ÿ Sólo los caracteres DBCS pueden aparecer en el literal (las series nulas no
son válidas).

La longitud máxima de un literal DBCS es de 80 caracteres DBCS, incluyendo los


caracteres de control de desplazamiento. (Si se cuentan juntos son equivalentes en
longitud a un carácter DBCS). Los caracteres de control de desplazamiento son
parte del literal y toman parte en todas las operaciones.

Consulte el apartado “Continuación de los Literales DBCS en una Línea Nueva” en


la página 358 para obtener más información sobre cómo ampliar los literales
DBCS.

Especificación de un Literal DBCS/SBCS: cuando se especifica un literal


DBCS/SBCS, recuerde que:
Ÿ Los literales DBCS/SBCS pueden tener diferentes formas. A continuación se
muestra sólo un posible ejemplo:
"SINGLEðEK1K2K3ðFBYTES"
Ÿ USAGE DISPLAY debe ser explícita o implícita.
Ÿ Unas comillas abren y cierran el literal.

356 COBOL/400 Guía del usuario


Ÿ Los caracteres EBCDIC pueden aparecer antes y después de cualquier serie
de caracteres DBCS en el literal mixto.
Ÿ Todas las series de caracteres DBCS aparecen entre caracteres de despla-
zamiento a teclado ideográfico y a teclado estándar.
Ÿ Es preciso doblar todas las comillas DBCS que aparezcan dentro del literal.
No es necesario doblar las comillas DBCS que se encuentren dentro del literal.
Ÿ Sólo puede utilizar series nulas DBCS (caracteres de desplazamiento a teclado
ideográfico y a teclado estándar sin ningún carácter DBCS) sólo cuando el
literal contenga al menos un carácter SBCS.

Los caracteres de desplazamiento a teclado ideográfico y a teclado estándar no


pueden jerarquizarse.

Los caracteres de control de desplazamiento son parte del literal y toman parte en
todas las operaciones.

Los literales DBCS/SBCS no pueden continuar en más líneas. Están restringidos al


espacio del ÁREA B de una línea.

Otras Consideraciones

Comillas: Aunque el comentario anterior utiliza el término comillas para describir el


carácter que identifica un literal, el carácter que realmente se ha utilizado puede
variar según la opción especificada en el mandato CL CRTCBLPGM o en la ins-
trucción PROCESS. Si se especifica la opción APOST, se utiliza un apóstrofe (').
De lo contrario, se utilizan las comillas ("). En este apéndice, las comillas hacen
referencia tanto a los apóstrofes como a las comillas. El carácter que elija no
afecta a las reglas que especifican el literal.

Caracteres de Desplazamiento: Los caracteres de desplazamiento a teclado


ideográfico y a teclado estándar separan los caracteres EBCDIC de los caracteres
DBCS. Forman parte de los literales DBCS y DBCS/SBCS. Por lo tanto, los
caracteres de codificación de desplazamiento participan en todas las operaciones
cuando aparecen en los literales DBCS o DBCS/SBCS.

Caracteres DBCS comprobados por el compilador COBOL


Cuando el compilador COBOL encuentra una serie DBCS, la comprueba explo-
rando los caracteres DBCS uno a uno.

Las condiciones siguientes provocan que el compilador COBOL diagnostique un


literal que contenga caracteres DBCS como no válido:
Ÿ La sintaxis del literal es incorrecta.
Ÿ El literal DBCS es más largo que una línea y no respeta las normas para la
continuación de literales no numéricos. (Consulte el apartado “Continuación de
los Literales DBCS en una Línea Nueva” en la página 358 para obtener más
información.)
Ÿ El literal DBCS/SBCS es más largo que una línea.

Cuando el compilador COBOL encuentra un literal DBCS que no es válido, genera


un mensaje de error y luego procesa el literal como un literal alfanumérico.

Apéndice F. Soporte del Juego de Caracteres de Idiomas Internacionales de Doble Byte 357
Para cada literal DBCS o SBCS que no es válido, el compilador genera un
mensaje de error y acepta o ignora el literal.

Continuación de los Literales DBCS en una Línea Nueva


Para continuar un literal DBCS en otra línea del código fuente, realice todos los
pasos siguientes:
Ÿ Coloque un carácter de desplazamiento a teclado estándar en la columna 71 ó
72 de la línea a continuar (si coloca el carácter en la columna 71, se ignora el
espacio en blanco de la columna 72)
Ÿ Coloque un guión (-) en la columna 7 (área de continuación) de la línea nueva
Ÿ Coloque unas comillas, a continuación un carácter de desplazamiento a
teclado ideográfico, y después el resto del literal en el Área B de la línea
nueva.

Por ejemplo:
-A 1 B
..
.
ð1 DBCS1 PIC X(12) VALUE "ðEK1K2K3ðF
- "ðEK4K5ðF".
..
.
El valor de DBCS1 es "0EK1K2K3K4K50F".

El carácter de desplazamiento a teclado estándar, las comillas y el carácter de


desplazamiento a teclado ideográfico utilizados para continuar una línea no se
cuentan en la longitud del literal DBCS. Se cuenta el primer carácter de despla-
zamiento a teclado ideográfico y el primer carácter de desplazamiento a teclado
estándar.

En qué lugar puede utilizar los caracteres DBCS en un programa


COBOL
En general, puede utilizar los literales DBCS o DBCS/SBCS allí dónde se permitan
los literales no numéricos. Sin embargo, los literales que se utilicen para lo
siguiente no pueden incluir caracteres de doble byte:
Ÿ Cláusula ALPHABET-NAME
Ÿ Cláusula CURRENCY SIGN
Ÿ Cláusula ASSIGN
Ÿ Cláusula CLASS
Ÿ Instrucción CALL
Ÿ Instrucción CANCEL
Nota: No puede utilizar los caracteres DBCS para palabras o nombres COBOL.
Consulte la publicación COBOL/400 Reference para obtener más infor-
mación sobre cómo dar formato a los nombres del sistema COBOL, pala-
bras reservadas y palabras definidas por el usuario, como por ejemplo
nombres de datos y nombres de archivos.

358 COBOL/400 Guía del usuario


Forma de Escribir Comentarios
Se puede escribir un comentario que contenga caracteres DBCS en un programa
COBOL colocando un asterisco (*) o barra (/) en la columna siete de la línea del
programa. Los dos símbolos hacen que el compilador trate la información que
sigue a la columna siete como documentación. La barra también provoca que se
genere un salto de página. Puesto que el compilador COBOL no comprueba el
contenido de las líneas de comentarios, los caracteres DBCS que se encuentren
dentro de comentarios no se detectan. Los caracteres DBCS que no son válidos
pueden hacer que el listado del compilador se imprima de forma incorrecta.

División de Identificaciones
Se pueden colocar entradas de comentarios que contengan caracteres DBCS en
cualquier parte de la División de Identificaciones excepto en el párrafo
PROGRAM-ID. El nombre del programa especificado en el párrafo PROGRAM-ID
debe ser alfanumérico.

División de Entornos

Sección de Configuración
Es posible utilizar los caracteres DBCS en las entradas de comentarios sólo en el
párrafo de la Sección de Configuración. Todos los nombres de función, nombres
mnemotécnicos, nombres de condición y nombres del alfabeto deben especificarse
con los caracteres alfanuméricos. Para las entradas SOURCE-COMPUTER y
OBJECT-COMPUTER, utilice el nombre del sistema alfanumérico:

IBM-AS400

No es posible utilizar los literales DBCS o DBCS/SBCS en la Sección de Configu-


ración. En su lugar, utilice los literales alfanuméricos para definir un nombre del
alfabeto y el literal en la cláusula CURRENCY SIGN del párrafo SPECIAL-NAMES.
No hay alfabeto DBCS. En su lugar, utilice el juego de caracteres EBCDIC.

Sección Entrada-Salida
Especifique todos los nombres de datos, nombres de archivos y nombres de asig-
nación que utilicen caracteres alfanuméricos. Puede utilizar los caracteres DBCS
en los comentarios.

Para archivos indexados, el nombre de datos en la cláusula RECORD KEY puede


referirse a un ítem de datos DBCS o DBCS/SBCS dentro de un registro. El
número de campos en el registro, más el número de posiciones que ocupa la clave
del registro, no puede ser superior a 120.
Nota: Cada carácter DBCS ocupa dos posiciones y los caracteres de control de
desplazamiento ocupan cada uno una posición. Asegúrese de que la des-
cripción de datos de la clave y la posición de la clave en el archivo coin-
cidan con las especificadas en el momento de creación del archivo.

No puede utilizar datos DBCS y DBCS/SBCS como RELATIVE KEY en los


archivos relativos.

Apéndice F. Soporte del Juego de Caracteres de Idiomas Internacionales de Doble Byte 359
Párrafo de Control de Archivos
Cláusula ASSIGN: No puede utilizar los literales que contengan caracteres DBCS
en la cláusula ASSIGN para especificar un medio externo como una impresora o
una base de datos.

División de Datos

Sección de Archivos
Para la entrada FD (Descripción de Archivo), se puede utilizar ítems de datos
DBCS o DBCS/SBCS o literales en la cláusula VALUE OF. La cláusula DATA
RECORDS puede referirse sólo a ítems de datos. Debido a que el compilador
COBOL/400 trata la cláusula VALUE OF y la cláusula DATA RECORDS en la
Sección de Archivos como documentación, ninguna cláusula tiene efecto alguno
cuando ejecuta el programa. No obstante, el compilador COBOL comprueba todos
los literales de la cláusula VALUE OF para asegurarse de que son válidos.

Para cintas magnéticas, el sistema sólo puede leer caracteres DBCS o bien grabar
a caracteres DBCS a la cinta en el formato EBCDIC. El sistema no puede realizar
funciones de cinta que involucren una cinta con formato ASCII. Defina el nombre
del alfabeto en la cláusula CODE-SET como NATIVE. Utilice los caracteres
alfanuméricos para especificar el nombre del alfabeto.

Sección de Almacenamiento de Trabajo


Cláusula REDEFINES: las normas existentes para los datos redefinidos también
se aplican a los datos que contienen caracteres DBCS. Cuando determina la lon-
gitud de un ítem de datos redefinido o para redefinir, recuerde que cada carácter
DBCS es el doble de largo que un carácter alfanumérico.

Asegúrese también de que los ítems de datos redefinidos contengan los caracteres
de control de desplazamiento cuando y donde sea necesario.

Cláusula OCCURS: Utilice esta cláusula para definir las tabla para el almace-
namiento de datos DBCS o DBCS/SBCS. Si especifica la frase
ASCENDING/DESCENDING KEY, el COBOL asume que los contenidos de la tabla
están en la secuencia de clasificación EBCDIC del programa. Los caracteres de
control de desplazamiento en los datos DBCS y DBCS/SBCS forman parte del
orden de clasificación.

Para obtener más información sobre el manejo de tablas que contienen caracteres
DBCS, consulte el apartado “Manejo de Tablas–Instrucción SEARCH” en la
página 367.

Cláusula JUSTIFIED RIGHT: Utilice la cláusula JUSTIFIED RIGHT para alinear


los datos DBCS o DBCS/SBCS en la posición más a la derecha de un campo
receptor elemental. Si el campo receptor es inferior al campo emisor, COBOL
trunca los caracteres que estén más a la derecha. Si el campo receptor es más
largo que el campo emisor, COBOL llena el espacio inutilizado en la parte
izquierda del campo receptor con espacios en blanco.

La cláusula JUSTIFIED no afecta al valor inicial en la cláusula VALUE.

360 COBOL/400 Guía del usuario


Cláusula VALUE: Se pueden utilizar los literales DBCS o DBCS/SBCS para
especificar un valor inicial para un ítem de datos que no sea numérico, o definir los
valores para las entradas del nombre de condición del nivel 88.

Todos los caracteres de control de desplazamiento en el literal se consideran parte


de la serie PICTURE del literal, excepto cuando se utiliza para continuar una línea
nueva. Cuando continúa un literal DBCS, el compilador no incluye el carácter de
desplazamiento a teclado estándar en la columna 71 ó 72, o la comilla inicial (") y
el carácter de desplazamiento a teclado ideográfico en la siguiente línea como
parte del literal DBCS. De todas formas, asegúrese de que el literal DBCS no
exceda el tamaño del ítem de datos especificado en la cláusula PICTURE, de lo
contrario se produce el truncamiento.
Nota: Los literales DBCS/SBCS mixtos no pueden continuar en una línea nueva.

Cuando utilizan literales que contienen caracteres DBCS en la cláusula VALUE


para las entradas del nombre de condición de nivel 88, COBOL trata los caracteres
DBCS como alfanuméricos. Por lo tanto, siga las normas que rigen la especifi-
cación de datos alfanuméricos, incluyendo la permisión de una opción THROUGH.
Esta opción utiliza el orden de clasificación EBCDIC normal, pero recuerde que los
caracteres de control de desplazamiento y los datos DBCS/SBCS forman parte de
la secuencia de clasificación.

Cláusula PICTURE: Utilice el símbolo X de PICTURE para definir los ítems de


datos DBCS y DBCS/SBCS. Debido a que los caracteres DBCS son el doble de
largos que los alfanuméricos, y están dentro de los caracteres de control de des-
plazamiento, debe definir un ítem de datos DBCS que contenga n caracteres
DBCS como
PICTURE X(2n+2)

Un elemento de datos DBCS/SBCS que contenga m caracteres SBCS, y una serie


de n caracteres DBCS se definiría como
PICTURE X(m+2n+2)

Puede utilizar todos los símbolos PICTURE alfanuméricos editados para los ítems
de datos DBCS y DBCS/SBCS. Los símbolos de edición causan el mismo efecto
en los datos DBCS de estos ítems que en los ítems de datos alfanuméricos. Com-
pruebe que haya obtenido los resultados deseados.

Cláusula RENAMES: Utilice esta cláusula para especificar los agrupamientos


alternativos de ítems de datos elementales. Las normas existentes para la redeno-
minación de ítems de datos alfanuméricos también se aplica para los ítems de
datos DBCS y DBCS/SBCS.

División de Procedimientos

Declarativas
Un identificador en la sentencia USE FOR DEBUGGING de la sección
DECLARATIVES puede referirse a un ítem de datos DBCS o DBCS/SBCS.

No puede utilizar los caracteres DBCS para los nombres de archivos o de proce-
dimientos en la sentencia USE FOR DEBUGGING.

Apéndice F. Soporte del Juego de Caracteres de Idiomas Internacionales de Doble Byte 361
Expresiones Condicionales
Debido a que los nombres de condición (entradas de nivel 88) pueden referirse a
los ítems de datos que contienen caracteres DBCS, puede utilizar la condición de
nombre de condición para comprobar estos datos. (Consulte el apartado “Cláusula
VALUE” en la página 361). Siga las normas que se listan en el manual
COBOL/400 Reference para conocer mejor el uso de las variables condicionales y
de los nombres de condición.

Puede utilizar los ítems de datos DBCS o DBCS/SBCS o los literales como
operandos en una condición de relación. Debido a que COBOL trata los datos
DBCS como alfanuméricos, todas las comparaciones se producen de acuerdo con
las normas de los operandos alfanuméricos. Tenga siempre presente que:
Ÿ El sistema no reconoce el contenido mixto.
Ÿ El sistema utiliza los códigos de desplazamiento en las comparaciones de
datos DBCS y DBCS/SBCS.
Ÿ El sistema compara los datos utilizando la secuencia de clasificación EBCDIC,
o una secuencia definida por el usuario.
Ÿ En una comparación de ítem DBCS o DBCS/SBCS con ítems similares de
tamaño desigual, se llena el ítem más pequeño de la derecha con espacios
EBCDIC.

Consulte la sección “Párrafo SPECIAL-NAMES” en el manual COBOL/400


Reference para obtener más información.

Puede utilizar las condiciones de clase y de estado de conmutador tal y como se


describe en la publicación COBOL/400 Reference.

Instrucciones de Entrada/Salida
Instrucción ACCEPT: Los datos de entrada recibidos desde un dispositivo utili-
zando la instrucción ACCEPT de Formato 1 pueden incluir datos DBCS o
DBCS/SBCS. Todos los datos DBCS y DBCS/SBCS deben identificarse mediante
la sintaxis adecuada. Los datos de entrada, incluyendo los caracteres de control
de desplazamiento, sustituyen los contenidos existentes del identificador. COBOL
no realiza la edición ni la comprobación de error en los datos.

Si utiliza la instrucción ACCEPT de Formato 3 para obtener información


OPEN-FEEDBACK acerca del archivo, dicha información incluye un campo que
muestra si el archivo contiene datos DBCS o DBCS/SBCS.

La información que se recibe desde el área de datos local por medio de una ins-
trucción ACCEPT de Formato 4 puede incluir series de caracteres DBCS o
DBCS/SBCS. La información recibida sustituye los contenidos existentes. COBOL
no realiza ninguna edición o comprobación de errores. Esto también se aplica a la
información recibida desde el área de datos PIP por medio de una instrucción
ACCEPT de Formato 5.

Al utilizar la instrucción ACCEPT de Formato 6, se pueden obtener los atributos de


una pantalla de estación de trabajo y de su teclado. Para estaciones de pantalla
que pueden visualizar caracteres DBCS, el sistema establece el valor apropiado en
el ítem de datos ATTRIBUTE-DATA. No se puede utilizar los caracteres DBCS
para nombrar un dispositivo.

362 COBOL/400 Guía del usuario


Si utiliza una instrucción ACCEPT (Formato 7) ampliada para la entrada de la
estación de trabajo a nivel de campo, debe asegurarse de que los datos DBCS no
se dividen entre líneas. COBOL no realiza ninguna edición o comprobación de
errores.

Instrucción DISPLAY: Puede especificar los ítems de datos DBCS o


DBCS/SBCS o los literales en la instrucción DISPLAY. Puede mezclar los tipos de
datos. Los datos DBCS y DBCS/SBCS, de ítems de datos o literales, se envían tal
y como aparecen en el dispositivo del programa o en el área de datos local que es
el destino nombrado en la instrucción DISPLAY.

Debido a que COBOL ignora las características del dispositivo en que se visualizan
los datos, debe asegurarse de que los datos DBCS y DBCS/SBCS sean correctos.
| Es posible que sea preciso especificar la opción de visualización ampliada
| *NOUNDSPCHAR (o la opción del parámetro de instrucción del proceso equi-
| valente) cuando se compile el programa, para asegurarse de que la estación de
| trabajo puede manejar correctamente los datos DBCS.
Nota: ALL es una opción válida para literales mixtos.

Si utiliza una instrucción DISPLAY (Formato 3) ampliada para la salida de la


estación de trabajo a nivel de campo, debe asegurarse de que los datos DBCS no
se dividan entre líneas.

Instrucción READ: Puede utilizar los ítems de datos DBCS o DBCS/SBCS como
la RECORD KEY para un archivo indexado. Consulte el apartado “Sección
Entrada-Salida” en la página 359 para obtener más información.

Frase INTO: Es posible leer un registro de un ítem de datos DBCS o DBCS/SBCS


mediante la frase INTO. Esta frase provoca que se realice una instrucción MOVE
(pero sin la opción CORRESPONDING). El compilador mueve los datos DBCS y
DBCS/SBCS de la misma manera que mueve los datos alfanuméricos. No
asegura que estos datos sean válidos.

Instrucción REWRITE: Utilice la frase FROM de esta instrucción para transferir


datos DBCS o DBCS/SBCS desde un ítem de datos DBCS o DBCS/SBCS a un
registro existente. La frase FROM provoca que ambos tipos de datos se muevan
de la misma manera que la frase INTO en la instrucción READ. (Consulte el apar-
tado “Instrucción READ”.)

Instrucción START: Si utiliza caracteres DBCS en la clave de un archivo


indexado, especifique un ítem de datos correspondientes en la frase KEY de la
instrucción START.

Debe cumplirse una de las condiciones siguientes:


Ÿ El elemento de datos debe ser el mismo que el ítem de datos especificado en
la cláusula RECORD KEY del párrafo FILE-CONTROL.
Ÿ El ítem de datos tiene el mismo primer carácter que la clave de registro y no
es más largo que la clave de registro.

Puede especificar los operadores válidos (como por ejemplo EQUAL, GREATER
THAN, NOT LESS THAN) en la frase KEY. El sistema puede seguir la secuencia
de clasificación EBCDIC o la secuencia definida por el usuario.

Apéndice F. Soporte del Juego de Caracteres de Idiomas Internacionales de Doble Byte 363
Instrucción WRITE: Utilice la frase FROM de esta instrucción para grabar los
datos DBCS o DBCS/SBCS en un registro. Esta frase mueve los datos de la
misma manera que la instrucción REWRITE. (Consulte el apartado “Instrucción
REWRITE”).

Debe incluir los caracteres de control de desplazamiento cuando grabe los datos
en un archivo de dispositivo.

Instrucciones para la Manipulación de Datos


Instrucciones Aritméticas: Debido a que COBOL trata los caracteres DBCS de
la misma manera que lo hace con los caracteres alfanuméricos, no utilice los
caracteres DBCS en las operaciones numéricas, ni los manipule con instrucciones
aritméticas.

Instrucción INSPECT: Puede utilizar cualquier ítem de datos DBCS o


DBCS/SBCS como operando para la instrucción INSPECT. En este tipo de ope-
raciones, el sistema cuenta y sustituye cada mitad de un carácter DBCS,
incluyendo los caracteres de control de desplazamiento. Por lo tanto, puede que
los datos no coincidan adecuadamente.

Puede utilizar cualquier combinación de operandos de doble byte y alfanuméricos


con literales o ítems de datos de caracteres de doble byte. Si utiliza la frase
REPLACING, puede sustituir las partes del ítem inspeccionado por datos
alfanuméricos, o viceversa.

No puede sustituir una serie de caracteres por otra de una longitud distinta.
Téngalo presente cuando sustituya caracteres alfanuméricos por caracteres DBCS,
o viceversa.

Si quiere controlar la utilización de la instrucción INSPECT con ítems que con-


tengan caracteres DBCS, defina los ítems de datos que contengan caracteres de
control de desplazamiento. Utilice los caracteres de desplazamiento a teclado
ideográfico o a teclado estándar como los operandos BEFORE/AFTER en la ins-
trucción INSPECT.

El ejemplo siguiente muestra cómo puede utilizar la instrucción INSPECT para sus-
tituir un carácter DBCS por otro.
ð1 SUBJECT-ITEM PICTURE X(5ð).
ð1 DBCS-CHARACTERS VALUE "ðEK1K2ðF".
ð5 SHIFT-OUT PICTURE X.
ð5 DBCS-CHARACTER-1 PICTURE XX.
ð5 DBCS-CHARACTER-2 PICTURE XX.
ð5 SHIFT-IN PICTURE X.

La instrucción INSPECT debe codificarse de la manera siguiente:


INSPECT SUBJECT-ITEM
REPLACING ALL DBCS-CHARACTER-1
BY DBCS-CHARACTER-2
AFTER INITIAL SHIFT-OUT.
Nota: El uso de la frase AFTER INITIAL SHIFT-OUT sirve para evitar el riesgo de
sustituir de forma accidental dos caracteres alfanuméricos consecutivos que
tengan los mismos valores EBCDIC como DBCS-CHARACTER-1 (en casos
dónde SUBJECT-ITEM datos DBCS/SBCS).

364 COBOL/400 Guía del usuario


También puede utilizar la instrucción INSPECT para determinar si un ítem de datos
contiene caracteres DBCS, de forma que se pueda producir el proceso apropiado.
Por ejemplo:
ð1 SUBJECT-FIELD PICTURE X(5ð).
ð1 TALLY-FIELD PICTURE 9(3) COMP.
ð1 SHIFTS VALUE "ðEðF".
ð5 SHIFT-OUT PICTURE X.
ð5 SHIFT-IN PICTURE X.

En la División de Procedimientos debe introducir lo siguiente:


MOVE ZERO TO TALLY-FIELD.
INSPECT SUBJECT-FIELD TALLYING TALLY-FIELD
FOR ALL SHIFT-OUT.
IF TALLY-FIELD IS GREATER THAN ZERO THEN
PERFORM DBCS-PROCESSING
ELSE
PERFORM A-N-K-PROCESSING.

Instrucción MOVE: Todos los caracteres DBCS se mueven como series de


caracteres alfanuméricos. El sistema no convierte ni examina los datos.

Puede mover los literales DBCS/SBCS a ítems de grupo e ítems alfanuméricos.

Si la longitud del campo receptor es distinta a la del campo emisor, COBOL realiza
una de las acciones siguientes:
Ÿ Trunca los caracteres del ítem emisor si es más largo que el ítem receptor.
Esta operación puede reducir la integridad de los datos.
Ÿ Llena el ítem emisor con espacios en blanco si es más corto que el ítem
receptor.

Para comprender mejor el efecto de los símbolos de edición en la cláusula


PICTURE del ítem de datos receptor, consulte la publicación COBOL/400
Reference.

Instrucción SET (Formato Nombre-Condición): Cuando se establece el nombre


de condición TRUE en esta instrucción, COBOL desplaza el literal de la cláusula
VALUE hasta el ítem de datos asociado. Se puede mover un literal con caracteres
DBCS.

Instrucción STRING: Puede utilizar la instrucción STRING para construir un ítem


de datos que contenga subcampos DBCS o DBCS/SBCS. Todos los datos de los
ítems de datos fuente o literales, incluyendo los caracteres de control de despla-
zamiento, la mitad de un carácter DBCS a la vez, se desplazan hasta el ítem de
datos receptor.

Instrucción UNSTRING: La instrucción UNSTRING trata los datos DBCS y


DBCS/SBCS de la misma forma que los datos alfanuméricos. La operación
UNSTRING se realiza en una mitad del carácter DBCS a la vez.

Los ítems de datos pueden contener caracteres alfanuméricos y DBCS dentro del
mismo campo.

Utilice la frase DELIMITED BY para localizar subcampos de doble byte y


alfanuméricos dentro de un campo de datos. Identifique los ítems de datos que

Apéndice F. Soporte del Juego de Caracteres de Idiomas Internacionales de Doble Byte 365
contengan caracteres de control de desplazamiento, y utilícelos como identifi-
cadores en la frase DELIMITED BY. Observe con detenimiento los ejemplos
siguientes para comprender mejor cómo se lleva a cabo lo expuesto anteriormente.
Utilice la variable POINTER para continuar examinando los subcampos del campo
emisor.

Después de que el sistema realice la operación UNSTRING, puede comprobar los


delimitadores almacenados mediante las frases DELIMITER IN con los caracteres
de control de desplazamiento para ver qué subcampos contienen caracteres DBCS
y cuáles contienen caracteres alfanuméricos.

El ejemplo siguiente muestra cómo puede establecer los campos para preparar la
operación no de serie en la serie de caracteres que contienen datos DBCS/SBCS:
ð1 SUBJECT-FIELD PICTURE X(4ð)
ð1 FILLER.
ð5 UNSTRING-TABLE OCCURS 4 TIMES.
1ð RECEIVER PICTURE X(4ð).
1ð DELIMTR PICTURE X.
1ð COUNTS PICTURE 99 COMP.
ð1 SHIFTS VALUE "ðEðF".
ð5 SHIFT-OUT PICTURE X.
ð5 SHIFT-IN PICTURE X.

Codifique la instrucción UNSTRING de la manera siguiente:


UNSTRING SUBJECT-FIELD DELIMITED BY SHIFT-OUT
OR SHIFT-IN
INTO RECEIVER (1) DELIMITER IN DELIMTR (1)
COUNT IN COUNTS (1)
INTO RECEIVER (2) DELIMITER IN DELIMTR (2)
COUNT IN COUNTS (2)
INTO RECEIVER (3) DELIMITER IN DELIMTR (3)
COUNT IN COUNTS (3)
INTO RECEIVER (4) DELIMITER IN DELIMTR (4)
COUNT IN COUNTS (4)
ON OVERFLOW PERFORM UNSTRING-OVERFLOW-MESSAGE.

Esta instrucción UNSTRING divide una serie de caracteres en partes alfanuméricas


y DBCS. Teniendo en cuenta que los datos en la serie de caracteres son válidos,
un valor del delimitador de desplazamiento a teclado ideográfico indica que el
campo receptor correspondiente contiene datos alfanuméricos, mientras que un
valor de desplazamiento a teclado estándar indica que el campo receptor corres-
pondiente tiene datos DBCS. Puede comprobar los ítems de datos COUNT para
determinar si cada campo receptor ha recibido todos los caracteres. La figura
siguiente es un ejemplo que muestra los resultados de la operación UNSTRING
descrita anteriormente:

366 COBOL/400 Guía del usuario


SUBJECT-FIELD = ABCðEK1K2K3ðFDðEK4K5K6ðF
RECEIVER (1) = ABC DELIMTR (1) = ðE COUNTS (1) = 3
RECEIVER (2) = K1K2K3 DELIMTR (2) = ðF COUNTS (2) = 6
RECEIVER (3) = D DELIMTR (3) = ðE COUNTS (3) = 1
RECEIVER (4) = K4K5K6 DELIMTR (4) = ðF COUNTS (4) = 6

SUBJECT-FIELD = ðEK1K2K3ðFABCðEK4ðF
RECEIVER (1) = (blanks) DELIMTR (1) = ðE COUNTS (1) = ð
RECEIVER (2) = K1K2K3 DELIMTR (2) = ðF COUNTS (2) = 6
RECEIVER (3) = ABC DELIMTR (3) = ðE COUNTS (3) = 3
RECEIVER (4) = K4 DELIMTR (4) = ðF COUNTS (4) = 2

Instrucciones de Bifurcación de Procedimientos


Puede utilizar un literal DBCS o DBCS/SBCS como el operando para la instrucción
STOP. Cuando lo haga, el sistema visualiza el literal y al mismo tiempo lo intro-
duce en la estación de trabajo para tareas interactivas. Para trabajos por lotes, el
sistema subrayada la ubicación habitual en la que aparecerían literales en la cola
de mensajes del operador del sistema. El sistema no edita ni comprueba los con-
tenidos del literal.

Manejo de Tablas–Instrucción SEARCH


Puede realizar una instrucción SEARCH de Formato 1 (búsqueda secuencial de
una tabla) en una tabla que contenga datos DBCS o DBCS/SBCS en medio
carácter DBCS a la vez.

También puede realizar la instrucción SEARCH de Formato 2 (SEARCH ALL) con


una tabla DBCS o DBCS/SBCS. Ordene la tabla de acuerdo con la secuencia de
clasificación escogida.
Nota: Los caracteres de control de desplazamiento en los datos DBCS y
DBCS/SBCS están incluidos dentro de la comparación.

SORT/MERGE
No se puede realizar una clasificación alfabética DBCS utilizando COBOL. Sin
embargo, puede utilizar ítems de datos DBCS o DBCS/SBCS como claves en una
instrucción SORT o MERGE. La operación de clasificación ordena los datos de
acuerdo con la secuencia de clasificación especificada en el párrafo SORT,
MERGE o SPECIAL NAMES. El sistema ordena cualquier carácter de control de
desplazamiento que se encuentre dentro de las claves DBCS y DBCS/SBCS.

Utilice la instrucción RELEASE para transferir registros que contengan caracteres


DBCS desde un área de entrada/salida hasta la fase inicial de una operación de
clasificación. El sistema realiza la frase FROM con la instrucción RELEASE de la
misma manera que realiza la frase FROM con la instrucción WRITE. (Consulte el
apartado “Instrucción WRITE” en la página 364).

También es posible utilizar la instrucción RETURN para transferir registros que


contengan caracteres DBCS desde la fase final de una operación de fusión o clasi-
ficación hasta un área de entrada/salida. El sistema realiza la frase INTO con la
instrucción RETURN de la misma manera que realiza la frase INTO con la instruc-
ción READ. (Consulte el apartado “Instrucción READ” en la página 363).

Apéndice F. Soporte del Juego de Caracteres de Idiomas Internacionales de Doble Byte 367
Instrucciones Dirigidas al Compilador

Instrucciones COPY
Puede utilizar la instrucción COPY para copiar el texto fuente que contiene carac-
teres DBCS en un programa COBOL. Cuando lo haga, asegúrese de que especi-
fica el nombre de miembro, nombre de archivo y el nombre de la biblioteca
utilizando datos alfanuméricos y de que los especifica de acuerdo con las normas
establecidas en la COBOL/400 Reference

Utilice la instrucción COPY de Formato 2 para copiar campos definidos en las


especificaciones de descripción de datos (DDS). Los ítems de datos DBCS y
DBCS/SBCS (el valor en la columna 35 del formato DDS es O) se copian en un
programa COBOL en el formato PICTURE X(n). El listado del compilador no indica
que estos campos contengan caracteres DBCS, a no ser que un campo sea un
campo clave. Si es así, el sistema imprime una O en la tabla de comentarios para
las claves.

Los ítems de datos DBCS gráficos se copian a un programa COBOL en formato


PICTURE X(N). El listado del compilador indica que estos campos contienen datos
gráficos. Consulte el apartado “Campos Gráficos DBCS” en la página 139 si
desea consultar la descripción de los tipos de datos DBCS gráficos.

Puede colocar los caracteres DBCS en los comentarios del texto que se copian de
las DDS si el campo de las DDS asociado tiene comentarios.

Si especifica la frase REPLACING de la instrucción COPY, tenga en cuenta que:


Ÿ El pseudotexto puede contener cualquier combinación de caracteres DBCS y
alfanuméricos.
Ÿ Puede utilizar literales con contenido DBCS o DBCS/SBCS.
Ÿ Los identificadores pueden referirse a un ítem de datos que contiene carac-
teres DBCS.

Instrucción TITLE
Puede utilizar literales DBCS/SBCS como el literal de la instrucción TITLE.

Comunicaciones entre programas


Puede especificar entradas para los ítems de datos DBCS o DBCS/SBCS en la
Sección de Enlace de la División de Datos.

Se pueden pasar caracteres DBCS desde un programa a otro especificando los


ítems de datos de la frase USING. No puede utilizar caracteres DBCS en la ins-
trucción CALL para el nombre de programa del programa llamado.

No puede utilizar caracteres DBCS en la instrucción CANCEL porque especifican


nombres de programas.

368 COBOL/400 Guía del usuario


Distintivo FIPS
Las mejoras para el lenguaje COBOL que permiten utilizar caracteres DBCS se
distinguen (identifican) mediante el distintivo FIPS (Federal Information Processing
Standard) proporcionado por el compilador como ampliaciones de IBM.

Listados de Programa COBOL


Los caracteres DBCS pueden aparecer en listados que se originan desde archivos
fuente que pueden contener DBCS y que se producen mediante sistemas que
también admiten este tipos de caracteres.

Los caracteres DBCS que aparecen en un listado de programa tienen como origen
un archivo fuente, un texto fuente generado por una instrucción COPY o un
mensaje del compilador COBOL.

Un listado que contenga caracteres DBCS debe disponer de salida a un archivo de


impresora que pueda procesar datos DBCS. Los listados que contienen caracteres
DBCS se manejan correctamente si una de las siguientes condiciones es
verdadera:
Ÿ El archivo de impresora que especifica el parámetro PRTFILE del mandato
CRTCBLPGM se define con los atributos necesarios utilizando el mandato
CRTPRTF o CHGPRTF.
Ÿ El archivo fuente puede contener datos DBCS utilizando el parámetro IGCDTA
del mandato CRTSRCPF. En este caso, el programa altera temporalmente el
valor existente del atributo para el archivo de impresora de salida.
Ÿ El usuario ha especificado el atributo necesario para la impresora de salida uti-
lizando el parámetro IGCDTA del mandato OVRPRT antes de compilar el pro-
grama.
Nota: El parámetro IGCDTA sólo está disponible en sistemas DBCS, y no puede
definirse o visualizarse en sistemas que no sean DBCS. El usuario puede,
no obstante, crear objetos con atributos DBCS en un sistema que no sea
DBCS copiándolos desde el sistema DBCS. Compruebe si se producen
posibles incompatibilidades si realiza esto.

El compilador puede utilizar caracteres del programa fuente como parámetros de


sustitución en mensajes del comprobador de sintaxis y del compilador. El sistema
no comprueba ni edita los parámetros de sustitución. Si no se especifican correc-
tamente los caracteres DBCS, el sistema puede imprimir o visualizar defectuo-
samente partes de los mensajes.

Fin de Ampliación de IBM

Apéndice F. Soporte del Juego de Caracteres de Idiomas Internacionales de Doble Byte 369
370 COBOL/400 Guía del usuario
Apéndice G. Ejemplos de Procesos de Archivos AS/400
Este apéndice contiene programas ejemplo que ilustran las técnicas básicas de
programación asociadas con cada tipo de organización de archivos AS/400. Estos
ejemplos se han concebido para que sirvan únicamente como pautas de planifi-
cación, así como para ilustrar las sentencias de entrada/salida que se necesitan
para determinados métodos de acceso. Se utilizan de forma casual otras carac-
terísticas COBOL (como por ejemplo la instrucción PERFORM). Los programas
que se indican son:
Ÿ Creación de archivos secuenciales
Ÿ Actualización y ampliación de archivos secuenciales
Ÿ Creación de archivos indexados
Ÿ Actualización de archivos indexados
Ÿ Creación de archivos relativos
Ÿ Actualización de archivos relativos
Ÿ Recuperación de archivos relativos.

Creación de Archivos Secuenciales


Este programa crea un archivo secuencial con los registros de salarios de
empleados. Los registros de entrada se ordenan en orden ascendente por número
de empleado. El archivo de salida tiene el mismo orden. (Un archivo de salida
es un archivo que se ha abierto en modalidad de salida o en modalidad ampliada).

 Copyright IBM Corp. 1994 371


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ðððð1ð IDENTIFICATION DIVISION.
2 ðððð2ð PROGRAM-ID. CRTSEQ.
ðððð3ð
3 ðððð4ð ENVIRONMENT DIVISION.
4 ðððð5ð CONFIGURATION SECTION.
5 ðððð6ð SOURCE-COMPUTER. IBM-AS4ðð. ð5/24/94
6 ðððð7ð OBJECT-COMPUTER. IBM-AS4ðð. ð5/24/94
7 ðððð8ð SPECIAL-NAMES. CONSOLE IS TYPEWRITER.
8 ðððð9ð INPUT-OUTPUT SECTION.
9 ððð1ðð FILE-CONTROL.
1ð ððð11ð SELECT INPUT-FILE ASSIGN TO DISK-FILEA
11 ððð12ð FILE STATUS IS INPUT-FILE-STATUS.
12 ððð13ð SELECT OUTPUT-FILE ASSIGN TO DISK-FILEB
13 ððð14ð FILE STATUS IS OUTPUT-FILE-STATUS.
14 ððð15ð DATA DIVISION.
15 ððð16ð FILE SECTION.
16 ððð17ð FD INPUT-FILE LABEL RECORDS STANDARD.
17 ððð18ð ð1 INPUT-RECORD.
18 ððð19ð ð5 INPUT-EMPLOYEE-NUMBER PICTURE 9(6).
19 ððð2ðð ð5 INPUT-EMPLOYEE-NAME PICTURE X(28).
2ð ððð21ð ð5 INPUT-EMPLOYEE-CODE PICTURE 9.
21 ððð22ð ð5 INPUT-EMPLOYEE-SALARY PICTURE 9(6)V99.
22 ððð23ð FD OUTPUT-FILE LABEL RECORDS STANDARD.
23 ððð24ð ð1 OUTPUT-RECORD.
24 ððð25ð ð5 OUTPUT-EMPLOYEE-NUMBER PICTURE 9(6).
25 ððð26ð ð5 OUTPUT-EMPLOYEE-NAME PICTURE X(28).
26 ððð27ð ð5 OUTPUT-EMPLOYEE-CODE PICTURE 9.
27 ððð28ð ð5 OUTPUT-EMPLOYEE-SALARY PICTURE 9(6)V99.
28 ððð29ð WORKING-STORAGE SECTION.
29 ððð3ðð 77 INPUT-FILE-STATUS PICTURE XX.
3ð ððð31ð 77 OUTPUT-FILE-STATUS PICTURE XX.
31 ððð32ð ð1 INPUTEND PICTURE X VALUE SPACE.
32 ððð33ð 88 THE-END-OF-INPUT VALUE "E".
33 ððð34ð ð1 DISP-RECORD.
34 ððð35ð ð5 OP-NAME PICTURE X(7).
35 ððð36ð ð5 FILLER PICTURE XX VALUE SPACE.
36 ððð37ð ð5 FILE-NAME PICTURE X(11).
37 ððð38ð ð5 FILLER PICTURE XX VALUE SPACE.
38 ððð39ð ð5 FILLER PICTURE X(14)
39 ððð4ðð VALUE "FILE STATUS IS".
4ð ððð41ð ð5 FILLER PICTURE XX VALUE SPACE.
41 ððð42ð ð5 SK PICTURE XX.
42 ððð43ð PROCEDURE DIVISION.
ððð44ð DECLARATIVES.
ððð45ð I-O-ERROR SECTION.
ððð46ð USE AFTER STANDARD ERROR PROCEDURE ON INPUT-FILE,
ððð47ð OUTPUT-FILE.
ððð48ð I-O-ERROR-PARA.
ððð49ð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ððð5ðð\ PARA ASEGURAR CONTROL SE DEVUELVEN DECLARATIVAS FICTICIAS\
ððð51ð\ A ESTE PROGRAMA CUANDO SE PRODUCE ERROR DURANTE PROCESO \
ððð52ð\ ARCHIVO. MANEJO ERRORES DESPUÉS DE CADA INSTRUCCIÓN E/S. \
ððð53ð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ððð54ð END DECLARATIVES.
ððð55ð MAIN-PROGRAM SECTION.
ððð56ð OPEN-FILES.
43 ððð57ð OPEN INPUT INPUT-FILE
ððð58ð OUTPUT OUTPUT-FILE.
44 ððð59ð IF INPUT-FILE-STATUS NOT = "ðð"
45 ððð6ðð MOVE "OPEN" TO OP-NAME
46 ððð61ð MOVE "INPUT-FILE" TO FILE-NAME
47 ððð62ð MOVE INPUT-FILE-STATUS TO SK
48 ððð63ð PERFORM ERROR-OUT-1 THROUGH ERROR-OUT-2.
49 ððð64ð IF OUTPUT-FILE-STATUS NOT = "ðð"
5ð ððð65ð MOVE "OPEN" TO OP-NAME
51 ððð66ð MOVE "OUTPUT-FILE" TO FILE-NAME
52 ððð67ð MOVE OUTPUT-FILE-STATUS TO SK
53 ððð68ð PERFORM ERROR-OUT-1 THROUGH ERROR-OUT-2.
54 ððð69ð PERFORM BUILD-FILE UNTIL THE-END-OF-INPUT.
ððð7ðð CLOSE-FILES.
55 ððð71ð CLOSE INPUT-FILE
ððð72ð OUTPUT-FILE.
56 ððð73ð STOP RUN.
ððð74ð BUILD-FILE.

Figura 112 (Parte 1 de 2). Ejemplo de un Archivo Secuencial de Registros del Salario de un Empleado

372 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
57 ððð75ð READ INPUT-FILE INTO OUTPUT-RECORD
58 ððð76ð AT END SET THE-END-OF-INPUT TO TRUE.
59 ððð77ð IF INPUT-FILE-STATUS NOT = "ðð"
6ð ððð78ð MOVE "WRITE" TO OP-NAME
61 ððð79ð MOVE "OUTPUT-FILE" TO FILE-NAME
62 ððð8ðð MOVE OUTPUT-FILE-STATUS TO SK
63 ððð81ð PERFORM ERROR-OUT-1 THROUGH ERROR-OUT-2
64 ððð82ð GO TO CLOSE-FILES.
65 ððð83ð WRITE OUTPUT-RECORD.
66 ððð84ð IF OUTPUT-FILE-STATUS NOT = "ðð"
67 ððð85ð MOVE "WRITE" TO OP-NAME
68 ððð86ð MOVE "OUTPUT-FILE" TO FILE-NAME
69 ððð87ð MOVE OUTPUT-FILE-STATUS TO SK
7ð ððð88ð PERFORM ERROR-OUT-1 THROUGH ERROR-OUT-2
71 ððð89ð GO TO CLOSE-FILES.
ððð9ðð ERROR-OUT-1.
72 ððð91ð DISPLAY "FILE PROCESSING ERROR" UPON TYPEWRITER.
73 ððð92ð DISPLAY DISP-RECORD UPON TYPEWRITER.
74 ððð93ð CLOSE INPUT-FILE
ððð94ð OUTPUT-FILE.
75 ððð95ð STOP RUN.
ððð96ð ERROR-OUT-2.
ððð97ð EXIT.
\ \ \ \ \ F I N D E F U E N T E \ \ \ \ \
5763CB1 V3RðM5 Mensajes COBOL AS/4ðð
INST
\ 16 IDMEN: LBLð65ð GRAVEDAD: ðð NUMSEC: ððð17ð
Mensaje . . . . : Bloqueo/Desbloqueo para archivo 'INPUT-FILE'
se realizará por medio del código generado por compilador.
\ 22 IDMEN: LBLð65ð GRAVEDAD: ðð NUMSEC: ððð23ð
Mensaje . . . . : Bloqueo/Desbloqueo para archivo 'OUTPUT-FILE'
se realizará por medio del código generado por compilador.
\ 43 IDMEN: LBLð335 GRAVEDAD: ðð NUMSEC: ððð54ð
Mensaje . . . . : Párrafo vacío o sección precede el párrafo
o sección 'END DECLARATIVES'

\ \ \ \ \ F I N D E M E N S A J E S \ \ \ \ \
Resumen de mensajes
Total Info(ð-4) Aviso(5-19) Error(2ð-29) Grave(3ð-39) Terminal(4ð-99)
3 3 ð ð ð ð
Registros fuente leídos. . . . . . . : 97
Registros copia leídos . . . . . . . : ð
Miembros copia procesados . . . . . : ð
Errores secuencia . . . . . . . . . : ð
Mensaje gravedad más alta enviado . : ð
LBLð9ð1 ðð Programa CRTSEQ creado en biblioteca XMPLIB.

\ \ \ \ \ F I N D E C O M P I L A C I Ó N \ \ \ \ \

Figura 112 (Parte 2 de 2). Ejemplo de un Archivo Secuencial de Registros del Salario de un Empleado

Actualización y Ampliación de Archivos Secuenciales


Este programa actualiza y amplía el archivo que el programa CRTSEQ ha creado.
Se leen el INPUT-FILE y el MASTER-FILE. Cuando se encuentra una coincidencia
entre el INPUT-EMPLOYEE-NUMBER y el MST-EMPLOYEE-NUMBER, el registro de entrada
sustituye al registro original. Cuando se procesa MASTER-FILE, se añaden nuevos
registros de empleados al final del archivo.

Apéndice G. Ejemplos de Proceso de Archivos 373


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ðððð1ð IDENTIFICATION DIVISION.
2 ðððð2ð PROGRAM-ID. UPDTSEQ.
3 ðððð3ð ENVIRONMENT DIVISION.
4 ðððð4ð CONFIGURATION SECTION.
5 ðððð5ð SOURCE-COMPUTER. IBM-AS4ðð. ð5/24/94
6 ðððð6ð OBJECT-COMPUTER. IBM-AS4ðð. ð5/24/94
7 ðððð7ð INPUT-OUTPUT SECTION.
8 ðððð8ð FILE-CONTROL.
9 ðððð9ð SELECT INPUT-FILE ASSIGN TO DISK-FILES
1ð ððð1ðð FILE STATUS IS INPUT-FILE-STATUS. .A/
11 ððð11ð SELECT MASTER-FILE ASSIGN TO DISK-MSTFILEB
12 ððð12ð FILE STATUS IS MASTER-FILE-STATUS. .B/
ððð13ð
13 ððð14ð DATA DIVISION.
14 ððð15ð FILE SECTION.
15 ððð16ð FD INPUT-FILE LABEL RECORDS STANDARD.
16 ððð17ð ð1 INPUT-RECORD.
17 ððð18ð ð5 INPUT-EMPLOYEE-NUMBER PICTURE 9(6).
18 ððð19ð ð5 INPUT-EMPLOYEE-NAME PICTURE X(28).
19 ððð2ðð ð5 INPUT-EMPLOYEE-CODE PICTURE 9.
2ð ððð21ð ð5 INPUT-EMPLOYEE-SALARY PICTURE 9(6)V99.
21 ððð22ð FD MASTER-FILE LABEL RECORDS STANDARD.
22 ððð23ð ð1 MASTER-RECORD.
23 ððð24ð ð5 MST-EMPLOYEE-NUMBER PICTURE 9(6).
24 ððð25ð ð5 MST-EMPLOYEE-NAME PICTURE X(28).
25 ððð26ð ð5 MST-EMPLOYEE-CODE PICTURE 9.
26 ððð27ð ð5 MST-EMPLOYEE-SALARY PICTURE 9(6)V99.
27 ððð28ð WORKING-STORAGE SECTION.
28 ððð29ð 77 INPUT-FILE-STATUS PICTURE XX.
29 ððð3ðð 77 MASTER-FILE-STATUS PICTURE XX.
3ð ððð31ð ð1 INPUTEND PICTURE X VALUE SPACE.
31 ððð32ð 88 THE-END-OF-INPUT VALUE "E".
32 ððð33ð ð1 MASTEREND PICTURE X VALUE SPACE.
33 ððð34ð 88 THE-END-OF-MASTER VALUE "E".
34 ððð35ð ð1 ERROR-INFO.
35 ððð36ð ð5 OP-NAME PICTURE X(12).
36 ððð37ð ð5 FILLER PICTURE XX VALUE SPACE.
37 ððð38ð ð5 FILE-NAME PICTURE X(11).
38 ððð39ð ð5 FILLER PICTURE XX VALUE SPACE.
39 ððð4ðð ð5 FILLER PICTURE X(14)
4ð ððð41ð VALUE "FILE STATUS IS".
41 ððð42ð ð5 FILLER PICTURE XX VALUE SPACE.
42 ððð43ð ð5 SK PICTURE XX.
43 ððð44ð PROCEDURE DIVISION.
ððð45ð DECLARATIVES.
ððð46ð INPUT-FILE-ERROR SECTION.
ððð47ð USE AFTER STANDARD ERROR PROCEDURE ON INPUT-FILE. .C/
ððð48ð INPUT-FILE-ERROR-PARA.
44 ððð49ð MOVE INPUT-FILE-STATUS TO SK.
45 ððð5ðð MOVE "INPUT-FILE" TO FILE-NAME.
46 ððð51ð DISPLAY "FILE PROCESSING ERROR".
47 ððð52ð DISPLAY ERROR-INFO.
48 ððð53ð DISPLAY "PROCESSING TERMINATED DUE TO I-O ERROR".
49 ððð54ð STOP RUN.
ððð55ð I-O-FILE-ERROR SECTION.
ððð56ð USE AFTER STANDARD ERROR PROCEDURE ON MASTER-FILE. .D/
ððð57ð MASTER-FILE-ERROR-PARA.
5ð ððð58ð MOVE MASTER-FILE-STATUS TO SK.
51 ððð59ð MOVE "MASTER-FILE" TO FILE-NAME.
52 ððð6ðð DISPLAY "FILE PROCESSING ERROR".
53 ððð61ð DISPLAY ERROR-INFO.
54 ððð62ð DISPLAY "PROCESSING TERMINATED DUE TO I-O ERROR".
55 ððð63ð STOP RUN.
ððð64ð END DECLARATIVES.
ððð65ð MAIN-PROGRAM SECTION.
ððð66ð OPEN-FILES.
56 ððð67ð MOVE "OPEN" TO OP-NAME.
57 ððð68ð OPEN INPUT INPUT-FILE
ððð69ð I-O MASTER-FILE.
ððð7ðð PROCESSING-LOGIC.
58 ððð71ð PERFORM READ-INPUT-FILE.
59 ððð72ð PERFORM READ-MASTER-FILE.
6ð ððð73ð PERFORM PROCESS-FILES UNTIL THE-END-OF-INPUT.

Figura 113 (Parte 1 de 2). Ejemplo de un Programa de Actualización de Archivo Secuencial

374 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
ððð74ð CLOSE-FILES.
61 ððð75ð MOVE "CLOSE" TO OP-NAME.
62 ððð76ð CLOSE MASTER-FILE
ððð77ð INPUT-FILE.
63 ððð78ð STOP RUN.
ððð79ð READ-INPUT-FILE.
64 ððð8ðð MOVE "READ" TO OP-NAME.
65 ððð81ð READ INPUT-FILE
66 ððð82ð AT END SET THE-END-OF-INPUT TO TRUE.
ððð83ð READ-MASTER-FILE.
67 ððð84ð MOVE "READ" TO OP-NAME.
68 ððð85ð READ MASTER-FILE
ððð86ð AT END
69 ððð87ð SET THE-END-OF-MASTER TO TRUE
7ð ððð88ð MOVE "AT END CLOSE" TO OP-NAME
71 ððð89ð CLOSE MASTER-FILE
72 ððð9ðð MOVE "OPEN EXTEND" TO OP-NAME
73 ððð91ð OPEN EXTEND MASTER-FILE.
ððð92ð PROCESS-FILES.
74 ððð93ð IF THE-END-OF-MASTER
75 ððð94ð WRITE MASTER-RECORD FROM INPUT-RECORD
76 ððð95ð PERFORM READ-INPUT-FILE
ððð96ð ELSE
77 ððð97ð IF MST-EMPLOYEE-NUMBER LESS THAN INPUT-EMPLOYEE-NUMBER
78 ððð98ð PERFORM READ-MASTER-FILE
ððð99ð ELSE
79 ðð1ððð IF MST-EMPLOYEE-NUMBER = INPUT-EMPLOYEE-NUMBER
8ð ðð1ð1ð MOVE "REWRITE" TO OP-NAME
81 ðð1ð2ð REWRITE MASTER-RECORD FROM INPUT-RECORD
82 ðð1ð3ð PERFORM READ-INPUT-FILE
83 ðð1ð4ð PERFORM READ-MASTER-FILE
ðð1ð5ð ELSE
84 ðð1ð6ð DISPLAY "ERROR RECORD -> ", INPUT-EMPLOYEE-NUMBER
85 ðð1ð7ð PERFORM READ-INPUT-FILE.
\ \ \ \ \ F I N D E F U E N T E \ \ \ \ \
5763CB1 V3RðM5 Mensajes COBOL AS/4ðð
INST
\ 15 IDMEN: LBLð65ð GRAVEDAD: ðð NUMSEC: ððð16ð
Mensaje . . . . : Bloqueo/Desbloqueo para archivo 'INPUT-FILE'
se realizará por medio del código generado por compilador.

\ \ \ \ \ F I N D E M E N S A J E S \ \ \ \ \
Resumen de mensajes
Total Info(ð-4) Aviso(5-19) Error(2ð-29) Grave(3ð-39) Terminal(4ð-99)
1 1 ð ð ð ð
Registros fuente leídos. . . . . . . : 1ð7
Registros copia leídos . . . . . . . : ð
Miembros copia procesados . . . . . : ð
Errores secuencia . . . . . . . . . : ð
Mensaje gravedad más alta enviado . : ð
LBLð9ð1 ðð Programa UPDTSEQ creado en biblioteca XMPLIB.

\ \ \ \ \ F I N D E C O M P I L A C I Ó N \ \ \ \ \

Figura 113 (Parte 2 de 2). Ejemplo de un Programa de Actualización de Archivo Secuencial

El ejemplo de la Figura 113 en la página 374 incluye:


.A/ Una cláusula FILE STATUS para que el programa registre el estado de las
solicitudes de E/S más recientes relacionadas con INPUT-FILE.
.B/ Una cláusula FILE STATUS para que el programa registra el estado de las
solicitudes de E/S más recientes relacionadas con MASTER-FILE.
.C/ Un procedimiento USE que se ejecuta cuando se produce un error de E/S
durante el proceso del INPUT-FILE.
.D/ Un procedimiento USE que se ejecuta cuando se produce un error de E/S
durante el proceso de MASTER-FILE.

Apéndice G. Ejemplos de Proceso de Archivos 375


Los valores de estado del archivo y los procedimientos USE juegan un papel muy
importante en el manejo de errores. Para obtener más información, consulte el
Capítulo 6, “Manejo de Errores y Excepciones COBOL/400”.

Creación de Archivos Indexados


Un archivo indexado es un archivo que registra la clave y la posición de cada
registro en una parte separada del archivo llamada índice.

Este programa crea un archivo indexado de registros de resumen para depósitos


de banco. La clave dentro de cada registro del archivo indexado es INDEX-KEY
(número de cuenta de depósito); los registros de entrada se ordenan en secuencia
ascendente según esta clave. Los registros se leen del archivo de entrada y se
transfieren al área de registros del archivo indexado. Entonces se graba el registro
del archivo indexado.

376 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ðððð1ð IDENTIFICATION DIVISION.
2 ðððð2ð PROGRAM-ID. CRTIND.
ðððð3ð
3 ðððð4ð ENVIRONMENT DIVISION.
4 ðððð5ð CONFIGURATION SECTION.
5 ðððð6ð SOURCE-COMPUTER. IBM-AS4ðð. ð5/24/94
6 ðððð7ð OBJECT-COMPUTER. IBM-AS4ðð. ð5/24/94
7 ðððð8ð INPUT-OUTPUT SECTION.
8 ðððð9ð FILE-CONTROL.
9 ððð1ðð SELECT INDEXED-FILE ASSIGN TO DISK-INDEXFILE
1ð ððð11ð ORGANIZATION IS INDEXED
11 ððð12ð ACCESS IS SEQUENTIAL
12 ððð13ð RECORD KEY IS INDEX-KEY
13 ððð14ð FILE STATUS IS INDEXED-FILE-STATUS.
14 ððð15ð SELECT INPUT-FILE ASSIGN TO DISK-FILEG
15 ððð16ð FILE STATUS IS INPUT-FILE-STATUS.
16 ððð17ð DATA DIVISION.
17 ððð18ð FILE SECTION.
18 ððð19ð FD INDEXED-FILE LABEL RECORDS STANDARD.
19 ððð2ðð ð1 INDEX-RECORD.
2ð ððð21ð ð5 INDEX-KEY PICTURE X(1ð).
21 ððð22ð ð5 INDEX-FLD1 PICTURE X(1ð).
22 ððð23ð ð5 INDEX-NAME PICTURE X(2ð).
23 ððð24ð ð5 INDEX-BAL PICTURE S9(5)V99.
24 ððð25ð FD INPUT-FILE LABEL RECORDS STANDARD.
25 ððð26ð ð1 INPUT-RECORD.
26 ððð27ð ð5 INPUT-KEY PICTURE X(1ð).
27 ððð28ð ð5 INPUT-NAME PICTURE X(2ð).
28 ððð29ð ð5 INPUT-BAL PICTURE S9(5)V99.
29 ððð3ðð WORKING-STORAGE SECTION.
3ð ððð31ð 77 INDEXED-FILE-STATUS PICTURE XX.
31 ððð32ð 77 INPUT-FILE-STATUS PICTURE XX.
32 ððð33ð 77 OP-NAME PICTURE X(7).
33 ððð34ð ð1 INPUTEND PICTURE X VALUE SPACES.
34 ððð35ð 88 THE-END-OF-INPUT VALUE "E".
35 ððð36ð ð1 ERRORFLAG PICTURE X VALUE SPACES.
36 ððð37ð 88 ERROR-OCCURRED VALUE "1".
37 ððð38ð PROCEDURE DIVISION.
ððð39ð DECLARATIVES.
ððð4ðð INPUT-ERROR SECTION.
ððð41ð USE AFTER STANDARD ERROR PROCEDURE ON INPUT.
ððð42ð INPUT-ERROR-PARA.
38 ððð43ð DISPLAY "UNEXPECTED ERROR ON ", OP-NAME, " FOR INPUT-FILE ".
39 ððð44ð DISPLAY "FILE STATUS IS ", INPUT-FILE-STATUS.
4ð ððð45ð SET ERROR-OCCURRED TO TRUE.
ððð46ð OUTPUT-ERROR SECTION.
ððð47ð USE AFTER STANDARD ERROR PROCEDURE ON OUTPUT.
ððð48ð OUTPUT-ERROR-PARA.
41 ððð49ð DISPLAY "UNEXPECTED ERROR ON ", OP-NAME, " FOR INDEXED-FILE ".
42 ððð5ðð DISPLAY "FILE STATUS IS ", INDEXED-FILE-STATUS.
43 ððð51ð SET ERROR-OCCURRED TO TRUE.
ððð52ð END DECLARATIVES.
ððð53ð MAIN-PROCESSING SECTION.
ððð54ð MAIN-PROCEDURE.
44 ððð55ð MOVE "OPEN" TO OP-NAME.
45 ððð56ð OPEN INPUT INPUT-FILE
ððð57ð OUTPUT INDEXED-FILE.
46 ððð58ð IF ERROR-OCCURRED GO TO ERROR-TERMINATION.
48 ððð59ð PERFORM READ-INPUT-FILE.
49 ððð6ðð PERFORM LOAD-INDEXED-FILE THRU READ-INPUT-FILE
ððð61ð UNTIL THE-END-OF-INPUT.

Figura 114 (Parte 1 de 2). Ejemplo de un Programa de Archivo Indexado

Apéndice G. Ejemplos de Proceso de Archivos 377


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
5ð ððð62ð MOVE "CLOSE" TO OP-NAME.
51 ððð63ð CLOSE INPUT-FILE
ððð64ð INDEXED-FILE.
52 ððð65ð IF ERROR-OCCURRED GO TO ERROR-TERMINATION.
54 ððð66ð STOP RUN.
ððð67ð LOAD-INDEXED-FILE.
55 ððð68ð MOVE INPUT-KEY TO INDEX-KEY.
56 ððð69ð MOVE INPUT-NAME TO INDEX-NAME.
57 ððð7ðð MOVE INPUT-BAL TO INDEX-BAL.
58 ððð71ð MOVE SPACES TO INDEX-FLD1.
59 ððð72ð MOVE "WRITE" TO OP-NAME.
6ð ððð73ð WRITE INDEX-RECORD
ððð74ð INVALID KEY
61 ððð75ð DISPLAY "WRITE FAILED FOR KEY ", INDEX-KEY.
62 ððð76ð IF ERROR-OCCURRED GO TO ERROR-TERMINATION.
ððð77ð READ-INPUT-FILE.
64 ððð78ð MOVE "READ" TO OP-NAME.
65 ððð79ð READ INPUT-FILE
66 ððð8ðð AT END SET THE-END-OF-INPUT TO TRUE.
67 ððð81ð IF ERROR-OCCURRED GO TO ERROR-TERMINATION.
ððð82ð ERROR-TERMINATION.
69 ððð83ð DISPLAY "I-O ERROR OCCURRED - PROCESS TERMINATING".
7ð ððð84ð STOP RUN.
\ \ \ \ \ F I N D E F U E N T E \ \ \ \ \
5763CB1 V3RðM5 Mensajes COBOL AS/4ðð
INST
\ 18 IDMEN: LBLð65ð GRAVEDAD: ðð NUMSEC: ððð19ð
Mensaje . . . . : Bloqueo/Desbloqueo para archivo 'INDEXED-FILE'
se realizará por medio del código generado por compilador.
\ 24 IDMEN: LBLð65ð GRAVEDAD: ðð NUMSEC: ððð25ð
Mensaje . . . . : Bloqueo/Desbloqueo para archivo 'INPUT-FILE'
se realizará por medio del código generado por compilador.

\ \ \ \ \ F I N D E M E N S A J E S \ \ \ \ \
Resumen de mensajes
Total Info(ð-4) Aviso(5-19) Error(2ð-29) Grave(3ð-39) Terminal(4ð-99)
2 2 ð ð ð ð
Registros fuente leídos. . . . . . . : 84
Registros copia leídos . . . . . . . : ð
Miembros copia procesados . . . . . : ð
Errores secuencia . . . . . . . . . : ð
Mensaje gravedad más alta enviado . : ð
LBLð9ð1 ðð Programa CRTIND creado en biblioteca XMPLIB.

\ \ \ \ \ F I N D E C O M P I L A C I Ó N \ \ \ \ \

Figura 114 (Parte 2 de 2). Ejemplo de un Programa de Archivo Indexado

Actualización de Archivos Indexados


Este programa actualiza, mediante el acceso dinámico, el archivo indexado creado
en el programa CRTIND.

Los registros de entrada tienen la clave para el registro, el número de depósito y la


cantidad de la transacción.

Cuando el programa lee el registro de entrada, comprueba:


Ÿ Si es un registro de transacciones (en cuyo caso se llenan todos los campos
del registro)
Ÿ Si es un registro que solicita recuperación secuencial de una clase genérica
específica (en cuyo caso sólo el campo INPUT-GEN-FLD del registro de entrada
contendrá datos).

El acceso al azar se utiliza para actualizar e imprimir los registros de las transac-
ciones. El acceso secuencial se utiliza para la recuperación e impresión de todos
los registros dentro de una clase genérica.

378 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ðððð1ð IDENTIFICATION DIVISION.
2 ðððð2ð PROGRAM-ID. UPDTIND.
ðððð3ð
3 ðððð4ð ENVIRONMENT DIVISION.
4 ðððð5ð CONFIGURATION SECTION.
5 ðððð6ð SOURCE-COMPUTER. IBM-AS4ðð. ð5/24/94
6 ðððð7ð OBJECT-COMPUTER. IBM-AS4ðð. ð5/24/94
7 ðððð8ð INPUT-OUTPUT SECTION.
8 ðððð9ð FILE-CONTROL.
9 ððð1ðð SELECT MASTER-FILE ASSIGN TO DISK-INDXFILE
1ð ððð11ð ORGANIZATION IS INDEXED
11 ððð12ð ACCESS IS DYNAMIC
12 ððð13ð RECORD KEY IS MASTER-KEY
13 ððð14ð FILE STATUS IS MASTER-FILE-STATUS.
14 ððð15ð SELECT INPUT-FILE ASSIGN TO DISK-FILEH
15 ððð16ð FILE STATUS IS INPUT-FILE-STATUS.
16 ððð17ð SELECT PRINT-FILE ASSIGN TO PRINTER-QSYSPRT
17 ððð18ð FILE STATUS IS PRINT-FILE-STATUS.
18 ððð19ð DATA DIVISION.
19 ððð2ðð FILE SECTION.
2ð ððð21ð FD MASTER-FILE LABEL RECORDS STANDARD.
21 ððð22ð ð1 MASTER-RECORD.
22 ððð23ð ð5 MASTER-KEY.
23 ððð24ð 1ð MASTER-GEN-FLD PICTURE X(5).
24 ððð25ð 1ð MASTER-DET-FLD PICTURE X(5).
25 ððð26ð ð5 MASTER-FLD1 PICTURE X(1ð).
26 ððð27ð ð5 MASTER-NAME PICTURE X(2ð).
27 ððð28ð ð5 MASTER-BAL PICTURE S9(5)V99.
28 ððð29ð FD INPUT-FILE LABEL RECORDS STANDARD.
29 ððð3ðð ð1 INPUT-REC.
3ð ððð31ð ð5 INPUT-KEY.
31 ððð32ð 1ð INPUT-GEN-FLD PICTURE X(5).
32 ððð33ð 1ð INPUT-DET-FLD PICTURE X(5).
33 ððð34ð ð5 INPUT-NAME PICTURE X(2ð).
34 ððð35ð ð5 INPUT-AMT PICTURE S9(5)V99.
35 ððð36ð FD PRINT-FILE LABEL RECORDS OMITTED
36 ððð37ð LINAGE 12 LINES FOOTING AT 9.
37 ððð38ð ð1 PRINT-RECORD-1.
38 ððð39ð ð5 PRINT-KEY PICTURE X(1ð).
39 ððð4ðð ð5 FILLER PICTURE X(5).
4ð ððð41ð ð5 PRINT-NAME PICTURE X(2ð).
41 ððð42ð ð5 FILLER PICTURE X(5).
42 ððð43ð ð5 PRINT-BAL PICTURE $$$,$$9.99-.
43 ððð44ð ð5 FILLER PICTURE X(7).
44 ððð45ð ð5 PRINT-AMT PICTURE $$$,$$9.99-.
45 ððð46ð ð5 FILLER PICTURE X(5).
46 ððð47ð ð5 PRINT-NEW-BAL PICTURE $$$,$$9.99-.
47 ððð48ð ð1 PRINT-RECORD-2 PICTURE X(89).
48 ððð49ð WORKING-STORAGE SECTION.
49 ððð5ðð 77 MASTER-FILE-STATUS PICTURE XX.
5ð ððð51ð 77 INPUT-FILE-STATUS PICTURE XX.
51 ððð52ð 77 PRINT-FILE-STATUS PICTURE XX.
52 ððð53ð 77 LINES-TO-FOOT PICTURE 99.
53 ððð54ð ð1 PAGE-HEAD.
54 ððð55ð ð5 FILLER PICTURE X(38) VALUE SPACES.
55 ððð56ð ð5 FILLER PICTURE X(13) VALUE "UPDATE REPORT".
56 ððð57ð ð5 FILLER PICTURE X(38) VALUE SPACES.
57 ððð58ð ð1 COLUMN-HEAD.
58 ððð59ð ð5 FILLER PICTURE X(6) VALUE "KEY ID".
59 ððð6ðð ð5 FILLER PICTURE X(9) VALUE SPACES.
6ð ððð61ð ð5 FILLER PICTURE X(4) VALUE "NAME".
61 ððð62ð ð5 FILLER PICTURE X(21) VALUE SPACES.
62 ððð63ð ð5 FILLER PICTURE X(11) VALUE "CUR BALANCE".
63 ððð64ð ð5 FILLER PICTURE X(6) VALUE SPACES.
64 ððð65ð ð5 FILLER PICTURE X(13) VALUE "UPDATE AMOUNT".
65 ððð66ð ð5 FILLER PICTURE X(4) VALUE SPACES.
66 ððð67ð ð5 FILLER PICTURE X(11) VALUE "NEW BALANCE".
67 ððð68ð ð5 FILLER PICTURE X(4) VALUE SPACES.
68 ððð69ð ð1 PAGE-FOOT.
69 ððð7ðð ð5 FILLER PICTURE X(81) VALUE SPACES.
7ð ððð71ð ð5 FILLER PICTURE A(6) VALUE "PAGE ".
71 ððð72ð ð5 PG-NUMBER PICTURE 99 VALUE ðð.
ððð73ð
72 ððð74ð ð1 INPUTEND PICTURE X VALUE SPACE.
73 ððð75ð 88 THE-END-OF-INPUT VALUE "E".

Figura 115 (Parte 1 de 4). Ejemplo de un Programa de Actualización de Archivo Indexado

Apéndice G. Ejemplos de Proceso de Archivos 379


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
74 ððð76ð ð1 ERRORFLAG PICTURE X VALUE SPACE.
75 ððð77ð 88 ERROR-OCCURRED VALUE "1".
76 ððð78ð ð1 ERROR-DATA.
77 ððð79ð ð5 FILLER PICTURE X(21)
78 ððð8ðð VALUE "STATEMENT FAILING IS ".
79 ððð81ð ð5 OP-NAME PICTURE X(9).
8ð ððð82ð ð5 FILLER PICTURE X(16)
81 ððð83ð VALUE "FILE STATUS IS".
82 ððð84ð ð5 STATUS-VALUE PICTURE XX.
83 ððð85ð ð1 INPUT-MESSAGE.
84 ððð86ð ð5 FILLER PICTURE X(3ð)
85 ððð87ð VALUE "UNEXPECTED ERROR ON INPUT-FILE" .
86 ððð88ð ð1 I-O-MESSAGE.
87 ððð89ð ð5 FILLER PICTURE X(31)
88 ððð9ðð VALUE "UNEXPECTED ERROR ON MASTER-FILE" .
89 ððð91ð ð1 OUTPUT-MESSAGE.
9ð ððð92ð ð5 FILLER PICTURE X(3ð)
91 ððð93ð VALUE "UNEXPECTED ERROR ON PRINT-FILE" .
92 ððð94ð PROCEDURE DIVISION.
ððð95ð DECLARATIVES.
ððð96ð INPUT-ERROR SECTION.
ððð97ð USE AFTER STANDARD ERROR PROCEDURE ON INPUT.
ððð98ð INPUT-ERROR-PARA.
93 ððð99ð DISPLAY INPUT-MESSAGE.
94 ðð1ððð MOVE INPUT-FILE-STATUS TO STATUS-VALUE.
95 ðð1ð1ð DISPLAY ERROR-DATA.
96 ðð1ð2ð SET ERROR-OCCURRED TO TRUE.
ðð1ð3ð I-O-ERROR SECTION.
ðð1ð4ð USE AFTER STANDARD ERROR PROCEDURE ON I-O.
ðð1ð5ð I-O-ERROR-PARA.
97 ðð1ð6ð DISPLAY I-O-MESSAGE.
98 ðð1ð7ð MOVE MASTER-FILE-STATUS TO STATUS-VALUE.
99 ðð1ð8ð DISPLAY ERROR-DATA.
1ðð ðð1ð9ð SET ERROR-OCCURRED TO TRUE.
ðð11ðð OUTPUT-ERROR SECTION.
ðð111ð USE AFTER STANDARD ERROR PROCEDURE ON OUTPUT.
ðð112ð OUTPUT-ERROR-PARA.
1ð1 ðð113ð DISPLAY OUTPUT-MESSAGE.
1ð2 ðð114ð MOVE PRINT-FILE-STATUS TO STATUS-VALUE.
1ð3 ðð115ð DISPLAY ERROR-DATA.
1ð4 ðð116ð SET ERROR-OCCURRED TO TRUE.
ðð117ð END DECLARATIVES.
ðð118ð MAIN-PROCESSING SECTION.
ðð119ð MAIN-PROCEDURE.
1ð5 ðð12ðð MOVE "OPEN" TO OP-NAME.
1ð6 ðð121ð OPEN INPUT INPUT-FILE
ðð122ð I-O MASTER-FILE
ðð123ð OUTPUT PRINT-FILE.
1ð7 ðð124ð IF ERROR-OCCURRED GO TO ERROR-TERMINATION.
1ð9 ðð125ð PERFORM PAGE-START.
11ð ðð126ð PERFORM READ-INPUT-FILE.
111 ðð127ð PERFORM PROCESS-DATA THRU READ-INPUT-FILE
ðð128ð UNTIL THE-END-OF-INPUT.
112 ðð129ð PERFORM PAGE-END.
113 ðð13ðð MOVE "CLOSE" TO OP-NAME.
114 ðð131ð CLOSE INPUT-FILE
ðð132ð MASTER-FILE
ðð133ð PRINT-FILE.
115 ðð134ð IF ERROR-OCCURRED GO TO ERROR-TERMINATION.
117 ðð135ð STOP RUN.
ðð136ð
ðð137ð PROCESS-DATA.
118 ðð138ð IF INPUT-DET-FLD EQUAL SPACES
119 ðð139ð PERFORM INIT-SEQUENTIAL-PROCESS
ðð14ðð ELSE
12ð ðð141ð PERFORM DYNAMIC-PROCESS.
ðð142ð READ-INPUT-FILE.
121 ðð143ð MOVE "READ" TO OP-NAME.
122 ðð144ð READ INPUT-FILE
123 ðð145ð AT END SET THE-END-OF-INPUT TO TRUE.
124 ðð146ð IF ERROR-OCCURRED GO TO ERROR-TERMINATION.
ðð147ð
ðð148ð INIT-SEQUENTIAL-PROCESS.

Figura 115 (Parte 2 de 4). Ejemplo de un Programa de Actualización de Archivo Indexado

380 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
126 ðð149ð MOVE INPUT-GEN-FLD TO MASTER-GEN-FLD.
127 ðð15ðð MOVE "START" TO OP-NAME.
128 ðð151ð START MASTER-FILE
ðð152ð KEY IS NOT LESS THAN MASTER-GEN-FLD
ðð153ð INVALID KEY
129 ðð154ð DISPLAY "MASTER-FILE START FAILED: INVALID KEY ",
ðð155ð MASTER-GEN-FLD
13ð ðð156ð MOVE HIGH-VALUE TO MASTER-GEN-FLD.
131 ðð157ð IF ERROR-OCCURRED GO TO ERROR-TERMINATION.
133 ðð158ð PERFORM SEQUENTIAL-PROCESS
ðð159ð UNTIL INPUT-GEN-FLD NOT EQUAL MASTER-GEN-FLD.
ðð16ðð
ðð161ð SEQUENTIAL-PROCESS.
134 ðð162ð MOVE "READ NEXT" TO OP-NAME.
135 ðð163ð READ MASTER-FILE NEXT RECORD
136 ðð164ð AT END MOVE HIGH-VALUE TO MASTER-GEN-FLD.
137 ðð165ð IF ERROR-OCCURRED GO TO ERROR-TERMINATION.
139 ðð166ð IF INPUT-GEN-FLD EQUAL MASTER-GEN-FLD
14ð ðð167ð MOVE MASTER-KEY TO PRINT-KEY
141 ðð168ð MOVE MASTER-NAME TO PRINT-NAME
142 ðð169ð MOVE MASTER-BAL TO PRINT-NEW-BAL
143 ðð17ðð PERFORM PRINT-DETAIL.
ðð171ð
ðð172ð DYNAMIC-PROCESS.
144 ðð173ð MOVE INPUT-KEY TO MASTER-KEY.
145 ðð174ð MOVE "READ" TO OP-NAME.
146 ðð175ð READ MASTER-FILE
ðð176ð INVALID KEY
147 ðð177ð DISPLAY "MASTER-FILE READ FAILED: INVALID KEY ",
ðð178ð MASTER-KEY
148 ðð179ð MOVE HIGH-VALUE TO MASTER-GEN-FLD.
149 ðð18ðð IF ERROR-OCCURRED GO TO ERROR-TERMINATION.
151 ðð181ð IF INPUT-GEN-FLD EQUAL MASTER-GEN-FLD
152 ðð182ð MOVE MASTER-KEY TO PRINT-KEY
153 ðð183ð MOVE MASTER-NAME TO PRINT-NAME
154 ðð184ð MOVE MASTER-BAL TO PRINT-BAL
155 ðð185ð MOVE INPUT-AMT TO PRINT-AMT
156 ðð186ð ADD INPUT-AMT TO MASTER-BAL
157 ðð187ð MOVE MASTER-BAL TO PRINT-NEW-BAL
158 ðð188ð PERFORM PRINT-DETAIL
159 ðð189ð MOVE "REWRITE" TO OP-NAME
16ð ðð19ðð REWRITE MASTER-RECORD
ðð191ð INVALID KEY
161 ðð192ð DISPLAY "MASTER-FILE REWRITE FAILED: INVALID KEY ",
ðð193ð MASTER-KEY
162 ðð194ð MOVE HIGH-VALUE TO MASTER-GEN-FLD.
163 ðð195ð IF ERROR-OCCURRED GO TO ERROR-TERMINATION.
ðð196ð PRINT-DETAIL.
165 ðð197ð MOVE "WRITE" TO OP-NAME.
166 ðð198ð WRITE PRINT-RECORD-1
ðð199ð AT END-OF-PAGE
167 ðð2ððð PERFORM PAGE-END THROUGH PAGE-START.
168 ðð2ð1ð IF ERROR-OCCURRED GO TO ERROR-TERMINATION.
17ð ðð2ð2ð MOVE SPACES TO PRINT-RECORD-1.
ðð2ð3ð
ðð2ð4ð PAGE-END.
171 ðð2ð5ð MOVE "WRITE" TO OP-NAME.
172 ðð2ð6ð ADD 1 TO PG-NUMBER.
173 ðð2ð7ð SUBTRACT LINAGE-COUNTER OF PRINT-FILE FROM 12
ðð2ð8ð GIVING LINES-TO-FOOT.
174 ðð2ð9ð MOVE SPACES TO PRINT-RECORD-1.
175 ðð21ðð WRITE PRINT-RECORD-1
ðð211ð AFTER ADVANCING LINES-TO-FOOT.
176 ðð212ð WRITE PRINT-RECORD-2 FROM PAGE-FOOT
ðð213ð BEFORE ADVANCING PAGE.
177 ðð214ð IF ERROR-OCCURRED GO TO ERROR-TERMINATION.

Figura 115 (Parte 3 de 4). Ejemplo de un Programa de Actualización de Archivo Indexado

Apéndice G. Ejemplos de Proceso de Archivos 381


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
ðð215ð PAGE-START.
179 ðð216ð WRITE PRINT-RECORD-2 FROM PAGE-HEAD
ðð217ð AFTER ADVANCING ð LINES.
18ð ðð218ð IF ERROR-OCCURRED GO TO ERROR-TERMINATION.
182 ðð219ð MOVE SPACES TO PRINT-RECORD-2.
183 ðð22ðð WRITE PRINT-RECORD-2 FROM COLUMN-HEAD
ðð221ð AFTER ADVANCING 1 LINE.
184 ðð222ð IF ERROR-OCCURRED GO TO ERROR-TERMINATION.
186 ðð223ð MOVE SPACES TO PRINT-RECORD-2.
ðð224ð ERROR-TERMINATION.
187 ðð225ð DISPLAY "PROCESS TERMINATING ABNORMALLY".
188 ðð226ð STOP RUN.
\ \ \ \ \ F I N D E F U E N T E \ \ \ \ \ 5763CB1 V3RðM5 Mensajes COBOL AS/4ðð
INST
\ 28 IDMEN: LBLð65ð GRAVEDAD: ðð NUMSEC: ððð29ð
Mensaje . . . . : Bloqueo/Desbloqueo para archivo 'INPUT-FILE'
se realizará por medio del código generado por compilador.

\ \ \ \ \ F I N D E M E N S A J E S \ \ \ \ \
Resumen de mensajes
Total Info(ð-4) Aviso(5-19) Error(2ð-29) Grave(3ð-39) Terminal(4ð-99)
1 1 ð ð ð ð
Registros fuente leídos. . . . . . . : 226
Registros copia leídos . . . . . . . : ð
Miembros copia procesados . . . . . : ð
Errores secuencia . . . . . . . . . : ð
Mensaje gravedad más alta enviado . : ð
LBLð9ð1 ðð Programa UPDTIND creado en biblioteca XMPLIB.

\ \ \ \ \ F I N D E C O M P I L A C I Ó N \ \ \ \ \

Figura 115 (Parte 4 de 4). Ejemplo de un Programa de Actualización de Archivo Indexado

Creación de Archivo Relativos


Este programa crea un archivo relativo de registros de resumen de ventas utili-
zando acceso secuencial. Cada registro contiene un resumen de cinco años de
ventas en unidades y pesetas de una semana del año; en total hay 52 registros en
el archivo, que representa cada uno una semana.

Cada registro de entrada contiene un resumen de las ventas de una semana. Los
registros de la primera semana de los cinco últimos años (en orden ascendente)
son los primeros cinco registros de entrada. Los siguientes cinco registros de
entrada corresponden a los registros de la segunda semana de los últimos cinco
años. Así pues, cinco registros de entrada llenan un registro de salida.

RELATIVE KEY para RELATIVE-FILE no se especifica porque no es necesario para el


acceso secuencial, a no ser que se utilice la instrucción START. (Sin embargo,
para actualizar, la clave es INPUT-WEEK.)

382 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ðððð1ð IDENTIFICATION DIVISION.
2 ðððð2ð PROGRAM-ID. CRTREL.
ðððð3ð
3 ðððð4ð ENVIRONMENT DIVISION.
4 ðððð5ð CONFIGURATION SECTION.
5 ðððð6ð SOURCE-COMPUTER. IBM-AS4ðð. ð5/24/94
6 ðððð7ð OBJECT-COMPUTER. IBM-AS4ðð. ð5/24/94
7 ðððð8ð SPECIAL-NAMES. REQUESTOR IS REQUESTOR.
8 ðððð9ð FILE-CONTROL.
9 ððð1ðð SELECT RELATIVE-FILE ASSIGN TO DISK-FILED
1ð ððð11ð ORGANIZATION IS RELATIVE
11 ððð12ð ACCESS IS SEQUENTIAL
12 ððð13ð FILE STATUS RELATIVE-FILE-STATUS.
13 ððð14ð SELECT INPUT-FILE ASSIGN TO DISK-FILEC
14 ððð15ð FILE STATUS INPUT-FILE-STATUS.
ððð16ð
15 ððð17ð DATA DIVISION.
16 ððð18ð FILE SECTION.
17 ððð19ð FD RELATIVE-FILE LABEL RECORDS ARE STANDARD.
18 ððð2ðð ð1 RELATIVE-RECORD-ð1.
19 ððð21ð ð5 RELATIVE-RECORD OCCURS 5 TIMES INDEXED BY REL-INDEX.
2ð ððð22ð 1ð RELATIVE-YEAR PICTURE 99.
21 ððð23ð 1ð RELATIVE-WEEK PICTURE 99.
22 ððð24ð 1ð RELATIVE-UNIT-SALES PICTURE S9(6).
23 ððð25ð 1ð RELATIVE-DOLLAR-SALES PICTURE S9(9)V99.
24 ððð26ð FD INPUT-FILE LABEL RECORDS STANDARD.
25 ððð27ð ð1 INPUT-RECORD.
26 ððð28ð ð5 INPUT-YEAR PICTURE 99.
27 ððð29ð ð5 INPUT-WEEK PICTURE 99.
28 ððð3ðð ð5 INPUT-UNIT-SALES PICTURE S9(6).
29 ððð31ð ð5 INPUT-DOLLAR-SALES PICTURE S9(9)V99.
3ð ððð32ð WORKING-STORAGE SECTION.
31 ððð33ð 77 INPUT-FILE-STATUS PICTURE XX.
32 ððð34ð 77 RELATIVE-FILE-STATUS PICTURE XX.
33 ððð35ð ð1 WORK-RECORD.
34 ððð36ð ð5 WORK-YEAR PICTURE 99 VALUE ðð.
35 ððð37ð ð5 WORK-WEEK PICTURE 99.
36 ððð38ð ð5 WORK-UNIT-SALES PICTURE S9(6).
37 ððð39ð ð5 WORK-DOLLAR-SALES PICTURE S9(9)V99.
38 ððð4ðð ð1 ERROR-INFO.
39 ððð41ð ð5 OP-NAME PICTURE X(5).
4ð ððð42ð ð5 FILLER PICTURE X(1ð)
41 ððð43ð VALUE " ERROR ON ".
42 ððð44ð ð5 FILE-NAME PICTURE X(13).
43 ððð45ð ð5 FILLER PICTURE X(16)
44 ððð46ð VALUE " FILE STATUS IS ".
45 ððð47ð ð5 STATUS-VALUE PICTURE XX.
46 ððð48ð ð1 ERROR-FLAG PICTURE X VALUE SPACE.
47 ððð49ð 88 ERROR-OCCURRED VALUE "1".
48 ððð5ðð ð1 INPUTEND PICTURE X VALUE SPACE.
49 ððð51ð 88 THE-END-OF-INPUT VALUE "E".
ððð52ð
5ð ððð53ð PROCEDURE DIVISION.
ððð54ð DECLARATIVES.
ððð55ð
ððð56ð INP-FILE-ERROR SECTION.
ððð57ð USE AFTER STANDARD ERROR PROCEDURE ON INPUT-FILE.
ððð58ð INPUT-FILE-ERROR.
51 ððð59ð MOVE "INPUT-FILE" TO FILE-NAME.
52 ððð6ðð MOVE INPUT-FILE-STATUS TO STATUS-VALUE.
53 ððð61ð SET ERROR-OCCURRED TO TRUE.
ððð62ð REL-FILE-ERROR SECTION.
ððð63ð USE AFTER STANDARD ERROR PROCEDURE ON RELATIVE-FILE.
ððð64ð RELATIVE-FILE-ERROR.
54 ððð65ð MOVE "RELATIVE-FILE" TO FILE-NAME.
55 ððð66ð MOVE RELATIVE-FILE-STATUS TO STATUS-VALUE.
56 ððð67ð SET ERROR-OCCURRED TO TRUE.
ððð68ð END DECLARATIVES.
ððð69ð BEGIN-PROCESSING SECTION.
ððð7ðð PROCESSING-CONTROL.
57 ððð71ð MOVE "OPEN" TO OP-NAME.
58 ððð72ð OPEN INPUT INPUT-FILE
ððð73ð OUTPUT RELATIVE-FILE.
59 ððð74ð IF ERROR-OCCURRED GO TO ERROR-TERMINATION.
61 ððð75ð SET REL-INDEX TO 1.
62 ððð76ð PERFORM READ-INPUT-FILE.

Figura 116 (Parte 1 de 2). Ejemplo de un Programa de Archivo Relativo

Apéndice G. Ejemplos de Proceso de Archivos 383


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
63 ððð77ð PERFORM PROCESS-DATA THRU READ-INPUT-FILE
ððð78ð UNTIL THE-END-OF-INPUT.
64 ððð79ð CLOSE RELATIVE-FILE INPUT-FILE.
65 ððð8ðð IF ERROR-OCCURRED GO TO ERROR-TERMINATION.
67 ððð81ð STOP RUN.
ððð82ð ERROR-TERMINATION.
68 ððð83ð DISPLAY ERROR-INFO UPON REQUESTOR.
69 ððð84ð DISPLAY "PROCESSING TERMINATED DUE TO I-O ERROR"
ððð85ð UPON REQUESTOR.
7ð ððð86ð STOP RUN.
ððð87ð PROCESS-DATA.
71 ððð88ð MOVE INPUT-RECORD TO RELATIVE-RECORD (REL-INDEX).
72 ððð89ð IF REL-INDEX NOT = 5
73 ððð9ðð SET REL-INDEX UP BY 1
ððð91ð ELSE
74 ððð92ð SET REL-INDEX TO 1
75 ððð93ð PERFORM RELATIVE-FILE-WRITE.
ððð94ð READ-INPUT-FILE.
76 ððð95ð MOVE "READ" TO OP-NAME.
77 ððð96ð READ INPUT-FILE
78 ððð97ð AT END SET THE-END-OF-INPUT TO TRUE.
79 ððð98ð IF ERROR-OCCURRED GO TO ERROR-TERMINATION.
ððð99ð RELATIVE-FILE-WRITE.
81 ðð1ððð MOVE "WRITE" TO OP-NAME.
82 ðð1ð1ð WRITE RELATIVE-RECORD-ð1.
83 ðð1ð2ð IF ERROR-OCCURRED GO TO ERROR-TERMINATION.
\ \ \ \ \ F I N D E F U E N T E \ \ \ \ \ 5763CB1 V3RðM5 Mensajes COBOL AS/4ðð
INST
\ IDMEN: LBLðð27 GRAVEDAD: 1ð NUMSEC:
Mensaje . . . . : No se encuentra I-O SECTION. Se asume la presente
\ 17 IDMEN: LBLð65ð GRAVEDAD: ðð NUMSEC: ððð19ð
Mensaje . . . . : Bloqueo/Desbloqueo para archivo 'RELATIVE-FILE'
se realizará por medio del código generado por compilador.
\ 24 IDMEN: LBLð65ð GRAVEDAD: ðð NUMSEC: ððð26ð
Mensaje . . . . : Bloqueo/Desbloqueo para archivo 'INPUT-FILE'
se realizará por medio del código generado por compilador.

\ \ \ \ \ F I N D E M E N S A J E S \ \ \ \ \
Resumen de mensajes
Total Info(ð-4) Aviso(5-19) Error(2ð-29) Grave(3ð-39) Terminal(4ð-99)
3 2 1 ð ð ð
Registros fuente leídos. . . . . . . : 1ð2
Registros copia leídos . . . . . . . : ð
Miembros copia procesados . . . . . : ð
Errores secuencia . . . . . . . . . : ð
Mensaje gravedad más alta enviado . : 1ð
LBLð9ð1 ðð Programa CRTREL creado en biblioteca XMPLIB.

\ \ \ \ \ F I N D E C O M P I L A C I Ó N \ \ \ \ \

Figura 116 (Parte 2 de 2). Ejemplo de un Programa de Archivo Relativo

Actualización de Archivos Relativos


Este programa utiliza el acceso secuencial para actualizar el archivo de registros
de resumen de ventas que se ha creado en el programa CRTREL. El programa de
actualización añade un registro para cada año nuevo y elimina los registros del año
más antiguo desde RELATIVE-FILE.

El registro de entrada representa el registro de resumen de ventas para una


semana del año anterior. RELATIVE KEY para RELATIVE-FILE es el registro de
entrada como INPUT-WEEK. RELATIVE KEY se utiliza para comprobar que el
registro se ha grabado correctamente.

384 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ðððð1ð IDENTIFICATION DIVISION.
2 ðððð2ð PROGRAM-ID. UPDTREL.
ðððð3ð
3 ðððð4ð ENVIRONMENT DIVISION.
4 ðððð5ð CONFIGURATION SECTION.
5 ðððð6ð SOURCE-COMPUTER. IBM-AS4ðð. ð5/24/94
6 ðððð7ð OBJECT-COMPUTER. IBM-AS4ðð. ð5/24/94
7 ðððð8ð INPUT-OUTPUT SECTION.
8 ðððð9ð FILE-CONTROL.
9 ððð1ðð SELECT RELATIVE-FILE ASSIGN TO DISK-FILED
1ð ððð11ð ORGANIZATION IS RELATIVE
11 ððð12ð ACCESS IS SEQUENTIAL
12 ððð13ð RELATIVE KEY INPUT-WEEK
13 ððð14ð FILE STATUS STATUS-VALUE.
14 ððð15ð SELECT INPUT-FILE ASSIGN TO DISK-FILES2
15 ððð16ð FILE STATUS STATUS-VALUE.
ððð17ð
16 ððð18ð DATA DIVISION.
17 ððð19ð FILE SECTION.
18 ððð2ðð FD RELATIVE-FILE LABEL RECORDS STANDARD.
19 ððð21ð ð1 RELATIVE-RECORD PICTURE X(1ð5).
2ð ððð22ð FD INPUT-FILE LABEL RECORDS STANDARD.
21 ððð23ð ð1 INPUT-RECORD.
22 ððð24ð ð5 INPUT-YEAR PICTURE 99.
23 ððð25ð ð5 INPUT-WEEK PICTURE 99.
24 ððð26ð ð5 INPUT-UNIT-SALES PICTURE S9(6).
25 ððð27ð ð5 INPUT-DOLLAR-SALES PICTURE S9(9)V99.
26 ððð28ð WORKING-STORAGE SECTION.
ððð29ð
27 ððð3ðð ð1 INPUTEND PICTURE X VALUE SPACE.
28 ððð31ð 88 THE-END-OF-INPUT VALUE "E".
29 ððð32ð ð1 WORK-RECORD.
3ð ððð33ð ð5 FILLER PICTURE X(21).
31 ððð34ð ð5 CURRENT-WORK-YEARS PICTURE X(84).
32 ððð35ð ð5 NEW-WORK-YEAR.
33 ððð36ð 1ð WORK-YEAR PICTURE 99.
34 ððð37ð 1ð WORK-WEEK PICTURE 99.
35 ððð38ð 1ð WORK-UNIT-SALES PICTURE S9(6).
36 ððð39ð 1ð WORK-DOLLAR-SALES PICTURE S9(9)V99.
37 ððð4ðð 66 WORK-OUT-RECORD RENAMES
38 ððð41ð CURRENT-WORK-YEARS THROUGH NEW-WORK-YEAR.
39 ððð42ð ð1 ERROR-MESSAGE.
4ð ððð43ð ð5 OP-NAME PICTURE X(7).
41 ððð44ð ð5 FILLER PICTURE X(1ð)
42 ððð45ð VALUE " ERROR ON ".
43 ððð46ð ð5 FILE-NAME PICTURE X(13).
44 ððð47ð ð5 FILLER PICTURE X(16)
45 ððð48ð VALUE " FILE STATUS IS ".
46 ððð49ð ð5 STATUS-VALUE PICTURE X(2).
ððð5ðð
47 ððð51ð PROCEDURE DIVISION.
ððð52ð DECLARATIVES.
ððð53ð I-O-ERROR SECTION.
ððð54ð USE AFTER STANDARD ERROR PROCEDURE ON RELATIVE-FILE,
ððð55ð INPUT-FILE.
ððð56ð ERROR-PROCEDURE.
48 ððð57ð DISPLAY ERROR-MESSAGE.
49 ððð58ð DISPLAY "PROCESSING TERMINATING".
5ð ððð59ð STOP RUN.
ððð6ðð END DECLARATIVES.
ððð61ð MAIN-PROCEDURE SECTION.
ððð62ð BEGIN-PROCESSING.
51 ððð63ð MOVE "OPEN" TO OP-NAME.
52 ððð64ð MOVE "INPUT-FILE" TO FILE-NAME.
53 ððð65ð OPEN INPUT INPUT-FILE.
54 ððð66ð MOVE "RELATIVE-FILE" TO FILE-NAME.
55 ððð67ð OPEN I-O RELATIVE-FILE.
56 ððð68ð PERFORM READ-FILES.
57 ððð69ð PERFORM UPDATE-RELATIVE-FILE THRU READ-FILES
ððð7ðð UNTIL THE-END-OF-INPUT.
58 ððð71ð MOVE "CLOSE" TO OP-NAME.
59 ððð72ð MOVE "INPUT-FILE" TO FILE-NAME.
6ð ððð73ð CLOSE INPUT-FILE.
61 ððð74ð MOVE "RELATIVE-FILE" TO FILE-NAME.
62 ððð75ð CLOSE RELATIVE-FILE.
63 ððð76ð STOP RUN.

Figura 117 (Parte 1 de 2). Ejemplo de un Programa de Actualización de Archivo Relativo

Apéndice G. Ejemplos de Proceso de Archivos 385


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
ððð77ð UPDATE-RELATIVE-FILE.
64 ððð78ð MOVE "REWRITE" TO OP-NAME.
65 ððð79ð MOVE "RELATIVE-FILE" TO FILE-NAME.
66 ððð8ðð REWRITE RELATIVE-RECORD FROM WORK-OUT-RECORD.
ððð81ð READ-FILES.
67 ððð82ð MOVE "READ" TO OP-NAME.
68 ððð83ð MOVE "RELATIVE-FILE" TO FILE-NAME.
69 ððð84ð READ RELATIVE-FILE INTO WORK-RECORD
7ð ððð85ð AT END SET THE-END-OF-INPUT TO TRUE.
71 ððð86ð MOVE "INPUT-FILE" TO FILE-NAME.
72 ððð87ð READ INPUT-FILE INTO NEW-WORK-YEAR
73 ððð88ð AT END SET THE-END-OF-INPUT TO TRUE.
\ \ \ \ \ F I N D E F U E N T E \ \ \ \ \
5763CB1 V3RðM5 Mensajes COBOL AS/4ðð
INST
\ 2ð IDMEN: LBLð65ð GRAVEDAD: ðð NUMSEC: ððð22ð
Mensaje . . . . : Bloqueo/Desbloqueo para archivo 'INPUT-FILE'
se realizará por medio del código generado por compilador.

\ \ \ \ \ F I N D E M E N S A J E S \ \ \ \ \
Resumen de mensajes
Total Info(ð-4) Aviso(5-19) Error(2ð-29) Grave(3ð-39) Terminal(4ð-99)
1 1 ð ð ð ð
Registros fuente leídos. . . . . . . : 88
Registros copia leídos . . . . . . . : ð
Miembros copia procesados . . . . . : ð
Errores secuencia . . . . . . . . . : ð
Mensaje gravedad más alta enviado . : ð
LBLð9ð1 ðð Programa UPDTREL creado en biblioteca XMPLIB.

\ \ \ \ \ F I N D E C O M P I L A C I Ó N \ \ \ \ \

Figura 117 (Parte 2 de 2). Ejemplo de un Programa de Actualización de Archivo Relativo

Recuperación de Archivos Relativos


Este programa recupera el archivo resumen creado por el programa CRTREL, utili-
zando el acceso dinámico.

Los registros del INPUT-FILE contienen un campo obligatorio (INPUT-WEEK), que


es el campo RELATIVE KEY para el RELATIVE-FILE y un campo opcional
(END-WEEK). Un registro de entrada que contienen datos INPUT-WEEK y espacios
END-WEEK solicita una salida impresa para el RELATIVE-RECORD; el registro de recu-
pera por medio del acceso al azar. (El proceso al azar es un método de procesar
en el que los registros se pueden leer, escribir o eliminar de un archivo en un
orden solicitado por el programa que las utiliza.) Un registro de entrada que con-
tenga datos tanto en INPUT-WEEK y END-WEEK solicita una salida impresa de todos
los registros RELATIVE-FILE dentro del rango RELATIVE KEY que se incluye entre
INPUT-WEEK y END-WEEK. Estos registros se recuperan mediante acceso secuencial.

386 COBOL/400 Guía del usuario


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ðððð1ð IDENTIFICATION DIVISION.
2 ðððð2ð PROGRAM-ID. RTRVREL.
ðððð3ð
3 ðððð4ð ENVIRONMENT DIVISION.
4 ðððð5ð CONFIGURATION SECTION.
5 ðððð6ð SOURCE-COMPUTER. IBM-AS4ðð. ð5/24/94
6 ðððð7ð OBJECT-COMPUTER. IBM-AS4ðð. ð5/24/94
7 ðððð8ð SPECIAL-NAMES. REQUESTOR IS REQUESTOR.
8 ðððð9ð INPUT-OUTPUT SECTION.
9 ððð1ðð FILE-CONTROL.
1ð ððð11ð SELECT RELATIVE-FILE ASSIGN TO DISK-FILED
11 ððð12ð ORGANIZATION IS RELATIVE
12 ððð13ð ACCESS IS DYNAMIC
13 ððð14ð RELATIVE KEY INPUT-WEEK
14 ððð15ð FILE STATUS IS RELATIVE-FILE-STATUS.
15 ððð16ð SELECT INPUT-FILE ASSIGN TO DISK-FILEF
16 ððð17ð FILE STATUS IS INPUT-FILE-STATUS.
17 ððð18ð SELECT PRINT-FILE ASSIGN TO PRINTER-QSYSPRT
18 ððð19ð FILE STATUS IS PRINT-FILE-STATUS.
ððð2ðð
19 ððð21ð DATA DIVISION.
2ð ððð22ð FILE SECTION.
21 ððð23ð FD RELATIVE-FILE LABEL RECORDS STANDARD.
22 ððð24ð ð1 RELATIVE-RECORD-ð1.
23 ððð25ð ð5 RELATIVE-RECORD OCCURS 5 TIMES INDEXED BY REL-INDEX.
24 ððð26ð 1ð RELATIVE-YEAR PICTURE 99.
25 ððð27ð 1ð RELATIVE-WEEK PICTURE 99.
26 ððð28ð 1ð RELATIVE-UNIT-SALES PICTURE S9(6).
27 ððð29ð 1ð RELATIVE-DOLLAR-SALES PICTURE S9(9)V99.
28 ððð3ðð FD INPUT-FILE LABEL RECORDS STANDARD.
29 ððð31ð ð1 INPUT-RECORD.
3ð ððð32ð ð5 INPUT-WEEK PICTURE 99.
31 ððð33ð ð5 END-WEEK PICTURE 99.
32 ððð34ð FD PRINT-FILE LABEL RECORDS OMITTED.
33 ððð35ð ð1 PRINT-RECORD.
34 ððð36ð ð5 PRINT-WEEK PICTURE 99.
35 ððð37ð ð5 FILLER PICTURE X(5).
36 ððð38ð ð5 PRINT-YEAR PICTURE 99.
37 ððð39ð ð5 FILLER PICTURE X(5).
38 ððð4ðð ð5 PRINT-UNIT-SALES PICTURE ZZZ,ZZ9.
39 ððð41ð ð5 FILLER PICTURE X(5).
4ð ððð42ð ð5 PRINT-DOLLAR-SALES PICTURE $$$$,$$$,$$$.99.
41 ððð43ð WORKING-STORAGE SECTION.
42 ððð44ð 77 RELATIVE-FILE-STATUS PICTURE XX.
43 ððð45ð 77 INPUT-FILE-STATUS PICTURE XX.
44 ððð46ð 77 PRINT-FILE-STATUS PICTURE XX.
45 ððð47ð 77 HIGH-WEEK PICTURE 99 VALUE 53.
46 ððð48ð 77 OP-NAME PICTURE X(9).
47 ððð49ð ð1 INPUTEND PICTURE X(9).
48 ððð5ðð 88 THE-END-OF-INPUT VALUE "E".
49 ððð51ð PROCEDURE DIVISION.
ððð52ð DECLARATIVES.
ððð53ð RELATIVE-FILE-ERROR SECTION.
ððð54ð USE AFTER STANDARD ERROR PROCEDURE ON RELATIVE-FILE.
ððð55ð RELATIVE-ERROR-MSG.
5ð ððð56ð DISPLAY OP-NAME, " ERROR ON RELATIVE-FILE ".
51 ððð57ð DISPLAY "FILE STATUS VALUE IS ", RELATIVE-FILE-STATUS.
52 ððð58ð DISPLAY "PROCESSING TERMINATED ".
53 ððð59ð STOP RUN.
ððð6ðð INPUT-FILE-ERROR SECTION.
ððð61ð USE AFTER STANDARD ERROR PROCEDURE ON INPUT-FILE.
ððð62ð INPUT-ERROR-MSG.
54 ððð63ð DISPLAY OP-NAME, " ERROR ON INPUT-FILE ".
55 ððð64ð DISPLAY "FILE STATUS VALUE IS ", INPUT-FILE-STATUS.
56 ððð65ð DISPLAY "PROCESSING TERMINATED ".
57 ððð66ð STOP RUN.
ððð67ð PRINT-FILE-ERROR SECTION.
ððð68ð USE AFTER STANDARD ERROR PROCEDURE ON PRINT-FILE.
ððð69ð PRINT-ERROR-MSG.
58 ððð7ðð DISPLAY OP-NAME, " ERROR ON PRINT-FILE ".
59 ððð71ð DISPLAY "FILE STATUS VALUE IS ", PRINT-FILE-STATUS.
6ð ððð72ð DISPLAY "PROCESSING TERMINATED ".
61 ððð73ð STOP RUN.
ððð74ð END DECLARATIVES.

Figura 118 (Parte 1 de 2). Ejemplo de un Programa de Recuperación de Archivo Relativo

Apéndice G. Ejemplos de Proceso de Archivos 387


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
ððð75ð MAIN-PROCEDURE SECTION.
ððð76ð MAIN-PROCESSING.
62 ððð77ð MOVE "OPEN" TO OP-NAME.
63 ððð78ð OPEN INPUT INPUT-FILE RELATIVE-FILE
ððð79ð OUTPUT PRINT-FILE.
64 ððð8ðð MOVE SPACES TO PRINT-RECORD.
65 ððð81ð PERFORM READ-INPUT-FILE.
66 ððð82ð PERFORM CONTROL-PROCESS THRU READ-INPUT-FILE
ððð83ð UNTIL THE-END-OF-INPUT.
67 ððð84ð MOVE "CLOSE" TO OP-NAME.
68 ððð85ð CLOSE RELATIVE-FILE
ððð86ð INPUT-FILE
ððð87ð PRINT-FILE.
69 ððð88ð STOP RUN.
ððð89ð CONTROL-PROCESS.
7ð ððð9ðð IF (END-WEEK = SPACES OR END-WEEK = ðð)
71 ððð91ð PERFORM RANDOM-PROCESS
ððð92ð ELSE
72 ððð93ð PERFORM SEQUENTIAL-PROCESS.
ððð94ð READ-INPUT-FILE.
73 ððð95ð MOVE "READ" TO OP-NAME.
74 ððð96ð READ INPUT-FILE
75 ððð97ð AT END SET THE-END-OF-INPUT TO TRUE.
ððð98ð RANDOM-PROCESS.
76 ððð99ð MOVE "READ" TO OP-NAME.
77 ðð1ððð READ RELATIVE-FILE
78 ðð1ð1ð INVALID KEY MOVE HIGH-WEEK TO RELATIVE-WEEK(1).
79 ðð1ð2ð IF RELATIVE-WEEK(1) NOT EQUAL HIGH-WEEK
8ð ðð1ð3ð PERFORM PRINT-SUMMARY VARYING REL-INDEX FROM 1 BY 1
ðð1ð4ð UNTIL REL-INDEX > 5.
ðð1ð5ð SEQUENTIAL-PROCESS.
81 ðð1ð6ð MOVE "READ" TO OP-NAME.
82 ðð1ð7ð READ RELATIVE-FILE
83 ðð1ð8ð INVALID KEY MOVE HIGH-WEEK TO RELATIVE-WEEK(1).
84 ðð1ð9ð PERFORM READ-REL-SEQ
ðð11ðð UNTIL RELATIVE-WEEK(1) GREATER THAN END-WEEK.
ðð111ð
ðð112ð READ-REL-SEQ.
85 ðð113ð PERFORM PRINT-SUMMARY VARYING REL-INDEX FROM 1 BY 1
ðð114ð UNTIL REL-INDEX > 5.
86 ðð115ð MOVE "READ NEXT" TO OP-NAME.
87 ðð116ð READ RELATIVE-FILE NEXT RECORD
88 ðð117ð AT END MOVE HIGH-WEEK TO RELATIVE-WEEK(1).
ðð118ð PRINT-SUMMARY.
89 ðð119ð MOVE RELATIVE-YEAR (REL-INDEX) TO PRINT-YEAR.
9ð ðð12ðð MOVE RELATIVE-WEEK (REL-INDEX) TO PRINT-WEEK.
91 ðð121ð MOVE RELATIVE-UNIT-SALES (REL-INDEX) TO PRINT-UNIT-SALES.
92 ðð122ð MOVE RELATIVE-DOLLAR-SALES(REL-INDEX) TO PRINT-DOLLAR-SALES.
93 ðð123ð MOVE "WRITE" TO OP-NAME.
94 ðð124ð WRITE PRINT-RECORD AFTER ADVANCING 2 LINES.
\ \ \ \ \ F I N D E F U E N T E \ \ \ \ \
5763CB1 V3RðM5 Mensajes COBOL AS/4ðð
INST
\ 28 IDMEN: LBLð65ð GRAVEDAD: ðð NUMSEC: ððð3ðð
Mensaje . . . . : Bloqueo/Desbloqueo para archivo 'INPUT-FILE'
se realizará por medio del código generado por compilador.

\ \ \ \ \ F I N D E M E N S A J E S \ \ \ \ \
Resumen de mensajes
Total Info(ð-4) Aviso(5-19) Error(2ð-29) Grave(3ð-39) Terminal(4ð-99)
1 1 ð ð ð ð
Registros fuente leídos. . . . . . . : 124
Registros copia leídos . . . . . . . : ð
Miembros copia procesados . . . . . : ð
Errores secuencia . . . . . . . . . : ð
Mensaje gravedad más alta enviado . : ð
LBLð9ð1 ðð Programa RTRVREL creado en biblioteca XMPLIB.

\ \ \ \ \ F I N D E C O M P I L A C I Ó N \ \ \ \

Figura 118 (Parte 2 de 2). Ejemplo de un Programa de Recuperación de Archivo Relativo

388 COBOL/400 Guía del usuario


Archivos de Fusión y Clasificación
La Figura 119 ilustra la creación de archivos clasificados de ventas actuales y
ventas anuales hasta la fecha.

Ante todo se ejecuta la instrucción SORT para las ventas actuales. El proce-
dimiento de entrada para esta operación de clasificación es SCREEN-DEPT. Los
registros se clasifican en orden ascendente por departamento, y dentro de cada
departamento, en orden descendente por ventas netas. Después se imprime la
salida para esta clasificación.

Una vez se completa la operación de clasificación, el registro de ventas actuales


se fusiona con los registros de ventas anuales hasta la fecha. Los registros de
este archivo se fusionan en orden ascendente por número de departamento y,
dentro de cada departamento, en orden ascendente por número de empleado y,
para cada empleado, en orden ascendente por meses para crear un archivo
maestro actualizado hasta la fecha.

Cuando el proceso de fusión finaliza, se imprime el archivo maestro actualizado


hasta la fecha.

5763CB1 V3RðM5 91ð524 Fuente COBOL AS/4ðð


INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ðððð1ð IDENTIFICATION DIVISION.
2 ðððð2ð PROGRAM-ID. SORTMERGE.
ðððð3ð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðððð4ð\ EJEMPLO SORT/MERGE QUE UTILIZA PROCEDIMIENTO ENTRADA \
ðððð5ð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
3 ðððð6ð ENVIRONMENT DIVISION.
4 ðððð7ð CONFIGURATION SECTION.
5 ðððð8ð SOURCE-COMPUTER. IBM-AS4ðð.
6 ðððð9ð OBJECT-COMPUTER. IBM-AS4ðð.
7 ððð1ðð SPECIAL-NAMES.
8 ððð11ð REQUESTOR IS CONSOLE.
9 ððð12ð INPUT-OUTPUT SECTION.
1ð ððð13ð FILE-CONTROL.
11 ððð14ð SELECT WORK-FILE ASSIGN TO DISK-WRK.
12 ððð15ð SELECT CURRENT-SALES-FILE-IN ASSIGN TO DISK-CURRIN.
13 ððð16ð SELECT CURRENT-SALES-FILE-OUT ASSIGN TO DISK-CURROUT.
14 ððð17ð SELECT YTD-SALES-FILE-IN ASSIGN TO DISK-YTDIN.
15 ððð18ð SELECT YTD-SALES-FILE-OUT ASSIGN TO DISK-YTDOUT.
16 ððð19ð SELECT PRINTER-OUT ASSIGN TO PRINTER-QPRINT.
17 ððð2ðð DATA DIVISION.
18 ððð21ð FILE SECTION.
19 ððð22ð SD WORK-FILE
2ð ððð23ð DATA RECORD IS SALES-RECORD.
21 ððð24ð ð1 SALES-RECORD.
22 ððð25ð ð5 EMPL-NO PIC 9(6).
23 ððð26ð ð5 DEPT PIC 9(2).
24 ððð27ð ð5 SALES PIC 9(7)V99.
25 ððð28ð ð5 NAME-ADDR PIC X(61).
26 ððð29ð ð5 MONTH PIC X(2).
27 ððð3ðð FD CURRENT-SALES-FILE-IN
28 ððð31ð LABEL RECORDS STANDARD
29 ððð32ð DATA RECORD CURRENT-SALES-IN.
3ð ððð33ð ð1 CURRENT-SALES-IN.
31 ððð34ð ð5 EMPL-NO PIC 9(6).
32 ððð35ð ð5 DEPT PIC 9(2).
33 ððð36ð 88 ON-SITE-EMPLOYEE VALUES ð
34 ððð37ð THRU 6, 8.
35 ððð38ð ð5 SALES PIC 9(7)V99.
36 ððð39ð ð5 NAME-ADDR PIC X(61).
37 ððð4ðð ð5 MONTH PIC X(2).
38 ððð41ð FD CURRENT-SALES-FILE-OUT
39 ððð42ð LABEL RECORDS STANDARD
4ð ððð43ð DATA RECORD CURRENT-SALES-OUT.
41 ððð44ð ð1 CURRENT-SALES-OUT.

Figura 119 (Parte 1 de 3). Ejemplo de Utilización de SORT/MERGE

Apéndice G. Ejemplos de Proceso de Archivos 389


5763CB1 V3RðM5 91ð524 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
42 ððð45ð ð5 EMPL-NO PIC 9(6).
43 ððð46ð ð5 DEPT PIC 9(2).
44 ððð47ð ð5 SALES PIC 9(7)V99.
45 ððð48ð ð5 NAME-ADDR PIC X(61).
46 ððð49ð ð5 MONTH PIC X(2).
47 ððð5ðð FD YTD-SALES-FILE-IN
48 ððð51ð LABEL RECORDS STANDARD
49 ððð52ð DATA RECORD YTD-SALES-IN.
5ð ððð53ð ð1 YTD-SALES-IN.
51 ððð54ð ð5 EMPL-NO PIC 9(6).
52 ððð55ð ð5 DEPT PIC 9(2).
53 ððð56ð ð5 SALES PIC 9(7)V99.
54 ððð57ð ð5 NAME-ADDR PIC X(61).
55 ððð58ð ð5 MONTH PIC X(2).
56 ððð59ð FD YTD-SALES-FILE-OUT
57 ððð6ðð LABEL RECORDS STANDARD
58 ððð61ð DATA RECORD YTD-SALES-OUT.
59 ððð62ð ð1 YTD-SALES-OUT.
6ð ððð63ð ð5 EMPL-NO PIC 9(6).
61 ððð64ð ð5 DEPT PIC 9(2).
62 ððð65ð ð5 SALES PIC 9(7)V99.
63 ððð66ð ð5 NAME-ADDR PIC X(61).
64 ððð67ð ð5 MONTH PIC X(2).
65 ððð68ð FD PRINTER-OUT
66 ððð69ð LABEL RECORDS OMITTED
67 ððð7ðð DATA RECORD PRINT-LINE.
68 ððð71ð ð1 PRINT-LINE.
69 ððð72ð ð5 RECORD-LABEL PIC X(25).
7ð ððð73ð ð5 DISK-RECORD-DISPLAY PIC X(8ð).
71 ððð74ð WORKING-STORAGE SECTION.
72 ððð75ð ð1 SALES-FILE-IN-EOF-STATUS PIC X VALUE "F".
73 ððð76ð 88 SALES-FILE-IN-END-OF-FILE VALUE "T".
74 ððð77ð ð1 SALES-FILE-OUT-EOF-STATUS PIC X VALUE "F".
75 ððð78ð 88 SALES-FILE-OUT-END-OF-FILE VALUE "T".
76 ððð79ð ð1 YTD-SALES-OUT-EOF-STATUS PIC X VALUE "F".
77 ððð8ðð 88 YTD-SALES-OUT-END-OF-FILE VALUE "T".
78 ððð81ð PROCEDURE DIVISION.
ððð82ð OPEN-PRINTER-FILE SECTION.
ððð83ð ðð5-PRINTER-FILE.
79 ððð84ð OPEN OUTPUT PRINTER-OUT.
ððð85ð LIST-SORT-LIST-CURRENT-SALES SECTION.
ððð86ð ð1ð-LIST-SORT-CURRENT-SALES.
8ð ððð87ð SORT WORK-FILE
ððð88ð ON ASCENDING KEY DEPT OF SALES-RECORD
ððð89ð ON DESCENDING KEY SALES OF SALES-RECORD
ððð9ðð INPUT PROCEDURE SCREEN-DEPT
ððð91ð GIVING CURRENT-SALES-FILE-OUT.
ððð92ð ð2ð-LIST-SORTED-SALES.
81 ððð93ð OPEN INPUT CURRENT-SALES-FILE-OUT.
82 ððð94ð PERFORM 1ðð-PRINT-SALES-FILE-OUT
ððð95ð THRU 11ð-END-PRINT-SALES-FILE-OUT
ððð96ð UNTIL SALES-FILE-OUT-END-OF-FILE.
83 ððð97ð CLOSE CURRENT-SALES-FILE-OUT.
ððð98ð UPDATE-YEARLY-REPORT SECTION.
ððð99ð ð4ð-MERGE-CURRENT-PREVIOUS.
84 ðð1ððð MERGE WORK-FILE
ðð1ð1ð ON ASCENDING KEY DEPT OF SALES-RECORD
ðð1ð2ð ON ASCENDING KEY EMPL-NO OF SALES-RECORD
ðð1ð3ð ON ASCENDING KEY MONTH OF SALES-RECORD
ðð1ð4ð USING YTD-SALES-FILE-IN
ðð1ð5ð CURRENT-SALES-FILE-IN
ðð1ð6ð GIVING YTD-SALES-FILE-OUT.
ðð1ð7ð ð4ð-PRINT-YTD-SALES-OUT.
85 ðð1ð8ð OPEN INPUT YTD-SALES-FILE-OUT.
86 ðð1ð9ð PERFORM 12ð-READ-PRINT-YTD-SALES-OUT
ðð11ðð UNTIL YTD-SALES-OUT-END-OF-FILE.
87 ðð111ð CLOSE YTD-SALES-FILE-OUT
ðð112ð PRINTER-OUT.
88 ðð113ð STOP RUN.
ðð114ð SCREEN-DEPT SECTION.
ðð115ð ð6ð-S-D-1.
89 ðð116ð OPEN INPUT CURRENT-SALES-FILE-IN
9ð ðð117ð PERFORM ð7ð-READ-SELECT-DEPT THRU ð8ð-END-READ-SELECT-DEPT
ðð118ð UNTIL SALES-FILE-IN-END-OF-FILE.

Figura 119 (Parte 2 de 3). Ejemplo de Utilización de SORT/MERGE

390 COBOL/400 Guía del usuario


5763CB1 V3RðM5 91ð524 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
91 ðð119ð CLOSE CURRENT-SALES-FILE-IN.
92 ðð12ðð GO TO ð9ð-END-S-D-1.
ðð121ð ð7ð-READ-SELECT-DEPT.
93 ðð122ð READ CURRENT-SALES-FILE-IN
94 ðð123ð AT END MOVE "T" TO SALES-FILE-IN-EOF-STATUS
95 ðð124ð GO TO ð8ð-END-READ-SELECT-DEPT.
96 ðð125ð MOVE "UNSORTED CURRENT SALES ",
ðð126ð TO RECORD-LABEL OF PRINT-LINE.
97 ðð127ð MOVE CURRENT-SALES-IN TO DISK-RECORD-DISPLAY.
98 ðð128ð WRITE PRINT-LINE.
99 ðð129ð IF ON-SITE-EMPLOYEE
1ðð ðð13ðð MOVE CURRENT-SALES-IN TO SALES-RECORD
1ð1 ðð131ð RELEASE SALES-RECORD.
ðð132ð ð8ð-END-READ-SELECT-DEPT.
ðð133ð EXIT.
1ð2 ðð134ð ð9ð-END-S-D-1.
ðð135ð END-SCREEN-DEPT SECTION.
ðð136ð 1ðð-PRINT-SALES-FILE-OUT.
1ð3 ðð137ð READ CURRENT-SALES-FILE-OUT
1ð4 ðð138ð AT END MOVE "T" TO SALES-FILE-OUT-EOF-STATUS
1ð5 ðð139ð GO TO 11ð-END-PRINT-SALES-FILE-OUT.
1ð6 ðð14ðð MOVE "SORTED CURRENT SALES "
ðð141ð TO RECORD-LABEL OF PRINT-LINE.
1ð7 ðð142ð MOVE CURRENT-SALES-OUT TO DISK-RECORD-DISPLAY.
1ð8 ðð143ð WRITE PRINT-LINE.
ðð144ð 11ð-END-PRINT-SALES-FILE-OUT.
ðð145ð EXIT.
1ð9 ðð146ð 12ð-READ-PRINT-YTD-SALES-OUT.
11ð ðð147ð READ YTD-SALES-FILE-OUT
111 ðð148ð AT END MOVE "T" TO YTD-SALES-OUT-EOF-STATUS
112 ðð149ð GO TO 13ð-END-READ-PRT-YTD-SALES-OUT.
113 ðð15ðð MOVE "MERGED YTD SALES ",
ðð151ð TO RECORD-LABEL OF PRINT-LINE.
114 ðð152ð MOVE YTD-SALES-OUT TO DISK-RECORD-DISPLAY.
115 ðð153ð WRITE PRINT-LINE.
ðð154ð 13ð-END-READ-PRT-YTD-SALES-OUT.
ðð155ð EXIT.
\ \ \ \ \ F I N D E F U E N T E \ \ \ \ \

Figura 119 (Parte 3 de 3). Ejemplo de Utilización de SORT/MERGE

Apéndice G. Ejemplos de Proceso de Archivos 391


392 COBOL/400 Guía del usuario
Apéndice H. Ejemplo de Vuelco con Formato COBOL
La Figura 120 en la página 394 muestra un ejemplo de un vuelco con formato
| COBOL. Para estar seguro de que un vuelco está disponible cuando se produce
| alguna anomalía al ejecutar el programa, cambie el parámetro INQMSGRPY del
| trabajo (por ejemplo, mediante el mandato CHGJOB) por *RQD. Cuando se soli-
| cita, es posible especificar la generación de un vuelco.

La siguiente lista describe las áreas etiquetadas de la figura:


.A/ La excepción por la que se ha pedido el vuelco y la ubicación en el programa
en la que se ha producido la excepción.
.B/ El número de instrucción COBOL de la última operación de E/S que se ha
ejecutado antes de que se haya producido la excepción. Esta información
sólo aparece si se ha procesado como mínimo una operación de E/S.
.C/ La información actual para cada archivo. Esta información sólo aparece si el
programa tiene archivos.
.D/ Comienzo de los campos generados por el compilador (incluidos en el vuelco
si el usuario responde con una opción F).
.E/ Distintivos de E/S del archivo actual:
Bit Significado

1 El archivo está abierto


2 El archivo está bloqueado
3 Fin de archivo
4 (Reservado)
5 Archivo optativo
6 Comprobación de duplicados en archivo indexado durante la apertura
7 Fin de página
8 (Reservado).
.F/ Código de estado anterior.
.G/ Comienzo de la Tabla Global de Módulos (MGT).3
.H/ Último código de excepción.
.I/ Número de invocación del programa actual.
.J/ Nombre calificado de programa y biblioteca.
.K/ Comienzo de la Tabla Global del Programa (PGT).4
.L/ Número de invocación del programa principal COBOL.
.M/ Fecha del trabajo (AAMMDD).
.N/ Comienzo de los campos del usuario.
.O/ Campo con zona no válido impreso en hexadecimal.

3 La Tabla Global de Módulos (MGT) define un área común para el módulo. La tabla se utiliza para pasar información a las
subrutinas en tiempo de ejecución.
4 La Tabla Global del Programa (PGT) es un área de comunicaciones para la unidad de ejecución COBOL entera. Sólo hay una
PGT para la unidad de ejecución.

 Copyright IBM Corp. 1994 393


5763CB1 V3RðM5 Fuente COBOL AS/4ðð
INST NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S NOMCOPIA FECH/CAM
1 ððð1ðð IDENTIFICATION DIVISION. ð3/ð7/94
2 ððð2ðð PROGRAM-ID. XMPLDUMP. ð3/22/94
3 ððð3ðð AUTHOR. PROGRAMMER NAME. ð3/ð7/94
4 ððð4ðð INSTALLATION. COBOL DEVELOPMENT CENTRE. ð3/ð7/94
5 ððð5ðð DATE-WRITTEN. 11/27/88. ð3/ð7/94
6 ððð6ðð DATE-COMPILED. ð5/24/94 12:21:54. ð3/ð7/94
7 ððð7ðð ENVIRONMENT DIVISION. ð3/ð7/94
8 ððð8ðð CONFIGURATION SECTION. ð3/ð7/94
9 ððð9ðð SOURCE-COMPUTER. IBM-AS4ðð. ð3/ð7/94
1ð ðð1ððð OBJECT-COMPUTER. IBM-AS4ðð. ð3/ð7/94
11 ðð11ðð INPUT-OUTPUT SECTION. ð3/ð7/94
12 ðð12ðð FILE-CONTROL. ð3/ð7/94
13 ðð13ðð SELECT FILE-1 ASSIGN TO DISK-SALES. ð3/22/94
14 ðð14ðð DATA DIVISION. ð3/ð7/94
15 ðð15ðð FILE SECTION. ð3/ð7/94
16 ðð16ðð FD FILE-1 ð3/ð7/94
17 ðð17ðð LABEL RECORDS ARE STANDARD. ð2/17/94
18 ðð18ðð ð1 RECORD-1. ð3/ð7/94
19 ðð19ðð ð5 R-TYPE PIC X(1). ð2/17/94
2ð ðð2ððð ð5 R-AREA-CODE PIC 9(2). ð2/17/94
21 ðð21ðð 88 R-NORTH-EAST VALUES 15 THROUGH 3ð. ð2/17/94
22 ðð22ðð ð5 R-SALES-CAT-1 PIC S9(5)V9(2) COMP-3. ð2/17/94
23 ðð23ðð ð5 R-SALES-CAT-2 PIC S9(5)V9(2) COMP-3. ð2/17/94
24 ðð24ðð ð5 FILLER PIC X(1). ð2/17/94
ðð25ðð ð2/17/94
25 ðð26ðð WORKING-STORAGE SECTION. ð3/ð7/94
26 ðð27ðð ð1 W-SALES-VALUES. ð2/17/94
27 ðð28ðð ð5 W-CAT-1 PIC S9(8)V9(2). ð2/17/94
28 ðð29ðð ð5 W-CAT-2 PIC S9(8)V9(2). ð2/17/94
29 ðð3ððð ð5 W-TOTAL PIC S9(8)V9(2). ð2/17/94
ðð31ðð ð2/17/94
3ð ðð32ðð ð1 W-EDIT-VALUES. ð2/17/94
31 ðð33ðð ð5 FILLER PIC X(8) VALUE "TOTALS: ". ð2/17/94
32 ðð34ðð ð5 W-EDIT-1 PIC Z(7)9.9(2)-. ð2/17/94
33 ðð35ðð ð5 FILLER PIC X(3) VALUE SPACES. ð2/17/94
34 ðð36ðð ð5 W-EDIT-2 PIC Z(7)9.9(2)-. ð2/17/94
35 ðð37ðð ð5 FILLER PIC X(3) VALUE SPACES. ð2/17/94
36 ðð38ðð ð5 W-EDIT-TOTAL PIC Z(7)9.9(2)-. ð2/17/94
ðð39ðð ð2/17/94
37 ðð4ððð ð1 END-FLAG PIC X(1) VALUE SPACE. ð2/17/94
38 ðð41ðð 88 END-OF-INPUT VALUE "Y". ð2/17/94
ðð42ðð ð2/17/94
39 ðð43ðð PROCEDURE DIVISION. ð2/17/94
ðð44ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ð2/17/94
ðð45ðð\ ABRE LA ENTRADA, BORRA LOS TOTALES, LLAMA AL PROCESO \ ð2/17/94
ðð46ðð\ PRINCIPAL, VISUALIZA LOS RESULTADOS Y TERMINA LA EJECUCIÓN \ ð2/17/94
ðð47ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ð2/17/94
ðð48ðð P-START. ð2/17/94
4ð ðð49ðð OPEN INPUT FILE-1. ð2/17/94
41 ðð5ððð MOVE ZEROS TO W-SALES-VALUES. ð2/17/94
42 ðð51ðð PERFORM P-MAIN UNTIL END-OF-INPUT. ð2/17/94
ðð52ðð ð2/17/94
43 ðð53ðð MOVE W-CAT-1 TO W-EDIT-1. ð2/17/94
44 ðð54ðð MOVE W-CAT-2 TO W-EDIT-2. ð2/17/94
45 ðð55ðð MOVE W-TOTAL TO W-EDIT-TOTAL. ð2/17/94
46 ðð56ðð DISPLAY W-EDIT-VALUES.
47 ðð57ðð STOP RUN.
ðð58ðð
ðð59ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð6ððð\ LEE ARCH. ENTRADA Y SÓLO PROCESA LOS REG. CORRESPONDIENTES \
ðð61ðð\ AL ÁREA NOROESTE. AL LLEGAR FINAL DE ENTRADA, PONGA EL DIST. \
ðð62ðð\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ðð63ðð P-MAIN.
48 ðð64ðð READ FILE-1 AT END SET END-OF-INPUT TO TRUE.
5ð ðð65ðð IF R-NORTH-EAST AND NOT END-OF-INPUT
51 ðð66ðð ADD R-SALES-CAT-1 TO W-CAT-1, W-TOTAL
52 ðð67ðð ADD R-SALES-CAT-2 TO W-CAT-2, W-TOTAL.
\ \ \ \ \ F I N D E F U E N T E \ \ \ \ \

Excepción MCH12ð2 en programa XMPLDUMP en QTEMP en número de instrucción


MI ðð5C sentencia COBOL número 51.
La última operación de E/S ha ocurrido en la instrucción 48..B/
LBE79ð3-Información perteneciente al archivo FILE-1..C/
LBE79ð5-El archivo está abierto.
LBE79ð6-Última operación de E/S completada para el archivo era READ.
LBE79ð7-Último estado de archivo era ð4.
LBE791ð-Último estado de archivo ampliado era.

Figura 120 (Parte 1 de 10). Ejemplo de un Vuelco con Formato COBOL

394 COBOL/400 Guía del usuario


VUELCO DE DATOS PARA EL PROGRAMA XMPLDUMP.QTEMP 13:39:ð8
ð5/24/94
NOMBRE DESPL. ATRIBUTOS VALOR .D/
.ADBUF ððð48ð POINTER(SPP) NULL
.ADBUFVL ðððB9ð CHAR(68) ' '
ðððB9ð VALUE IN HEX 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ðððBB8 +41 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
.ADDEV ððð4B4 CHAR(1ð) ' ' 'ðððððððððððððððððððð'X
.ADENV ððð493 CHAR(1) 'I'
.ADFILE ððð4Cð POINTER(SPP) NULL
.ADFUNC ððð49ð CHAR(1) ' ' 'ðð'X
.ADLN ððð494 BINARY(2) ð
.ADMID ððð496 BINARY(2) ð
.ADPGM ððð49B CHAR(1ð) 'XMPLDUMP '
.ADRLN ððð498 BINARY(2) ð
.ADRTN ððð47ð POINTER(IP) NULL
.ADRTYP ððð49A CHAR(1) ' ' 'ðð'X
.ADTOD ððð4A5 CHAR(15) ' ' 'ðððððððððððððððððððððððððððððð'X
.ADTYP ððð491 BINARY(2) ð
.BINSUB ððð558 BINARY(4) ð
.BIN2 ððð55C BINARY(2) ð
.BPCA ððð4Bð CHAR(32767) ' A T Dð1 <HHH D12 <HHH D15 <H'
ððð5ðA +91 'HH D15 <HHH D22 <HHH D99 <HHH '
ððð564 +181 ' Dð1 <HHH D23 <HHH D25 <HHH '
ððð4Bð VALUE IN HEX '8ððððððððððððððððð3DC19EB7ðððA4ðððð1ððA3ðð19ðððE4ð4ð4ð4ð4ð4ð4ð4ðC4FðF14444444C88'X
ððð4D8 +41 '88888C4ð4ð4ðððð1ððððððð1ðððððððð4ðC4F1F24444444C8888888C4ð4ð4ðððð1ððððððð2ðððððð'X
ððð5ðð +81 'ðð4ðC4F1F54444444C8888888C4ð4ð4ðððð1ððððððð3ðððððððð4ðC4F1F54444444C8888888C4ð4ð'X
ððð528 +121 '4ðððð1ððððððð4ðððððððð4ðC4F2F24444444C8888888C4ð4ð4ðððð1ððððððð5ðððððððð4ðC4F9F9'X
ððð55ð +161 '4444444C8888888C4ð4ð4ðððð1ððððððð6ðððððððð4ðC4FðF14444444C8888888C4ð4ð4ðððð1ðððð'X
ððð578 +2ð1 'ððð7ðððððððð4ðC4F2F34444444C8888888C4ð4ð4ðððð1ððððððð8ðððððððð4ðC4F2F54444444C88'X
ððð5Að +241 '88888C4ð4ð4ðððð1ððððððð9ðððððððð'X
.BPCACTR ððð4Cð BINARY(2) 1
.BPCAFB ððð4C6 BINARY(2) 14
.BPCAMXR ððð4C2 BINARY(2) 163
.BPCARCD ððð4Bð POINTER(SPP) SPACE OFFSET 1632 'ððððð66ð'X
OBJECT SALES COBOLEX SALESFILE
.BPCARIO ððð4C4 BINARY(2) 25
.BPð1CA ððð4Bð CHAR(32767) ' A T Dð1 <HHH D12 <HHH D15 <H'
ððð5ðA +91 'HH D15 <HHH D22 <HHH D99 <HHH '
ððð564 +181 ' Dð1 <HHH D23 <HHH D25 <HHH '
ððð4Bð VALUE IN HEX '8ððððððððððððððððð3DC19EB7ðððA4ðððð1ððA3ðð19ðððE4ð4ð4ð4ð4ð4ð4ð4ðC4FðF14444444C88'X
ððð4D8 +41 '88888C4ð4ð4ðððð1ððððððð1ðððððððð4ðC4F1F24444444C8888888C4ð4ð4ðððð1ððððððð2ðððððð'X
ððð5ðð +81 'ðð4ðC4F1F54444444C8888888C4ð4ð4ðððð1ððððððð3ðððððððð4ðC4F1F54444444C8888888C4ð4ð'X
ððð528 +121 '4ðððð1ððððððð4ðððððððð4ðC4F2F24444444C8888888C4ð4ð4ðððð1ððððððð5ðððððððð4ðC4F9F9'X
ððð55ð +161 '4444444C8888888C4ð4ð4ðððð1ððððððð6ðððððððð4ðC4FðF14444444C8888888C4ð4ð4ðððð1ðððð'X
ððð578 +2ð1 'ððð7ðððððððð4ðC4F2F34444444C8888888C4ð4ð4ðððð1ððððððð8ðððððððð4ðC4F2F54444444C88'X
ððð5Að +241 '88888C4ð4ð4ðððð1ððððððð9ðððððððð'X
.BPð1CTR ððð4Cð BINARY(2) 1
.BPð1FB ððð4C6 BINARY(2) 14
.BPð1MXR ððð4C2 BINARY(2) 163
.BPð1RCD ððð4Bð POINTER(SPP) SPACE OFFSET 1632 'ððððð66ð'X
OBJECT SALES COBOLEX SALESFILE
.BPð1RIO ððð4C4 BINARY(2) 25
.BSTRING NOT ADDRESSABLE
.BUFFER NOT ADDRESSABLE
.BUFPTR ððð77ð POINTER(SPP) NULL
.CALERP ððð58ð POINTER(SPP) SPACE OFFSET 1376 'ððððð56ð'X
OBJECT PSSA
.CALLOWR ðððC7ð CHAR(27) ' ETAOINSHRDLUCMFWYPVBGKQJXZ' '4ð85A381968995A288998493A4839486A6A897A58287929891A7A9'X
.CALPHAB ðððC2ð CHAR(53) ' ETAOINSHRDLUCMFWYPVBGKQJXZETAOINSHRDLUCMFWYPVBGKQJXZ'
ðððC2ð VALUE IN HEX '4ðC5E3C1D6C9D5E2C8D9C4D3E4C3D4C6E6E8D7E5C2C7D2D8D1E7E985A381968995A288998493A483'X
ðððC48 +41 '9486A6A897A58287929891A7A9'X
.CALUPPR ðððC55 CHAR(27) ' ETAOINSHRDLUCMFWYPVBGKQJXZ'
.CIMBSGN ðððBDA CHAR(6ð) 'ð123456789 JKLMNOPQR STUVWXYZ ABCDEFGHI STUVWXYZ'
ðððBDA VALUE IN HEX 'FðF1F2F3F4F5F6F7F8F9DðD1D2D3D4D5D6D7D8D9AðA1A2A3A4A5A6A7A8A9BðB1B2B3B4B5B6B7B8B9'X
ðððCð2 +41 'CðC1C2C3C4C5C6C7C8C9EðE1E2E3E4E5E6E7E8E9'X
.CNUMERC ðððC16 CHAR(1ð) 'ð123456789'
.CPADCHR ðððC8B CHAR(1) ' '
.CRCLEAR ðððDðð POINTER(SYP) OBJECT QLRCLEAR
CONTEXT QSYS
.CSEPSGN ðððBD8 CHAR(2) '+-'
.DBUGRTN ððð45ð POINTER(IP) NULL
.DEVPTR ððð73ð POINTER(SPP) SPACE OFFSET 324 'ððððð144'X
OBJECT SALES COBOLEX SALESFILE
.DISPPOS ðððCBð BINARY(2) ð
.DISPPTR ðððCAð POINTER(SPP) NULL
.DLINENO ððð552 CHAR(6) ' ' 'ðððððððððððð'X
.DMCACIN ððð87ð BINARY(2) 121
.DMCACQR ððð872 BINARY(2) 66

Figura 120 (Parte 2 de 10). Ejemplo de un Vuelco con Formato COBOL

Apéndice H. Ejemplo de Vuelco con Formato COBOL 395


.DMCBLKR ððð3BD CHAR(1) '\'
.DMCCPCL ððð178 BINARY(2) 13
.DMCCPOP ððð17A BINARY(2) 17
.DMCDBOF ðððð2ð BINARY(4) 7ð4
.DMCDDS ððð2Cð CHAR(298) ' R A ð A ð '
ððð31A +91 ' TY '
ððð374 +181 ' 3 CPF \ '
ððð2Cð VALUE IN HEX 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð8ððððððððððð8ððð'X
ððð2E8 +41 'ðð1ððð99ðFððð4Bð8ððððððððððððððððð3DC19EB7ððð6Fð8ððððððððððððððððð3DC19EB7ððð6Fð'X
ððð31ð +81 '48ððððððððððððððððððððA3E8ðððð11ðððððððððððððððððððððððððððððððððððððððððððððð19'X
ððð338 +121 'ðððððððEðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ððð36ð +161 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ððð388 +2ð1 'ððððððððððððððððððððððððððððððððððððððððððððððððððððððððF3ððððð1ðððððððððððððððð'X
ððð3Bð +241 'ððFFððððððC3D7C6ðððððððððð5CEððð'X
.DMCDELT ððð166 BINARY(2) 69
.DMCDROP ððð874 BINARY(2) 71
.DMCFDEL ððð3E9 CHAR(1) ' ' 'ðð'X
.DMCFEOD ððð168 BINARY(2) 111
.DMCFRCE ððð16A BINARY(2) 69
.DMCGET ððð158 BINARY(2) 77ð
.DMCGETD ððð15A BINARY(2) 14
.DMCGETK ððð15C BINARY(2) 69
.DMCLINK ððð7A5 BINARY(2) ð
.DMCODP ðððððð CHAR(32767) 'E M M F A '
ðððð5A +91 ' A DBSA'
ððððB4 +181 'LES COBOLEX SALESFILE A'
ðððððð VALUE IN HEX '85ððððð2ðððð14D4ðððð14D4ððððððBðððððð14ðððððð1C6ððððð28ðððððððððððððð2Cððððððððð'X
ðððð28 +41 'ððððððððððððð14ððððððððððððððððððððððððððððððððððððððððððððððððððð3DC19EB7ðððDFF'X
ðððð5ð +81 'ðððððððððððððððððððððððððððððððð8ððððððððððððððððð3DCððð36ðððAEð8ððððððððððððððð'X
ðððð78 +121 'ðð3DC19EB7ðð189Bððððððððððððððððððððððððððððððððð19ððððððððððððððððððððCðððððððð'X
ððððAð +161 'ðCððððððððððððððððð4BðððððððððððC4C2E2C1D3C5E24ð4ð4ð4ð4ðC3D6C2F3F8C5E74ð4ð4ððððð'X
ððððC8 +2ð1 'ðððððððððððððððððððððððððððððððððððððððððððEððððE2C1D3C5E2C6C9D3C54ððððð1ðð4ðððð'X
ððððFð +241 'ðððððððððððððððððððððððððððð11C1'X
.DMCOFFS ðððð1ð BINARY(4) 32ð
.DMCPTGT ððð162 BINARY(2) 69
.DMCPUT ððð16ð BINARY(2) 69
.DMCPUTD ððð15E BINARY(2) 69
.DMCRLSE ððð17ð BINARY(2) 69
.DMCRSTD ððð16E BINARY(2) 69
.DMCSPDD ððð16C BINARY(2) 69
.DMCSPTB ððð17C BINARY(2) ð
.DMCTBLE ððð17E BINARY(2) 1
.DMCUPD ððð164 BINARY(2) 69
.DMPBDMJ NOT ADDRESSABLE
.DMPBDSE NOT ADDRESSABLE
.DMPCDFO ððð1C6 BINARY(2) 144
.DMPCDFP ððð79ð POINTER(SPP) NULL
.DMPDBFB NOT ADDRESSABLE
.DMPDBFL ððð19ð CHAR(1) ' ' 'ðð'X
.DMPDENT ððð144 CHAR(13ð) DIMENSION(25ð)
ððð144 (1) 'DATABASE ? '
ððð19E +91 ' '
ððð144 VALUE IN HEX 'C4C1E3C1C2C1E2C54ð4ðððððððððððððððððððððð3ð2ðððEðð45ðð45ðð45ðð45ðð45ðð45ðð6Fðð45'X
ððð16C +41 'ðð45ðð45ðð45ðBFDðð45ðð45ðððDðð11ððððððð1ðððððððððððððððððððððððððððððððððððððððð'X
ððð194 +81 2 LINES OF ZEROES SUPPRESSED
ððð1C6 (2) ' SALESFILE '
ððð22ð +91 ' '
ððð1C6 VALUE IN HEX 'ðð9ðððððððððððððððð1ððððððððððððððððððð1E2C1D3C5E2C6C9D3C54ððððððððððððððððððððð'X
ððð1EE +41 'ðððððððððððEðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ððð216 +81 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ððð23E +121 'ðððððððððððððð11ðððð'X
ððð248 (3) ' R '
ððð2A2 +91 ' R AA '
ððð248 VALUE IN HEX 'ðððððððððððððððððððððððððððððððððð22ððððððððððððððððððð1ððððð48ðððð4ðððððððððððð'X
ððð27ð +41 'ððððððð1ðððððð11ððððððððððððððððððððððð2ðð3ððððððððððððððððð3ððððððððððððððððððð'X
ððð298 +81 'ðð1ððð99ðEðððDFFðððððððððððððð18ðð1ððð99ðBðððB1ð8181ðððððððððððððððððððððððððððð'X
ððð2Cð +121 'ðððððððððððððððððððð'X
ððð2CA (4) ' R A ð A ð TY '
ððð324 +91 ' '
ððð2CA VALUE IN HEX 'ðððððððððððððððððððððððððððððððððððððððððððð8ððððððððððð8ððððð1ððð99ðFððð4Bð8ððð'X
ððð2F2 +41 'ðððððððððððððð3DC19EB7ððð6Fð8ððððððððððððððððð3DC19EB7ððð6Fð48ðððððððððððððððððð'X
ððð31A +81 'ððA3E8ðððð11ðððððððððððððððððððððððððððððððððððððððððððððð19ðððððððEðððððððððððð'X
ððð342 +121 'ðððððððððððððððððððð'X
ððð34C (5) ' 3 '
ððð3A6 +91 ' CPF \ T '
ððð34C VALUE IN HEX 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ððð374 +41 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ððð39C +81 'ððððððððððððððððF3ððððð1ððððððððððððððððððFFððððððC3D7C6ðððððððððð5CEððððððððð3C'X

Figura 120 (Parte 3 de 10). Ejemplo de un Vuelco con Formato COBOL

396 COBOL/400 Guía del usuario


ððð3C4 +121 'ððA3ðððððððððððððððð'X
ððð3CE (6) ' '
ððð428 +91 ' SALESFILE 2A248'
ððð3CE VALUE IN HEX 'ððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð1ðððð'X
ððð3F6 +41 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ððð41E +81 'ðððððððððððððððððððððð11ðððððððððððððððððððððððððððððððEððððððððððð1E2C1D3C5E2C6'X
ððð446 +121 'C9D3C54ðððF2C1F2F4F8'X
ððð45ð (7) '33FFð3CF U & '
ððð4AA +91 ' A T Dð'
ððð45ð VALUE IN HEX 'F3F3C6C6FðF3C3C6ðððððððððððEððð1ððððððð1ðððððððððððððððððððððððððððððððððððððððð'X
ððð478 +41 'ððððððððððððððððððððððððððððððððððððððððððððððððA4ðððððððððððð5ððððððððððððððððð'X
ððð4Að +81 'ðððððððððððððððððððððððððððððððð8ððððððððððððððððð3DC19EB7ðððA4ðððð1ððA3ðð19ðððE'X
ððð4C8 +121 '4ð4ð4ð4ð4ð4ð4ð4ðC4Fð'X
ððð4D2 (8) '1 <HHH D12 <HHH D15 <HHH D15 <HHH '
ððð52C +91 ' D22 <HHH D99 <'
ððð4D2 VALUE IN HEX 'F14444444C8888888C4ð4ð4ðððð1ððððððð1ðððððððð4ðC4F1F24444444C8888888C4ð4ð4ðððð1ðð'X
ððð4FA +41 'ððððð2ðððððððð4ðC4F1F54444444C8888888C4ð4ð4ðððð1ððððððð3ðððððððð4ðC4F1F54444444C'X
ððð522 +81 '8888888C4ð4ð4ðððð1ððððððð4ðððððððð4ðC4F2F24444444C8888888C4ð4ð4ðððð1ððððððð5ðððð'X
ððð54A +121 'ðððð4ðC4F9F94444444C'X
ððð554 (9) 'HHH Dð1 <HHH D23 <HHH D25 <HHH '
ððð5AE +91 ' D88 <HHH D99 <HHH '
ððð554 VALUE IN HEX '8888888C4ð4ð4ðððð1ððððððð6ðððððððð4ðC4FðF14444444C8888888C4ð4ð4ðððð1ððððððð7ðððð'X
ððð57C +41 'ðððð4ðC4F2F34444444C8888888C4ð4ð4ðððð1ððððððð8ðððððððð4ðC4F2F54444444C8888888C4ð'X
ððð5A4 +81 '4ð4ðððð1ððððððð9ðððððððð4ðC4F8F84444444C8888888C4ð4ð4ðððð1ðððððððAðððððððð4ðC4F9'X
ððð5CC +121 'F94444444C8888888C4ð'X
ððð5D6 (1ð) ' D22 <HHH Dð1 <HHH D66 <HHH D2'
ððð63ð +91 '2 <HHH D77 <HHH '
ððð5D6 VALUE IN HEX '4ð4ðððð1ðððððððBðððððððð4ðC4F2F24444444C8888888C4ð4ð4ðððð1ðððððððCðððððððð4ðC4Fð'X
ððð5FE +41 'F14444444C8888888C4ð4ð4ðððð1ðððððððDðððððððð4ðC4F6F64444444C8888888C4ð4ð4ðððð1ðð'X
ððð626 +81 'ðððððEðððððððð4ðC4F2F24444444C8888888C4ð4ð4ðððð1ðððððððFðððððððð4ðC4F7F74444444C'X
ððð64E +121 '8888888C4ð4ð4ðððð1ðð'X
ððð658 (11) ' H25ðððððððð < '
ððð658 VALUE IN HEX 'ðððð1ððððððððð4ðC8F2F5FðFðFðFðFðFðFðFð4ð4ð4Cððð1ðððððð11ðððððððð4ð4ð4ð4ð4ð4ð4ð4ð'X
ððð68ð +41 '4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð'X
ððð6A8 +81 '4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð'X
ððð6Dð +121 '4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð'X
ðð14ðE (12-38) ' '
ðð149ð (39) ' '
ðð14EA +91 ' '
ðð149ð VALUE IN HEX '4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð'X
ðð14B8 +41 '4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ððððððððððððððððððððððððð'X
ðð14Eð +81 2 LINES OF ZEROES SUPPRESSED
CANNOT DUMP - SPACE ADDRESSING OR BOUNDARY ALIGNMENT EXCEPTION
.DMPDEVN ððð1E6 CHAR(1ð) ' ' 'ðððððððððððððððððððð'X
.DMPDIOF NOT ADDRESSABLE
.DMPDRN NOT ADDRESSABLE
.DMPDSEK NOT ADDRESSABLE
.DMPDVNM ððð144 CHAR(1ð) 'DATABASE '
.DMPENT ððð144 CHAR(13ð) 'DATABASE ? '
ððð19E +91 ' '
ððð144 VALUE IN HEX 'C4C1E3C1C2C1E2C54ð4ðððððððððððððððððððððð3ð2ðððEðð45ðð45ðð45ðð45ðð45ðð45ðð6Fðð45'X
ððð16C +41 'ðð45ðð45ðð45ðBFDðð45ðð45ðððDðð11ððððððð1ðððððððððððððððððððððððððððððððððððððððð'X
ððð194 +81 2 LINES OF ZEROES SUPPRESSED
.DMPFBAC ððððBð CHAR(32767) 'DBSALES COBOLEX SALESFILE AR NU '
ððð1ðA +91 '& T DATABASE '
ððð164 +181 ' ? '
ððððBð VALUE IN HEX 'C4C2E2C1D3C5E24ð4ð4ð4ð4ðC3D6C2F3F8C5E74ð4ð4ððððððððððððððððððððððððððððððððððððð'X
ððððD8 +41 'ðððððððððððEððððE2C1D3C5E2C6C9D3C54ððððð1ðð4ðððððððððððððððððððððððððððððððð11C1'X
ððð1ðð +81 'D9ððD5A4ðððððððððððð5ðððððððððððððððððððððððððððððððA3ðððððð19ððððð3Eððððððððððð'X
ððð128 +121 'ððððððððððððððð1ððððððð1ð2ððððððððððððððððððððððððð1ððð1C4C1E3C1C2C1E2C54ð4ððððð'X
ððð15ð +161 'ððððððððððððððððð3ð2ðððEðð45ðð45ðð45ðð45ðð45ðð45ðð6Fðð45ðð45ðð45ðð45ðBFDðð45ðð45'X
ððð178 +2ð1 'ðððDðð11ððððððð1ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ððð1Að +241 'ðððððððððððððððððððððððððððððððð'X
.DMPFBAT ððððFF CHAR(2) 'AR'
.DMPFBCL ððððF9 BINARY(2) ð
.DMPFBCT ðð8ð38 BINARY(2) CANNOT DUMP - SPACE ADDRESSING OR BOUNDARY ALIGNMENT EXCEPTION
.DMPFBDC ððððF2 BINARY(2) ð
.DMPFBDE ðð8ð3C CHAR(5ð) DIMENSION(32)
CANNOT DUMP - SPACE ADDRESSING OR BOUNDARY ALIGNMENT EXCEPTION
.DMPFBDU ððð1ð1 CHAR(1) ' ' 'ðð'X
.DMPFBFN ððððB2 CHAR(1ð) 'SALES '
.DMPFBH1 NOT ADDRESSABLE
.DMPFBH2 NOT ADDRESSABLE
.DMPFBIB ððððEA BINARY(4) 41ðð
.DMPFBLN ððððBC CHAR(1ð) 'COBOLEX '
.DMPFBLO ððð117 BINARY(2) ð
.DMPFBLP ððð74ð POINTER(SPP) NULL
.DMPFBLS NOT ADDRESSABLE

Figura 120 (Parte 4 de 10). Ejemplo de un Vuelco con Formato COBOL

Apéndice H. Ejemplo de Vuelco con Formato COBOL 397


.DMPFBL1 ððððDC BINARY(2) 14
.DMPFBL2 ððððDE BINARY(2) ð
.DMPFBMF ððð123 CHAR(1) ' ' 'ðð'X
.DMPFBMN ððððEð CHAR(1ð) 'SALESFILE '
.DMPFBND ðð8ð3A BINARY(2) CANNOT DUMP - SPACE ADDRESSING OR BOUNDARY ALIGNMENT EXCEPTION
.DMPFBOB ððððEE BINARY(4) ð
.DMPFBOF ððð1ðD CHAR(1ð) ' ' 'ðððððððððððððððððððð'X
.DMPFBOL ððððF4 CHAR(3) ' ' 'ðððððð'X
.DMPFBPO ððð11F BINARY(4) 992
.DMPFBQN ððð124 CHAR(1ð) ' ' 'ðððððððððððððððððððð'X
.DMPFBRC ððððFB BINARY(4) 17
.DMPFBRW ððððF7 BINARY(2) ð
.DMPFBSC ððð1ð2 CHAR(1) 'N'
.DMPFBSF ððððC6 CHAR(1ð) ' ' 'ðððððððððððððððððððð'X
.DMPFBSL ððððDð CHAR(1ð) ' ' 'ðððððððððððððððððððð'X
.DMPFBSN ððððDA BINARY(2) ð
.DMPFBTY ððððBð CHAR(2) 'DB'
.DMPFBUF ððð1ð3 CHAR(1ð) 'U & ' 'A4ðððððððððððð5ððððð'X
.DMPFBVL NOT ADDRESSABLE
.DMPIOFB ððð1C6 CHAR(32767) ' SALESFILE '
ððð22ð +91 ' '
ððð27A +181 ' R R AA '
ððð1C6 VALUE IN HEX 'ðð9ðððððððððððððððð1ððððððððððððððððððð1E2C1D3C5E2C6C9D3C54ððððððððððððððððððððð'X
ððð1EE +41 'ðððððððððððEðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ððð216 +81 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ððð23E +121 'ðððððððððððððð11ðððððððððððððððððððððððððððððððððððððð22ððððððððððððððððððð1ðððð'X
ððð266 +161 'ð48ðððð4ððððððððððððððððððð1ðððððð11ððððððððððððððððððððððð2ðð3ððððððððððððððððð'X
ððð28E +2ð1 '3ððððððððððððððððððððð1ððð99ðEðððDFFðððððððððððððð18ðð1ððð99ðBðððB1ð8181ðððððððð'X
ððð2B6 +241 'ðððððððððððððððððððððððððððððððð'X
.DMPIOFS ððð1C6 CHAR(144) ' SALESFILE '
ððð22ð +91 ' '
ððð1C6 VALUE IN HEX 'ðð9ðððððððððððððððð1ððððððððððððððððððð1E2C1D3C5E2C6C9D3C54ððððððððððððððððððððð'X
ððð1EE +41 'ðððððððððððEðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ððð216 +81 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ððð23E +121 'ðððððððððððððð11ðððððððððððððððððððððððððððððððð'X
.DMPKYLN NOT ADDRESSABLE
.DMPNDEV ððð142 BINARY(2) 1
.DMPOFBS ððððBð CHAR(17126) DIMENSION(2)
CANNOT DUMP - SPACE ADDRESSING OR BOUNDARY ALIGNMENT EXCEPTION
.DMPRCD NOT ADDRESSABLE
.DMPRCDN NOT ADDRESSABLE
.DMPRDUP NOT ADDRESSABLE
.DMPRFMT ððð1DA CHAR(1ð) 'SALESFILE '
.DMPRRN NOT ADDRESSABLE
.DMPSRC NOT ADDRESSABLE
.EXCODE ðððD3ð CHAR(1) ' ' 'ðð'X
.EXMSGID ðððD35 CHAR(4) ' ' 'ðððððððð'X
.EXPARMS ðððD3ð CHAR(12) ' ' 'ðððððððððððððððððððððððð'X
.EXPTR ðððD4ð POINTER(SPP) SPACE OFFSET 3376 'ðððððD3ð'X
OBJECT PSSA
.FCLPP ððð6DF CHAR(3) ' ' 'ðððððð'X
.FCLSTC ððð6DC CHAR(12) ' ' 'ðððððððððððððððððððððððð'X
.FCLSTC# ððð6Dð CHAR(12) ' PU ' 'ðDððð3D7E44ðð6ððð2ððð1FF'X
.FCLSTP ððð6FF CHAR(21) ' ' 'ðððððððððððððððððððððððððððððððððððððððððð'X
.FCLSTP# ððð6EA CHAR(21) ' ' 'ð9ððð2ðððððAððð2ðððððBððð2ðððððCððð2ððððFF'X
.FCPARM ððð5Bð CHAR(22) ' '
.FCPARMP ððð5Dð POINTER(SPP) SPACE OFFSET 1456 'ððððð5Bð'X
OBJECT PSSA
.FCPTR ððð5Að POINTER(SYP) OBJECT QLREXHAN
CONTEXT QSYS
.FIB ððð8Að CHAR(32767) 'FILE-1 ð4ðð '
ððð8FA +91 ' A '
ððð954 +181 ' '
ððð8Að VALUE IN HEX 'C6C9D3C56ðF14ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ððð8ðð3ððððð1FðF4FðFð'X
ððð8C8 +41 'ððð4ðððððððððððððððððððððððððððððððð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ðððððððððð1ððð1ððð1ðððCðð'X
ððð8Fð +81 '8ððððððððððððððððð3DCððð36ðððAEððððððððððððððððððððððððððððððððððððððððððððððððð'X
ððð918 +121 'ðððððððððððððððððððððððððððððððððððððððððððððððð8ððððððððððððððððð3DC19EB7ððð89ð'X
ððð94ð +161 '4ð4ð4ð4ð4ð4ð4ð4ð4ð4ðððð1ðððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ððð968 +2ð1 2 LINES OF ZEROES SUPPRESSED
.FIB#OPT ððð62C CHAR(8) ' ' 'ðððððððððððððððð'X
.FIB#OP1 NOT ADDRESSABLE
.FIBACC ððð8E9 BINARY(2) 1
.FIBACQ ððð6E8 BINARY(2) ð
.FIBACTL ððð6Cð CHAR(8) ' ' '16ððð4ððððððððFF'X
.FIBALT ððð8BE CHAR(1) ' ' 'ðð'X
.FIBCA ððð955 CHAR(22) ' ' 'ðððððððððððððððððððððððððððððððððððððððððððð'X
.FIBCFMT ððð961 CHAR(1ð) ' ' 'ðððððððððððððððððððð'X
.FIBCFS ððð8C4 CHAR(2) 'ð4'

Figura 120 (Parte 5 de 10). Ejemplo de un Vuelco con Formato COBOL

398 COBOL/400 Guía del usuario


.FIBCFS1 ððð8C4 CHAR(1) 'ð'
.FIBCFS2 ððð94C CHAR(4) ' ' 'ðððððððð'X
.FIBCHAN ððð92ð POINTER(SPP) NULL
.FIBCKID ððð955 ZONED(2,ð) \\ 'ðððð'X
.FIBCOP ððð8Cð CHAR(4) ' ' 'ð3ððððð1'X
.FIBCRP ððð8E4 CHAR(1) ' ' 'ðð'X
.FIBCTID ððð957 CHAR(1ð) ' ' 'ðððððððððððððððððððð'X
.FIBCTL ððð75ð POINTER(SPP) NULL
.FIBCUR ððð8Cð CHAR(6) ' ð4' 'ð3ððððð1FðF4'X
.FIBCURK ððð634 CHAR(123) ' '
ððð68E +91 ' '
ððð634 VALUE IN HEX 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ððð65C +41 3 LINES OF ZEROES SUPPRESSED
.FIBDEVC ððð8E5 BINARY(2) ð
.FIBDEVI ððð94A BINARY(2) 1
.FIBDEVN ððð94ð CHAR(1ð) ' '
.FIBFLGS ððð8BF CHAR(1) ' ' '8ð'X .E/
.FIBFMT ððð8DA CHAR(1ð) ' '
.FIBFN ððð8Að CHAR(3ð) 'FILE-1 '
.FIBK#LN ððð62D BINARY(2) ð
.FIBK#R# ððð62F BINARY(4) ð
.FIBK#RK ððð631 BINARY(2) ð
.FIBK#TP ððð62C CHAR(1) ' ' 'ðð'X
.FIBKCGK ððð6ðð CHAR(8) ' ' 'ð8ððð4ððððððððð9'X
.FIBKCGR ððð6ð8 CHAR(8) ' ' 'ð2ððð4ððððððððFF'X
.FIBKCPD ððð61ð CHAR(8) ' ' 'ð4ððð4ððððððððFF'X
.FIBKCTL ððð618 BINARY(2) ð
.FIBKDLN ððð628 BINARY(2) 2
.FIBKDM# ððð62A BINARY(2) ð
.FIBKDTP ððð627 CHAR(1) ' ' 'ðF'X
.FIBKEY ððð8CA BINARY(4) ð
.FIBKFLN ððð61B BINARY(2) 1ð
.FIBKFMT ððð61D CHAR(1ð) ' '
.FIBKFTP ððð61A CHAR(1) ' ' 'ð1'X
.FIBKKEY ððð636 CHAR(121) ' '
ððð69ð +91 ' '
ððð636 VALUE IN HEX 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ððð65E +41 3 LINES OF ZEROES SUPPRESSED
.FIBKKLN ððð634 BINARY(2) ð
.FIBKKTP ððð633 CHAR(1) ' ' 'ðð'X
.FIBKLEN ððð8CE BINARY(2) ð
.FIBKSTC ððð62C CHAR(1) ' ' 'ðð'X
.FIBKSTE ððð631 CHAR(1) ' ' 'ðð'X
.FIBKSTL ððð62D BINARY(2) ð
.FIBKSTT ððð62F BINARY(2) ð
.FIBLBO ððð8Dð BINARY(2) ð
.FIBLFT ððð8CC BINARY(2) ð
.FIBLIN ððð8CA BINARY(2) ð
.FIBLINE ððð8D2 BINARY(2) ð
.FIBLTO ððð8CE BINARY(2) ð
.FIBMBRN ððð9D6 CHAR(1ð) 'SALESFILE '
.FIBOFMT ððð9CC CHAR(1ð) ' ' 'ðððððððððððððððððððð'X
.FIBOFS ððð8C6 CHAR(2) 'ðð' .F/
.FIBOFS1 ððð8C6 CHAR(1) 'ð'
.FIBOKEY ððð953 CHAR(121) ' '
ððð9AD +91 ' '
ððð953 VALUE IN HEX 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ððð97B +41 3 LINES OF ZEROES SUPPRESSED
.FIBOKLN ððð951 BINARY(2) ð
.FIBOLDK ððð951 CHAR(123) ' '
ððð9AB +91 ' '
ððð951 VALUE IN HEX 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ððð979 +41 3 LINES OF ZEROES SUPPRESSED
.FIBOP ððð7A1 CHAR(4) ' ' 'ð3ððððð1'X
.FIBOP1 ððð7A1 CHAR(1) ' ' 'ð3'X
.FIBOP2 ððð7A2 CHAR(1) ' ' 'ðð'X
.FIBOP3 ððð7A3 CHAR(1) ' ' 'ðð'X
.FIBOP4 ððð7A4 CHAR(1) ' ' 'ð1'X
.FIBORG ððð8E7 BINARY(2) 1
.FIBORRN ððð951 BINARY(4) ð
.FIBOTP ððð8EB BINARY(2) 1
.FIBPTR ððð3Bð POINTER(SPP) SPACE OFFSET 22ð8 'ððððð8Að'X
OBJECT PSSA
.FIBP1 ððð93ð POINTER(SPP) SPACE OFFSET 12ðð 'ððððð4Bð'X
OBJECT SALES COBOLEX SALESFILE
.FIBRECS ððð8ED BINARY(2) 12
.FIBREL NOT ADDRESSABLE
.FIBRLPT ððð6Bð POINTER(SPP) NULL

Figura 120 (Parte 6 de 10). Ejemplo de un Vuelco con Formato COBOL

Apéndice H. Ejemplo de Vuelco con Formato COBOL 399


.FIBROLC NOT ADDRESSABLE
.FIBROLE NOT ADDRESSABLE
.FIBROLL NOT ADDRESSABLE
.FIBRSL NOT ADDRESSABLE
.FIBRVAL NOT ADDRESSABLE
.FIBSPC ððð8CA CHAR(14) ' ' 'ðððððððððððððððððððððððððððð'X
.FIBTAPE ððð6C8 CHAR(8) ' ' '11ððð4ððððððððFF'X
.FIBTLEN ððð6CB BINARY(4) ð
.FIBUBTO ððð9ðð POINTER(IP) NULL
.FIBUFCB ððð8Fð POINTER(SPP) SPACE OFFSET 2528 'ððððð9Eð'X
OBJECT PSSA
.FIBURTN ððð91ð POINTER(SPP) NULL
.FIBUSAV ððð5Fð POINTER(IP) NULL
.FIBUSE# ððð8D8 BINARY(2) ð
.FIBVERB ððð8C8 BINARY(2) 4
.FSKA ððð7ðC BINARY(2) ð
.FSKB ððð7ð2 BINARY(2) ð
.FSPA ððð711 BINARY(2) ð
.FSPB ððð7ð7 BINARY(2) ð
.FSTKS ððð6E5 BINARY(2) ð
.FWTRCD ððð6C3 BINARY(4) ð
.Fð1ACC ððð8E9 BINARY(2) 1
.Fð1ALTS ððð8BE CHAR(1) ' ' 'ðð'X
.Fð1CFS2 ððð94C CHAR(4) ' ' 'ðððððððð'X
.Fð1CHAN ððð92ð POINTER(SPP) NULL
.Fð1COP ððð8Cð CHAR(4) ' ' 'ð3ððððð1'X
.Fð1CRP ððð8E4 CHAR(1) ' ' 'ðð'X
.Fð1CUR ððð8Cð CHAR(6) ' ð4' 'ð3ððððð1FðF4'X
.Fð1DEVC ððð8E5 BINARY(2) ð
.Fð1DEVI ððð94A BINARY(2) 1
.Fð1DEVN ððð94ð CHAR(1ð) ' '
.Fð1FLGS ððð8BF CHAR(1) ' ' '8ð'X
.Fð1FMT ððð8DA CHAR(1ð) ' '
.Fð1FN ððð8Að CHAR(3ð) 'FILE-1 '
.Fð1MBRN ððð9D6 CHAR(1ð) 'SALESFILE '
.Fð1OFMT ððð9CC CHAR(1ð) ' ' 'ðððððððððððððððððððð'X
.Fð1OFS ððð8C6 CHAR(2) 'ðð'
.Fð1OKLN ððð951 BINARY(2) ð
.Fð1OLDK ððð953 CHAR(121) ' '
ððð9AD +91 ' '
ððð953 VALUE IN HEX 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ððð97B +41 3 LINES OF ZEROES SUPPRESSED
.Fð1ORG ððð8E7 BINARY(2) 1
.Fð1OTP ððð8EB BINARY(2) 1
.Fð1P1 ððð93ð POINTER(SPP) SPACE OFFSET 12ðð 'ððððð4Bð'X
OBJECT SALES COBOLEX SALESFILE
.Fð1RECS ððð8ED BINARY(2) 12
.Fð1SPC ððð8CA CHAR(14) ' ' 'ðððððððððððððððððððððððððððð'X
.Fð1UBTO ððð9ðð POINTER(IP) NULL
.Fð1UFCB ððð8Fð POINTER(SPP) SPACE OFFSET 2528 'ððððð9Eð'X
OBJECT PSSA
.Fð1URTN ððð91ð POINTER(SPP) NULL
.Fð1USE# ððð8D8 BINARY(2) ð
.Fð1VERB ððð8C8 CHAR(2) ' ' 'ððð4'X
.IOCPTR ððð86ð POINTER(SPP) SPACE OFFSET 1952 'ððððð7Að'X
OBJECT PSSA
.IOEPTR ððð84ð POINTER(SYP) OBJECT QDBGETM
CONTEXT QSYS
.IOFDBEX ððð78ð POINTER(SPP) NULL
.IOOPTR ððð85ð POINTER(SPP) SPACE OFFSET 224ð 'ððððð8Cð'X
OBJECT PSSA
.IORTN ððð3Að POINTER(IP) STMT 48 INSTR # ðððððð4F
OBJECT XMPLDUMP
CONTEXT QTEMP
.IPðððð1 ðððC9ð POINTER(IP) STMT 52 INSTR # ðððððð65
OBJECT XMPLDUMP
CONTEXT QTEMP
.MAINRTN ððð44ð POINTER(SYP) OBJECT QLRMAIN
CONTEXT QSYS
.MGT ððð23ð CHAR(16) 'COBOL MGT ðð.ðLR' .G/
.MGTBIN8 ððð347 CHAR(8) ' ' 'ðððððððððððððððð'X
.MGTB81 ððð347 BINARY(4) ð
.MGTCNTR ððð2Cð BINARY(4) DIMENSION(2ð)
ððð3ðC (4ð-2ð) ð
.MGTCPGM ððð39ð POINTER(SYP) NULL
.MGTDBUG ððð328 CHAR(1) 'ð'
.MGTEXCP ððð31C CHAR(7) ' ' .H/
.MGTFIB ððð25ð POINTER(SPP) SPACE OFFSET 22ð8 'ððððð8Að'X

Figura 120 (Parte 7 de 10). Ejemplo de un Vuelco con Formato COBOL

400 COBOL/400 Guía del usuario


OBJECT PSSA
.MGTFUNC ððð345 BINARY(2) 2
.MGTIND ððð323 CHAR(1) DIMENSION(32)
ððð329 (1-7) 'ð'
ððð32A (8) '1'
ððð342 (9-32) 'ð'
.MGTINVC ððð31A BINARY(2) 3 .I/
.MGTLIB ððð41A CHAR(1ð) 'QTEMP '
.MGTMSGI ððð3F2 CHAR(7) ' ' 'ðððððððððððððð'X
.MGTMSGN ððð3Fð BINARY(2) ð
.MGTMSGR ððð3Eð POINTER(SPP) NULL
.MGTMSGS ððð3Cð POINTER(IP) NULL
.MGTMSGT ððð3Dð POINTER(SPP) NULL
.MGTNAME ððð31ð CHAR(1ð) 'XMPLDUMP '
.MGTNEXT ððð24ð POINTER(SPP) NULL
.MGTOSZ ððð323 CHAR(1) 'ð'
.MGTOVFL ððð325 CHAR(1) 'ð'
.MGTPACK ððð34F PACKED(31,ð) \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 'ðððððððððððððððððððððððððððððððð'X
.MGTPARM ððð4ðð POINTER(SPP) NULL
.MGTPASA ððð27ð POINTER(SPP) SPACE OFFSET 576ð 'ðððð168ð'X
OBJECT PASA
.MGTPASC ððð27ð CHAR(16) ' ' '8ððððððððððððððððð3DCððð37ðð178ð'X
.MGTPCS ððð37ð POINTER(SPP) NULL
.MGTPFM ððð327 CHAR(1) 'ð'
.MGTPGM ððð2Að POINTER(SYP) OBJECT XMPLDUMP .J/
CONTEXT QTEMP
.MGTPGT ððð26ð POINTER(SPP) SPACE OFFSET 5952 'ðððð174ð'X
OBJECT PSSA
.MGTPLVL ððð361 BINARY(2) ð
.MGTPROG ððð41ð CHAR(1ð) 'XMPLDUMP '
.MGTPTP ððð38ð POINTER(SPP) SPACE OFFSET 2864 'ðððððB3ð'X
OBJECT PSSA
.MGTPTR ððð46ð POINTER(SPP) SPACE OFFSET 56ð 'ððððð23ð'X
OBJECT PSSA
.MGTRST ððð2Bð POINTER(IP) NULL
.MGTSEG ððð35F BINARY(2) ð
.MGTSEPT ððð28ð POINTER(SPP) SPACE OFFSET ð 'ðððððððð'X
OBJECT QINSEPT
CONTEXT QSYS
.MGTSOSZ ððð324 CHAR(1) 'ð'
.MGTSPCD ððð329 CHAR(1) 'ð'
.MGTSW ððð343 CHAR(1) ' ' '8ð'X
.MGTTYPE ððð344 CHAR(1) 'I'
.MGTUPTR ððð29ð POINTER(SPP) SPACE OFFSET 1984 'ððððð7Cð'X
OBJECT E34 PGMRS ð11111
.MGT9ðð1 ððð32A CHAR(1) '1'
.NULLCL ððð7Að CHAR(1) ' ' 'FF'X
.ODPBPTR ððð76ð POINTER(SPP) SPACE OFFSET ð 'ðððððððð'X
OBJECT SALES COBOLEX SALESFILE
.ODPDBAS ððð89ð POINTER(SPP) SPACE OFFSET 7ð4 'ððððð2Cð'X
OBJECT SALES COBOLEX SALESFILE
.ONSAVE ððð4Dð CHAR(32) ' '
ððð4Dð VALUE IN HEX 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
.PBPDUM ððð8Að POINTER(IP) NULL
.PBPððð3 ðððB4ð POINTER(IP) STMT 42 INSTR # ðððððð3ð
OBJECT XMPLDUMP
CONTEXT QTEMP
.PERFCTR ððð55ð BINARY(2) 1
.K/
.PGT ðð174ð CHAR(32767) 'PGT ðð.ð ð1ðððððððððððððððððððððððððððððð ( .'
ðð179A +91 ' QTEMP XMPLDUMP . '
ðð17F4 +181 ' '
ðð174ð VALUE IN HEX 'D7C7E34ðFðFð4BFð4ð4ð4ð4ð4ð4ð4ð4ð8ððððððððððððððððð3DCððð36ððð33ððððððððððððððððð'X
ðð1768 +41 'ððððððððððððððððFðF1FðFðFðFðFðFðFðFðFðFðFðFðFðFðFðFðFðFðFðFðFðFðFðFðFðFðFðFðFðFð'X
ðð179ð +81 'ððð3ðððððð4Dðððððð4Bð1ð4ð1D8E3C5D4D74ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð'X
ðð17B8 +121 '4ð4ð4ðð2ð1E2C1D4D7C4E4D4D74ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð38ðððððððð'X
ðð17Eð +161 'ðððððð4Bððððððððð1ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ðð18ð8 +2ð1 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð29ðð'X
ðð183ð +241 'ððððððð1ðððððððððððððððððððððððð'X
.PGTIND ðð177ð CHAR(1) DIMENSION(32)
ðð177ð (1) 'ð'
ðð1771 (2) '1'
ðð178F (3-32) 'ð'
.PGTINVC ðð179ð BINARY(2) 3 .L/
.PGTLVL ðð174ð CHAR(16) 'PGT ðð.ð '
.PGTMGTL ðð176ð POINTER(SPP) NULL
.PGTMGT1 ðð175ð POINTER(SPP) SPACE OFFSET 56ð 'ððððð23ð'X
OBJECT PSSA

Figura 120 (Parte 8 de 10). Ejemplo de un Vuelco con Formato COBOL

Apéndice H. Ejemplo de Vuelco con Formato COBOL 401


.PNPððð3 ðððB4ð CHAR(48) ' T T '
ðððB4ð VALUE IN HEX '4ððððððððððððððððð3Dð3E33Cððð61A4ððððððððððððððððð3Dð3E33Cððð856ððð3ðððððððððððð'X
ðððB68 +41 'ðððððððððððððððð'X
.PTABLE ðððB3ð CHAR(16) 'PT ð1.ð ð ' 'D7E34ðFðF14BFððð1ðððð1Fððððððððð'X
.PTHSIZE ðððB37 BINARY(2) 16
.PTNUM ðððB39 BINARY(2) 1
.PTSEG ðððB3B CHAR(1) 'ð'
.Pð2ððð1 ðððCDð PACKED(2,ð) 25
.QLRDISP ðððCCð POINTER(SYP) OBJECT QLRADRTN
CONTEXT QSYS
.QLRXHAN ðððD5ð POINTER(SYP) OBJECT QLREXHAN
CONTEXT QSYS
.RCDFDBK ððð88ð POINTER(SPP) NULL
.RETURNP ððð82ð POINTER(IP) NULL
.RTNPTR ððð56ð POINTER(SPP) SPACE OFFSET 576ð 'ðððð168ð'X
OBJECT PASA
.RUNRTN ððð83ð POINTER(IP) NULL
.SAVKKEY ððð7A7 CHAR(121) ' '
ððð8ð1 +91 ' '
ððð7A7 VALUE IN HEX 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ððð7CF +41 3 LINES OF ZEROES SUPPRESSED
.SEPTP ððð43ð POINTER(SPP) NULL
.SIZERP ððð59ð POINTER(SPP) SPACE OFFSET 1376 'ððððð56ð'X
OBJECT PSSA
.SUBLEN ðððD1ð BINARY(2) ð
.SUBNAME ðððD12 CHAR(1ð) ' ' 'ðððððððððððððððððððð'X
.SUBTXT ðððD1ð CHAR(12) ' ' 'ðððððððððððððððððððððððð'X
.SUBTXTA ðððD2ð POINTER(SPP) SPACE OFFSET 3344 'ðððððD1ð'X
OBJECT PSSA
.SUB2FST ðððD62 CHAR(1ð) ' ' 'ðððððððððððððððððððð'X
.SUB2LEN ðððD6ð BINARY(2) ð
.SUB2SCD ðððD6C CHAR(1ð) ' ' 'ðððððððððððððððððððð'X
.SUB2TP ðððD8ð POINTER(SPP) SPACE OFFSET 3424 'ðððððD6ð'X
OBJECT PSSA
.SUB2TXT ðððD6ð CHAR(22) ' ' 'ðððððððððððððððððððððððððððððððððððððððððððð'X
.TCðððð1 ðððBD4 CHAR(2) ' ' 'ðððð'X
.TCðððð2 ðððBD6 CHAR(2) ' ' 'ðððð'X
.TMPNðð1 ðððCDð CHAR(32) ' ¬ '
ðððCDð VALUE IN HEX 'ð25Fðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
.Tððððð1 NOT ADDRESSABLE
.Tððððð2 ðððB7ð PACKED(7,2) 88888.88
.Tððððð3 ðððB7ð PACKED(7,2) 88888.88
.T1 ððð4Fð CHAR(32) ' '
ððð4Fð VALUE IN HEX 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
.T2 ððð51ð CHAR(32) ' '
ððð51ð VALUE IN HEX 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
.T3 ððð53ð CHAR(32) ' '
ððð53ð VALUE IN HEX 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
.UCB ððð9Eð CHAR(32767) ' A A A A A W '
ðððA3A +91 ' SALES \LIBL ð1ðð'
ðððA94 +181 ' ¢ " ¬ ðð311111ð8ðð6222'
ððð9Eð VALUE IN HEX '8ððððððððððððððððð3DC19EB7ððð3Eð8ððððððððððððððððð3DC19EB7ððð89ð8ððððððððððððððð'X
ðððAð8 +41 'ðð3DC19EB7ððð89ð8ððððððððððððððððð3DC19EB7ððð49ð8ððððððððððððððððð3DC19EB7ððð5A6'X
ðððA3ð +81 'ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
ðððA58 +121 'ððððððððððððððððE2C1D3C5E24ð4ð4ð4ð4ðFFB55CD3C9C2D34ð4ð4ð4ð4ðFFB94ð4ð4ð4ð4ð4ð4ð4ð'X
ðððA8ð +161 '4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ð4ðððð1ð12ðFðF1FðFðððð1654A2ððððððð2ððððððððððððððððððððððð'X
ðððAA8 +2ð1 'ððððððððððððððððððð1ðððCðð148ðððð38ððð3C8ððð3A8ðððððððð6ðð7FFFð15Fð3ðFðððððððððð'X
ðððADð +241 'FðFðF3F1F1F1F1F1FðF8FðFðF6F2F2F2'X
.UCBCLMG ðððA98 CHAR(1) ' ' '2ð'X
.UCBEDOP ðððA99 CHAR(1) ' ' 'ðð'X
.UCBFILE ðððA6ð CHAR(1ð) 'SALES '
.UCBFLGS ðððA8E CHAR(2) ' ' 'ð12ð'X
.UCBFLG1 ðððA8E CHAR(1) ' ' 'ð1'X
.UCBFLG2 ðððA8F CHAR(1) ' ' '2ð'X
.UCBIBR@ ððð9Fð POINTER(SPP) SPACE OFFSET 12ðð 'ððððð4Bð'X
OBJECT SALES COBOLEX SALESFILE
.UCBINDX ðððA8C BINARY(2) 1
.UCBIOF@ ðððA2ð POINTER(SPP) SPACE OFFSET 454 'ððððð1C6'X
OBJECT SALES COBOLEX SALESFILE
.UCBLAST ðððA82 CHAR(1ð) ' '
.UCBLBID ðððA6A BINARY(2) -75
.UCBLIB ðððA6C CHAR(1ð) '\LIBL '
.UCBLIBS ðððA6A CHAR(12) ' \LIBL ' 'FFB55CD3C9C2D34ð4ð4ð4ð4ð'X
.UCBMBID ðððA76 BINARY(2) -71
.UCBMBRS ðððA76 CHAR(12) ' ' 'FFB94ð4ð4ð4ð4ð4ð4ð4ð4ð4ð'X
.UCBMLIB ðððA78 CHAR(1ð) ' '
.UCBNXT@ ðððA3ð POINTER(SPP) NULL
.UCBOBR@ ðððAðð POINTER(SPP) SPACE OFFSET 12ðð 'ððððð4Bð'X

Figura 120 (Parte 9 de 10). Ejemplo de un Vuelco con Formato COBOL

402 COBOL/400 Guía del usuario


OBJECT SALES COBOLEX SALESFILE
.UCBODP@ ððð9Eð POINTER(SPP) SPACE OFFSET ð 'ðððððððð'X
OBJECT SALES COBOLEX SALESFILE
.UCBOPF@ ðððA1ð POINTER(SPP) SPACE OFFSET 176 'ððððððBð'X
OBJECT SALES COBOLEX SALESFILE
.UCBPARM ðððABð BINARY(2) 1
.UCBRLEN ðððAB2 BINARY(2) 12
.UCBRLVR ðððA9ð CHAR(4) 'ð1ðð'
.UCBSEP@ ðððA4ð POINTER(SPP) NULL
.UFCBPTR ððð72ð POINTER(SPP) SPACE OFFSET 2528 'ððððð9Eð'X
OBJECT PSSA
.UFLGSAV ðððCFð CHAR(2) ' ' 'ðððð'X
.USERTN ððð5Eð POINTER(IP) NULL
.USEWRK@ ðððD9ð POINTER(SPP) NULL
.Uð1CLMG ðððA98 CHAR(1) ' ' '2ð'X
.Uð1FLGS ðððA8E CHAR(2) ' ' 'ð12ð'X
.Uð1IBF@ ððð9Fð POINTER(SPP) SPACE OFFSET 12ðð 'ððððð4Bð'X
OBJECT SALES COBOLEX SALESFILE
.Uð1OBF@ ðððAðð POINTER(SPP) SPACE OFFSET 12ðð 'ððððð4Bð'X
OBJECT SALES COBOLEX SALESFILE
.Uð1SEQO ðððABF CHAR(1) ' ' '8ð'X
.Uð1UFCB ððð9Eð POINTER(SPP) SPACE OFFSET ð 'ðððððððð'X
OBJECT SALES COBOLEX SALESFILE
.VALTðð1 ðððB7ð CHAR(32) 'HHH '
ðððB7ð VALUE IN HEX '8888888Fðððððððððððððððððððððððððððððððððððððððððððððððððððððððð'X
.Vðð5622 ððð662 CHAR(1) '5'
.WCBCNLS ððð7Dð CHAR(1) 'ð'
.WCBJDAT ððð7D1 CHAR(7) 'ð89ð623' .M/
.WCBLURC ððð7Cð BINARY(2) 2
.WCBPINF ððð7C2 BINARY(2) ð
.WCBSWTC ððð7D8 CHAR(8) 'ðððððððð'
.WCBUDTA ððð7Cð CHAR(32767) ' ðð89ð623ðððððððð '
ððð81A +91 2 LINES OF BLANKS SUPPRESSED
ððð7Cð VALUE IN HEX 'ððð2ððððððððððððððððððððððððððððFðFðF8F9FðF6F2F3FðFðFðFðFðFðFðFððððððððððððððððð'X
ððð7E8 +41 6 LINES OF ZEROES SUPPRESSED
.WCBURC ððð7CE CHAR(2) ' ' 'ðððð'X
.WCBUð ððð7D8 CHAR(1) 'ð'
.WCBU1 ððð7D9 CHAR(1) 'ð'
.WCBU2 ððð7DA CHAR(1) 'ð'
.WCBU3 ððð7DB CHAR(1) 'ð'
.WCBU4 ððð7DC CHAR(1) 'ð'
.WCBU5 ððð7DD CHAR(1) 'ð'
.WCBU6 ððð7DE CHAR(1) 'ð'
.WCBU7 ððð7DF CHAR(1) 'ð'
END-FLAG ðððB28 CHAR(1) ' ' .N/
END-OF-INPUT ðððB29 CHAR(1) 'Y'
FILE-1 ððð66ð CHAR(12) 'H25ðððððððð '
FILLER ððð66B CHAR(1) ' '
FILLER ðððB13 CHAR(3) ' '
FILLER ðððBð4 CHAR(3) ' '
FILLER ðððAFð CHAR(8) 'TOTALS: '
R-AREA-CODE ððð661 ZONED(2,ð) 25
R-NORTH-EAST ðððAC9 PACKED(2,ð) 3ð
R-NORTH-EAST ðððAC7 PACKED(2,ð) 15
R-SALES-CAT-1 ððð663 PACKED(7,2)
\\INVALID DATA 'FðFðFðFð'X .O/
R-SALES-CAT-2 ððð667 PACKED(7,2)
\\INVALID DATA 'FðFðFðFð'X
R-TYPE ððð66ð CHAR(1) 'H'
RECORD-1 ððð66ð CHAR(12) 'H25ðððððððð '
W-CAT-1 ðððADð ZONED(1ð,2) 311111.ð8
W-CAT-2 ðððADA ZONED(1ð,2) 622222.16
W-EDIT-TOTAL ðððB16 CHAR(12) ' '
W-EDIT-VALUES ðððAFð CHAR(5ð) 'TOTALS: '
W-EDIT-1 ðððAF8 CHAR(12) ' '
W-EDIT-2 ðððBð7 CHAR(12) ' '
W-SALES-VALUES ðððADð CHAR(3ð) 'ðð311111ð8ðð62222216ðð93333324'
W-TOTAL ðððAE4 ZONED(1ð,2) 933333.24
STATIC STORAGE FOR PROGRAM XMPLDUMP.QTEMP BEGINS AT OFFSET ððð23ð IN THE PROGRAM STATIC STORAGE AREA (PSSA)
AUTOMATIC STORAGE FOR PROGRAM XMPLDUMP.QTEMP BEGINS AT OFFSET ðð16Cð IN THE PROGRAM AUTOMATIC STORAGE AREA (PASA)

Figura 120 (Parte 10 de 10). Ejemplo de un Vuelco con Formato COBOL

Apéndice H. Ejemplo de Vuelco con Formato COBOL 403


404 COBOL/400 Guía del usuario
Bibliografía
Para obtener información acerca de los temas relacio- Ÿ CICS/400 Application Programming Guide,
nados con la programación COBOL/400 en el sistema SC33-0822
AS/400, consulte las siguientes publicaciones AS/400 Título abreviado: CICS/400 Application
IBM: Programming Guide
Ÿ Comunicaciones: Guía para la Gestión, SC10-8974 Ÿ Communications: Remote Work Station Guide,
(SC41-0024) SC41-0002
Título abreviado: Guía para la Gestión de Título abreviado: Remote Work Station Guide
Comunicaciones
Ÿ Advanced Backup and Recovery Guide, SC41-8079
Ÿ Device Configuration Guide, SC41-8106 Título abreviado: Advanced Backup and Recovery
Título abreviado: Device Configuration Guide Guide
Ÿ Instalación de Software, SC10-9279 (SC41-3120) Ÿ Programación: Lenguaje de Control Guía del
Título abreviado: Instalación de Software Programador, SC10-8977 (SC41-8077)
Título abreviado: CL Guía del Programador
Ÿ System Programmer’s Interface Reference,
SC41-8223 Ÿ Guía para Nuevos Usuarios, SC10-8881
Título abreviado: System Programmer’s Interface (SC41-8211)
Reference Título abreviado: Guía para Nuevos Usuarios
Ÿ Guía para la Base de Datos, SC10-9009 Ÿ Programming: Control Language Reference,
(SC41-9659) SC41-0030
Título abreviado: DDS Reference Título abreviado: CL Reference
Ÿ Data Description Specifications Coding Form, Ÿ Guía de Publicaciones, GC10-9237 (GC41-9678)
SX41-9891 Título abreviado: Guía de Publicaciones
Título abreviado: DDS Coding Form
Ÿ Programación: Guía para la Gestión de Trabajos,
Ÿ Communications: Intersystem Communications SC10-8978 (SC41-8078)
Function Programmer’s Guide, SC41-9590 Título abreviado: Guía para la Gestión de Trabajos
Título abreviado: ICF Programmer’s Guide
Ÿ SAA* Lenguaje de Consulta Estructurada SQL/400
Ÿ Operación del Sistema, SC10-9280 (SC41-3203) Manual de Consulta, SC10-8997 (SC41-9608)
Título abreviado: Operación del Sistema Título abreviado: SQL/400* Manual de Consulta
Ÿ Guía Básica para la Seguridad, SC10-9238 Ÿ Guía para la Gestión de Datos, SC10-9008
(SC41-0047) y Seguridad Manual de Consulta, (SC41-9658)
SC10-8981 (SC41-8083) Título abreviado: Guía para la Gestión de Datos
Títulos abreviados: Guía Básica para la Seguridad
Ÿ COBOL/400 Reference, SC09-1813
y Seguridad Manual de Consulta
Título abreviado: COBOL/400 Reference
Ÿ Distributed Data Management Guide, SC41-9600
Ÿ American National Standard Programming
Título abreviado: DDM Guide
Language COBOL, ANSI X3.23-1985, ISO
Ÿ Guía para la Base de Datos, SC10-9009 1989-1985
(SC41-9659) Título abreviado: American National Standard
Título abreviado: Guía para la Base de Datos Programming Language COBOL, ANSI X3.23-1985,
ISO 1989-1985
Ÿ Utilidades: Programa de Utilidad para la Definición
Interactiva de Datos (IDDU) Guía del Usuario,
Para obtener más información sobre la Interfaz Común
SC10-9007 (SC41-9657)
de Programación (CPI) de COBOL, consulte la
Título abreviado: IDDU Guía del Usuario
siguiente publicación:
Ÿ System Programmer’s Interface Reference,
Ÿ Systems Application Architecture Common
SC41-8223
Programming Interface COBOL Reference,
Título abreviado: System Programmer’s Interface
SC26-4354.
Reference

 Copyright IBM Corp. 1994 405


406 COBOL/400 Guía del usuario
Glosario de Abreviaturas
Abreviatura Significado Expli- Abreviatura Significado Expli-
cación cación
Appl Dev Herramientas de des- Consta de ASCII American National Código
Tools arrollo de aplicaciones programas Standard Code for desarro-
(Application para el Information Interchange llado por el
Development Tools) sistema (Código estándar ameri- American
AS/400, cano para el intercambio National
como la de información). Standards
Ayuda para Institute
el Diseño para el
de Panta- intercambio
llas (SDA) de infor-
y el Pro- mación
grama de entre sis-
Utilidad temas de
para la proceso de
Entrada del datos, sis-
Fuente temas de
(SEU). comuni-
caciones
ANSI American National Organi-
de datos y
Standards Institute zación
equipos
formada
asociados.
por fabri-
El juego de
cantes,
caracteres
consu-
ASCII
midores y
consta de
grupos de
caracteres
intereses
de 8 bits,
generales,
que a su
que esta-
vez
blece los
constan de
proce-
caracteres
dimientos
de control
por los que
de 7 bits y
las organi-
de carac-
zaciones
teres sim-
acreditadas
bólicos,
crean y
además de
mantienen
un bit de
unos
compro-
estándares
bación de
industriales
paridad.
voluntarios
en los
Estados
Unidos.

 Copyright IBM Corp. 1994 407


Abreviatura Significado Expli- Abreviatura Significado Expli-
cación cación
CICS Customer Information Programa DBCS Juego de Caracteres de Juego de
Control Service (Servicio bajo Doble Byte (Double-Byte caracteres
de control de infor- licencia Character Set) en el que
mación al cliente). IBM que cada
habilita las carácter
transac- está repre-
ciones sentado por
entradas en 2 bytes.
las Los
estaciones idiomas
de trabajo como el
remotas japonés,
para que chino y
los pro- coreano,
gramas de que con-
aplicación tienen más
escritos por símbolos
el usuario de los que
las pueden
procesen represen-
simultá- tarse
neamente. mediante
Este pro- 256 puntos
grama con de código,
licencia necesitan
incluye fun- juegos de
ciones para caracteres
la creación, de doble
utilización y byte. Dado
mante- que cada
nimiento de carácter
bases de necesita 2
datos, así bytes, el
como para teclado, la
la comuni- visualización
cación con en pantalla
CICS o y la impre-
cualquier sión de
otro caracteres
sistema DBCS pre-
operativo. cisan un
hardware y
CL Lenguaje de control Conjunto
unos pro-
(Control Language) de todos
gramas que
los man-
den soporte
datos con
a DBCS. El
los que un
sistema da
usuario
soporte a
solicita fun-
cuatro
ciones del
juegos de
sistema.
caracteres
de doble
byte:
japonés,
coreano,
chino sim-
plificado y
chino tradi-
cional.
Compárese
con Juego
de Carac-
teres de un
Solo Byte.

408 COBOL/400 Guía del usuario


Abreviatura Significado Expli- Abreviatura Significado Expli-
cación cación
DDM Distributed Data Función del FIPS Federal Information Estándar
Management (Gestión sistema Processing Standard oficial que
de Datos Distribuidos) operativo sirve para
que permite mejorar la
que un pro- utilización y
grama de gestión de
aplicación o los orde-
un usuario nadores y
de un del proceso
sistema uti- de datos en
licen las
archivos de empresas.
datos alma-
ICF Intersystem Función del
cenados en
Communications sistema
sistemas
Function operativo
remotos.
que permite
Los sis-
que un pro-
temas
grama se
deben estar
comunique
conectados
de modo
por una red
interactivo
de comuni-
con otro
caciones;
programa o
asimismo,
sistema.
los sis-
temas I/O Entrada/Salida Datos pro-
remotos (Input/Output) porcionados
deben uti- al orde-
lizar DDM. nador o
datos resul-
DDS Especificaciones de des- Descripción
tantes del
cripción de datos (Data de la base
proceso
Description de datos
informático.
Specifications) del usuario
o de LVLCHK Comprobación de Nivel Función
archivos de que
dispositivo compara
que se los identifi-
entra en el cadores de
sistema en registro de
un formato nivel de
fijo. La formato de
descripción un archivo
se utiliza que se va a
para crear abrir con la
archivos. descripción
de archivo
EBCDIC Extended Binary-Coded Juego de
que forma
Decimal Interchange caracteres
parte de un
Code. codificados
programa
que consta
compilado,
de 256
con el fin
caracteres
de deter-
de ocho
minar si el
bits.
formato de
registro
para el
archivo
cambiado
desde el
programa
se ha com-
pilado.

Glosario de Abreviaturas 409


Abreviatura Significado Expli- Abreviatura Significado Expli-
cación cación
ODT Tabla de definición de Tabla SEU Programa de Utilidad Función del
objetos (Object creada por para la Entrada del programa
Definition Table) el sistema Fuente (Source Entry bajo
en el Utility) licencia
tiempo de IBM
compilación Herramientas
para seguir de Des-
la pista de arrollo de
los objetos Apli-
declarados caciones
en el pro- AS/400 que
grama. Los se utiliza
objetos de para crear
programa y cambiar
que están miembros
en la tabla fuente.
incluyen
SQL/400 Lenguaje de Consulta Programa
variables,
Estructurado/400 bajo
constantes,
(Structured Query licencia
etiquetas,
Language/400) IBM que da
listas de
soporte a la
operandos
base de
y descrip-
datos
ciones de
relacional
excep-
que se
ciones. La
utiliza para
tabla reside
insertar
en el objeto
información
programa
en una
compilado.
base de
OS/400 Operating System/400 Sistema datos y
operativo para
del AS/400. obtener y
organizar
SDA Ayuda para el Diseño de Función del
información
Pantallas programa
seleccio-
bajo
nada desde
licencia
una base
Herramientas
de datos.
de Des-
arrollo de UPSI Conmutador del indi- Conmu-
Apli- cador del estado de pro- tador
caciones grama del usuario externo de
AS/400 programa
(AS/400 que efectúa
Application las fun-
Development ciones de
Tools) que un conmu-
proporciona tador de
ayuda al hardware.
usuario Se propor-
para cionan
diseñar, ocho con-
crear y mutadores:
mantener UPSI 0 - 7.
pantallas y
menús.
Nota: Las abreviaturas de los mandatos OS/400 no
aparecen en este apartado. Vea el manual CL
Reference para más información acerca de los
mandatos de OS/400 y de su utilización.

410 COBOL/400 Guía del usuario


Índice
ampliaciones, listado de 1
Caracteres Especiales anomalía del compilador 16
/ (barra vertical) 12, 39
anterior, compilación del release 32
número máximo en un programa 93
API (Interfaces del Programa de Aplicación)
* (asterisco) 12
manejo de errores 55, 72
utilización con punteros 305
A API QLRCHGCM 72
abrir vía de acceso de datos (ODP) 99 API QLRRTVCE 72
acerca de este manual xi API QLRSETCE 55, 72
actualización Aplicaciones, mensajes de Herramientas para el
archivos indexados 371, 378 Desarrollo de 343
archivos relativos 371, 384 archivo de comunicaciones de datos 145, 181
archivos secuenciales 373 archivo de dispositivo de pantalla 146
y ampliación de archivos secuenciales 371, archivo de función de comunicaciones
373 intersistemas (ICF)
ADM/400 archivos de dispositivo múltiples y
frase ADVANCING 243 simples 170
para FORMATFILE 245 cláusula ACCESS MODE 182
ajuste a los estándar ANSI 348 cláusula ASSIGN 181
alfabético, definición del carácter 352 cláusula CONTROL-AREA 183
alfabeto-nombre, descripción de 351 cláusula FILE STATUS 182
alias de definición 117 cláusula ORGANIZATION 181
almacenamiento, inicialización de 291 cláusula RELATIVE KEY 182
almacenamiento, utilización de menos 22 comunicaciones 164
alteración temporal de archivos especificados por utilización para especificar subarchivos 164
el programa 97 archivo de impresora por omisión 25
alteración temporal de mensajes 347 archivo de mensajes en tiempo de compilación
American National Standards Institute (ANSI) xiii, QLBLMSG 347
1, 339, 348, 407 archivo de mensajes en tiempo de ejecución
ajuste a estándares QLBLMSGE 347
con archivos indexados 251 archivo fuente por omisión (QLBLSRC) 10, 18
con archivos relativos 260 archivos
con archivos secuenciales 261 Véase también archivos de disco, archivos des-
COBOL ANSI 74 frente a COBOL ANSI critos externamente,archivos descritos por el
85 351 programa, archivos fuente
estándar xiii, 1, 348 atributos de 46
ampliaciones de lenguaje no estándar cierre 352
Véase ampliaciones IBM claves 135
ampliaciones IBM creación de
archivos transaction 145—241 indexado 371, 376
formato, indicación en sintaxis de 5 relativo 371, 382
GOBACK secuencial 371
lectura 5 DATABASE 251
señalización 25, 347 DATABASE frente a DISK 251
soporte del juego de caracteres de doble byte descripción 371
(DBCS) 355—369 descripción externa 110
visión general 1 DISK 251

 Copyright IBM Corp. 1994 411


archivos (continuación) archivos descritos externamente (continuación)
ejemplos descripción 109
archivos indexados 376, 378 e instrucción COPY, de formato DD, DDR,
archivos relativos 382, 384 DDS, DDSR 125
archivos secuenciales 371, 373 impresora, especificar con FORMATFILE
en sistemas AS/400 93, 371 archivos de 244
específica 243 ventajas del uso de archivos de
FORMATFILE 244 impresora 244
lógicas 257 archivos descritos por el programa
métodos de 262 archivos TRANSACTION 145
métodos de proceso 251 consideraciones sobre el uso 110
organización indexada 251 descripción 109
organización secuencial 261 descrito externamente por DDS con mandatos
organizaciones relativas 260 Crear Archivos 110
PRINTER 243 archivos FORMATFILE
programas de ejemplo 371—388 descripción 244
recuperación relativa de 371, 386 programas de ejemplo 244
redireccionamiento de acceso a 94 archivos indexados
relativa 260 actualización 371, 378
salvaguarda de secuencia de registros 261 campos clave 252
secuencial 261 creación 371, 376
técnicas para procesar 371—388 descripción 251
TRANSACTION 145 métodos de proceso para DISK y
vías de acceso 262 DATABASE 251
archivos compartidos 97 archivos no disponibles en tiempo OPEN 23
archivos de bases de datos archivos relativos
Véase también archivos de disco acceso secuencial 23
consideraciones del archivo DATABASE 251 actualización 371, 384
consideraciones del archivo DISK 251 creación 371, 382
DATABASE frente a DISK 251 definición 260
métodos de proceso 251 en COBOL 260
archivos de disco 251 inicialización para la salida 262
métodos de proceso 264 para OPEN OUTPUT 282
archivos de dispositivo recuperación de 371, 386
consideraciones sobre el archivo y rendimiento 282
DATABASE 251 archivos secuenciales
consideraciones sobre el archivo DISK 251 actualización y ampliación 371, 373
múltiple 170 creación 261, 371
único 170 definición 261
y E/S 93 en COBOL 261
archivos de dispositivo simple 170 archivos transaction
archivos de inicialización con registros archivo, establecer el estado de 73
eliminados 263 cláusula ACCESS MODE 182
archivos de mensaje 347 cláusula ASSIGN 181
archivos descritos externamente 119, 246 cláusula CONTROL-AREA 183
alterar temporalmente funciones 136 cláusula FILE STATUS 182
añadir funciones 136 cláusula ORGANIZATION 181
comprobación del nivel 136 cláusula RELATIVE KEY 182
consideraciones sobre el uso 110 código de retorno principal 73
DDS para 114 código de retorno secundario 73

412 COBOL/400 Guía del usuario


archivos transaction (continuación) ATTRIBUTE DATA 187
códigos de retorno 73 aumento de eficacia 22
consideraciones sobre la División de avisos
Datos 182, 184 barras de revisión ix
consideraciones sobre la División de descripción ix
Entorno 180 patentes ix
consideraciones sobre la División de Proce- azar, definición de proceso al 386
dimientos 185
definición 145
descripción 145
B
barra vertical (/) 12, 39
descritos externamente 145
bibliotecas, prueba de 57
ejemplo, estación de trabajo de programas
binarios, rendimiento de ítems 281
de 210
BLANK WHEN ZERO
entrada de control de archivos y División de
definición con cláusula LIKE 270
Entorno 180
bloque de información de archivo (FIB) 73
entrada de descripción de archivos y División
bloque, descripción de 107
de Entorno 184
bloqueo de archivos 97
especificaciones de descripción de datos (DDS)
bloqueo de control del archivo de usuario
para 145, 146
(UFCB) 73
gestión de pantalla 146
bloqueo de registros de salida 107
organización de 181
bloqueo de registros y de archivos 97, 100
proceso descrito externamente 149
bloqueo de registros y de E/S no
programa descrito
satisfactorios 99
recursos de datos booleanos 185
bloqueo, archivo y registro de 97
y subarchivos 166
booleano, descripción del literal 20
archivos TRANSACTION descritos
bucles de un programa 283, 284
externamente 145—149
bucles en un programa 283
área de datos
búsqueda de caracteres DBCS en una tabla 367
descripción 319
BY CONTENT, definición de 291
local 319
BY REFERENCE, definición de 291
PIP 320
área de datos de los parámetros de inicialización
de programas (PIP) C
Véase área de datos PIP cambio del valor de las variables 65
área de datos PIP (parámetros de inicialización de cambios con el COBOL ANSI 74 351—353
programas) 320 campo ATTRIBUTES 46
descripción 320 campo cambiar/fecha (CHGDATE) 44
área de parche del programa 22 campo COPYNAME 44
área modificada-última-vez 10 campo de datos 10
argumentos, descripción en el programa llamador campo de entrada 147, 199
de 293 campo de longitud (LENGTH) 46
Arquitectura de Representación de Datos de Tipo campo de nombre interno (I-NAME) 46
Carácter (CDRA) 143 campo de número de instrucción (STMT) 45, 50
* (asterisco) 12 campo de salida 147
atributo de área de indicador separada (SI) 150 campo de tipo de clase de datos (TYPE) 46
atributos campo DEFINED 49
de archivos 46 campo FIPS-ID 48
de ítems de datos 47 campo fuente
ítems de tabla 47 campos 10
lógica, especificación de la estructura 181

Índice 413
campo fuente (continuación) caracteres sustituidos en el nombre de
longitud de registro 10 campo 119
por omisión 10 características principales 2, 371
programa, supresión del listado de 42 CCSIDs (Identificadores de Juego de
campo NAMES 49 Caracteres) 143
campo REFERENCES 49 CDRA (Arquitectura de Representación de Datos
campo SECTION 46 de Tipo Carácter) 143
campo SOURCE NAME 46 cierre de archivos con la instrucción
campos CANCEL 352
atributo BLANK WHEN ZERO 272 cláusula ASSIGN 93, 150, 181
atributos nombre de dispositivo 94
BLANK WHEN ZERO 272 cláusula CONTROL-AREA 183—184
SIGN IS TRAILING 272 cláusula FILE STATUS 109
USAGE IS DISPLAY 272 cláusula JUSTIFIED 360
valor por omisión 272 cláusula LIKE
coma flotante 133 descripción 270
fecha 138 formato de 271
hora 138 parte PICTURE 271
indicación de la hora 138 cláusula LINAGE 243
longitud fija 138 cláusula OCCURS 360
longitud variable 137 cláusula ORGANIZATION 181
carácter 137, 138 cláusula ORGANIZATION IS INDEXED 252
gráfico 138, 140 cláusula PICTURE 279, 361
longitud máxima 137 definición con cláusula LIKE 270
longitud, ejemplo de 138 y rendimiento 280
restricciones 137 cláusula RECORD KEY 135
Posibilidad de nulos 139 EXTERNALLY-DESCRIBED-KEY 135
separador de la hora 39 Cláusula REDEFINES 360
campos con posibilidad de nulos 139 elemento de datos del puntero como sujeto u
campos de clave objeto 297
claves descendentes 265 para frases ALL-FORMATS o E/S 125
claves parciales 253 cláusula RELATIVE KEY 182
contiguos, varios 252 cláusula RENAMES 361
definido por programa 257 cláusula SEGMENT-LIMIT 325
nombre -DDS añadido a 129, 131 cláusula USAGE
para archivos indexados 252 con archivos transaction 152
campos de clave definidos por el programa 257 definición con la cláusula LIKE 270
campos de coma flotante 133 numérico 122
campos de desplazamiento (DISP) 46 USAGE IS POINTER 295
campos de longitud variable 137 cláusula VALUE 361
definición 137 cláusulas
ejemplo de 137, 140, 141 ACCESS MODE 182
longitud máxima de 137 ASSIGN 150, 181
longitud, ejemplo de longitud 138 cláusula CURRENCY 12
restricciones 137 cláusula DECIMAL-POINT 12
campos gráficos de longitud fija 140 cláusula REPLACING identificador-1 BY
carácter de sustitución (X’3F’) en los datos 143 identificador-2 13
caracteres de doble byte 355 CONTROL-AREA 183
caracteres no válidos 119 FILE STATUS 109, 182
opciones DDR y DDSR 119 INDICATOR 152

414 COBOL/400 Guía del usuario


cláusulas (continuación) compilación de programas COBOL (continuación)
JUSTIFIED 360 listado de ejemplo 40
LIKE 152 mensajes 345
LINAGE 243 para ACCEPT/DISPLAY ampliadas 23
OCCURS 152, 360 para el release anterior 32
ORGANIZATION 181 programas múltiples 37
ORGANIZATION IS INDEXED 252 rebasar los límites de tamaño interno 15
PICTURE 152, 279, 361 redirección de archivos 94
RECORD KEY 135 salida 38
REDEFINES 352, 360 terminación anómala del compilador 16
RELATIVE KEY 182 TGTRLS, utilización de 32
RENAMES 361 compilaciones por lotes 37
SAME AREA 351 comprobación de literales DBCS 357
SAME RECORD AREA 351 comprobación de nivel 136
SEGMENT-LIMIT 325 comprobación de programas COBOL/400
sintaxis, notación para la 3 bibliotecas de prueba 57
SORT-MERGE AREA 351 cambio del contenido de las variables 65
USAGE 152 Datos, utilización del listado IRP y correlación
VALUE 152, 361 de la División de Datos 63
WITH DEBUGGING MODE 329 estado de archivo 108
cláusulas de uso numérico 122 funciones OS/400 para 57
cláusulas opcionales 3 puntos de interrupción 59, 65
EXTERNALLY-DESCRIBED-KEY 252 rastreos 66, 68
clave parcial, referencia a 253 seguridad, mantenimiento de la 57
clave relativa, definición de 166 visión general 6
claves visualización de elementos de tabla 57, 62
coma flotante 133 visualización de variables 62
común 135 vuelco con formato 69
generación de 127 y depuración 57
registro 135 comprobación de validez 146
validez 252 comprobación de validez de estación de
claves comunes 135 trabajo 146
claves de función compromiso, definición del límite de 100
especificación con DDS comunicaciones interactivas
Véase archivos de transacción con otros programas 145
y cláusula CONTROL-AREA 184 con sistemas remotos 145
claves de registro 135 con usuarios de estaciones de trabajo 145
CODE/400 consideraciones entre programas 285, 368
código de optimización 22 recuperación 87
códigos de retorno 79 condición AT END 84, 197, 200
códigos de retorno principal/secundario 79 Configuración, descripción de la Sección de 10,
comentarios con caracteres DBCS 359 359
COMP-3, rendimiento e ítems 280 conmutador del indicador de estado del programa
compartido-para-actualización 97 del usuario (UPSI)
compartido-para-lectura 97 conmutador en tiempo de ejecución 69, 330, 331
compartido-sin-actualización 97 conmutador UPSI (indicador del estado del pro-
compilación de programas COBOL grama del usuario)
errores detectados por el compilador 58 conmutador y compilación WITH DEBUGGING
intentos no satisfactorios 16 MODE 329
invocar al compilador 15

Índice 415
consideraciones acerca de la comunicación entre datos, traspaso de
programas 285 BY CONTENT y BY REFERENCE 292
consideraciones acerca de la programación 267 en grupos 293
consideraciones sobre archivos DDS
descendentes 265 Véase especificaciones de descripción de datos
consideraciones sobre archivos lógicos 257 declarativa USE FOR DEBUGGING 332, 333
consideraciones sobre el archivo 93, 251, 321 en la División de Procedimientos 332
consideraciones sobre el rendimiento 280 utilización de procedimientos 333
operaciones de E/S 107 definiciones PICTURE 122
consideraciones sobre la eficacia 280 delimitación de instrucciones SQL 13
consideraciones sobre la portabilidad dependencia de dispositivo 93
Véase segmentación ejemplo 94
consideraciones sobre las alteraciones temporales depuración de lenguaje fuente 329
del sistema 97 desatendida, ejecutar el programa en
constante figurativa NULL 299 modalidad 347
constante figurativa NULL 299 desbloquear registros de entrada 107
constante figurativa QUOTE 20 descendente, definición de la secuencia de
contaje de verbos de un programa fuente 20, 45, clave 265
51 descripción-texto 19
contenido del registro especial descripción externa
DEBUG-ITEM 335 alteración temporal a 136
contiguos, definición de ítems 253 añadir funciones a 136
contiguos, varios campos de clave 252 descripción y campos señalizados de números de
control referencia 48
devolver 286 descripciones de archivo 114, 184
transferencia 285 deshacer edición 277
control de compromiso 86, 99, 103 definición 277
ejemplo 102 ejemplos 278
nivel de bloqueo 100 desplazamiento a teclado estándar, definición de
control de segmentación 325 carácter de 356
control del programa desplazamiento a teclado ideográfico, definición
devolución 286 de carácter de 356
transferencia 285 desplazamiento relativo al límite de 16 bytes 303
control, devolver desde un programa destino de la salida del compilador 37
llamado 286 devolver control desde un programa llamado 286
control, transferencia a otro programa 285 diagramas, sintaxis de 30
copias disponibles de ANSI estándar xiii dinámico, definición del proceso 182
correspondientes, opciones PROCESS y direccionar archivos
CRTCBLPGM 33 Véase archivos relativos
creación de archivos direcciones
archivos indexados 371, 376 incremento mediante punteros 319
archivos relativos 371, 382 paso entre programas 317
archivos secuenciales 371 diseño del programa 9
creación dinámica de archivos 23 dispositivo de pantalla
DDS para 146
formato de registro 146, 148
D distintivos de E-S 393
datos no referenciados, ítems de 22
División de Datos
datos, deshacer edición con manejo de errores
archivos transaction 182, 184
de 279
argumentos para programa llamados 293

416 COBOL/400 Guía del usuario


División de Datos (continuación) ejemplos (continuación)
caracteres DBCS 360 condición END-OF-PAGE 245
correlación de, opción del compilador 20, 45 controles de compromiso 99, 103
descripción 10 correlación de División de Datos 45
recursos de datos booleanos 185 datos gráficos de longitud variable 141
División de Entorno DDS
cláusula SEGMENT-LIMIT 325 generación de clave 127
y archivos transaction 180 palabra clave CONCAT 128
y caracteres DBCS 359 palabra clave RENAME 130
División de Identificación palabra clave SST 132
descripción 10 para subarchivos 167, 169
y caracteres DBCS 359 para un archivo de dispositivo de
División de procedimientos pantalla 146, 148
cambios del COBOL ANSI 74 352 para un archivo de referencia de
declarativa USE FOR DEBUGGING 332 campo 113
descripción 10 para un formato de registro 115
especificación de depuración en 332 para un formato de registro con la palabra
segmentación 326 clave ALIAS 117
subdivisiones en 323 para varios archivos de dispositivo 170
uso de la instrucción SET para especificar la entrar CRTCBLPGM desde la línea de man-
dirección 300 datos 29
y archivos transaction 185 especificaciones de formato de registro 113,
y caracteres DBCS 361 116
divisiones de programas estructura de programa 9
División de Datos 20, 182, 184, 360 frase ROLLING 205
División de Entorno 180, 325, 359 indicadores 154
División de Identificación 10 instrucción COPY en instrucción
División de Procedimientos 185, 325, 326, PROCESS 38
361—367 listado de mensajes de diagnóstico 49
necesarios 10 listado de mensajes FIPS 47
opcional 10 listado de opciones del compilador 20, 38
divisiones opcionales 10 listado de referencias cruzadas 49
do while, prueba para el fin de la lista en cadena listado fuente 42
de la estructura 318 longitud de un campo de longitud variable 138
doble espacio 39 mensajes de visualización SEU 343
donde se puedan utilizar los caracteres MOVE con punteros 301
DBCS 358 proceso de archivos
archivos de secuencia 371, 373
archivos indexados 376, 378
E archivos relativos 382, 384
EBCDIC, definición de caracteres 409
programas de aplicación de estaciones de
eficacia aumentada 22
trabajo
ejecución de programas COBOL/400
actualización de pago 227
descripción 53
consulta de transacciones 210
lista de respuestas del sistema y modalidades
consulta pedidos 216
de respuesta 54
punteros
ejemplos
alineación 297
archivo FORMATFILE 244
inicialización con NULL 299
archivos de impresora descritos
lista en cadena de procesos 316
externamente 247
traspaso de ítems que contienen 303
COBOL y archivos 111
y cláusula REDEFINES 298

Índice 417
ejemplos (continuación) errores (continuación)
punteros (continuación) frase ADVANCING con archivos
y registro especial LENGTH OF 299 FORMATFILE 245
y resultados de MOVE 301 errores de codificación 58
punto de interrupción 60 errores de duplicación 270
rastreo 66 errores de sintaxis
recuperación de errores 86 Véase errores de sintaxis
registro especial LENGTH con punteros 299 errores en tiempo de compilación 58
resultados COPY DDS 116, 125 errores en tiempo de ejecución, comprobación
START genérico 253, 254 para deshacer edición 279
unidades de ejecución errores que conviene evitar 58
con programa compartido 289 espaciado cuádruple 39
unidad única 287 espacio, definición de punteros de 295
varias de ejecución consecutiva 287 espacios del usuario
varias, de ejecución simultánea 290 acceso mediante API 305
uso de verbos mediante listado de la especificaciones de descripción de datos (DDS)
cuenta 45 archivos descritos externamente 252
utilización de punteros en una lista en archivos descritos por programa 110
cadena 316 archivos FORMATFILE 244
varios archivos de dispositivo 174 archivos múltiples de dispositivo 170
vía de acceso de un archivo indexado 258 archivos TRANSACTION 145
vuelco con formato 393 campos clave 252
elecciones mostradas en la sintaxis 3 campos de datos 138
elementos de datos del puntero campos de datos gráficos 139
definición 295 campos de hora 138
elementos fundamentales 301 campos de indicación de la hora 138
elementos de lenguaje campos de longitud variable 137
Véase estructura de programas campos SAA 138
eliminados, inicialización de archivos con campos SST 132
registros 23, 263 claves de atención de mandatos (CA) 146
enlace, configuración de la dirección de ítems claves de función 146
de 300 comprobación de validez de la estación de
Entorno de Desarrollo Cooperativo/400 trabajo 146
entrada de control de archivo 93 DD, descripción de la opción 119
de la División de Entorno 180 DDR, descripción de la opción 119
entrada de proceso de archivo DDS, descripción de la opción 119
TRANSACTION 180 DDSR, descripción de la opción 119
entrada de descripción de datos para datos definición 146
booleanos 151 descripción 112
entrada-salida, proceso de verbos de ejemplos
desde la Versión 1, Release 3 84 especificación de un formato de
entrada, proceso de verbos de entrada registro 115
desde la Versión 1, Release 3 84 especificaciones para un archivo de bases
entrar CRTCBLPGM desde la línea de de datos 116
mandatos 29 formatos, estructuras de datos generadas
entrar CRTCBLPGM desde un programa CL 29 por 214
entrar programas fuente 9, 11 generación de claves 127
error, ejemplo de recuperación de 86 palabra clave CONCAT 128
errores palabra clave RENAME 130
duplicación 270 palabra clave SST 132
para un archivo de dispositivo de
pantalla 148

418 COBOL/400 Guía del usuario


especificaciones de descripción de datos (DDS) estructura de programa (continuación)
(continuación) División de Datos 184
ejemplos (continuación) División de Entorno 180
para un archivo de referencia de División de Identificación 10
campo 113 División de procedimientos 185
para un formato de registro de divisiones opcionales y obligatorias 10
subarchivo 167, 169 ejemplo 9, 10
programas de estación de trabajo 210, 241 estructura de programa 9
vía de acceso en clave para un archivo indicador 122, 123
indexado 258 nivel de formato (registro) 122
función de 146 nivel del soporte del lenguaje 341
gestión de pantalla 146 estructuras de campos de datos 122
incorporación de descripción en un estructuras de indicadores 123
programa 114 estructuras de nivel de formato (registro) 122
mandatos Crear Archivos 110 examinar in listado del compilador
palabra clave CONCAT 128 examinar un listado del compilador
palabra clave RENAME 130 Véase programa de utilidad para la entrada del
subarchivos 164 fuente (SEU)
sufijos 129 excepciones 16, 54, 74, 85
utilización de palabras clave 112 expresiones 276, 362
estaciones de trabajo EXTEND, definición de la modalidad 98
comprobación de validez 146
comunicaciones entre 145
programas de ejemplo
F
Federal Information Processing Standard (FIPS)
actualización de pagos 227
COBOL estándar 1986 348
consulta de pedidos 216
con caracteres DBCS 369
consulta de transacciones 210
descripción 347
estado de archivo
desviaciones de señalización desde 25, 347,
0Q 263
369
9N 87
estándares a los que el compilador se
9Q 263
adjunta xiii
cómo se establece 75
mensajes 47, 345, 347
desde supervisores de pantalla 76
módulos estándar 348
después de E/S 87
opciones 25
ejemplos codificados 373
parámetro FLAGSTD 25, 47
instrucciones que afectan 321
FIB (bloque de información de archivo) 73
interno y externo 73
figurativa, constante NULL 299
obtención 108
FILLER
estado de archivo externo 73
campos de coma flotante 133
estado de archivo interno 73
fin de la lista en cadena, prueba para el 318
estado de bloqueo 97
finalización de un programa llamado 286
estado de bloqueo compartido-para-lectura 98
FIPS, total de violaciones señalizadas 48
estado de bloqueo de
flechas que aparecen en la sintaxis 3
lectura-exclusiva-permitida 98
flotante, prueba de deshacer edición 279
estándar, ANSI X3.23-1985 xiii
formato de archivo fuente
estándares industriales xiii
descripción 10
estructura de programa 9
longitud de registro 10
Véase también estructura de programa
segmentos de programa 323, 324
campo de datos 122
correlación de la División de Datos 45

Índice 419
formato de codificación 6, 11 frases (continuación)
formato de registro ADVANCING PAGE 352
campos 146 AT END 197, 200
composición para el dispositivo de CORRESPONDING 20
pantalla 146 END-OF-PAGE 352
DDS para subarchivos 167, 169 END-REWRITE 202
ejemplo de especificación de formato de END-WRITE 209
registro 110, 113, 116 FOOTING 352
especificación, utilización de palabras clave FORMAT 190, 197, 199, 201
DDS en 112 GIVING 351, 352
indicadores 149 INDICATORS 152, 191
subarchivos 165 INTO 196, 351
formato, notas adicionales sobre el nombre INVALID KEY 200, 202, 209
de 133 NEXT MODIFIED 199
formatos de codificación proporcionados por NO DATA 197
SEU 11 NO REWIND 352
formatos de E/S 125 NOT AT END 197, 200
formatos de entrada/salida 125 NOT INVALID KEY 200, 202, 209
formatos que utilizan el SEU REEL/UNIT 352
Véase programa de utilidad para la entrada del RELATIVE KEY 351
fuente REMAINDER 352
frase ADVANCING PAGE 352 ROLLING 205
frase CORRESPONDING 268 STARTING 204
frase END-OF-PAGE 352 SUBFILE 191
frase END-READ 198, 201 TERMINAL 191, 197, 200, 202, 203, 208
frase END-REWRITE 202 USING 352
frase END-WRITE 209 fuente, ejemplo de listado fuente 42
frase FOOTING 352
frase FORMAT 190, 197, 199, 201
frase GIVING 351, 352
G
generación de claves 127
frase INTO 196, 351
generación de formatos de E/S 125
frase INVALID KEY 200, 202, 209
generación de la supervisión de mensajes 76
función desde la Versión 1, Release 3 84
gestión de datos distribuido (DDM) 409
frase NEXT MODIFIED 199
gestión de memoria
frase NO DATA 197
función desde la Versión 1, Release 3 84
Véase segmentación
Gestor para el Desarrollo de Aplicaciones/400
frase NO REWIND 352
grupo, alineación de punteros dentro de estruc-
frase NOT AT END 197, 200
turas de 297
función desde Versión 1, Release 3 84
guión generado al copiar nombres ALIAS 119
frase NOT INVALID KEY 200, 202, 209
función desde Versión 1, Release 3 84
frase REEL/UNIT 352 H
frase RELATIVE KEY 351 herramientas para instalar programas fuente 9
frase REMAINDER 352 hora, caracteres de separación de la 39
frase ROLLING 205 hora, recuperación de valores de 274
frase STARTING 204
frase TERMINAL 191, 197, 200, 202, 203, 208
frase USING 352 I
frases ICF
ADVANCING 243 Véase archivo de función de comunicaciones
intersistemas

420 COBOL/400 Guía del usuario


identificador instalación del programa
definición en sección de Almacenamiento de Véase programa de utilidad para la entrada del
Trabajo 270 fuente (SEU)
llamo por 294 instrucción
no referenciado 22 ACCEPT 108, 186, 362
Identificadores de Juego Caracteres ACQUIRE 187
(CCSID) 143 ALTER 326
identificadores no referenciados 16 aritmética, en proceso DBCS 364
imprimir CALL 327
edición de valores de campo 244 CANCEL 352
en el área de desbordamiento 244 CLOSE 188, 352
espaciado 244 COMMIT 99
líneas múltiples 244 COPY 109, 120, 352, 368
mantenimiento de formatos de impresión 244 DISPLAY 363
paginación 244 DIVIDE 352
posición del papel 243 DROP 189
salida desde el trabajo con la instrucción EJECT 39
WRITE 243 en diagramas de sintaxis 3
según indicadores 244 INSPECT 364
independencia de dispositivo 93 MERGE 327, 351, 367, 389
independencia, dispositivo de 93 MOVE 335, 365
indexados, definición de archivos 376 OPEN 189
indicadores PERFORM 326, 352
asociada con claves de mandatos 146 PROCESS 33, 356
cláusula INDICATOR 152 puntos de interrupción 59
consideraciones especiales para 152 READ 192, 351, 363
consideraciones sobre el rendimiento 282 RELEASE 367
descripción 121, 149 RETURN 351, 367
e ítems de datos booleanos 151 REWRITE 201, 363
ejemplo, utilización en programas de 154 ROLLBACK 99
en el área de registro 150, 153 salida del compilador 38
en un área de indicador separada 150, 153, SEARCH 367
282 SET 365
entradas de descripción de datos 151 SKIP 39
estructuras 122 SORT 327, 389
frase INDICATORS 152 START 363
palabra clave INDARA DDS 150 START genérico 253
proceso del archivo TRANSACTION 149 STOP 367
programas de ejemplo 154 STRING 365
utilización 151 UNSTRING 365
y la cláusula ASSIGN 150 USE 209
y la instrucción COPY 120, 124 WRITE 203, 352, 364
información relacionada impresa instrucción ACCEPT 108, 186, 362
información sobre el control de dispositivo 149 instrucción ACQUIRE 187
inicialización de almacenamiento 291 instrucción ALTER 326
iniciar el compilador 15 instrucción CALL
inicio de sesión, deseditar prueba de 279 a QCMDEXC 267
inicio de sesión, rendimiento y cláusula PICTURE BY CONTENT, MOVE implícito 303
de 280 dentro de un programa segmentado 327
identificador BY CONTENT 292

Índice 421
instrucción CALL (continuación) instrucción GO TO 326
identificador BY CONTENT LENGTH OF 292 instrucción GOBACK 321
identificador BY REFERENCE 292 instrucción INSPECT 364
literal BY CONTENT 292 instrucción MERGE 327, 351, 367, 389
nombre de registro BY REFERENCE instrucción MOVE 335, 365
ADDRESS OF 292 frase CORRESPONDING 268
por identificador 294 utilización de punteros 301
recursivo, descripción de 285 instrucción OPEN 189
uso de punteros 303 instrucción PERFORM 326, 352
instrucción CANCEL 294, 321, 352 instrucción PROCESS 356
con programas no COBOL 291 ámbito de las opciones con el mandato
instrucción *CBL 39 CRTCBLPGM 38
instrucción CLOSE 188, 352 consideraciones
instrucción COMMIT 99, 101 alteración temporal de archivos especifi-
instrucción *CONTROL 39 cados por el programa 97
COPY DDS, utilización con indicadores 124 archivos DATABASE 251
instrucción COPY archivos descritos por el programa y exter-
cambios con el COBOL ANSI 74 352 namente 109
campos clave 252 archivos DISK 251
con ALL-FORMATS 120 bloqueo de archivos y registros 97
DD, DDR, DDS o DDSR 118 bloqueo de registros de salida 107
descripción 118 consideraciones sobre el control de compro-
ejemplo de estructuras de datos generadas miso 99
por 214 dependencia de dispositivo 93
ejemplos de generaciones de claves 127 desbloqueo de registros de entrada 107
en Sección de Archivos 120 métodos de proceso para los tipos DISK y
estructuras de campos de datos 122 DATABASE 251
instrucción COPY de formato-1 37 spooling 95
instrucción PROCESS que contiene una ins- visión general 267
trucción COPY 38 COPY, utilización con la instrucción 37, 38
listado de instrucciones fuente 39 descripción 33
resultados DDS 116, 124 especificación de las opciones del
Sección de Archivo exterior 120 compilador 41
supresión de instrucciones fuente 39 formato de 33
utilizar con archivos TRANSACTION 145 normas para 33
utilizar con instrucciones PROCESS 37 opciones 37
y caracteres DBCS 368 opciones del compilador especificadas en 33
y coma flotante 133 opciones disponibles para 33
y datos descritos externamente 119 posición de la instrucción 33
instrucción COPY de formato-1 37 salida del compilador 38
instrucción COPY de formato-2 16 técnicas
instrucción DISPLAY 363 actualización de archivos indexados 378
instrucción DIVIDE 352 actualización de archivos relativos 384
instrucción DROP 189 Actualización y ampliación de archivos
instrucción EJECT 39 secuenciales 373
instrucción EXIT PROGRAM 286, 321 creación de archivos indexados 376
instrucción generada por compilador (STMT), creación de archivos relativos 382
número de 44 creación de archivos secuenciales 371
instrucción genérica START 253 proceso de archivos 371
recuperación de archivos relativos 386

422 COBOL/400 Guía del usuario


instrucción PROCESS (continuación) instrucción WRITE (continuación)
utilización para especificar las opciones del formato, no de subarchivo 203—205,
compilador 33 208—209
instrucción READ 363 indicadores 153
cambios en la utilización del COBOL ANSI para archivos TRANSACTION 203
74 351 para archivos transaction descritos por el pro-
descripción 192 grama 203
formato no de subarchivo 196—197 recursos de proceso 190—191
formato, subarchivo 199—200 y DBCS 364
indicadores 153 instrucción, longitud máxima de 11, 12
recursos de proceso 191 instrucciones ACCEPT y DISPLAY ampliadas 23
frase FORMAT 190 instrucciones CICS (Sistema de Control de la
instrucción RELEASE 367 Información del Cliente) 13
instrucción RETURN 367 instrucciones de bifurcación de
instrucción REWRITE procedimientos 367
descripción 201 instrucciones del Lenguaje de Consulta Estructu-
formato 201, 202 rada (SQL) 13
indicadores 153 instrucciones del Sistema de Control de la Infor-
para archivos transaction descritos por el pro- mación del Cliente (CICS) 13
grama 201 instrucciones SQL (Lenguaje de Consulta Estruc-
para el archivo TRANSACTION 201 turada) 13
recursos de proceso 190, 191 interfaces de programa de uso general
y DBCS 363 descripción ix
instrucción ROLLBACK 99 manejo de errores 72
límite 100 QCMDEXC 29, 267
instrucción SEARCH 367 Interfaces del Programa de Aplicación (API)
instrucción SELECT manejo de errores 55, 72
EXTERNALLY-DESCRIBED-KEY 127 utilización con punteros 305
instrucción SET 365 International Standards Organization (ISO) xiii
instrucción SKIP 39 introducción al COBOL/400 1
instrucción SKIP1 39 IRP (representación intermedia de programa)
instrucción SKIP2 39 Véase representación intermedia de programa
instrucción SKIP3 39 (IRP)
instrucción SORT 327, 367, 389 ítems agrupados por nivel 48
instrucción SORT/MERGE 367 ítems binarios de 8 bytes y rendimiento 281
instrucción START 253, 363 ítems binarios de ocho bytes y rendimiento 281
instrucción STOP 367 ítems de datos
instrucción STOP RUN 286, 321 atributos de 47
instrucción STRING 365 definición como un puntero 296
instrucción TITLE 39 en enlace de subprograma 293
instrucción UNSTRING 365 paso, con su longitud 292
instrucción USE referencia de subseries 274
descripción 209 ítems de datos de puntero elementales 301
ejemplos codificados 373, 374 ítems de datos no referenciados 22
EXCEPTION/ERROR para archivo ítems decimales empaquetados 280
TRANSACTION 209 ítems numéricos
formato 209 movimiento con deseditar 277
instrucción WRITE y rendimiento 280
cambios del COBOL ANSI 74 352
descripción 203

Índice 423
literales DBCS 356—358, 367, 368
L literales no numéricos 20
LDA (área de datos local) 319
literales, delimitación de 20
lectura en clave
local (LDA), definición del área de datos 319
liberación de un registro leído para la actuali-
lógica de segmentación 324
zación 98
longitud de registros en archivo fuente 10
limitaciones
longitud de registros en archivo fuentee 10
parámetro TGTRLS 32
longitud máxima de instrucción 11, 12
limitations 93
longitud máxima de instrucción fuente 11, 12
límite
definición 100
registro 23 LL
violación 77, 263 llamada al compilador COBOL 15
límite de registro 23 llamadas entre programas que utilizan
límites de archivo 263 punteros 303
límites de tamaño interno 15 llamar por identificador 294
límites, interno, tamaño 15
lista de palabras reservadas y ACCEPT/DISPLAY
ampliada 23 M
lista de respuestas al sistema 54 mandato ADDMSGD (Añadir Descripción de
listado de resumen de mandatos 40 Mensaje) 347
listado OPTIONS 41 mandato ALCOBJ (Asignar Objeto) 97
listados mandato ALterar Temporalmente a Archivo de
archivo de salida por omisión 25 Disquete (OVRDKTF) 94
búsqueda de errores de sintaxis 40 mandato Alterar Temporalmente Archivo de Men-
caracteres DBCS en 369 sajes (OVRMSGF) 347
correlación de la División de Datos 45, 63 mandato Asignar Objeto (ALCOBJ) 97
ejemplo, listado fuente de 19, 42, 44 mandato Cambiar Depuración (CHGDBG) 57
ejemplos de 41 mandato Cambiar Variable de Programa
especificación del archivo de salida para 25 (CHGPGMVAR) 65
examinar mandato Crear Lista de Autorizaciones
Véase programa de utilidad de entrada (CRTAUTL) 28
fuente mandato Crear Programa COBOL (CRTCBLPGM)
longitud mínima de registro 25 descripción de 6
mensajes entrar desde la línea de mandatos 29
descripción 50 entrar desde un programa CL 29
desde el compilador COBOL/400 345 parámetro AUT 28
ejemplo 49 parámetro CVTOPT 24, 35
mensajes FIPS 47 parámetro DUMP 28
opciones 41 parámetro EXTDSPOPT 36
opciones del compilador activas 20 parámetro FLAG 27, 36
referencias cruzadas 49 parámetro FLAGSTD 25, 36, 38
resumen de mandatos 40 parámetro GENLVL 19, 33
utilización de verbos por medio de la parámetro GENOPT 21, 35
cuenta 20, 45 parámetro ITDUMP (n) 28
listados de referencias cruzadas parámetro MSGLMT 24
descripción del listado 49 parámetro OPTION 19, 34, 38
ejemplo 49 parámetro PGM 18
opciones CRTCBLPGM 19, 21 parámetro PRTFILE 25
prueba, utilización en 63 parámetro REPLACE 27
y puntos de interrupción 59 parámetro SAAFLAG 26, 36, 38

424 COBOL/400 Guía del usuario


mandato Crear Programa COBOL (CRTCBLPGM) mandatos (continuación)
(continuación) Añadir Descripción de Mensaje
parámetro SRCFILE 18 (ADDMSGD) 347
parámetro SRCMBR 18 Asignar Objeto (ALCOBJ) 97
parámetro TEXT 19 Cambiar Depuración (CHGDBG) 57
parámetro TGTRLS 27 Cambiar Puntero (CHGPTR) 65
parámetro USRPRF 27 Cambiar Puntero de Nivel Superior
parámetros, descripción de 18—32 (CHGHLLPTR) 65
sintaxis de 30 Cambiar Variable de Programa
solicitud, utilización de las pantallas de 16 (CHGPGMVAR) 65
mandato CRTAUTL (Crear Lista de Autori- Crear Lista de Autorizaciones (CRTAUTL) 28
zaciones) 28 Crear Programa COBOL (CRTCBLPGM)
mandato CRTCBLPGM Véase mandato Crear Programa COBOL
Véase mandato Crear Programa COBOL Finalizar Depuración COBOL
mandato CHGDBG (Cambiar Depuración) 57 (ENDCBLDBG) 331, 332
mandato CHGPGMVAR (Cambiar Variable de Iniciar Depuración (STRDBG) 57
Programa) 65 Iniciar Depuración COBOL
mandato DSPTRCDTA (Visualiza Datos de (STRCBLDBG) 330, 332
Rastreo) 67 Iniciar Programa de Utilidad para la Entrada del
mandato Finalizar Depuración COBOL Fuente (STRSEU)
(ENDCBLDBG) 331, 332 Véase programa de utilidad para la entrada
mandato GRTOBJAUT (Otorgar Autorización de del fuente
Objeto) 28 Otorgar Autorización de Objeto
mandato Iniciar Depuración (STRDBG) 57 (GRTOBJAUT) 28
mandato Iniciar Depuración COBOL Supervisar Mensaje (MONMSG) 16
(STRCBLDBG) 330, 332 Visualizar Datos de Rastreo
mandato Iniciar Programa de Utilidad para la (DSPTRCDTA) 67
Entrada del Fuente Start (STRSEU) 9 Visualizar Variable de Programa
mandato MONMSG (Supervisar Mensaje) 16 (DSPPGMVAR) 65
mandato Otorgar Autorización de Objeto Mandatos CL (lenguaje de control)
(GRTOBJAUT) 28 emisión mediante QCMDEXC en un
mandato OVRDKTF 94 programa 267
mandato OVRMSGF 347 para comprobar programas 57
mandato Revocar Autorización de Objeto para ejecutar programas 7
(RVKOBJAUT) 28 mandatos del lenguaje de control
mandato RVKOBJAUT (Revocar Autorización de Véase mandatos CL
Objeto) 28 mandatos, utilización de la sintaxis de 3
mandato STRCBLDBG (Iniciar Depuración manejo de errores 71
COBOL) 330, 332 API 55, 72
mandato STRDBG (Iniciar Depuración) 57 estándar 79
mandato STRSEU (Iniciar Programa de Utilidad no estándar 81
para la Entrada del Fuente) 9 visión general 71
mandato Supervisar Mensaje (MONMSG) 16 manejo de errores de datos con deshacer
mandato Visualizar Datos de Rastreo edición 279
(DSPTRCDTA) 67 manejo de errores estándar 71, 79
mandatos manejo de errores no estándar 81
Alterar Temporalmente Archivo de Disquete marcas de servicio x
(OVRDKTF) 94 marcas registradas x
Alterar Temporalmente Archivo de Mensajes máxima longitud de registro de los archivos
(OVRMSGF) 347 creados dinámicamente 23

Índice 425
mensajes módulos (MGT), definición de tabla global
campo en el listado de mensajes de diagnós- de 393
tico 50 módulos de proceso funcional 340
compilación 345 módulos de proceso opcional 341
diagnóstico 49 módulos E-S secuencial 340
estadísticas 50 módulos E/S indexados 341
FIPS 345 MSGID y campo de nivel de gravedad 50
Herramientas para el Desarrollo de Apli-
caciones 343
interactivo 343
N
name, assignment 93, 150, 181, 359
niveles de gravedad 19, 25, 346
necesario
respuesta en un entorno interactivo 345
cláusulas 3
SAA, señalización 48
divisiones 10
tiempo de compilación 343
elementos en la sintaxis 3
tiempo de ejecución 344
nivel de bloqueo
y manejo de errores estándar 71
(*CS), bajo control de compromiso 100
tipos 343
máximo, bajo control de compromiso 100
mensajes de diagnóstico 49
mínimo, bajo control de compromiso 100
metodología para la instalación de programas 9
nivel de campo de ítems de datos (LVL) 46
métodos de proceso para archivos
nivel-gravedad 19, 27
DATABASE 251
nivel de gravedad de los mensajes 19, 25, 346
métodos de proceso para archivos DISK 251
opción nivel-gravedad-máxima 25
miembros 97
nivel de soporte de lenguaje 339, 340, 341, 348
migración
niveles de diagnóstico 346
a COBOL ANSI 85 351
no coincidentes, reducir aparición de
a lenguaje COBOL/400 351
registros 293
programas COBOL ANSI 74 351
NO LOCK, rendimiento de frase 98, 283
modalidad de acceso 182, 251, 260
nombre DD 119
DYNAMIC 257
nombre DDR 119
RANDOM 257
nombre DDS 119
modalidad de acceso dinámica 166, 182, 260,
nombre DDSR 119
264
nombre de alias 119
modalidad de acceso secuencial 23, 182, 197,
nombre de asignación 93, 150, 181, 359
199, 261, 262
opción-nombre-lista-autorización 28
modalidades de respuesta 54
nombre-programa 18
modificación de referencia
nombre-archivo-fuente 18
calcular desplazamiento 303
nombre-miembro-archivo-fuente 19
descripción 274
nombres de campo
e instrucción INSPECT 276
-DDS añadidas a 129, 131
justificación a la izquierda 276
construcción de 122
recuperar valor de hora 274
notas adicionales 133
y opción *RANGE 22
nombres de nivel de grupo 122
módulo clasificar-fusionar 341
nombres de objeto OS/400 16
módulo de comunicaciones 341
nombres definidos al especificar
módulo de E-S relativo 340
GENOPT(*NOUNREF) 16
módulo de manipulación del texto fuente 341
notación, sintaxis de 2
módulo de núcleo 340
notas acerca de la programación
módulo del transcriptor de informes 341
número de entradas en la tabla de definición de
módulo entre programas 341
objetos (ODT) 15, 22

426 COBOL/400 Guía del usuario


números de referencia 19, 44, 50 opción *LIBL 18, 25
números-segmentos 323—326 opción límite de mensaje 25
opción *LINENUMBER 20
opción *LIST 21
O opción *LSTDBG 21
objetivo de este manual xi
opción *MAP 20, 38
objeto de programa
opción *MINIMUM 25
compilador, especificación de opciones del 21
opción nivel-release 27, 32
comprobación de rango subindexado 22
opción *NOATR 22
especificación de autorización a 28
opción *NOBLK 23
optimización, especificación en tiempo de com-
opción *NOCRTF 23
pilación de 22
opción *NODATETIME 24
salida desde el compilador 15
opción *NODDSFILLER 22
objeto, definición del programa 6
opción *NODEB 26
observar un listado del compilador
opción *NODFRWRT 26
Véase programa de utilidad para entrada del opción *NODUMP 22
fuente (SEU)
opción *NODUPKEYCHK 23
ODP (abrir vía de acceso de datos) 99
opción *NOEXTACCDSP 23
ODP (vía de acceso de datos abierta)
opción *NOFIPS 25
compartida 99
opción *NOFLAG 26
ODT (Tablas de Definición de Objetos) 22
opción *NOFS21DUPKY 24
opción *ACCUPDALL 26
opción *NOGEN 19
opción *ACCUPDNE 26
opción *NOGRAPHIC 24
opción *ALL 28
opción *NOINZDLT 23
opción *APOST 20
opción *NOLIST 21
opción *ATR 22
opción *NOLSTDBG 21
opción *BLANK 19
opción *NOMAP 20
opción *BLK 23
opción *NOMAX 25
opción *CRTF 23
opción nombre-archivo 25
opción *CURLIB 18, 25
opción nombre-biblioteca 18, 25
opción *CURRENT 27, 32
opción *NONUMBER 20
opción *CHANGE 28
opción *NOOBSOLTE 26
opción *DATETIME 24
opción *NOOPTIMIZE 22
opción *DDSFILLER 22
opción *NOOPTIONS 20
opción *DEB1 26
opción *NOPATCH 22
opción *DEB2 26
opción *NOPRINT 21
opción *DFRWRT 26
opción *NOPRTCORR 20
opción *DUMP 22
opción *NORANGE 22, 282
opción *DUPKEYCHK 23, 282
opción *NOSECLVL 20
opción *EXCLUDE 28
opción *NOSEG 25
opción *EXTACCDSP 23
opción *NOSEQUENCE 19
opción *FLAG 26, 38
opción *NOSOURCE 19
opción *FS21DUPKY 24
opción *NOSRCDBG 20
opción *GEN 19
opción *NOSTDERR 23
opción *GRAPHIC 24
opción *NOSTDINZ 24
opción *HIGH 25
opción *NOSYNC 22
opción *INTERMEDIATE 25
opción *NOUNDSPCHR 26
opción *INZDLT 23, 263
opción *NOUNREF 22
opción *LIBCRTAUT 28
opción *NOVARCHAR 24

Índice 427
opción *NOVBSUM 20 opciones del compilador
opción *NOXREF 19, 21 Véase también instrucción PROCESS
opción *NUMBER 20 parámetros de mandato CRTCBLPGM
opción *OBSOLETE 26 *ACCUPDALL 26
opción *OPTIMIZE 22 *ACCUPDNE 26
opción *OPTIONS 20, 34, 38 *ALL 28
opción *OWNER 27 *APOST 20
opción *PGM 18 *ATR 22
opción *PGMID 18 *BLANK 19
opción *PRINT 21 *BLK 23
opción *PRTCORR 20 como se especifica en la instrucción
listado de ejemplo 268 PROCESS 33
opción *PRV 27, 32 compilación por lotes 37
opción QSYSPRT (archivo de impresora por comprobar errores de secuencia 19
omisión) 25 comprobar rangos de subíndice en tiempo de
opción *QUOTE 20 ejecución 22
opción *RANGE 22 contaje de utilización de verbos 20
modificación de referencia 274 crear código objeto 19
opción REUSEDLT crear correlación de División de Datos 20
Véase volver a utilizar registros eliminados crear listado de referencias cruzadas 19, 21,
opción *SECLVL 20 49
opción *SEG1 26 crear listado fuente 19, 42
opción *SEG2 26 *CRTF 23
opción *SEQUENCE 19 *CURLIB 18, 25
opción *SOURCE 19, 38 *CURRENT 27, 32
opción *SRCDBG 21 *CHANGE 28
opción *SRCMBRTXT 19 *DATETIME 24
opción *STDERR 23 *DDSFILLER 22
opción *STDINZ 24 *DEB1 26
opción *SYNC 23 *DEB2 26
opción *UNDSPCHR 26 delimitador para literales booleanos y no numé-
opción *UNREF 22 ricos 20
opción *USE 28 descripción-texto 19
opción *USER 27 *DFRWRT 26
opción V2R1M0 32 *DUMP 22
opción V2R1M1 32 *DUPKEYCHK 23
opción V2R2M0 32 especificación
opción *VARCHAR 24 *EXCLUDE 28
opción *VBSUM 20, 38 *EXTACCDSP 23
opción *XREF 19, 21, 38 *FLAG 26, 38
opcionales, ítems de sintaxis 3 *FS21DUPKY 24
opciones *GEN 19
datos, opciones *NORANGE de formato opción *GRAPHIC 24
de 282 *HIGH 25
de parámetros del mandato incluir atributos para el IRP 22
CRTCBLPGM 18—32 *INTERMEDIATE 25
listado 41 *INZDLT 23
para la instrucción PROCESS 37 *LIBCRTAUT 28
segmentación 325 *LIBL 18, 25
opción límite-mensaje

428 COBOL/400 Guía del usuario


opciones del compilador (continuación) opciones del compilador (continuación)
*LINENUMBER 20 *NOUNDSPCHR 26
*LIST 21 *NOUNREF 22
listado de opciones del compilador 38, 41 *NOVARCHAR 24
listar opciones del compilador activas 38, 42 *NOVBSUM 20
*LSTDBG 21 *NOXREF 19, 21
*MAP 20, 38 *NUMBER 20
*MINIMUM 25 *OBSOLETE 26
opción nivel-gravedad 19, 27 opción nivel-release 27, 32
opción nivel-gravedad-máxima 25 opción nombre-biblioteca 18, 25
*NOATR 22 opción QSYSPRT (archivo de impresora por
*NOBLK 23 omisión) 25
*NOCRTF 23 optimizar código fuente 22
opción *NODATETIME 24 *OPTIMIZE 22
*NODDSFILLER 22 *OPTIONS 20, 38
*NODEB 26 *OWNER 27
*NODFRWRT 26 parámetros del mandato
*NODUMP 22 CRTCBLPGM 18—32
*NODUPKEYCHK 23 *PATCH 22
*NOEXTACCDSP 23 *PGM 18
*NOFIPS 25 *PGMID 18
*NOFLAG 26 *PRINT 21
*NOFS21DUPKY 24 PROCESS, uso para la especificación de la
*NOGEN 19 instrucción 33
*NOINZDLT 23 programa, caracteres DBCS en listados
*NOLIST 21 de 369
*NOLSTDBG 21 *PRTCORR 20
*NOMAP 20 *PRV 27, 32
*NOMAX 25 QLBLSRC (archivo fuente por omisión) 18
opción nombre-archivo 25 *QUOTE 20
opción nombre-lista-autorización 28 *RANGE 22
opción nombre-archivo-fuente 18 *SECLVL 20
opción nombre-miembro-archivo-fuente 19 *SEG1 26
nombre-programa 18 *SEG2 26
*NONUMBER 20 *SEQUENCE 19
*NOOBSOLETE 26 *SOURCE 18, 19, 38
*NOOPTIMIZE 22 *SRCDBG 21
*NOOPTIONS 20 *SRCMBRTXT 19
*NOPATCH 22 *STDERR 23
*NOPRINT 21 *STDINZ 24
*NOPRTCORR 20 supresión de mensajes de nivel secundario 20
*NORANGE 22 supresión del listado fuente 42
*NOSECLVL 20 *SYNC 23
*NOSEG 25 *UNDSPCHR 26
*NOSEQUENCE 19 *UNREF 22
*NOSOURCE 19 *USE 28
*NOSRCDBG 20 *USER 27
*NOSTDERR 23 utilizar números de secuencia suministrado por
*NOSTDINZ 24 el usuario 20
*NOSYNC 22 utilizar números de secuencia utilizados por el
compilador 20

Índice 429
opciones del compilador (continuación) pantallas (continuación)
valor V2R1M0 para la opción nivel-release 32 para programas de ejemplo (continuación)
valor V2R1M1 para la opción nivel-release 32 consulta de transacciones 215
valor V2R2M0 para la opción nivel-release 32 subarchivos 165
*VARCHAR 24 visualizar mensajes de programa 344
*VBSUM 20, 38 parámetro AUT para el mandato
visión general 6 CRTCBLPGM 28
*XREF 19, 21, 38 parámetro CVTOPT 24, 35
y comprobación de sintaxis con SEU 12 parámetro DUMP para el mandato
OPEN-FEEDBACK 362 CRTCBLPGM 28
OPEN, aumento de velocidad en operación 99 parámetro EXTDSPOPT del mandato
operación CLOSE 23 CRTCBLPGM 36
operación de E-S 393 parámetro FLAG para el mandato
operación más eficaz 22 CRTCBLPGM 27, 36
operaciones de archivo para el archivo de impre- parámetro FLAGSTD para el mandato
sora 243 CRTCBLPGM 25, 36, 47
operaciones de cálculo parámetro GENLVL para el mandato
en campos de longitud fija 138 CRTCBLPGM 19, 33
operadores aritméticos 3 parámetro GENOPT para el mandato
operadores aritméticos y lógicos 3 CRTCBLPGM 21, 35
operadores lógicos 3 parámetro ITDUMP para el mandato
optimización del almacenamiento CRTCBLPGM 28
Véase segmentación parámetro MSGLMT 24
optimización del código 22 parámetro OPTION para el mandato
orden de las cláusulas 3 CRTCBLPGM 19, 38
organización de archivo 262 parámetro PGM para el mandato
CRTCBLPGM 18
parámetro PRTFILE para el mandato
P CRTCBLPGM 25
palabra clave ALIAS 117
parámetro REPLACE para el mandato
palabra clave CONCAT 128
CRTCBLPGM 27
palabra clave INDARA 124
parámetro SAAFLAG para el mandato
palabra clave RENAME 130
CRTCBLPGM 26, 36
palabra clave SST 132
parámetro SRCFILE para el mandato
palabra reservada -DDS se añade a 129, 133
CRTCBLPGM 18
palabras clave
parámetro SRCMBR para el mandato
DDS 117, 128, 130, 132
CRTCBLPGM 18
en diagramas de sintaxis 2
parámetro TEXT para el mandato
INDARA 124
CRTCBLPGM 19
pantalla, definición de los datos de formato
parámetro TGTRLS para el mandato
de 146
CRTCBLPGM 27, 32
pantallas
parámetro USRPRF para el mandato
Véase también pantallas CRTCBLPGM 27
especificaciones de descripción de datos (DDS)
parámetros del mandato CRTCBLPGM 18
para 146
Véase también mandato Crear Programa
Mensajes de visualización SEU 343
COBOL (CRTCBLPGM)
Pantalla de solicitud CRTCBLPGM 17
parámetros, descripción en el programa
pantalla de solicitud STRCBLDBG 330
llamado 293
pantalla de visualización ENDCBLDBG 331
párrafo SPECIAL-NAMES 12, 243, 351
para programas de ejemplo
actualización de pagos 238, 239, 240
consulta de pedidos 226, 227

430 COBOL/400 Guía del usuario


partes de un programa 9 programa, definición de la pila 285
partes de un programa COBOL programas de depuración 57, 329
Véase estructura de programa cambio del contenido de las variables 65
paso de direcciones entre programas 317 características disponibles 329
opción *PATCH 22 conmutador en tiempo de compilación 329
perfil de usuario 27 conmutador en tiempo de ejecución 69, 330
pilas mostradas en la sintaxis 3 Datos, del listado IRP y de la correlación de
plantilla del programa 22 División de 63
posición de la instrucción PROCESS 33 DEBUG-CONTENTS 335
posición del papel 243 DEBUGGING MODE como conmutador en
preface xi tiempo de compilación 329
principal, descripción del programa 286 declarativas, ejecución de 333
procedimiento USE descripción 6, 57, 282
función desde Versión 1, Release 3 84 estado de archivo 108
proceso de archivo funciones de 57
Véase archivos funciones OS/400 para 57
proceso de archivo específico 243 línea, definición de 337
proceso de verbos de E/S líneas de un programa fuente 337
desde Versión 1, Release 3 84 mandato ENDCBLDBG (Finalizar Depuración
programa (PGT), definición de tabla global COBOL) 331, 332
de 393 mandato STRCBLDBG (Iniciar Depuración
Programa de Utilidad para la Entrada del Fuente COBOL) 330, 332
Véase SEU módulo de depuración 341
programa fuente procedimientos USE FOR DEBUGGING 332
compilación 15, 329 puntos de interrupción
conmutador y compilación WITH DEBUGGING consideraciones para el uso 65
MODE 329 descripción 59
cuenta de verbos utilizados 20 rastreos
definición 2 consideraciones para el uso 68
entrar programas fuente descripción 66
Véase SEU (programa de utilidad para la registro especial DEBUG-ITEM 335
entrada del fuente) visión general 6
líneas de depuración 337 visualización de elementos de tabla 62
listado 19, 42 visualización de variables 62
programas fuente de edición vuelco formateado 69
Véase SEU (programa de utilidad para la programas de llamada
entrada del fuente) BY CONTENT 291
registro especial DEBUG-ITEM 335 BY REFERENCE 291
programa llamado definición 285
definición 285 dentro de un programa segmentado 327
programa objeto desde un programa no COBOL 281
compilador, especificación de opciones del 21 para empezar en otro punto de entrada
comprobación de rango subindexado 22 uso de punteros 303
especificación de autorización a 28 programas fuente de edición 9
optimización, especificación en tiempo de com- Véase también programa de utilidad para la
pilación de 22 entrada del fuente (SEU)
salida desde el compilador 15 puntero, definición de la alineación del 296
programa segmentado 323 punteros
programa, caracteres DBCS en listados de 369 alineación en los límites
automáticamente mediante FILLER 297
con bloqueos activos 297

Índice 431
punteros (continuación)
alineación en los límites (continuación)
R
rango de subíndices 22
ítems de nivel 01 297
rastreo de un bucle 284
ítems de nivel 77 297
rastreos
asignación de valor nulo 318
como una función OS/400 57
definición 295, 296
consideraciones 68
definición de alineación 296
descripción 66
descripción 295
ejemplo 66
desplazamiento entre ítems de grupo 303
utilización 66
ejemplos
READ WITH NO LOCK 97, 100
acceso al espacio de usuario 305
realimentación de E-S 57, 108, 109
proceso de lista en cadena 316
realimentación de E-S 362
en el almacenamiento de trabajo 297
RECORD KEYS válida 252
en la instrucción CALL 303
recuperación 86
en la instrucción MOVE 301
archivos transaction 87
restricciones 301
con control de compromiso 86
en la sección de archivos 297
ejemplo 88
en la sección de Enlace 293
procedimiento en el programa 87
en los registros 299
con un dispositivo adquirido 87
en tablas 297
con varios dispositivos adquiridos 88
escritura 298
recursiva, definición de llamada 285
inicialización 299
redefinición de formatos 125
lectura 298
redefinición, nombre de nivel de grupo 122
longitud de 295
redirección de archivos 94, 97
manipulación de ítems de datos 296
referencia a otros manuales xi
proceso de una lista en cadena 316
referencia a una clave parcial 253
valor nulo 318
registro 335
y cláusula REDEFINES 297
registro especial ADDRESS OF 292, 300
punteros de inicialización 299
descripción 300
con constante figurativa NULL 299
diferencia con ADDRESS OF calculado 300
puntos de interrupción
registro especial LENGTH OF 292, 299
como en la función OS/400 57
registros
consideraciones para el uso 65
bloqueo
descripción 59
actualizar registros de bases de datos 97
ejemplo 60
por COBOL 97
rastreo, diferencias entren 66
y E/S anómala 99
utilización de 59, 64
y rendimiento 283
visualización de elementos de tabla 62
bloqueo de la salida 107
visualización de variables 62
desbloquear entrada 107
puntuación 3
que contienen punteros 299
reducción de no coincidencias 293
Q salvaguarda de secuencia de 261
QCMDEXC, utilización en un programa 29, 267 registros compartidos 97
QLBLSRC (archivo fuente por omisión) 10, 18 registros de entrada 107
QRLMAIN registros especiales
MGTFUNC 281 ADDRESS OF 292
QUOTE, valor de la constante figurativa 20 LENGTH OF 292
definición implícita 299
en División de Procedimientos 299

432 COBOL/400 Guía del usuario


reinicialización, evitar 125 salida, definición del archivo de 371
release de destino 27, 32 salida, proceso de verbos de
remotos, comunicación entre sistemas 145, 320 desde Versión 1, Release 3 84
renuncias sección almacenamiento de trabajo
ejemplos definición de identificadores 270
envío de información a IBM Sección de Enlace
patentes ix descripción de datos a recibir 293
usuarios del Gobierno de los Estados Unidos parámetros para un programa llamado 293
REPLACING, en COPY de formato 2 133 secuencia
representación intermedia de programa (IRP) combinación de números 20
cómo listar 21 errores, comprobación de 19
cómo listar los atributos 22 indicador de error de secuencia (SI) 44
cómo utilizar 59 número 10
listado de ejemplo 64 registros, salvaguarda de 261
listado de referencias cruzadas 21 secuencia de llegada 135, 260, 262
respuesta a mensajes en un entorno secuencia en clave 135, 251, 262, 265
interactivo 345 segmentación 281, 323—327, 341, 389
restricciones 93 segmento permanente 323
resumen de cambios segmentos del programa 323
cambios efectuados en la Versión 2 Release segmentos independientes 324
1.1 seguridad
cambios efectuados en la Versión 2 Release 2 especificación de autorización al programa
retardos, reducción durante la inicialización de la objeto 28
duración de los 263 mantenimiento durante la prueba 57
señalización FIPS
Véase Federal Information Processing Standard
S señalización SAA 48, 349
S en cláusula PICTURE 280
SEU (programa de utilidad para la entrada del
salida
fuente)
compilador 38
comprobación de sintaxis 11—13, 343
compilador, visualización de 40
edición de programas fuente 6, 9, 11
salida del compilador
entrar programas fuente 6, 9, 11
Véase también mensajes errores
correlación de División de Datos 45
detectados por el compilador 58
descripción 38
errores comunes 58
ejemplos 38
errores de codificación 58
examinar 40
listado 49
Véase también programa de utilidad de pro- mensajes en tiempo de ejecución 344
grama fuente
examinar un listado del compilador 40
listado de descripciones 38
formatos, utilización de 11
listado de mensajes FIPS 47
mandato Iniciar Programa de Utilidad para la
listado de opciones 40, 41
Entrada del Fuente (STRSEU) 9
listado de referencias cruzadas 49
parámetro TYPE 9
listado de resumen de mandatos 40
solicitudes y formatos 11
mensajes 345
SIGN, definición con la cláusula LIKE de la cláu-
opciones CRTCBLPGM 38
sula 270
opciones de listado 41
símbolos utilizados en la sintaxis 3
programa, caracteres DBCS en listados
sintaxis
de 369
cláusulas opcionales y obligatorias 3
salida del compilador 37, 38
comprobación en SEU 11, 12, 40
supresión del listado fuente 42

Índice 433
sintaxis (continuación) soporte del juego de caracteres de doble byte
comprobación, unidad de 12 (DBCS) (continuación)
del mandato CRTCBLPGM 30 habilitar programas COBOL 356
diagramas, uso de 3 instrucción ACCEPT 362
elementos necesarios 3 instrucción PROCESS 355, 364
elementos opcionales 3 representación de datos DBCS en trabajos por
flechas 3 lotes 367
líneas de depuración 337 y datos alfanuméricos 365
notación 2 soporte para el ANSI X3.23-1985 estándar 340
palabras clave en 2 soporte SAA CPI (Interfaz Común de Progra-
pilas 3 mación) 341
puntuación 3 soporte SAA de la Interfaz Común de Progra-
símbolos 3 mación (CPI) 341
sintaxis del programa, línea de depuración 337 soprte CPI (Interfaz Común de
sistema operativo OS/400 Programación) 341
entrada/salida 149 spacing 39
funciones para la depuración 57 spool de entrada 95, 96
independencia y dependencia de spool de salida 95
dispositivos 93 spooling 95, 96
información de control de dispositivos 149 SQL incluido 13
límites de tamaño interno 15 subcampo 164—166, 191
mandatos de punto de interrupción 60 subcampo, contenido del registro especial
nombres de objeto 16 DEBUG-ITEM 335
prueba, funciones para 57 subíndice 277
seguridad, mantenimiento durante la subíndice, especificar comprobación de rango
prueba 57 de 22
y mensajes 347 subprograma 37, 286
solicitudes mediante SEU enlace 293
Véase programa de utilidad para la entrada del subrayados convertidos en guiones 119
fuente subrayados eliminados del final del nombre de
soporte DBCS archivo 119
Véase soporte del conjunto de caracteres de sufijo -DDS
doble byte añadido a la palabra reservada 129, 133
soporte de la Interfaz Común de Programación añadido al nombre de campo de clave 129,
(CPI) 341 131
soporte del juego de caracteres de doble byte supervisión de excepciones 16
(DBCS) 355—369 supervisión, mensaje de 76
abrir 368 supresión de mensajes 347
búsqueda en una tabla 367 supresión del listado fuente 42
clasificación 367
comentarios con caracteres DBCS 359
comprobación 357
T
Tabla de Definición de Objetos (ODT) 22
comunicaciones entre programas 368
tabla, atributos de los ítems de 47
definición 408
tabla, modificación de referencia 275
en la División de Datos 360
tablas de codificación 275
en la División de Entorno 359
tamaño del programa 22
en la División de Identificación 359
tamaño interno, límite de 15
en la División de Procedimientos 361—367
terminación anómala del programa 54
especificación de literales DBCS 356
gráfico 368

434 COBOL/400 Guía del usuario


terminación del programa trabajo de prearranque
anómala 54 trabajo prearranque 320
con la instrucción CALL 352 trabajo, recuperación de una anomalía de 86
consideraciones sobre el archivo 285 trabajos por lotes, representación de datos DBCS
devolución de control 286 en 367
inicialización 291 transferencia de control a otro programa 285
instrucción STOP RUN 286 transferencia del control de programa 285
y la instrucción CALL 327 traspaso de datos 291
terminación, programa de 54, 352 en grupos 293
tiempo de ejecución traspaso de ítems de datos y sus longitudes 292
conmutador 69, 330, 331 triple espacio 39
depuración 69, 330
depuración del conmutador 329
errores comunes 58
U
UFCB (bloqueo de control de archivo de
manejo de errores, deseditar 279
usuario) 73
mensajes 344
último lugar, descripción del estado utilizado
y manejo de errores estándar 71
en 286
redirección de archivos 94
unidad de comprobación de sintaxis 11
subíndice, especificación de comprobación de
unidad de ejecución
rangos de 22
definición 37, 285
supervisión de excepciones 16
ejemplos
terminación de programa 54
con programa compartido 289, 290
tipo de datos de fecha 138
unidad de ejecución simple 287
tipo de datos de indicación de la hora 138
varias, de ejecución consecutiva 287
tipo de datos de la hora 138
utilización de caracteres de doble byte 355
tipo de datos gráfico DBCS 139
utilización de menos almacenamiento 22
tipo de miembro
utilización de REPLACING en la instrucción COPY
Véase tipo de miembro fuente
de formato 2 133
tipo de miembro CICSCBL 13
utilización de un subarchivo para
tipo de miembro CICSSQLCBL 13
visualizar 164—166
tipo de miembro fuente
utilización de verbos mediante el listado de la
CICSCBL 13
cuenta 45
CICSSQLCBL 13
utilización del lenguaje COBOL/400
compilación 16
comprobación de sintaxis 11, 13
Véase lenguaje COBOL/400
especificación 9, 11
SQLCBL 13 V
tipo de miembro SQLCBL 13 valor de la constante figurativa QUOTE 20
tipo OPEN 97 valores nulos 139, 318
tipos de datos 137 valores por omisión, indicación de 16
fecha 138 VALUE IS NULL 318
gráfico 139 variables de programa
hora 138 cambio 65
indicación de la hora 138 punteros 65
restricciones para tipos de datos SAA 139 variables, cambio de valores durante la
tipos de datos booleanos 20, 151, 185 prueba 65
tipos de datos gráficos 139 varios archivos de dispositivo 170—179, 187,
restricciones 140 194, 200
tipos de datos SAA

Índice 435
varios campos de clave contiguos 252
varios miembros 97
verbos de E/S, proceso de
desde la Versión 1, Release 3 84
vía de acceso
descripción 134
ejemplo de archivos indexados 258
especificaciones 110
proceso de archivos 262
visión general 6
visualización de un listado del compilador 40
volver a utilizar registros eliminados
archivos indexados 252
archivos relativos 260
archivos secuenciales 261
vuelco con formato 57, 69, 393

X
X’3F’ (carácter de sustitución) en los datos 143

436 COBOL/400 Guía del usuario


Hoja de Comentarios
AS/400
COBOL/400 Guía del usuario
Versión 3 Release 1.0
Número de Publicación SC10-9424-00

En general, ¿está Ud. satisfecho con la información de este libro?


Muy Muy
satisfecho Satisfecho Normal Insatisfecho insatisfecho
Satisfacción general Ø Ø Ø Ø Ø

¿Cómo valora los siguientes aspectos de este libro?


Muy Acep- Muy
bien Bien table Insatisfecho insatisfecho
Organización Ø Ø Ø Ø Ø
Información completa y precisa Ø Ø Ø Ø Ø
Información fácil de encontrar Ø Ø Ø Ø Ø
Utilidad de las ilustraciones Ø Ø Ø Ø Ø
Claridad de la redacción Ø Ø Ø Ø Ø
Calidad de la edición Ø Ø Ø Ø Ø
Adaptación a los formatos, unidades, etc. del país Ø Ø Ø Ø Ø

Comentarios y sugerencias:

Nombre Dirección

Compañía u Organización

Teléfono
IBM
Hoja de Comentarios Corte o Doble
Por la Línea
SC10-9424-00

Dóblese por la línea de puntos Por favor no lo grape Dóblese por la línea de puntos

PONER
EL
SELLO
AQUI

International Business Machines, S.A.


Centro de Traducciones y Publicaciones
Avda. Diagonal, 571
08029 Barcelona, España

Dóblese por la línea de puntos Por favor no lo grape Dóblese por la línea de puntos

Corte o Doble
SC10-9424-00 Por la Línea
IBM

Número de Programa: 5763-CB1

Printed in Denmark by IBM Danmark A/S

SC1ð-9424-ðð

También podría gustarte