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

Información

3 respuestas

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.

Deja un comentario