Truco 98. Ampliación de los informes de compras (ME??) con nuevos campos.


Hoy vamos a hablar de una clásica necesidad en la mayoría de proyectos o durante el soporte a una instalación Sap ya en funcionamiento. Anteriormente, los informes de compras eran difícilmente ampliables, a no ser que utilizaremos algún tipo de enhacement o copia de los informes estándar. Eso hacia complicado el cubrir requerimientos de usuario para añadir nuevas columnas en los resultados de los diferentes informes de compras.

Por ejemplo, en los informes:

  • Informes de registros info: ME1L, ME1M.
  • Informes de pedidos: ME2*.
  • Informes de contratos marco (pedidos abiertos, planes de entrega): ME3*.
  • Informes de solicitudes de pedido: ME5A, ME5K.
  • Liberación colectiva de documentos: ME55 para solicitudes de pedido, ME28 para pedidos o ME35 para otros documentos de compra.
  • Informes de libros de pedido (ME0M) o regulación por cuotas (MEQM)
  • Historial de precios de pedido (ME1P).
  • Informes de ofertas: ME4L, ME4M, etc.

A partir de la versión 6, EhP4, Sapp pone a disposición de los clientes la BADI ME_CHANGE_OUTTAB_CUS para poder personalizar todos estos informes estándar.

Con la badi podemos intervenir en los datos que se visualizan en los ALV de estas transacciones, de la siguiente manera:

  • Cambiar la información estándar que se determina en los informes (por ejemplo, proveedor, material).
  • Mostrar información estándar adicional, de los documentos o datos maestros.
  • Mostrar campos de cliente.
  • La BADI no se llama en las siguientes transacciones: ME80* ( ME80FN, ME80RN) ni en las ME56, ME57, ME58 o ME59N (transacciones para el tratamiento de las solicitudes de pedido y la conversión automática a pedido).

Requerimientos:

Habria que activar la business function LOG_MMFI_P2P ( MM, Integration of Materials Management and Financial Accounting), aunque de mi experiencia os puedo decir que he podido utilizar la badi sin activar la BF y funciona.

Ademas, es necesario utilizar en todas las transacciones indicadas la visualización ALV (se define en la parametrización, asociada a los Alcances de la lista).

En la parametrización se indica por el código de alcance si se utiliza la visualización ALV por defecto.

Igualmente, es un requisito utilizar el parámetro ME_USE_GRID = X, que fuerza la visualización ALV en las transacciones donde no se puede indicar un alcance de lista (por ejemplo, en la ME1L o ME1M).

La BADI no esta disponible en versiones inferiores a la EhP4 ni puede ser bajada a versiones inferiores. No es dependiente de filtro y se puede realizar múltiples implementaciones de ella (se ejecutarán todas). Por ejemplo, podríamos hacer una implementación por transacción que queramos ampliar.

No esta activa por defecto en el sistema.

Ejemplo de Implementación.

En nuestro ejemplo, vamos a ampliar el listado de pedido (ME2X) con varios campos del pedido que son útiles para los usuarios de mi sistema y que no se muestran por defecto. También podríamos haberlo hecho en el informe de liberación colectiva de pedidos (ME28).

Crearemos una implementación de la BADI ME_CHANGE_OUTTAB_CUS utilizando la transacción SE18.

SCN1.png

La BADI solo tiene un método, llamada FILL_OUTTAB, que recibe la siguiente información:

  • Nombre de la estructura: en la variable IM_STRUCT_NAME. En este campo recibiremos diferentes valores según la transacción en la que nos encontremos (por ejemplo, MEREP_OUTTAB_PURCHDOC_REL para los informes de liberación colectiva de pedidos; MEREP_OUTTAB_PURCHDOC para los informes de pedidos, ofertas o contratos ; MEREP_OUTTAB_EBAN para los informes de solpeds; MEREP_OUTTAB_INFREC para los informes de registros info; EORD para los informes del libro de pedidos; MEREP_OUTTAB_QUOTA para regulación por cuotas; MEREP_OUTTAB_PRHIS para el historial de precios de pedido (transacción ME1P) , etc)
  • Información a mostrar en los resultados del informe: en la tabla interna CH_OUTTAB. Para hacer el tratamiento de la tabla habrá que declarar un field-symbol con la estructura indicada en IM_STRUCT_NAME.

En la implementación de la BADI incluiremos el código personalizado para el llenado de los campos estándar.

En el caso de querer añadir campos en los resultados (tanto estándar que no se muestran como campos de cliente), tendremos que ampliar la estructura de datos correspondiente con un append en la transacción SE11. En nuestro ejemplo, hemos añadido 3 campos estándar y una campo Z.

Si los campos están en las tablas estándar, se llenará automáticamente en la estructura sin hacer nada. En caso contrario, habrá que realizar la lógica de llenado.

Os pego el ejemplo del código utilizado para el ejemplo indicado:

 METHOD if_ex_me_change_outtab_cus~fill_outtab.
* ampiacion campos ALV me2....

  DATA: ls_ekko TYPE ekko.

  FIELD-SYMBOLS: <fs_outtab>   TYPE any,
                 <fs_ebeln>    TYPE ebeln,
                 <fs_ebelp>    TYPE ebelp.
  FIELD-SYMBOLS:   <fs_zzaedat> TYPE datum.
  

* check that a purchasing document view is displayed
 CHECK im_struct_name EQ 'MEREP_OUTTAB_PURCHDOC'.

* loop at the output table and assign a field symbol
  LOOP AT ch_outtab ASSIGNING <fs_outtab>.

*-- assign the purchasing document number to a field symbol
    ASSIGN COMPONENT 'EBELN' OF STRUCTURE <fs_outtab> TO <fs_ebeln>.
    CHECK sy-subrc = 0.
*-- assign the purchasing document item number to a field symbol
    ASSIGN COMPONENT 'EBELP' OF STRUCTURE <fs_outtab> TO <fs_ebelp>.
    CHECK sy-subrc = 0.

   ASSIGN COMPONENT 'ZZAEDAT' OF STRUCTURE <fs_outtab> TO <fs_zzaedat>.
    CHECK sy-subrc = 0.
    CLEAR <fs_zzaedat>.

    CALL FUNCTION 'ME_EKKO_SINGLE_READ'
      EXPORTING
        pi_ebeln                  =  <fs_ebeln>
*   PI_BYPASSING_BUFFER       =
*   PI_REFRESH_BUFFER         =
     IMPORTING
       po_ekko                   = ls_ekko
     EXCEPTIONS
       no_records_found          = 1
       OTHERS                    = 2
              .
    IF sy-subrc = 0.
      <fs_zzaedat> = ls_ekko-aedat.
    ENDIF.
 ENDLOOP.
ENDMETHOD.

Al ejecutar las transacciones de listado de pedidos (ME2L, ME2M, etc), nos aparecerán las nuevas columnas en los resultados:

Espero que os sea de utilidad.

Bibliografía:

 

Esta entrada fue publicada en Abap, SAP MM y etiquetada , , , , , , . Guarda el enlace permanente.

5 respuestas a Truco 98. Ampliación de los informes de compras (ME??) con nuevos campos.

  1. Hola, sabes si hay algo parecido para los reports de numeros de serie?? Transacción IQ09
    Muchas gracias!

  2. Acaba de implementarlo en un nuevo proyecto, perfecto el post

  3. Miguel f dijo:

    Hola, oye tu post me intereso mucho, llegue a el porque tengo una necesidad, quisiera saber si en sap se almacena la fecha cuando se marca release en la me28n a una po,
    necesito un reporte para saber cuanto tiempo estan tardando en liberarlas despues de crearlas. seria de mucha ayuda si supieras algo de este tema, de antemano, gracias por lo redactado lineas arriba.

  4. Lucas dijo:

    Buenas! muy bueno el posta, aplica para la ME2S sabes? Gracias

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.