Cuando se tienen campos dynpro y se necesitan hacer matchcode, pero estos deben ser obtenidos con datos de otros campos dynpros, es aquí que necesitamos de armar la información que queremos mostrar, en una tabla interna y luego ello mostrarlo en el matchcode, es por ello que veremos un ejemplo al respecto:
Tenemos un dynpro (200) con los campos que deseamos agregar, en la parte lógica se tiene lo siguiente:
PROCESS BEFORE OUTPUT.
MODULE STATUS_0200. «Contiene lógica no necesaria para este ejemplo
*
PROCESS AFTER INPUT.
MODULE EXIT_COMMAND AT EXIT-COMMAND. «Contiene lógica no necesaria para este ejemplo
MODULE USER_COMMAND_0200. «Contiene lógica no necesaria para este ejemplo
FIELD ZTPP_MATERIAL-COD_MAT MODULE VALIDACION ON REQUEST.
*Contiene lógica no necesaria para este ejemplo
PROCESS ON VALUE-REQUEST.
FIELD ZTPP_PROCESO_CAB-ALMACEN MODULE F4_ALMACEN.
*Esta parte si nos interesa, damos doble click en F4_ALMACEN para generar el modulo
*Seleccionamos el lugar a incorporar dicho modulo y luego incluimos la siguiente lógica:
*&———————————————————————*
*& Module F4_ALMACEN INPUT
*&———————————————————————*
* text
*———————————————————————-*
MODULE F4_ALMACEN INPUT.
*TABLAS PARA MATCHCODE
DATA: BEGIN OF IT_MATCH OCCURS 0, «Esta tabla nos devuelve la ayuda
SHLPNAME LIKE DDSHRETVAL-SHLPNAME,
FIELDNAME LIKE DDSHRETVAL-FIELDNAME,
RECORDPOS LIKE DDSHRETVAL-RECORDPOS,
FIELDVAL LIKE DDSHRETVAL-FIELDVAL,
RETFIELD LIKE DDSHRETVAL-RETFIELD,
END OF IT_MATCH.
«Esta tabla es donde almacenamos los resultados
DATA: BEGIN OF IT_T001L OCCURS 0,
LGORT LIKE T001L-LGORT,
LGOBE LIKE T001L-LGOBE,
END OF IT_T001L.
*Se realizan las búsquedas y se anexan los valores a la tabla interna
SELECT LGORT LGOBE FROM T001L INTO TABLE IT_T001L
WHERE WERKS EQ ZTPP_PROCESO_CAB-CENTRO. «campo dynpro con el centro
*Se hace uso de la función que convoca al matchcode y transforma nuestra tabla interna
CALL FUNCTION ‘F4IF_INT_TABLE_VALUE_REQUEST’
EXPORTING
RETFIELD = ‘LGORT’
WINDOW_TITLE = ‘Almacen’
VALUE_ORG = ‘S’
TABLES
VALUE_TAB = IT_T001L
RETURN_TAB = IT_MATCH
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
*Si todo es correcto
IF SY-SUBRC EQ 0.
*Leemos lo que obtenermos y se lo pasamos a nuestro campo del dynpro
READ TABLE IT_MATCH INDEX 1.
MOVE IT_MATCH-FIELDVAL TO ZTPP_PROCESO_CAB-ALMACEN.
ENDIF.
ENDMODULE. » F4_ALMACEN INPUT
El resultado en ejecución es:
Que buena ayuda das aquí
sigue asi
Gracias.
Muy buena ayuda, una pregunta en este codigo:
PROCESS ON VALUE-REQUEST.
FIELD ZTPP_PROCESO_CAB-ALMACEN MODULE F4_ALMACEN.
en donde declaraste el FIELD ZTPP_PROCESO_CAB-ALMACEN .
Gracias
Hola Rod,
La declaración del campo ZTPP_PROCESO_CAB-ALMACEN, la he declarado en el screen painter de la dynpro, esa opción la encuentras en la parte superior donde hay un botón con una flecha y dice «Layout», una vez presionas allí te permite añadir campos de entrada, campos de salida, casilla de selección, table control, etc. Le das clic a campo de entrada y te va a solicitar un nombre, allí es donde le he colocado el texto «ZTPP_PROCESO_CAB-ALMACEN», al colocarlo tabla-campo lo que se hace es unir nuestro campo de entrada con la declaración del campo en el diccionario. En tu caso si ya tienes una variable incluida en tu pantalla, solo debes colocar su nombre en el comando, ejemplo: FIELD ZNOMBRE_TU_CAMPO MODULE F4_ALMACEN. Espero esto halla aclarado tus dudas, saludos.
Gracias por la info 🙂
Excelente ayuda, me funcionó a la perfección para un campo Z agregado en la ME21n. Gracias