
1- Qué son las Subrutinas?
Son secciones de código que pueden ser utilizadas mas de una vez. El uso de subrutinas permite modularizar los programas y lograr un mantenimiento más eficiente. Lo ideal es que no tenga mas de 50 líneas de código.
Se la declara utilizando la palabra reservada PERFORM seguida del nombre de la subrutina. Cuando se hace doble click sobre el nombre, el sistema nos abrirá una ventana de diálogo para crearla. Las opciones son: crear un nuevo include de datos o crearlas en el mismo programa de control. Eligiendo esta segunda opción, el sistema generará un bloque de código (FORM - ENDFORM después del END-OF-SELECTION) en el programa para completarlo. El nombre no puede exceder de los 30 cracteres.
2- Tipos de Subrutinas
Internas: cuando está dentro del programa que la llama.
Externas: cuando está en otro programa, como puede ser el caso de un include de subrutina u otro programa.
3- Subrutinas Internas
Se pueden pasar datos entre el programa y la subrutina a través de parámetros. Los definidos en el programa se los llama parámetros actuales y a los definidos en la subrutina parámetros formales. Los parámetros pueden ser de entrada, de salida o de entrada y salida (todos referidos a la subrutina).
4- Paso de Parámetros
Existen 3 opciones para el paso de parámetros: TABLES (tabla de salida), USING (de entrada) y CHANGING (de salida) y deben ser usados en ese orden.
En la subrutina se deben especificar el tipo de los parámetros a utilizar para asegurarnos que se correspondan con los que envía el programa principal.
Ejemplo
DATA: ti_vuelos LIKE STANDARD TABLE OF sflight,
st_vuelos LIKE LINE OF ti_vuelos,
v_flag TYPE sy-subrc.
* Procesar los datos de entrada
PERFORM procesar_datos
TABLES ti_vuelos
USING st_vuelos
CHANGING v_flag.
*&---------------------------------------------------------------------*
*& Form procesar_datos
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM procesar_datos TABLES t_vuelos STRUCTURE sflight
USING st_vuelos STRUCTURE sflight
CHANGING p_flag TYPE sy-subrc.
ENDFORM. "procesar_datos
Paso de Parámetros por Valor: Se utiliza la cláusula VALUE en la definición del parámetro formal. La modificación del valor dentro de la subrutina no afecta al valor que tenía el parámetro dentro del programa antes de entrar en la subrutina.
Paso por Referencia: En este caso lo que se transfiere es la dirección del parámetro formal (del programa llamador), es decir que la subrutina puede modificar sus valores previos.
Paso por Valor y Resultado: Aquí los parámetros formales están definidos con VALUE pero su modificación dentro de la subrutina se trasmite al programa principal.
5- Subrutinas Externas
Para llamar a una subrutina que está en otro programa se debe usar la siguiente sintaxis:
PERFORM subrutina (programa que la contiene) USING
También se pueden agregar includes de subrutinas a nuestro programa.
INCLUDE report