Inicio > ABAP/4 > MB52 – Agregar campo en ALV

MB52 – Agregar campo en ALV

Caso: se desea agregar el campo ubicación (MARD-LGPBE) al reporte ALV de la transacción estándar MB52.

Solución:

El reporte tiene dos visualizaciones: jerárquica y no jerárquica. Para el primer caso, dejo el campo oculto (para que el usuario lo pueda agregar si lo desea) y en el segundo caso lo agregaré visible, antes del campo Lote.

1. Crear la implementación, modificando el fieldcat

a. Para reporte no-jerárquico

Vamos al report RM07MLBS y buscar el ENHANCEMENT-SECTION RM07MLBS_11 SPOTS ES_RM07MLBS y crear una implementación como se muestra en la imagen (en este caso el campo lo agrega luego del campo “Material”), agregando una llamada a macro_fill_fieldcat con el nuevo campo.

Yo agregué el campo luego del campo lote y para eso lo hice sin usar la macro, agregándolo al fieldcat directamente con código -ya que el col_pos está fijo sumando 1 en la macro-). O sea:

fieldcat-COL_POS = '9'.
fieldcat-fieldname = 'LGPBE'.
fieldcat-tabname = 'BESTAND'.
fieldcat-ref_tabname = 'MARD'.
fieldcat-no_out = space.
 
if not fieldcat-seltext_l is initial.
move : fieldcat-seltext_l to fieldcat-seltext_m,
fieldcat-seltext_l to fieldcat-seltext_s.
endif.
append fieldcat. clear fieldcat.

b. Para reporte jerárquico

Vamos al report RM07MLBS y buscamos el ENHANCEMENT-POINT RM07MLBS_1 SPOTS ES_RM07MLBS. Creamos una implementación y agregamos un nuevo campo al catálogo:

CLEAR fieldcat.
fieldcat-fieldname = 'LGPBE'.
fieldcat-tabname = 'BESTAND'.
fieldcat-ref_tabname = 'MARD'.
fieldcat-no_out = 'X'.
APPEND fieldcat.

Nota: si queremos modificar los datos de cabecera del reporte jerárquico modificamos el HEADER

2. Buscamos el FORM list_output

Nos posicionamos con el cursor al principio del FORM y vamos al menú “Tratar” -> Operaciones ampliación -> Insertar puntos de ampliación implícitos

Nos deja el código así:

Hacemos click con el botón derecho en las comillas y elegimos ->Implementación ampliación -> Crear implementación. Nos aparece la siguiente pantalla, elegimos “Cod. Fuente”.

3. Copiar el FORM completo

Allí hacemos copy&paste del contenido completo del FORM list_output en la implementación creada y al final ponemos la instrucción:

CHECK 1 = 2.

De esta forma luego de la ejecución de la implementación no se ejecutará el código original

4. Comentar código

Al compilar dará algunos errores, les doy algunos tips:

Comentar los ENHANCEMENT-SECTION y END-ENHANCEMENT-SECTION:

* ENHANCEMENT-SECTION     RM07MLBS_09 SPOTS ES_RM07MLBS.

* END-ENHANCEMENT-SECTION.

* ENHANCEMENT-SECTION     RM07MLBS_10 SPOTS ES_RM07MLBS.

* END-ENHANCEMENT-SECTION.

Yo comenté también esta parte (verificar si está OK):

* ENHANCEMENT-POINT RM07MLBS_2 SPOTS ES_RM07MLBS.
**$*$-Start: RM07MLBS_2————————————————————————–$*$*
* ENHANCEMENT 14  MGV_MATNR_LAMA_RM07MLBS.    “active version
** Modification for PIC-Supersession/MPN
*
*      IF SHOW_EXT_MANUFACTURER EQ ‘X’.
*             CLEAR EMNFR.
*             CALL FUNCTION ‘MPN01_READ_MPN_VIA_MATNR’
*                EXPORTING
**                     I_MATNR            = HEADER-MATNR “DI note 762421
*                     I_MATNR            = bestand-MATNR “DI note 762421
*               IMPORTING
**                    E_MFRPN            =
*                     E_EMNFR            = EMNFR
*                EXCEPTIONS
*                     MATERIAL_IS_NO_MPN = 1.
*
*         IF SY-SUBRC EQ 0.
*            MOVE EMNFR TO HEADER-EMNFR.
*         ENDIF.
*       ENDIF.
* ENDENHANCEMENT.

 

Asimismo modificar el nombre de la variable l_f_check.

*  data : l_f_check_(01)       type c.
data : l_f_check_new(01)       type c.              ” <–

y reeemplazar su uso en:

CALL FUNCTION ‘REUSE_ALV_HIERSEQ_LIST_DISPLAY’
EXPORTING
*            I_INTERFACE_CHECK  = l_f_check
I_INTERFACE_CHECK  = l_f_check_new         ” <–

 

CALL FUNCTION                  alv_detail_func
EXPORTING
*        I_INTERFACE_CHECK          = l_f_check
I_INTERFACE_CHECK          = l_f_check_new     ” <–

5. Crear una nueva tabla interna con los campos nuevos a agregar

Creamos una nueva tabla interna con el/los nuevos campos a agregar (en nuestro caso sólo es el campo MARD-LGPBE) y lo usamos en la llamada del ALV. Para nuestro ejemplo para el reporte jerárquico y no-jerárquico, debo crear una tabla BESTAND_NEW para agregar el campo LGPBE:

 

DATA: BEGIN OF bestand_new OCCURS 0,
*        Key fields
matnr LIKE mara-matnr,
werks LIKE t001w-werks,
lgort LIKE mard-lgort,
         LGPBE               like mard-LGPBE,    ”  Campo ubicación
         sobkz LIKE mkol-sobkz,
ssnum               like  bickey-ssnum,            “n531604
pspnr               like  mspr-pspnr,              “n531604
vbeln               like  mska-vbeln,              “n531604
posnr               like  mska-posnr,              “n531604
lifnr LIKE mkol-lifnr,
kunnr LIKE msku-kunnr,
kzbws LIKE mssa-kzbws,
charg LIKE mchb-charg,
*        Additional data (texts, unit, …)
maktx LIKE marav-maktx,
bwkey LIKE mbew-bwkey,
mtart LIKE marav-mtart,
matkl LIKE marav-matkl,
meins LIKE marav-meins,
bwtty LIKE marc-bwtty,
xchar LIKE marc-xchar,
lgobe LIKE t001l-lgobe,
bwtar LIKE mcha-bwtar,
waers LIKE t001-waers,
name1 LIKE t001w-name1,
*        Quantities and currencies
labst LIKE mard-labst,
wlabs LIKE mbew-salk3,
insme LIKE mard-insme,
winsm LIKE mbew-salk3,
speme LIKE mard-speme,
wspem LIKE mbew-salk3,
einme LIKE mard-einme,
weinm LIKE mbew-salk3,
retme LIKE mard-retme,
wretm LIKE mbew-salk3,
umlme LIKE mard-umlme,
wumlm LIKE mbew-salk3,
glgmg LIKE marc-glgmg,                             “n912093
wglgm LIKE mbew-salk3,                             “n912093
trame LIKE marc-trame,                             “n912093
wtram LIKE mbew-salk3,                             “n912093
umlmc LIKE marc-umlmc,                             “n912093
wumlc LIKE mbew-salk3,                             “n912093
*        Dummy field
dummy               TYPE  ALV_DUMMY,
*        Colour
farbe TYPE slis_t_specialcol_alv,
lvorm               like  mard-lvorm,
*        valuated blocked GR stock                       “AC0K020254
bwesb               like  marc-bwesb,           “AC0K020254
wbwesb              like  mbew-salk3,           “AC0K020254
matnr_40            type text40,                “DI note 1160649
END OF bestand_new.

 

6. Agregar el código para obtener el nuevo campo

Finalmente antes de la llamada del ALV, copio los valores de BESTAND a BESTAND_NEW y le agrego el campo nuevo, agregando la lógica luego del BREAK-POINT ID MMIM_REP_MB52:

 

BREAK-POINT ID MMIM_REP_MB52.                             "n912093
 
DATA: BEGIN OF ubicacion OCCURS 0,
matnr LIKE mara-matnr,
werks LIKE t001w-werks,
lgort LIKE mard-lgort,
LGPBE like mard-LGPBE,
END OF ubicacion.
REFRESH: ubicacion[],
bestand_new[].
 
SELECT matnr werks lgort lgpbe
INTO CORRESPONDING FIELDS OF TABLE ubicacion
FROM mard
FOR ALL ENTRIES IN bestand
WHERE matnr = bestand-matnr
AND werks = bestand-werks
AND lgort = bestand-lgort.
 
LOOP AT bestand.
CLEAR bestand_new.
MOVE-CORRESPONDING bestand TO bestand_new.
 
READ TABLE ubicacion WITH KEY matnr = bestand-matnr
werks = bestand-werks
lgort = bestand-lgort.
IF sy-subrc EQ 0.
bestand_new-lgpbe = ubicacion-lgpbe.
ENDIF.
 
APPEND bestand_new.
ENDLOOP.

7. Modificar la tabla interna en las llamadas al ALV

Finalmente en las llamadas al ALV ahora cambia la tabla interna:

TABLES
t_outtab_item      = bestand_new “bestand

y

TABLES
T_OUTTAB                   = bestand_new ” bestand

 

PD: en lugar de agregar la nueva estructura BESTAND_NEW no me fijé, pero capaz podía ampliarse la actual BESTAND agregando el nuevo campo.
Link: http://scn.sap.com/thread/2072130

  1. Jenny Núñez
    30/05/2014 a las 13:40

    Hola excelente todas las publicaciones. Soy de MM y necesito colocar los campos: TXZ01, XBLNR, BKTXT obligatorios al crar Hoja de entrada de servicio por la ML81N. Agradecería la ruta.

    • 02/06/2014 a las 14:35

      Hola, te paso esta data:
      Tcode :- SPRO

      1) SAP Reference IMG > Materials Management > External Service Management > Define Screen Layout.
      or Create a Transaction variant using SHD0 transaction for ML81N transaction.

  2. Jenny Núñez
    03/06/2014 a las 14:06

    Hola Excelente. Solucioné. Muchísimas gracias por la ayuda y por crear este Blog.

  3. 17/04/2015 a las 17:29

    muy bueno el post, necesito agregar un campo en la misma transaccion, la de ubicacion fisica
    si tienes algun ejemplo en video o un manual a detalle te estaria muy agradecido
    Saludos Cordiales
    freddy

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: