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.

Encontrar una ampliación a partir del módulo de funciones

Caso: se requiere encontrar una ampliación a partir del módulo de funciones (dato conocido).

Solución:

1. Por la SE16, vamos a la tabla MODSAP y en el campo "MEMBER" indicamos el módulo de funciones

y vamos a la transacción SMOD con la ampliación encontrada:

2. Sino, por la CMOD,

Ahi ir arriba al menú UTILIDADES – Ampliaciones SAP

Ponemos el Nombre del Paquete (ML)

Lista los EXITs

Encontrar modificaciones de tablas del customizing de SAP

Caso: surgió la necesidad de detectar si una tabla del customizing (para nuestro caso la transacción OKB9) había sido modificada y se requería encontrar la orden de transporte que contenía la modificación.

Solución:

1. Primero buscamos los datos técnicos de la tabla de customizing, para nuestro caso vemos que es la vista V_TKA3A

2. Haciendo doble click en el nombre de la vista, vemos que la tabla relacionada es la TKA3A.

3. Ingresamos a la SE03 y seleccionamos "Buscar objetos en órdenes/tareas"

4. Usamos el tipo de objeto CDAT, seleccionamos los modificables y/o liberados y luego para nuestro caso filtro sólo las ordenes de customizing y ejecutamos.

5. Nos aparecerá la lista de órdenes relacionadas con las tablas indicadas.

Ingresando con doble click en la orden, podemos ver el código de objeto y las modificaciones que incluye.

Se pueden modificar los parámetros para poder filtrar y buscar otros objetos también, como programas, clases, tablas etc. aunque para estos casos también podemos hacerlo desde el mismo objeto en "Gestión de versiones", caso que en el customizing no existe.

EBAN – Crear estructura Append en Solicitud de Pedido

Caso: Se desea agregar un campo Z en pantalla en la ME51n, en el cual cuando el usuario completa ciertos datos de una posición de SOLPE, aparezca un dato en ese campo Z.

Solución: Se crea un nuevo campo ZZ_COMPRADOR en la tabla EBAN.

1. En la SE11, vamos a la tabla EBAN y buscamos el elemento de datos CI_EBANDB. Hacemos doble click en el.

2. Agregamos el/los campos Z que deseamos en la estructura. El nombre del campo debe comenzar con ZZ o YY.

Definimos la categoría de ampliación de la estructura…

3. Activamos todo. En mi caso dio un error, que voy a ignorar ya que no encontré el motivo.

TABL WTYSC_WWB_NAVTREE_DATA inconsistente en versión activa

Verificar tabla WTYSC_WWB_NAVTREE_DATA (Q_EPURICELLI/22.08.14/17:1.

Categoría de ampliación actual Ampliable y numérico o de caracteres es falsa

Pueden seleccionarse siguientes categorías de ampliación:

Ampliable cualq.forma

4. Vamos a la transacción CMOD para crear una ampliación (en mi caso ya existía, así que puede faltar algún paso).

Vamos a componentes…

5. Sólo resta ingresar al EXIT que mejor nos convenga y allí crear el include. En mi caso usé el EXIT_SAPLMEREQ_005.

6. Dentro del include ZXM02U05, agregué el siguiente código:

* Obtengo la posición para poder modificarla
l_mereq_item = im_req_item->get_data( ).
CHECK l_mereq_item IS NOT INITIAL.
 
* Trae el comprador asociado a cotizaciones según el Centro Sum.-Grp.Art.Grupo de compras indicado
IF     im_data_new-reswk IS NOT INITIAL
  AND  im_data_new-matkl IS NOT INITIAL
  AND  im_data_new-ekgrp IS NOT INITIAL
  AND ( im_data_old-ekgrp NE im_data_new-ekgrp 
    OR  im_data_old-reswk NE im_data_new-reswk 
    OR  im_data_old-matkl NE im_data_new-matkl ).
 
  CLEAR l_mereq_item-zzcomprador.
  SELECT SINGLE bname 
	INTO l_mereq_item-zzcomprador "Campo Z donde dejo el comprador asociado.
    FROM zcot_001
    WHERE werks = im_data_new-reswk.
 
ENDIF.
 
CALL METHOD im_req_item->set_data( l_mereq_item ).

 

7. Finalmente el campo aparece en pantalla y calcula el comprador según el código al ingresar los datos por posición

Categorías:ABAP/4 Etiquetas: , , , , , ,

POPUP_TO_DECIDE_LIST

Caso: se desea crear un popup para que el usuario seleccione una opción entre varias.

Solución: Usando la función POPUP_TO_DECIDE_LIST puedo hacerlo.

DATA: li_spopli TYPE STANDARD TABLE OF spopli,
wa_spopli TYPE spopli,
lv_result TYPE char1.

START-OF-SELECTION.
CLEAR: wa_spopli.
wa_spopli-varoption = ‘Opción 1′.
APPEND wa_spopli TO li_spopli.

CLEAR: wa_spopli.
wa_spopli-varoption = ‘Opción 2′.
APPEND wa_spopli TO li_spopli.

CLEAR: wa_spopli.
wa_spopli-varoption = ‘Opción 3′.
APPEND wa_spopli TO li_spopli.

CALL FUNCTION ‘POPUP_TO_DECIDE_LIST’
EXPORTING
titel = ‘POPUP – Radio Buttons’
textline1 = ‘Seleccione una opción’
IMPORTING
answer = lv_result
TABLES
t_spopli = li_spopli
EXCEPTIONS
not_enough_answers = 1
too_much_answers = 2
too_much_marks = 3
OTHERS = 4.

IF sy-subrc EQ 0.
IF lv_result NE ‘A’.
READ TABLE li_spopli INTO wa_spopli INDEX lv_result.
WRITE:/ ‘Se seleccionó: ‘, wa_spopli-varoption.
ELSE.
WRITE:/ ‘No ha realizado ninguna selección’.
ENDIF.
ENDIF.

Categorías:ABAP/4 Etiquetas: , ,

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…

TRY CATCH – Ejemplo básico de excepción

Caso: se desea capturar y mostrar el error de la excepción al realizar una división por cero. Es un ejemplo básico que encontré, pero útil para usarlo cuando necesitemos capturar excepciones

Solución: Vamos primero a mostrar la división y el error que nos genera sin capturar la excepción:

REPORT  zprueba_abap.
* Prueba de división por cero sin capturar excepción
 
DATA: resultado TYPE p DECIMALS 2,
      ref_exc   TYPE REF TO CX_ROOT,
      error     TYPE STRING.
 
PARAMETERS: p_num1 TYPE i DEFAULT '10',
            p_num2 TYPE i DEFAULT '0'.
 
resultado = p_num1 / p_num2.
WRITE: 'El resultado es: ', resultado.

Ahora si agregamos la sentencia TRY-ENDTRY y con CATCH capturamos la excepción para que muestre un MESSAGE tipo Información:

REPORT  zprueba_abap.
* Prueba de división por cero capturando la excepción
 
DATA: resultado TYPE p DECIMALS 2,
      ref_exc   TYPE REF TO CX_ROOT,
      error     TYPE STRING.
 
PARAMETERS: p_num1 TYPE i DEFAULT '10',
            p_num2 TYPE i DEFAULT '0'.
 
TRY.
    resultado = p_num1 / p_num2.
    WRITE: 'El resultado es: ', resultado.
  CATCH cx_sy_zerodivide INTO ref_exc.
    error = ref_exc->get_text( ).
    MESSAGE error TYPE 'I'.
ENDTRY.
 

Links:

http://www.teknodatips.com.ar/sap-netweaver/267-abap-objects-tutorial-manejo-excepciones.html

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.