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.

  • 🧩 Principio básico: Se genera una unidad de modularización como si su código fuente estuviera físicamente presente en el programa que la llama, por lo que la estructura mejora sin coste adicional en tiempo de ejecución.
  • Macro: Definido con DEFINE y END-OF-DEFINITION, utilizable solo dentro del programa que lo define y solo después de la línea de definición.
  • 📄 Incluir programa: No incluye interfaz de parámetros y existe únicamente para compartir código fuente, como declaraciones de datos extensas, entre varios programas.
  • 🔁 Subrutina: Se declara con FORM y ENDFORM, se llama con PERFORM y es adecuado para la reutilización de lógica local dentro de un mismo programa.
  • 🧱 Módulo de funciones: Una rutina a nivel de sistema con una interfaz tipada para importar, exportar, modificar parámetros de tabla y gestionar excepciones.
  • 📦 Grupo funcional: Un contenedor cuyos datos globales son compartidos por todos los módulos de función que contiene, generado automáticamente con sus inclusiones TOP y UXX.
  • 🧭 Regla de selección: Elija una macro para abreviaturas locales, una subrutina para lógica local y un módulo de función cuando la rutina deba ser reutilizable en todo el sistema.

Modularización en ABAP

¿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

  1. 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.
  2. 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

  1. Ir a transacción SE80.
  2. Seleccione Programa en el menú desplegable.
  3. 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.
  4. 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

  1. Cree un grupo de funciones (diga “ZCAL”).
  2. 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.
  3. El archivo de inclusión “LZCALU01” tendrá el código fuente del primer módulo de función.
  4. El archivo de inclusión “LZCALTOP” tendrá datos globales.
  5. 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..”
  6. Definir parámetros de interfaz y excepciones.
  7. Escribe el código fuente
  8. Activar módulo de funciones
  9. Prueba del módulo de funciones: prueba única y depuración
  10. 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.

Preguntas Frecuentes

Una macro se expande en el momento de su generación y solo funciona dentro del programa que la define. Una subrutina es un procedimiento real con una interfaz de parámetros tipados que también puede ser llamada desde otro programa con PERFORM.

Un módulo de función cuyo tipo de procesamiento está configurado como Módulo habilitado para control remoto puede ser llamado desde otro SAP sistema o desde una aplicación externa. Sus parámetros deben pasarse por valor y las excepciones se manejan como fallos del sistema.

No es posible depurar una macro paso a paso, ya que se expande antes de su generación. Cuando se requiera depuración línea por línea, traslade la lógica a una subrutina o método, y limite las macros a instrucciones cortas.

Los asistentes de código de IA integrados en las herramientas de desarrollo ABAP pueden diseñar la estructura básica de un módulo de función, su interfaz de parámetros y sus excepciones a partir de una descripción simple. Un desarrollador revisa la lógica, activa el módulo y lo prueba antes de su transporte.

Las herramientas de IA analizan un programa, detectan bloques repetidos y sugieren dónde debería estar una subrutina, método o módulo de función.tracLa sugerencia acelera la refactorización, aunque las pruebas unitarias siguen siendo necesarias para confirmar un comportamiento idéntico.

Resumir este post con: