Está en la página 1de 6

MB52 – Agregar campo en 

ALV
01/04/2014Ing. Eduardo Miguel Puricelli Deja un comentarioGo to comments
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

 
 

También podría gustarte