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

Anuncios
  1. Jenny Núñez
    30/05/2014 en 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 en 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 en 14:06

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

  3. 17/04/2015 en 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

  4. 09/05/2018 en 18:09

    Hola alguien me puede ayudar, por alguna razón el programa RM07MLBS se me daño y no he podido solucionarlo. Como puedo volver a instalar el programa original? o como copiar el del mandante de calidad e importarlo en desarrollo ? Mil Gracias

    • 09/05/2018 en 20:52

      Estimado, podría ir a gestión de versiones quizás y volver atrás a la versión anterior, sino ir paso a paso revisando las modificaciones que hizo y deshaciéndolas….asi a ojo es difícil ayudarlo si no indica el error que le da o que pasó para que se dañe. saludos

  5. 10/05/2018 en 09:26

    Ingeniero gracias por su respuesta, el problema q se presenta es q el código me marca error en todos los ENHANCEMENT y no guarda los cambios q realizo, ya intente la gestión de versiones y tampoco me llevo a la versión original. Quisiera saber si conoce alguna forma de importar el programa desde calidad con todas sus ampliaciones y dympros u otra forma de reinstalar el programa. Gracias

    • 10/05/2018 en 20:08

      Hola Luis, mira suena a que te quedó algún IF sin cerrar o algo así y no te permite grabar las modificaciones. Raro igual, me cuesta un poco poder ayudarte sin entrar a SAP y analizar el programa entero, este programa al ser estándar y ser cross a varias transacciones veo difícil poder volverlo atrás salvo que consultes sobre recuperar algún Backup con el BASIS de la empresa, quizás desde ese lado te puedan ayudar. Mi recomendación es que si ya iniciaste los cambios revisarlos para que queden terminados y así compile por lo menos….puede ser cualquier cosa el error y habría que bucear un poco para verlo…son muchos enhacements involucrados

  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 )

Google+ photo

Estás comentando usando tu cuenta de Google+. 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 )

w

Conectando a %s

A %d blogueros les gusta esto: