Agregar matchcode (F4) con tabla interna en dynpro ABAP

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:

Imagen

5 pensamientos en “Agregar matchcode (F4) con tabla interna en dynpro ABAP

  1. 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.

Replica a Ricardo Cancelar la respuesta