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
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.
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.
Hola Excelente. Solucioné. Muchísimas gracias por la ayuda y por crear este Blog.
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
Hola y no te sirvió el ejemplo? posiblemente lo único que cambie es el campo nomás…
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
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
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
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