✒️ABAP Las subrutinas
ABAP Las subrutinas
1. ¿Que son las subrutinas? Son secciones de código que pueden ser utilizadas más de una vez. Esta idea es para que los programas sean más fácil de leer y mantener.
Modularizar es la acción de pasar el código de un programa a subrutinas, para mejorar la lectura y programa del mismo. La idea es que la subrutina no tenga más de 50 líneas de código. La modularización ayuda a encontrar más fácil los errores en los programas. Esto se debe a que al debaguear un programa solo me preocupo que el resultado de una subrutina sea el esperado sin entrar en detalle de como se llega al resultado.
Una subrutina se declara con la palabra reservada PERFORM
PERFORM selecciono_datos.
Si hacemos doble click en el nombre de la subrutina, el sistema nos propondrá crear la subrutina en la siguiente ventana de diálogo. Si le damos que si el sistema nos preguntara donde queremos generar la subrutina, la opción seria crearlo en un includ o en el programa de control. En ese caso las creamos en el programa de control
FORM selecciono_datos.
ENDFORM.
2. Tipos de Subrutinas: Se puede pasar datos entre los programas principales y una subrutina a través de parámetros. A los parámetros definido en el programa principal a la derecha de la palabra PERFORM se los llama parámetros actuales, Los parámetros que se definen a la derecha de la palabra FORM se le llama parámetro formales.
Los parámetros pueden ser de res tipos:
De entrada: cuando se utilizan para pasar datos del programa principal a la subrutina.
De salida: cuando se utilizan para pasar datos de la subrutina al programa principal.
De entrada y salida: cuando se utilizan para pasar datos de la subrutina al programa principal y también viceversa.
4. Paso de parámetros subrutinas: para pasar parámetros utilizaremos tres opciones: USING, CHANCING t TABLES. Estas opciones se deben escribir en el orden que mostramos a continuación del gráfico
PERFORM subrutina TABLES salida;
USING <Parametro de entrada;
CHANGING <Parametro de salida;
En el bloque FORM-ENDFORM debemos especificar el tipo de los parámetros formales, De esta forma nos aseguraremos que solo pasan parámetros de tipo que corresponde a la subrutina. Veamos un ejemplo donde pasamos una tabla interna, una estructura y una variable de tipo carácter.
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.
Existen tres formas de pasar parámetros:
Pasos por valor: durante la llamada a la subrutina, los parámetros formales son creados como copias de los parámetros actuales. Los cambios en los parámetros formales no afectan a los parámetros actuales. Ejemplo.
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.
Y la salida sera B.
Paso por referencia: durante la llamada a la subrutina, solo la dirección de los parámetros actuales se transfieren a los parámetros formales. Dentro de la subrutina, se trabaja con el campo del programa que hace la llamada. Si cambiamos los parámetros formales, el contenido del campo del programa que hace la llamada también cambia. Ejemplo
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.
Y la salid sera A B y X X.
Paso por valor y resultado: durante la llamada a la subrutina, los parámetros formales son creados como copia de los parámetros actuales, Los cambios en los parámetros formales son copiados a los parámetros actuales al final de la subrutina. Ejemplo.
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.
Y la salida sera H1 es: B
5. Subrutinas externas: si queremos llamar a una subrutina que está en un programa distinto al que estamos procesando, debemos utilizar la sintaxis:
PERFORMS <sub>(<programa>)USING
También podemos agregarle inlcude a nuestro programa Include <report>.
 
 
 
Sobre el autor
Publicación académica de Edward Henry Rosario Piezal, en su ámbito de estudios para la Carrera Consultor ABAP.
Edward Henry Rosario Piezal
Profesión: Ingeniero en Sistema - Republica Dominicana - Legajo: FM99R
✒️Autor de: 68 Publicaciones Académicas
🎓Egresado de los módulos:
Disponibilidad Laboral: FullTime
Certificación Académica de Edward Rosario