Skip to content

About

Programa COBOL/DB2 con doble corte de control para z/OS

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

100 Commits

Folders and files

Repository files navigation

Programa COBOL Batch (DB2)

Documentation License

Qué resuelve: Genera un reporte batch desde DB2 con datos agrupados, totales y promedios, usando lógica de doble corte de control.

Enfoque de solución: El problema se resuelve combinando tres capas:

  1. Acceso a datos → SQL con CURSOR sobre DB2

  2. Procesamiento en COBOL → lógica de doble corte de control → manejo de estados con niveles 88

  3. Presentación → reporte paginado con LINAGE COUNTER

Algunos puntos de diseño en el código

  • Estructura de INICIO-PROCESO-FINAL;
  • Manejo de estados x medio de niveles 88;
  • Paginado automático x medio de LINAGE COUNTER;
  • Centrado dinámico de subtítulos mediante FUNCTION TRIM y FUNCTION LENGTH;
  • Doble corte de control x medio de PERFORM-INLINE;
  • Captura de fecha x medio de Función Intrínseca;
  • Manejo de errores centralizado en un subprograma (rutina) reutilizable mediante código defensivo para evitar ABENDs — el programa intercepta errores en cada punto crítico (ON SIZE ERROR, DECLARATIVES, WHENEVER, variable indicadora de DB2, IS NUMERIC, ETC). Ante cualquier error: cierra lo que se pueda cerrar, emite un mensaje detallado por DISPLAY y termina con RC 12 para que el operador sepa exactamente qué pasó y dónde;
  • Uso de CURSOR SQL;
  • Optimización de performance en DB2 mediante la cláusula FOR FETCH ONLY;
  • Integración con DSNTIAR — ante errores DB2, el programa pasa el SQLCA completo a la rutina (RUTERRBA), que internamente invoca la rutina IBM DSNTIAR para formatear el mensaje de error en texto legible por el operador en el spool, eliminando la necesidad de interpretar códigos numéricos.

---------------------------------------------------------------------------------------------------------------------------------- NOTA SOBRE EL USO DE GO TO: Su uso esta segmentado exclusivamente para manejar el flujo de ejecución dentro del estado de error. No interfiere en el flujo de la lógica de negocio, el cual respeta la programación estructurada y la ejecución TOP-DOWN. ---------------------------------------------------------------------------------------------------------------------------------- NOTA SOBRE FILE STATUS: se declara directamente sobre WS-ERR-FILE-STATUS (variable de la COPY de rutina de error), eliminando el MOVE intermedio y estandarizando el manejo de errores en todos los programas que adopten esta arquitectura. ----------------------------------------------------------------------------------------------------------------------------------

graph TD
   %% Configuración de Colores Profesionales
    classDef inicio_fin fill:#333,stroke:#000,color:#fff,stroke-width:2px;
    classDef proceso fill:#f4f4f4,stroke:#666,color:#000;
    classDef db2 fill:#d1e9ff,stroke:#005fb8,color:#000;
    classDef error fill:#ffebee,stroke:#c62828,color:#c62828

    Start((Inicio)) --> Init[1000-INICIO]

    subgraph "Inicialización"
        Init --> OpenFile[Abrir Archivo SALIDA]
        OpenFile --> OpenCursor[EXEC SQL OPEN Cursor]
        OpenCursor --> FirstRead[2100-LEER-CURSOR]
    end

    FirstRead --> Loop{¿PGM-FIN?}

    subgraph "Corte de Control (2000-PROCESO)"
        Loop -- No --> Title[Grabar Títulos]
        Title --> DeptLoop{Mismo Depto?}
        DeptLoop -- Sí --> SexLoop{Mismo Sexo?}
        SexLoop -- Sí --> Detail[Grabar Detalle]
        Detail --> NextRead[2100-LEER-CURSOR]
        NextRead --> SexLoop

        SexLoop -- No --> SubSex[Grabar Subtotal Sexo]
        SubSex --> DeptLoop

        DeptLoop -- No --> SubDept[Grabar Subtotal Depto]
        SubDept --> Loop
    end

    Loop -- Sí --> Final[3000-FINAL]

    subgraph "Cierre Ordenado"
        Final --> CloseAll[Cerrar SALIDA y Cursor]
        CloseAll --> Stop((GOBACK))
    end

    %% Flujo de Errores
    OpenFile -. Error .-> ErrRoutine
    OpenCursor -. Error .-> ErrRoutine
    NextRead -. Error .-> ErrRoutine
    Detail -. Error .-> ErrRoutine

    subgraph "Manejo de Excepciones"
        ErrRoutine[2300-INVOCAR-RUTINA-ERROR] --> CallErr[CALL PGMERROR]
        CallErr --> SetFin[SET PGM-FIN TO TRUE]
        SetFin --> Final
    end

    %% Asignación de estilos
    class Start,Stop inicio_fin;
    class ErrRoutine,CallErr error;
    class OpenCursor,NextRead,FirstRead db2;
Loading

CAPTURA DE SALIDA: REPORTE FINAL GENERADO EN ARCHIVO FÍSICO

EMULADOR WX3270 VSCODE + ZOWE INTERFAZ WEB Z/OSMF
wx3270 VS Code + Zowe z/OSMF

CAPTURA DE SALIDA: REGISTRO DE ERROR EN SYSOUT (RUTINA 2300)

CAPTURA DE SALIDA: Reporte de Error SQL
EMULADOR WX3270 VSCODE + ZOWE
wx3270 SQL wx3270 File Status
CAPTURA DE SALIDA: Reporte File Status
EMULADOR WX3270 VSCODE + ZOWE
Zowe SQL Zowe File Status

About

Programa COBOL/DB2 con doble corte de control para z/OS

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages