✒️ABAP Las subrutinas
ABAP Las subrutinas
Tipos de subrutinas o subprogramas.
Internas: El Subprograma y la llamada a éste están en el mismo programa.
El Subprograma y la llamada a éste están en programas distintos.
Subrutinas internas.
PERFORM <modulo> -----> Llamada a un procedimiento o subprograma.
FORM <modulo> ------->Subprograma.
ENDFORM
El programa principal y el procedimiento se podrán comunicar mediante parámetros.
PERFORM <modulo> USING varl var2 ...
…
FORM <modulo> USING varl var2 ...
…
ENDFORM.
Los parámetros pueden ser pasados por valor (E) o por referencia (E/S). Por defecto serán por referencia.
Si queremos utilizar parámetros por valor, la cabecera del módulo será:
FORM <modulo> USING VALUE (var1)
...
ENDFORM.
Tanto las variables definidas al inicio del report como las tablas son globales a todas las subrutinas y por tanto accesibles en cualquier momento.
Si encontramos alguna instrucción del tipo CHECK o EXIT que signifique salir de un cierto FORM, previamente ejecutará el ENDFORM y por tanto se pasarán los parámetros que tenga el procedimiento.
También es posible pasar como parámetro tablas internas.
PERFORM <modulo> TABLES <intab> ...
USING <varl> <var2> ...
FORM <modulo> TABLES <intab> ...
USING <varl> ...
Especificaremos las tablas siempre antes que el resto de parámetros.
En este caso sólo se pueden hacer operaciones con. filas enteras, pero no nos podremos referenciar sobre campos concretos de la tabla o hacer COLLECTS, ya que no se conocerá la estructura de la tabla.
Podemos pasar como parámetros registros de datos o áreas de trabajo con :
PERFORM <módulo> USING <reg>.
FORM <modulo> USING <reg> STRUCTURE <estructura>.
ENDFORM.
Es decir con la cláusula STRUC'I'URE podemos pasar la estructura de una tabla, entonces podemos acceder a campos de una tabla pasada como parámetro con:
PERFORM <modulo> TABLES <intab> USING <var1> …
FORM <modulo> TABLES <intab> S'I'RUCTURE <estructura>.
USING <var1> …
ENDFORM.
Dentro de cada subrutina es posible declarar datos con la sentencia DATA, que sólo serán visibles dentro del módulo donde esté declarado. ABAP creará un espacio para esas variables que será liberado al salir del módulo. Por tanto se podrán utilizar variables con el mismo nombre que variables globales, aunque el valor que tengan será siempre el local en el módulo.
Las tablas de base de datos son globales a todo el programa, si se quiere utilizar una tabla localmente en una subrutina, se debe declarar con LOCAL, al inicio de la subrutina, en vez de con TABLES.
LOCAL <tabla>.
Subrutinas Externas y Módulos de función.
Si queremos llamar a una subrutina que está en un programa distinto utilizamos:
PERFORM <sub>(<programa>) USING …
También existe la posibilidad de añadir porciones de código del tipo include con la instrucción:
INCLUDE <report>.
En el código del include no utilizaremos la sentencia REPORT...
Los módulos de función son módulos especiales guardados en una librería central, y agrupados por la función que realizan. Principalmente se caracterizan por un interface definido y porque realizan tratamiento de excepciones.
Se caracterizan por un interface definido ya que su diseño facilita el paso de parámetros tanto de entrada como de salida.
CALL FUNCTION <funcion>.
EXPORTING <par_E> = <valor->
IMPORTING <par_S> = <valor_ret>
TABLES <tab_Func> = <tab_Prog>
EXCEPTIONS <excep> = <valor>
Donde en el EXPORTNG especificamos los parámetros de entrada, en el IMPORTING (opcional) el resultado o retorno de la función y en TABLES (opcional) las tablas, que se utilizan como parámetros.
Los módulos de función también se caracterizan por realizar un tratamiento de excepciones. En el interface de los módulos de función se indican los valores, de excepciones para el retorno del módulo, que posteriormente con el SY-SUBRC se pueden comprobar.
El código de la función puede activar excepciones mediante las instrucciones:
MESSAGE …. RAISING <excepcion>
o
RAISE <excepcion>
 
 
 
Sobre el autor
Publicación académica de Juan Carlos Ayala Chira, en su ámbito de estudios para la Carrera Consultor ABAP.
Juan Carlos Ayala Chira
Profesión: Ingeniero de Sistemas E Informática - Peru - Legajo: KQ70J
✒️Autor de: 97 Publicaciones Académicas
🎓Egresado de los módulos:
Certificación Académica de Juan Ayala