
SubRutinas
Secciones de código que se pueden utilizar más de una vez
No debe de tener más de 50 líneas de código
Se declara así: PERFOM selecciono_datos.
El nombre debe ser lo más representativo posible y no debe exceder de 30 caracteres
Al dar doble clic en nombre de la subrutina el sistema permite crearla en el mismo programa o en un programa aparte
Modularizar
Es dividir el programa en secciones para mejorar la lectura y mantenimiento del mismo
Tipos de subrutinas
Interna: cuando la subrutina está dentro del mismo programa
FORM - ENDFORM
Externa: cuando está en otro programa como puede ser el caso de un include de subrutinas
Parámetros
Para pasar parámetros a una subrutina se ponen a la derecha de la palabra PERFOM (parámetros actuales)
Los parámetros deben ir en el mismo orden donde se invoca y donde se define
y a la derecha del código de la subrutina FORM (parámetros formales)
Los parámetros pueden ser de tres tipos (entrada, salida, entrada y salida)
PERFORM subrutina TABLES <tabla de salida>
USING <parámetro de entrada>
CHANGING <parámetro de salida>
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 TABLES t_vuelos STRUCTURE sflight
USING st_vuelos STRUCTURE sflight
CHANGING p_flag TYPE sy-subrc.
ENDFORM. "procesar_datos
Parámetros por valor
DATA: v_f1(1) TYPE c VALUE 'B'.
PERFORM paso_por_valor USING v_f1.
WRITE v_f1.
FORM paso_por_valor USING value(pf1).
pf1 = 'X'.
ENDFORM. " PASO_POR_VALOR
Las variables del programa son independientes de las variables de la subrutina
Paso por referencia
DATA: v_g1(1) TYPE c VALUE 'A',
v_g2(1) TYPE c VALUE 'B'.
WRITE: v_g1 , v_g2.
PERFORM paso_por_referencia USING v_g1
CHANGING v_g2.
WRITE: v_g1 , v_g2.
FORM paso_por_referencia USING p_g1
CHANGING p_g2.
p_g1 = p_g2 = 'X'.
ENDFORM. " PASO_POR_REFERENCIA
Paso por valor y resultado
DATA: v_h1(1) TYPE c VALUE 'A',
v_h2(1) TYPE c VALUE 'B'.
PERFORM paso_por_valor_y_resultado1 USING v_h2
CHANGING v_h1.
WRITE:/'H1 es:', v_h1.
FORM paso_por_valor_y_resultado1 USING value(p_f2)
CHANGING value(p_f1).
p_f1 = p_f2.
ENDFORM. " PASO_POR_VALOR_Y_RESULTADO1
*&-----------------------------------------------------------
LLamado a subrutinas externas
PERFORM <sub>(<programa>) USING...
Declaración de Include de subrutinas
INCLUDE <report>