Las ayudas búsquedas de sap, nos ayudan a completar los valores de los campos de entrada en las pantallas de selección . Pero a veces, el cliente piden que ejecutando la ayuda búsqueda sobre un campo de la pantalla de selección , el resto de campos se rellenen automáticamente.
Por ejemplo, un programa que recupera datos de la tabla MKPF y en la pantalla de selección podemos introducir el nº de documento de material, el documento de referencia el ejercicio. El cliente quiere una ayuda búsqueda que rellene automáticamente los tres campos.
Ayuda Búsqueda que recupera varios campos |
En este ejemplo vamos a recuperar el documento de material, ejercicio y el documento de referencia cuando situemos el cursor en cualquiera de los tres campos, presionemos F4 y seleccionemos un valor de la lista.
Primero creamos una ayuda búsqueda en la SE11 ( Ej: ZMCODE_MATERIAL ) sobre la MKPF y con los tres campos que queremos recuperar.
En el evento AT SELECTION-SCREEN ON VALUE-REQUEST FOR llamaremos a una subrutina que ejecutara 3 bapis:
- F4IF_GET_SHLP_DESCR: Recupera los datos de la ayuda búsqueda, una vez ejecutada, marcar el campo VALFIELD. en la tabla SHLP de los campos que se quieren recuperar. También se pueden crear filtro utilizando el campo SELOPT.
- F4IF_START_VALUE_REQUEST: muestra un popup con la ayuda búsqueda y recupera los datos seleccionados por el usuario.
- DYNP_VALUES_UPDATE: Actualiza los campos de la pantalla de selección.
Podéis descargaros el codigo desde el repositorio git del blog:
El código completo del programa es el siguiente:
El código completo del programa es el siguiente:
*&---------------------------------------------------------------------* *& PROGRAMA.............: ZAYUDA_BUSQUEDA *& AUTOR................: David Rueda Barrón *& FECHA................: 12.02.2013 *& TRANSACCION..........: ZAYUDA_BUSQUEDA *& ORDEN DE TRANSPORTE..: *& EMPRESA..............: *&---------------------------------------------------------------------* *& DESCRIPCION: *& Ejemplo de una ayuda busqueda que rellena varios campos en la *& pantalla de selección *&---------------------------------------------------------------------* *& Modificador Fecha MARCA Motivo *&---------------------------------------------------------------------* *& XXXXXXXX DD.MM.AA @01 xxxxxxxxxxxxxx *&---------------------------------------------------------------------* REPORT zayuda_busqueda. TYPE-POOLS: shlp. *&---------------------------------------------------------------------* *& Parámetros de Selección *&---------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK block01 WITH FRAME TITLE text-s01. PARAMETERS : pi_xblnr TYPE xblnr, pi_mblnr TYPE mblnr, pi_mjahr TYPE mjahr. SELECTION-SCREEN END OF BLOCK block01. *&---------------------------------------------------------------------* *& Validaciones de Pantalla *&---------------------------------------------------------------------* AT SELECTION-SCREEN ON VALUE-REQUEST FOR pi_xblnr. PERFORM f4_help_variant. AT SELECTION-SCREEN ON VALUE-REQUEST FOR pi_mjahr. PERFORM f4_help_variant. AT SELECTION-SCREEN ON VALUE-REQUEST FOR pi_mblnr. PERFORM f4_help_variant. *&---------------------------------------------------------------------* *& INITIALIZATION *&---------------------------------------------------------------------* INITIALIZATION. *&---------------------------------------------------------------------* *& START-OF-SELECTION *&---------------------------------------------------------------------* START-OF-SELECTION. *&---------------------------------------------------------------------* *& END-OF-SELECTION *&---------------------------------------------------------------------* END-OF-SELECTION. *&---------------------------------------------------------------------* *& Form F4_HELP_VARIANT *&---------------------------------------------------------------------* FORM f4_help_variant . DATA: dyname LIKE d020s-prog VALUE, dynumb LIKE d020s-dnum VALUE. DATA: BEGIN OF dynpfields OCCURS 3. INCLUDE STRUCTURE dynpread. DATA: END OF dynpfields. DATA: l_shlp TYPE shlp_descr. DATA: lv_name_sh TYPE shlpname VALUE 'ZMCODE_MATERIAL'. DATA: t_return TYPE STANDARD TABLE OF ddshretval . DATA: v_subrc TYPE sysubrc. FIELD-SYMBOLS: <FI> TYPE ddshiface, <FH> TYPE ddshretval, <FD> LIKE LINE OF dynpfields.
dyname = sy-repid. dynumb = sy-dynnr. CALL FUNCTION 'F4IF_GET_SHLP_DESCR' EXPORTING shlpname = lv_name_sh shlptype = 'SH' IMPORTING shlp = l_shlp. LOOP AT l_shlp-interface ASSIGNING <FI>. <FI>-valfield = 'X'. ENDLOOP. CALL FUNCTION 'F4IF_START_VALUE_REQUEST' EXPORTING shlp = l_shlp IMPORTING rc = v_subrc TABLES return_values = t_return. LOOP AT t_return ASSIGNING <FH>. APPEND INITIAL LINE TO dynpfields ASSIGNING <FD>. CONCATENATE 'PI_' <FH>-FIELDNAME INTO <FD>-FIELDNAME. <FD>-FIELDVALUE = <FH>-FIELDVAL. ENDLOOP. CALL FUNCTION 'DYNP_VALUES_UPDATE' EXPORTING dyname = dyname dynumb = dynumb TABLES dynpfields = dynpfields. endform . " F4_HELP_VARIANT
Entradas relacionadas
Filtrar los datos para las ayudas busquedas
Excelente aporte...muchísimas tracias...
ResponderEliminarGran aporte, no te imaginas la ayuda que me diste, estuve varias horas buscando y ninguna de las soluciones recupera los campos del matchcode, solo este código. Si bien no los voy a usar para mostrarlos en pantalla como en tu ejemplo, la recuperación de los campos me viene como anillo al dedo. Nuevamente muchas gracias.
ResponderEliminarExcelente aporte, me fue de mucha ayuda, si bien mi necesidad no era rellenar los campos de la pantalla, la captura de los datos del matchcode me vino como anillo al dedo. Mucha gracias.
ResponderEliminarGracias.
ResponderEliminarMuchas gracias
ResponderEliminar