Crear Matchcodes (ayudas) con una tabla interna.

28 11 2007

El próximo ejemplo sirve para crear ayudas (matchcodes) con una tabla interna de nuestro programa.
Así de simple, hacemos una búsqueda a alguna tabla y el resultado lo guardamos en una tabla interna que se la pasamos a la función F4IF_INT_TABLE_VALUE_REQUEST que nos va a mostrar la ayuda.

Quiero agradecer esta forma de crear ayudas a mi compañero y amigo Rodrigo (http://ramgv-sap.blogspot.com).


*En este ejemplo creo un select-option para un material. Cuya ayuda será *el nº de material para VBELN =  ‘0000000001’ y POSNR = ‘000010’.

TABLES: VBAP,
             DDSHRETVAL.

DATA: BEGIN OF IT_MATNR OCCURS 0,
               MATNR LIKE VBAP-MATNR,
               ARKTX LIKE VBAP-ARKTX,
           END OF IT_MATNR.

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.

SELECTION-SCREEN BEGIN OF BLOCK BLQ1 WITH FRAME TITLE TEXT-T01.
  SELECT-OPTIONS: S_MATNR FOR VBAP-MATNR NO-EXTENSION NO INTERVALS.
SELECTION-SCREEN END OF BLOCK BLQ1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MATNR-LOW.
  SELECT MATNR
              ARKTX
      FROM VBAP
        INTO TABLE IT_MATNR
        WHERE VBELN EQ ‘0000000001’ AND
                    POSNR EQ ‘000010’.

  CALL FUNCTION ‘F4IF_INT_TABLE_VALUE_REQUEST’
    EXPORTING
      RETFIELD        = ‘MATNR’
      WINDOW_TITLE    = ‘Material’
      VALUE_ORG       = ‘S’
    TABLES
      VALUE_TAB       = IT_MATNR
      RETURN_TAB      = IT_MATCH
    EXCEPTIONS
      PARAMETER_ERROR = 1
      NO_VALUES_FOUND = 2
      OTHERS          = 3.

  IF SY-SUBRC EQ 0.
    READ TABLE IT_MATCH INDEX 1.
    MOVE IT_MATCH-FIELDVAL TO S_MATNR-LOW.
  ENDIF.


Technorati tags:


Acciones

Information

10 responses

16 01 2008
lucas

Soy nuevo en esto y un poco desmemoriado, por lo que este tipo de consultas sacan del apuro muy rapido.

saludos

2 10 2008
Juan

Daniel, útil esto del match code; le hice alguna modificacion al programa para que me trajera del maetro de materiales. Te lo ajunto. saludos.

REPORT ZPRUEBA1.
*——————————————————————————–*
*Este reporte sirve para generar un matchcode con referencia a una tabla interna.*
*——————————————————————————–*

TABLES: DDSHRETVAL,
BKPF,
MARA.

DATA: BEGIN OF IT_MATNR OCCURS 0,
MATNR LIKE MARA-MATNR,
MAKTG LIKE MAKT-MAKTG,
END OF IT_MATNR.

*“Esta tabla nos devuelve la ayuda
DATA: BEGIN OF IT_MATCH OCCURS 0,
SHLPNAME LIKE DDSHRETVAL-SHLPNAME,
FIELDNAME LIKE DDSHRETVAL-FIELDNAME,
RECORDPOS LIKE DDSHRETVAL-RECORDPOS,
FIELDVAL LIKE DDSHRETVAL-FIELDVAL,
RETFIELD LIKE DDSHRETVAL-RETFIELD,
END OF IT_MATCH.

SELECTION-SCREEN BEGIN OF BLOCK BLQ1 WITH FRAME TITLE TEXT-T01.
*Este primer select-options usa la TABLA INTERNA para busqueda debido a (++)
SELECT-OPTIONS: S_MATNR FOR MARA-MATNR NO-EXTENSION NO INTERVALS.

*Este segundo select-options usa la búsqueda estándar
SELECT-OPTIONS: S_BUKRS FOR BKPF-BUKRS NO-EXTENSION NO INTERVALS.

*Este tercer select-options usa la búsqueda estándar
SELECT-OPTIONS: S_MATNR2 FOR MARA-MATNR NO-EXTENSION NO INTERVALS.
SELECTION-SCREEN END OF BLOCK BLQ1.

** (++) debido a la sentencia siguiente que afecta sólo a S_MATNR
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MATNR-LOW.

SELECT MATNR MAKTG
INTO TABLE IT_MATNR
FROM MAKT
WHERE SPRAS EQ ‘S’.

CALL FUNCTION ‘F4IF_INT_TABLE_VALUE_REQUEST’
EXPORTING
RETFIELD = ‘MATNR’
WINDOW_TITLE = ‘MATERIAL’
VALUE_ORG = ‘S’
TABLES
VALUE_TAB = IT_MATNR
RETURN_TAB = IT_MATCH
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.

IF SY-SUBRC EQ 0.
READ TABLE IT_MATCH INDEX 1.
MOVE IT_MATCH-FIELDVAL TO S_MATNR-LOW.
ENDIF.

4 10 2008
Daniel Panaro

Muchas gracias por el aporte Juan.
Saludos,
Daniel.

17 09 2009
Gabriela

Hola Daniel!

Una consulta nomás, muy bueno el topico, el unico cambio que le haria seria la declaracion de it_match:
types: ty_match type ddshretval. ” Tal como figura en la funcion
data: ti_match type standard table of ty_match
data: st_match type ty_match.

Cambiaria el read por esto:
read ti_match into st_match INDEX 1
move st_match-fieldval to S_MATNR-LOW.

Mi duda es.. porque el INDEX es 1? .. perdona si es obvia la pregunta, pero no comprendo porque debe ser 1.

Gracias!!

18 09 2009
Daniel Panaro

Que tal Gabriela,
Luego que aparece el listado del matchcode siempre se elige una sola opción. Por lo que la tabla it_match va a tener sólo un registro. Y es por eso que se lee con index 1 para que lea ese primer registro.

Saludos,
Daniel.

24 09 2009
zrivera

Hola, tengo una duda… si quisiera limitar la busqueda del select a algún material que desee el usuario para que el matchcode no muestre tantos resultados, como le puedo hacer? Por ejemplo si el usuario captura el material “00000*” que el matchcode solo muestre los materiales que inician con 5 ceros:

SELECT MATNR MAKTG
INTO TABLE IT_MATNR
FROM MAKT
WHERE MATNR LIKE S_MATNR-LOW.

Lo he intentado, pero al llamar al evento AT…ON VALUE-REQUEST el campo de la pantalla S_MATNR-LOW no tiene ningun valor.

Alguien sabe alguna forma de hacerlo?

Saludos

27 09 2009
Daniel Panaro

Que tal Rivera,
Si en la variable s_matnr-low recibes por parte del usuario el valor “00000*”, lo que debes hacer antes del select es cambiar el * por % antes de hacer el select.
Mira este link: https://danielpanaro.wordpress.com/?s=patron
Espero te que te sirva, saludos!
Daniel.

14 07 2011
Salvador Gil

¿Esto se puede aplicar en cualquier trx?,
por ejemplo cambiar los valores del MatchCode de Clase de Documento en la F-48.

¿En que momento se indicaría que al dar F4 se utilizaria nuestro nueva ayuda?

15 07 2011
Daniel Panaro

Salvador,
Esto lo se puede aplicar en programas Z. La transacción F-48 es estándard y por lo tanto no permite la modificación del código.

A partir de la sentencia “AT SELECTION-SCREEN ON VALUE-REQUEST FOR…” se indica que se utilizará la ayuda.

Saludos cordiales,
Daniel Panaro.

23 09 2011
Daniel Avalos

Hola esta buena la forma del matchcode, pero lo que yo ando buscando es la forma de armar un “arbol” de busqueda, tal y como lo hace la RH_OBJID_REQUEST. sabes como hacerlo?

muchas gracias

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 )

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 )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




A %d blogueros les gusta esto: