✒️ABAP Las subrutinas
ABAP Las subrutinas
1.-SUBRUTINAS.- Son secciones de código que pueden ser utilizadas más de un avez. Esto facilita que los programas sean más fáciles de leer y de mantener.
MODULARIZAR.- Es la acción de pasar el código de un programa a subrutinas, para que el programa sea más legible y de fácil mantenimiento.
"Lo ideal es que un asubritina no tenga más de 50 líneas de código"
- Ayuda a encontrar más rápido los errores en los programas. Esto se debe que al depurar un programa solo hay que preocuparse que el resultadp sea el esperado sin entrar en detalle de cómo se llega a ese resultado.
. Una subrutina se declara con la palabra reservada PERFORM, seguido por el nombre de la subrutina.
*Seleccionar datos de la tabla usuarios.
PERFORM selecciono_datos.
. Al dar doble click en el nombre de la subrutina, el sistema propondrá crear la subrutina, si responde con "Si", no pregunta en donde queremos generar la subrutina, las opciones son:
- Crear u nuevo INCLUDE de datos o crearlas en el mismo programa de control.
Seleccionamos la segunda opción, el sistema genera el siguiente bloque de código en el porgrama; para ser completado.
*&-------------------
*&
*&
*&
*&
*&-------------------
FORM selecciono_datos.
"Es importante que el nombre de la subrutina que se le asigne, sea lo más representativo posible del resultado que produce la subrutina, la longitud no puede exceder los 30 caracteres".
ENDFORM. "selecciono datos.
2.- Tipo de Subrutinas.
Existen dos tipos de subrutinas:
. Internas.- Cuando la subrutina está dentro del mismo programa que la llama.
. Externas.- Cuando la subrutina está en un programa distinto al que las llama. Como puede ser el caso de un INCLUDE de subrutinas a otro programa.
3.- Subrutinas Internas.
Tiene la forma: FORM ENDFORM.
. sSe pueden pasar datos entre los programas y una subrutina a través de parámetros.
A los parámetros definidos a la derecha del PERFORM, se los llama actuales.
A los parámetros definidos en la subrutina, a la derecha del FORM, se los llama parámetros formales.
Los parámetros pueden ser de tres tipos:
. De entrada
. De salida
. De entrada y salida
4.- Paso de parámetros a subrutinas.
Existen 3 opciones:
USING.- <parámetros de entrada>
CHANGING.- <parámetros de salida>
TABLES.- <tabla de salida>
En el bloque FORM - ENDFORM.- Se debe especificar el tipo de parámetros formales. De esta forma se asegura que solo se pasen parámetros del tipo que corresponda a la subrutina.
Ejemplo:
DATA: ti_vuelos LIKE STANDARD TABLE OF sfligt,
st_vuelos LIKE LINE OF ti_vuelos,
v_flag TYPE sy-subrc.
* Procesa los datos de entrada
PERFORM procesa_datos TABLES ti_vuelos
USING st_vuelos
CHANGING v-flag.
*-------------------------
*& Form procesar datos
*-------------------------
FORM procesar_datos TABLES t_vuelos STRUCTURE sflight
USING st_vuelos STRUCTURE sflight
CHANGING p_flag TYPE sy-subrc.
ENDFORM.
"Cuando una subrutina es llamada, los parámetros deben se pasados en el mismo orden en el que fueron declarados, por lo tanto, se debe respetar esta misma secuencia en el bloque FORM - ENDFORM."
Existen 3 formas de pasar los parámetros:
. Paso 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_fl(1) TYPE C VALUE 'S'.
PERFORM paso _por _valor USING v_fl.
WRITE v_fl.
FORM paso_por_valor USING VALUE (pf1).
pf1 = 'x'.
ENDFORM.
La salida será '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:
DAATA: v_g1(1) TYPE C VALUE 'A',
v_g2(1) TYPE C VALUE 'B'.
WRITEv_g1, v_g2.
PERFORM paso_por _referencia USING v_g1,
CHANGING v_g2.
*-----------------
* Paso por referencia
*-----------------
FORM paso_por_referencia USING p_g1,
CHANGING p_g2.
p_g1 = p_g2 = 'X'.
ENDFORM.
Y la salida será: A B y X X
. Paso por valor y resultado.- 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 son copiados a los parámetros actuales la final de la subrutina.
DATA: v_h1(1) TYPE C VALUE 'A',
v_h2(1) TYPE C VALUE 'B',
PERFORM paso_por _valor_y_resultado USING v_h2,
CHNAGING v_h1.
WRITE:/ 'H1 es: ', v_h1.
*---------------------------
* Form paso por valor y por resultado
*---------------------------
FORM paso_por_valor_y_resultado USING value(p_f2),
CHANGING value(p_f1).
p_f1 = p_f2.
ENDFORM.
Y la salida será H1 es: B
5.- Subrutinas externas.
Si se quiere llamar a una subrutina que está en un programa distinto al que estamos procesando, debemos utilizar la siguiente sintaxis:
PERFORM <subrutina> <Programa> USING .....
También podemos agregar includes de subrutinas a nuestro programa:
INCLUDE <report>.
 
 
 
Sobre el autor
Publicación académica de Miguel Angel Acosta Acosta, en su ámbito de estudios para la Carrera Consultor ABAP.
Miguel Angel Acosta Acosta
Profesión: Ingeniero de Sistemas - Ecuador - Legajo: TF64C
✒️Autor de: 238 Publicaciones Académicas
🎓Egresado de los módulos:
- Carrera Consultor en SAP SD Nivel Avanzado
- Carrera Consultor en SAP SD Nivel Inicial
- Máster ABAP for HANA
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial
Disponibilidad Laboral: FullTime
Presentación:
Profesional de ingeniería de sistemas en computación e informática, con experiencia en la implantación y soporte de proyectos informáticos para empresas del sector industrial y financiero.
Certificación Académica de Miguel Acosta