Archivo

Posts Tagged ‘BADI’

MM01 – Valores por defecto y Validaciones

Caso: se busca que al crear un material por la MM01, se carguen valores por defecto y asimismo realizar validaciones cuando falta algún dato.

Solución:

1. Para crear valores por defecto, deberíamos implementar la BADI_MATERIAL_REF, ingresando por la SE18, podemos ver de que se trata:

Por la SE19, creamos nuestra versión de la BADI:

Yo ya la tenía creada, quizás me falte algún paso, muestro como quedó:

Hacemos doble-click en CREATE_MATERIAL para agregar el código donde asignaremos los valores por defecto. En mi caso requería asignar el grupo tipo de posición (MARA-MTPOS_MARA) para un tipo de material específico (MARA-MTART):

Activamos todo y listo.

2. Para el caso de las validaciones, debemos por la CMOD usar las ampliaciones MGA00001 y MGA00002 según lo que necesitemos validar.

Por la CMOD creamos un proyecto de ampliación:

y asignamos las ampliaciones MGA00001 y MGA00002 (en mi caso tengo más utilizadas en el proyecto de ampliación):

En mi caso utilicé el grupo de funciones EXIT_SAPLMGMU_001

Hacemos doble click sobre el EXIT_SAPLMGMU_001:

Creamos la validación, haciendo doble click sobre ZXMG0U02:

Activamos todo y listo.

Anuncio publicitario

BADI – Como encontrar una BADI

Caso: se desea conocer que implementaciones de BADIs hay en un programa o transacción (en nuestro caso ejecutamos la transacción MIRO).

Solución:

1. Ingresamos a la transacción SE24 (Class Builder o Generador de Clases). Allí indicamos la clase CL_EXITHANDLER y presionamos VISUALIZAR.

2. Ingresamos al método GET_INSTANCE con doble click:

3. En el método CALL METHOD cl_exithandler=>get_class_name_by_interface ponemos un BREAKPOINT de sesión y salimos.

4. Ejecutamos la transacción o programa que deseamos rastrear. Al detenerse en el BREAKPOINT que creamos, podemos ver la variable EXIT_NAME y allí encontraremos las BADIs que están implementadas para ese programa.

Hay que ir pasando por todas las BADIs, pero bueh…

MRKO – Modificar dato en RMVKON00 al liquidar

Caso: se busca modificar el campo división (BSEG-GSBER) en la posición del proveedor (Clave de Contabilización 31) en el asiento contable que se genera al liquidar consignaciones por la transacción MRKO

Terminé actualizando el dato antes de generar el documento contable, no se si es la mejor solución pero me funcionó.

Usé el EXIT_RMVKON00_001 (ZXM08U11), pero también encontré que está elEXIT_RMVKON00_002 (ZXM08U12) y la BADI MRM_MRKO_HDAT_MODIFY por si tienen que hacer otra cosa.

DATA: lw_bseg TYPE bseg,
lv_gsber TYPE gsber.

* Tomo la división
LOOP AT t_bseg INTO lw_bseg WHERE koart = ‘S’
AND gsber IS NOT INITIAL.
lv_gsber = lw_bseg-gsber.
EXIT. " Uso el EXIT porque se supone que se liquidará todo para el mismo centro / la misma división, así que el dato es el mismo para todos
ENDLOOP.

* Modifico el registro con KOART = K (proveedor)
LOOP AT t_bseg INTO lw_bseg
WHERE koart = ‘K’
AND lifnr EQ i_lifnr.

lw_bseg-gsber = lv_gsber.
MODIFY t_bseg FROM lw_bseg INDEX sy-tabix.
ENDLOOP.