✒️ABAP Las subrutinas
ABAP Las subrutinas
Son secciones de código que pueden ser utilizadas más de una vez dentro de un mismo programa y que también pueden ser utilizadas por otros programas que las referencien. Haciendo los códigos más fáciles de leer y de mantener. Idealmente las subrutinas no debe tener más de 50 líneas de código. Modularizar: es pasar el código de un programa a subrutinas.
Las subrutinas se declaran con la palabra reservada PERFORM, seguida del nombre de la subrutina, así:
PERFORM seleccionar_datos.
Al dar doble clic sobre el nombre de la subrutina el sistema nos propondrá crear la subrutina como objeto. Nos ofrecerá crearla como un nuevo include o crearla en el mismo programa de control. Posteriormente el sistema generará un bloque de código comentario para que dejemos documentado en el mismo código qué hace la subrutina, los parámetros de entrada y los de salida.
Notas: El nombre de una subrutina debe ser lo más representativo posible y no puede exceder los 30 caracteres.
Tipos de Subrutinas.
Existen los siguientes 2 tipos de subrutinas:
*Internas: Cuando la subrutina se encuentra dentro del mismo programa o en un include de subrutinas, el cual esta declarado en el mismo programa.
PERFORM seleccionar_datos.
FORM seleccionar_datos.
ENDFORM seleccionar_datos.
*Externas: Cuando la subrutina se encuentra en un programa distinta al que la llama.
PERFORM seleccionar_datos IN PROGRAM ztest_subrutinas.
Paso de parámetros a subrutinas.
Podemos pasar datos entre el programa principal y una subrutina a través de parámetros. Los parámetros de una subrutina pueden ser de los siguientes 3 tipos:
*De entrada: Se utilizan para pasar datos del programa principal a la subrutina.
*De salida: Pasan datos de la subrutina al programa principal.
*De entrada y salida: Pasa datos de la subrutina al programa principal y viceversa.
Para pasar los parámetros en las subrutinas vamos a utilizar las siguientes 3 palabras reservadas:
*USING: Declara parámetros de entrada que serán utilizados en la subrutina.
*CHANGING: Declara parámetros de entrada/salida que serán utilizados en la subrutina.
*TABLES: Declara parámetros de entrada/salida que son tablas, las cuales serán utilizadas en la subrutina.
El orden de las clausulas debe ser el siguiente:
PERFORM <nombre_subrutina> TABLES <tabla_interna>
USING <parámetro_de_entrada>
CHANGING <parámetro_de_entrada_y_salida>.
A los parámetros definidos dentro den programa principal en la declaración de la subrutina a la derecha de la palabra PERFORM se les llama parámetros actuales, a los que se encuentran a la derecha de la palabra FORM se les llama parámetros formales.
PERFORM seleccionar_datos TABLES ti_usuarios.
USING wa_usuarios.
CHANGING v_flag.
Estos serían los parámetros actuales.
FORM procesar_datos TABLES p_ti_usuarios STRUCTURE ztabla_usuarios.
USING p_wa_usuarios STRUCTURE ztabla_usuarios.
CHANGING p_flag TYPE sy-subrc.
Estos serían los parámetros formales.
ENDFORM.
NOTA: Se deben mantener el orden de los parámetros declarados y procesados.
Existen 3 formas de pasar 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 parámetros formales no afectan a los actuales. Modificaciones que se realizan dentro de la subrutina, una vez que salimos de la subrutina NO se ven reflejados.
DATA: v_f1(1) TYPE c VALUE 'B'.
PERFORM paso_por_valor USING v_f1.
WRITE v_f1
FORM paso_por_valor USING value (p_f1).
p_f1 = 'X'.
ENDFORM
*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. Modificaciones que se realiza dentro de la subrutina, una vez salimos de ella SI se ven reflejados.
DATA: v_g1(1) TYPE c VALUE 'A'.
v_g2(1) TYPE c VALUE 'B'.
WRITE:/ v_g1, v_g2.
PERFORM paso_por_valor USING v_g1.
CHANGING v_g2.
WRITE:/ v_g1, v_g2.
FORM paso_por_valor USING p_g1.
CHANGING p_g2.
v_g1 = v_g2 = 'X'.
ENDFORM
*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 al final de la subrutina.
DATA: v_h1(1) TYPE c VALUE 'A'.
v_h2(1) TYPE c VALUE 'B'.
WRITE:/ 'H1 es:', v_h1.
FORM paso_por_valor USING value (p_f2).
CHANGING value (p_f1).
p_f1 = p_f2.
ENDFORM
Declaraciones de datos globales y locales.
Cuando declaramos datos en ABAP, es decir: variables, estructuras, tablas internas u otro tipo de datos, podemos hacerlo de las siguientes 2 formas:
*Globalmente: Declarándolas luego de la sentencia REPORT y antes del evento STAR-OF-SELECTION. Permitiéndoles ser utilizadas en cualquier parte del programa, tanto en el programa principal o en cualquier subrutina que el programa contenga. Estos nos ofrece una ventaja y una desventaja:
°Ventaja: Facilita el armado del programa, ya que no tenemos que pensar en dónde particularmente va a ser utilizada la declaración del dato.
°Desventaja: No se estaría generando un código tan eficiente en cuando a la modularización. Lo que complica el mantenimiento futuro del programa.
*Localmente: Declarándolas dentro de una subrutina, haciendo más eficiente el uso de la memoria de un programa. Esto nos permitirá usar la variable solo dentro de la subrutina.
 
 
 
Sobre el autor
Publicación académica de Linda Carolina Zambrano León, en su ámbito de estudios para la Carrera Consultor ABAP.
Linda Carolina Zambrano León
Profesión: Agente - Peru - Legajo: XR55P
✒️Autor de: 63 Publicaciones Académicas
🎓Egresado del módulo:
Certificación Académica de Linda Zambrano