User-exit para grabar o retener en ME21N o ME22N (ABAP)

Cuando se desea obtener datos del pedido a crearse (ME21N) o editandose (ME22N) se pueden emplear los user-exit pero teniendo en cuenta el momento en que se ejecutan, para ello se va a colocar los casos en que se activa el exit y su nombre:

*Si lo que se busca es obtener la data antes de ser guardada, para ello se emplea el exit EXIT_SAPMM06E_012, el cual puede ser ubicado mediante la transacción SE37, encontrandose dentro el include Z que podemos editar. El detalle en este exit es que los datos obtenidos no traen consigo el codigo del pedido (Campo EBELN) por lo tanto para algunos procedimientos que queramos hacer no nos servira.

*El segundo exit es el EXIT_SAPMM06E_013, el cual se activa en 2 casos, cuando el pedido es retenido y después de guardar el pedido, por lo tanto en este exit si contiene el número de pedido, pero ¿cómo nosotros podremos distinguir cuando el pedido es retenido y cuando es grabado?, para ello emplearemos la comprobación del campo: MEMORY ubicado en la tabla EKKO, para ello en el código colocariamos la siguiente lógica:

IF i_ekko-memory = ‘X’.
*El proceso se encuentra retenido.
ELSE.
*El proceso se encuentra grabandose.
ENDIF.

OJO: Ambos user-exits los podemos encontrar mediante la transacción SE37 (Módulo de funciones).

Si tienes una versión antigua de SAP (4.6c en específico) puedes ver el siguiente link para guiarte en la implementación del exit: https://luislokox.wordpress.com/2013/02/06/modificando-user-exit-en-version-4-6c-abap/