[MEGAPOST] Creación de un Módulo de Función paso a paso

Habrás leído mucho acerca de cómo crear un módulo de funciones para realizar alguna tarea en ABAP, pero de seguro echarás de menos un lugar en donde te expliquen paso a paso, de la A a la Z, todo lo que necesitas saber para crear tus funciones dentro de SAP.

Este post consiste en eso, vamos a tomar un caso práctico y vamos a crear un Módulo de Funciones paso a paso.

Sin más, esto es lo que vamos a hacer:

Crearemos un Módulo de Función que cuente con las siguientes características:

Parámetros de Entrada y Salida.

Parámetros de Entrada:

  • VALOR1– del tipo ERMFG.
  • VALOR2 – del tipo ERMFG.
  • OPERADOR – del tipo CHAR1.

Parámetros de Salida:

  • DESCRIPCION- del tipo CHAR20.

Tablas de Salida:

  • ITAB – con los siguientes campos:
    • OPER – del tipo CHAR20.
    • RESUL – del tipo ERFMG.

Parámetros de Excepción:

  • DIV_CERO – División por cero.
  • NOT_FOUND – Parámetro no encontrado.

¿Qué debe hacer el Módulo de Función?

La función que vamos a crear, deberá cumplir con las siguientes 4 especificaciones:

  • Se debe tomar el símbolo del parámetro de entrada OPERADOR, y escribir su significado en el parámetro de salida DESCRIPCION.
  • Se debe tomar los parámetros de entrada VALOR1 y VALOR2 para realizarle las 4 operaciones aritméticas, e ir guardando los resultados en la tabla de salida ITAB.
  • Se debe validar que el VALOR2 no tenga valor 0 (cero), porque daría un dump al intentar dividir, por lo tanto, se debe controlar la excepción DIV_CERO.
  • Se debe validar que el OPERADOR introducido de entrada sea una de las 4 operaciones aritméticas, de tratarse de alguna diferente, se debe controlar la excepción NOT_FOUND.

Ejemplos:

MF01

Contenido del Programa Principal

El Módulo de Función deberá ser llamado desde un programa principal, el cual tendrá las siguientes especificaciones:

  • Se debe crear un programa principal que tenga como parámetros de selección, los 3 parámetros de entrada de la función, VALOR1, VALOR2 y OPERADOR. El programa llamará al Módulo de Función pasándole estos 3 campos.
  • Si los resultados son correctos (caso de ejemplo 1), tomar los resultados de la función y mostrarlos en un reporte ALV.
  • Si los resultados no son correctos, capturar la excepción correspondiente (casos 2 y 3), y mostrar el respectivo mensaje de error por pantalla.

El programa se llamará ZABAP_PROGRAMA y el Módulo de Funciones lo llamaremos ZABAP_FUNCION.

Con todo esto, empecemos:

Creación del Módulo de Funciones.

Para crear un Módulo de Funciones, entramos en la transacción SE37, indicamos el nombre de la nueva función y pulsamos Crear.

MF02

Cuando se crea un Módulo de Función en SE37, el sistema pide asignarlo a un Grupo de Funciones, por lo que procedemos a crearlo desde la transacción SE80, lo llamaremos ZABAP_GRUPO.

MF03

Indicamos su descripción, y pulsamos Grabar.

MF04

Nos pedirá una orden de transporte, en este caso crearé los objetos como locales, pero en el tuyo, asignas los objetos a la orden de transporte que te hayan indicado.

MF05

Listo, ya tenemos el Grupo de Funciones creado.

MF06

Ahora regresamos a la SE37 y asignamos el Grupo de Función a nuestra nueva Función y pulsamos Grabar.

MF07

En este punto ya tenemos creado el Módulo de Funciones en el sistema, aunque sin datos ni parámetros, ahora corresponde configurarlo.

Un Módulo de Función visto desde la SE37 cuenta con las siguientes pestañas:

MF08

  • En la pestaña IMPORT será donde crearemos los 3 parámetros de entrada.
  • En la pestaña EXPORT será donde se creará el parámetro de salida.
    • En esta pestaña también creará la tabla que necesitamos.
  • En la pestaña EXCEP se crearán las excepciones requeridas.
  • En la pestaña FTE será donde crearemos el código de la función.
  • La pestaña ATRIBUTOS será la primera que revisaremos.

Pestaña ATRIBUTOS

MF09

Esta pestaña contiene la información general del Módulo de Función; en la sección Clasificación veremos a que Grupo de Funciones pertenece y podremos modificar la descripción de nuestra función.

En la sección Forma Ejecución (izquierda), nos interesa saber lo siguiente:

Una función que se ejecutará directamente desde SAP, tendrá una forma de ejecución normal (primer botón), siendo ésta una de las dos formas más comunes de funciones que desarrollemos.

La otra forma la encontramos en el segundo botón, (acceso remoto), que son funciones ideadas para ser llamadas desde sistemas externos a SAP. Este tipo de Funciones son conocidas como funciones RFC (Remote Function Control).

La sección de Datos Generales (derecha) solo nos muestra información general del objeto ABAP.

Pestaña IMPORT

MF10

En esta pestaña procedemos a crear los parámetros de entrada de nuestra función, que en este caso serán 3 campos, VALOR1 y VALOR2 el tipo ERFMG, y el campo OPERADOR del tipo CHAR1.

A la hora de declarar los campos, podemos hacerlo de dos formas:

MF11

En nuestro caso, como utilizaremos un Elemento de Datos como referencia, optamos por la primera opción.

Al ingresar los campos correctamente y pulsar ENTER, el sistema tomará las descripciones del Elemento de Datos, siempre que éste exista en el Diccionario ABAP.

Pestaña EXPORT.

En esta pestaña incluiremos el parámetro DESCRIPCION, que será un CHAR20, y la estructura ITAB, que contendrá los 4 resultados aritméticos que calculará la función.

MF12

En esta pestaña incluiremos el parámetro de salida DESCRIPCION, el cual será del tipo CHAR20.

Igual que en la pestaña anterior, también podremos seleccionar dos tipos de referencia para los campos:

MF13

Adicionalmente, en esta pestaña se indicará también la estructura interna que se va a utilizar en la función, pero esto requiere un paso previo.

Primero debemos crear una Estructura de Datos Z con los campos requeridos, para luego poder referenciarla desde esta pestaña de la Función.

Para ello, vamos a la transacción SE11

Pulsamos el botón “Tipo de Datos”, le indicamos un nombre, (yo lo llamaré ZFI4B_ED_RR),

MF14

Se nos abrirá una ventana en la que nos pedirá el tipo de datos exacto que queremos crear, indicamos “Estructura”.

MF15

Procedemos a indicar los campos requeridos por la estructura, eligiendo un tipo de dato numérico con decimales, en este caso el Elemento de Datos DMBTR:

MF16

Ahora necesitamos indicar los campos referencia de estos tipos de datos numéricos.

MF17

Volvemos a la creación de la función en la SE37 para completar la pestaña EXPORT.

MF18

Pestaña EXCEPTIONS.

MF19

En esta pestaña declararemos las excepciones que se requieren controlar en la Función, a recordar:

  • DIV_CERO = División por cero.
  • NOT_FOUND = Parámetro no encontrado.

Solo se requiere declarar el nombre de la excepción, y una descripción corta, no se necesita el tipo de datos.

Pestaña SOURCE CODE o CODIGO FUENTE

Llegados a este punto, ya hemos declarado los atributos y parámetros que tendrá nuestra función, por lo que guardamos los cambios, y los activamos.

Ahora toca codificar, plasmar en código ABAP la lógica requerida para solucionar el requerimiento.

Recordemos, la función recibirá dos valores de tipo numérico y un valor tipo carácter  indicando el símbolo de la operación solicitada. La función deberá convertir este símbolo en su significado en letras, el cual será devuelto por la función a través de su parámetro de salida.

Adicionalmente, con los dos valores numéricos de entrada, la función  realizará las 4 operaciones aritméticas simples y las guardará en la tabla interna como resultado de salida.

Y no hay que olvidar las dos excepciones que se nos piden controlar, cuando se intenta dividir por cero, y cuando se inserta un operador distinto a los que 4  básicos que controlaremos.

Como vemos en la siguiente imagen, la pestaña CODIGO FUENTE muestra los parámetros creados en cada pestaña. Esto ocurre en cualquier Módulo de Función, siendo de utilidad para saber en la misma pestaña con que campos y variables podremos contar, resultado muy útil en BAPIS y EXITS.

MF20

NOTA: Por temas de disponibilidad, he cambiado el nombre de la función a ZFI4B_FM_RR, pero los pasos siempre son los mismos.

Procedamos a crear la lógica del requerimiento, la cual desarrollaremos en 3 partes.

Primero, empezamos por lo más sencillo, controlar la excepción DIV_CERO, para ello simplemente controlamos que el parámetro CAMPO2 no tenga valor cero.

MF21

Para capturas las excepciones dentro de una Función, utilizamos la sentencia RAISE seguida del nombre de la excepción que hemos declarado en la pestaña correspondiente.

Procedemos ahora a llenar el parámetro de salida DESCRIPCION, con el correspondiente significado de cada operador indicado por el parámetro de entrada OPERADOR, y en caso de no pertenecer a ninguna de las 4 operaciones básicas, capturamos la excepción NOT_FOUND.

MF22

Ahora nos queda simplemente realizar las 4 operaciones aritméticas y asignarlas a la estructura de salida ITAB, en su respectivo campo.

MF23

Probar la Función

Ya tenemos completada la Función, así de simple es.

Si deseas probar los 3 casos de prueba indicamos al comienzo para ver si todo está bien, pulsamos el botón de “ejecutar” luego de activar la función.

MF24

Indicamos los valores del caso 1:

MF25

Y ejecutamos:

MF26

Al no haber errores en los parámetros de entrada, se realizan las 4 operaciones, y podemos ver en ITAB los respectivos resultados, además de ver en DESCRIPCION el operador indicado en letras.

Veamos el caso 2:

MF27

Y ejecutamos:

MF28

El valor2 es 0, por ende se captura la excepción y se termina la ejecución de la función, impidiendo que se realice la división y  por ende la función termine en error.

Veamos el caso 3:

MF29

Y ejecutamos:

MF30

Los valores son correctos, pero el operador no es uno de los 4 básicos que estamos controlando en la función, por lo tanto, se captura la excepción  NOT_FOUND, y se termina la ejecución de la función.

Como vemos, el Módulo de Función cumple con lo requerido perfectamente, ahora solo nos queda crear el programa principal.

Creación del Programa Principal

Ya tenemos hecho el Módulo de Función, ahora debemos implementar el programa de control que llamará a la función, indicándoles los parámetros requeridos, y que recibirá los resultados de la misma.

 Nos vamos a la SE80 y creamos un programa que se llamará ZFI4B_P_APRENDE_ABAP;  asignamos el mismo a la orden de transporte que corresponda (en mi caso lo crearé como objeto local)

  • Se debe crear un programa principal que tenga como parámetros de selección, los 3 parámetros de entrada de la función, VALOR1, VALOR2 y OPERADOR. El programa llamará al Módulo de Función pasándole estos 3 campos.
  • Si los resultados son correctos (caso de ejemplo 1), tomar los resultados de la función y mostrarlos en un reporte.
  • Si los resultados no son correctos, capturar la excepción correspondiente (casos 2 y 3), y mostrar el respectivo mensaje de error por pantalla.

Se crea la pantalla de selección con los 3 campos correspondientes:

MF31

MF32

Creamos el llamado al Módulo de Función indicándole los 3 parámetros de entrada.

Para ello, utilizaremos la opción “Modelo” en la barra de pulsadores de la SE80.

MF33

Indicamos el nombre de la Función:

MF34

Y recibiremos en el código todos los parámetros de la Función que queremos invocar:

MF35

Declaramos las variables que recibirán los datos de salida de la Función:

MF36

Y llenamos el llamado correctamente.

MF39

El primer paso es capturar las excepciones, que como vemos representan los números 1 y 2, estos números se capturan en la variable SY-SUBRC.

El funcionamiento es similar a cuando consultamos una tabla, si SY-SUBRC devuelve un valor 0, es que la consulta fue correcta, por el contrario, si devuelve otros valores, es que algo ha ido mal, en nuestro caso,  SY-SUBRC devolverá 1 o 2 dependiendo de cuál excepción haya sido capturada dentro de la Función.

Para cumplir el requerimiento, simplemente verificamos el contenido de esta variable, y emitimos los correspondientes mensajes de error:

MF40

Si no ocurren excepciones, simplemente capturamos los resultados de la función en las variables DESCRIPCION e ITAB y preparamos la salida por pantalla de éstos.

MF41

Con esto habremos completado todo el requerimiento, procedemos a realizar las pruebas de los 3 casos desde el programa:

Caso 1:

MF42

Resultado:

MF43

Caso 2:

MF44

Resultado:

MF45

Caso 3:

MF46

Resultado:

MF47

Hasta aquí hemos llegado por hoy.

¿Te ha sido de utilidad este artículo? Házmelo saber con tus comentarios, y suscríbete a mi Comunidad para recibir mi curso gratuito “AprendeABAP en 10 lecciones”, además de contenidos exclusivos  sobre el mundo ABAP.

richard-avatar-SM-126x159

Richard Rey

“Programando tu Exito”

Opt In Image
Te has preguntado que se necesita para ser un Consultor de Éxito?
Te gustaría aprender los 7 Pasos para triunfar en tu carrera como Consultor ABAP?

Deja tus datos aquí abajo y formarás parte de mi comunidad exclusiva, además de recibir mi curso de regalo "Los 7 Pasos para ser un Consultor de Éxito".

Mas información AQUÍ.

 

PD: Odio el SPAM. No compartire tus datos con nadie.

Si te gusta, compártelo! ...Share on FacebookTweet about this on TwitterShare on LinkedInShare on Google+Email this to someonePrint this page

Comentarios