viernes, 6 de noviembre de 2020

COBOL - cómo terminar un programa cobol

Pensemos en la típica estructura de un programa Cobol:

          INICIO
          TRATAMIENTO hasta <<fin-fichero-entrada>>
          FIN

Dentro del párrafo FIN solemos tener el cierre de los ficheros utilizados por el programa (los de entrada y salida) y los display's necesarios para mostrar las estadísticas (si tienes costumbre de ponerlos para reflejar cuántos registros se han leído del fichero de entrada, cuántos registros se han grabado en el fichero de salida y alguna cosa más que resulte de interés).

Si el programa ha llegado al párrafo FIN y ha sido capaz tanto de cerrar correctamente los ficheros utilizados como de mostrar las estadísticas significa que el programa ha terminado correctamente. Pero necesitamos algo más para que el jcl donde se ejecuta se entere de que ese programa ha finalizado correctamente.

Y te preguntarás: "Y, ¿qué es lo que se necesita?". Pues la respuesta es muy sencilla. Incluir las siguientes dos sentencias:

          MOVE ZEROS TO RETURN-CODE
          GOBACK

Éste es todo el código que necesitas para indicar la correcta finalización del programa.

Ahora bien, imagínate que necesitas que el programa finalice con un código distinto (por ejemplo, un código de retorno 2) en determinadas situaciones como puede ser que el fichero de salida esté vacío o que el fichero de errores contenga información. Antes de que te preguntes cómo se hace te lo voy a contar ya. Se hace de la siguiente manera:

          IF CONT-GRAB-FIC-SALIDA = 0
              MOVE 2 TO RETURN-CODE
              GOBACK
          END-IF

          IF CONT-GRAB-FIC-ERRORES > 0
              MOVE 2 TO RETURN-CODE
              GOBACK
          END-IF

OJO!!! Las líneas de código que acabamos de indicar como ejemplo para finalizar el programa con un código de retorno distinto de 0 se deben codificar en el programa antes que las otras líneas de código de finalización correcta. Y, ¿por qué? Porque si invertimos el orden y pusiéramos primero el código que indica la correcta finalización del programa, siempre finalizaríamos el programa correctamente y NUNCA devolvería el código de retorno 2 aunque se cumplan las casuísticas indicadas.