Modularización de ABAP: Macros, subrutinas y módulos de función
⚡ Resumen inteligente
La modularización en ABAP coloca una secuencia de instrucciones en una unidad reutilizable que el programa principal simplemente llama. Esta página explica las macros, los programas include, las subrutinas, los módulos de función y los grupos de función, con su sintaxis, ejemplos y criterios de selección para cada técnica.

¿Qué es la modularización en ABAP?
Al modularizar el código fuente, se coloca una secuencia de instrucciones ABAP en un módulo. Luego, en lugar de colocar todas las instrucciones en el programa principal, simplemente se llama al módulo. Cuando se genera el programa, el código fuente de la unidad modularizada se trata como si estuviera físicamente presente en el programa principal.
Necesidad de modularización
- Mejorar la estructura del programa.
- Fácil de leer el código
- Fácil de mantener el código.
- Evita la redundancia y promueve la reutilización del código.
Varias técnicas de modularización
- Uso de macros
- Uso de archivos de inclusión
- Subrutinas
- Módulos de función
Veamos cada uno de ellos en detalle:
SAP- Macro ABAP
Si desea reutilizar el mismo conjunto de declaraciones más de una vez en un programa, puede incluirlas en una macro.
Solo se puede usar una macro dentro del programa en el que se define, y solo se puede llamar en las líneas del programa que siguen a su definición.
Las macros pueden ser útiles para cálculos largos o instrucciones WRITE complejas.
Sintaxis
DEFINE <macro_name> 'Macro Statements END-OF-DEFINITION
Las macros pueden usar parámetros &N donde norte = 1,2,3…
Ejemplo:-
DATA: number1 TYPE I VALUE 1. DEFINE increment. ADD 1 to &1. WRITE &1. END-OF-DEFINITION. Increment number1. WRITE number1.
Salida: 2
Una macro se expande en tiempo de compilación dentro de un único programa. Cuando el mismo código debe compartirse entre programas, se utiliza un programa de inclusión.
Incluir programas
Los programas de inclusión son únicamente para modularizar el código fuente y no tienen interfaz de parámetros.
Los programas include permiten usar el mismo código fuente en diferentes programas. Pueden ser útiles si tienes declaraciones de datos extensas que deseas utilizar en distintos programas.
Sintaxis
Include <include program Name>
Puntos a tener en cuenta
- Los programas de inclusión no pueden llamarse a sí mismos.
- Los programas de inclusión deben contener declaraciones completas.
Ejemplo:
INCLUDE ZILX0004. WRITE: / 'User', SY-UNAME,/ 'Date', SY-DATUM. ================================ PROGRAM ZRPM0001. INCLUDE ZILX0004.
Los programas incluidos comparten código pero no pueden recibir parámetros. Las subrutinas añaden esa interfaz de parámetros que falta.
Subrutinas
Las subrutinas son procedimientos que puedes definir en cualquier programa ABAP y también se pueden llamar desde cualquier programa. Las subrutinas normalmente se llaman internamente, es decir, contienen secciones de código o algoritmos que se usan frecuentemente a nivel local. Si desea que una función sea reutilizable en todo el sistema, utilice un módulo de función.
Sintaxis-
FORM <Subroutine> [<pass>]. <Statement block>. ENDFORM.
= Nombre de la subrutina
= Parámetros que se pasan
Tipos de Subrutinas
- Interno
- Subrutina definida en el mismo programa que se llama.
- Puede acceder a todos los objetos de datos declarados en el programa principal ABAP/4.
- Externo
- Subrutina definida fuera del programa que se llama.
- Necesita utilizar la opción o declarar objetos de datos en partes comunes de la memoria.
Llamar a una subrutina
Subrutinas Internas
PERFORM <subroutine> [<pass>]
= Nombre de la subrutina
= Parámetros que se pasan
Los datos declarados en el programa principal están disponibles automáticamente.
Subrutinas Externas
PERFORM <subroutine>(<Program>) [<pass>]. PERFORM <subroutine> (<Program>) [<pass>] [IF FOUND]. PERFORM (<subroutine>) IN PROGRAM (<Program>) [<pass>] [IF FOUND]. PERFORM <index> OF <subroutine1> <subroutine2> <subroutine3> [<pass>].
Puntos a tener en cuenta
- Se permiten llamadas anidadas en subrutinas (es decir, PERFORM dentro de un FORM... ENDFORM).
- También son posibles llamadas recursivas.
- Para definir datos locales, utilice la declaración DATA después de FORM. Cada vez que ingresa a la subrutina, los datos se recrean (con un valor inicial) y se liberan al final (de la pila).
- Para definir los datos globales utilizados dentro de una subrutina, utilice la declaración LOCAL después de FORM. Los valores se guardan cuando ingresa a la subrutina y luego se liberan al final (de la pila)
💡 Consejo: En ABAP Objects, las subrutinas se consideran obsoletas. En los nuevos desarrollos, se debe ubicar la lógica reutilizable en los métodos de una clase y utilizar módulos de función cuando se requiera una interfaz remota o de sistema.
Módulos de función
Los módulos de funciones son rutinas ABAP/4 de propósito general que cualquiera puede utilizar. De hecho, hay una gran cantidad de módulos de funciones estándar disponibles.
Los módulos de funciones están organizados en grupos de funciones: colecciones de funciones lógicamente relacionadas. Un módulo de funciones siempre pertenece a un grupo de funciones.
Sintaxis-
FUNCTION <function module> <Statements> ENDFUNCTION.
Información importante asociada al módulo de funciones
- Administración
- Importar/Cambiar/Exportar parámetros.
- Parámetros de tabla/Excepciones.
- Documentación
- Código fuente: LU01. es el grupo de funciones
- Datos globales: LTOP. Datos globales para el grupo de funciones: accesibles a través de los módulos de funciones del grupo de funciones.
- Programa principal – SAPl . Contiene la lista de todos los archivos incluidos para ese grupo de funciones.
Llamar a un módulo de funciones
Para llamar a un módulo de funciones, utilice la instrucción CALL FUNCTION:
CALL FUNCTION <module> [EXPORTING f1 = a 1.... f n = a n] [IMPORTING f1 = a 1.... f n = a n] [CHANGING f1 = a 1.... f n = a n] [TABLES f1 = a 1.... f n = a n] [EXCEPTIONS e1 = r 1.... e n = r n [ERROR_MESSAGE = r E] [OTHERS = ro]].
Cada módulo de función reside dentro de un grupo de funciones, por lo que la siguiente sección explica cómo funciona ese contenedor.
Grupos de funciones
Los grupos de funciones son contenedores para módulos de funciones. De hecho, existe una gran cantidad de grupos de funciones estándar.
Todos los módulos de funciones de un grupo de funciones pueden acceder a los datos globales del grupo.
Como programas ejecutables (tipo 1) y grupos de módulos (tipo M), los grupos de funciones pueden contener pantallas, pantallas de selección y listas.
Puntos a tener en cuenta
- Los grupos de funciones no se pueden ejecutar.
- El nombre de un grupo de funciones puede tener hasta 26 caracteres.
- Cuando crea un grupo de funciones o un módulo de funciones, el programa principal y los programas incluidos se generan automáticamente.
- Los grupos de funciones encapsulan datos.
Cómo crear un grupo de funciones
- Ir a transacción SE80.
- Seleccione Programa en el menú desplegable.
- Escriba el nombre del Grupo de Funciones que desea crear. Generalmente los grupos de funciones creados por el usuario comienzan con “Z”. p.ej. – . Presione la tecla Enter.
- Tenga en cuenta que la inclusión TOP se crea de forma predeterminada si el usuario marca la opción de crear una inclusión TOP.
Cómo crear un módulo de funciones
- Cree un grupo de funciones (diga “ZCAL”).
- Cree un módulo de función, configure los atributos como (Grupo de función, Aplicación, Texto breve y Tipo de proceso) y guarde.
- El archivo de inclusión “LZCALU01” tendrá el código fuente del primer módulo de función.
- El archivo de inclusión “LZCALTOP” tendrá datos globales.
- Programa principal “SAPLZCAL” contiene
- Datos globales Incluir archivo “LZCALTOP”
- Los módulos de funciones incluyen el archivo “LZCALUXX”
- Definido por el usuario Incluye archivos “LZCALF..”, “LZCALO..” y “LZCALI..”
- Definir parámetros de interfaz y excepciones.
- Escribe el código fuente
- Activar módulo de funciones
- Prueba del módulo de funciones: prueba única y depuración
- Documentar y publicar un módulo de funciones
Cómo elegir la técnica de modularización adecuada
Las cuatro técnicas se solapan, por lo que la decisión depende del alcance de la reutilización y de si se requiere una interfaz de parámetros.
| Tecnologia | Alcance de la reutilización | Interfaz de parámetros | Mejores usados para |
|---|---|---|---|
| Macro | Un programa, después de la línea de definición | Marcadores de posición &1 a &9 | Instrucciones cortas y repetidas, cálculos largos, salida WRITE compleja |
| Incluir programa | Cualquier programa que nombre la inclusión | Ninguna | Declaraciones de datos compartidas y código fuente compartido |
| Subrutina (FORMULARIO) | Local o externo con PERFORM … EN EL PROGRAMA | USO Y MODIFICACIÓN DE TABLAS | Lógica reutilizada con frecuencia dentro de un mismo programa. |
| Módulo de función | Sistema completo, incluidas las llamadas remotas. | IMPORTACIÓN, EXPORTACIÓN, MODIFICACIÓN, TABLAS, EXCEPCIONES | Rutinas compartidas entre aplicaciones y encapsuladas en un grupo de funciones. |
Una regla sencilla abarca la mayoría de los casos: utilice una macro para abreviaturas dentro de un programa, una inclusión para declaraciones compartidas, una subrutina para lógica local y un módulo de función cuando la rutina deba poder ser invocada desde cualquier parte del sistema. Esto es todo sobre la modularidad en ABAP.
