|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Funciones Útiles para Ayudas de Búsqueda [Matchodes, F4] y Lectura/Escrit en Dynpros
Buenos Días Colegas, Después de un tiempo de estar rondando por este foro, me decidí a hacer una pequeña contribución, ya que en mas de una vez este foro me há ayudado con algunas dudas que he tenido.
Este hilo lo abrí con el objetivo de poner algunas funciones y algoritmos que me ayudaron a completar un desarrollo que tenía que realizar. Los objetivos eran: - Mediante código Asociar una ayuda de búsqueda(A.B.) del diccionario, a un campo de una dynpro. - Crear una ayuda de búsqueda en Tiempo de ejecución, a partir de una tabla interna cuyos valores dependen del valor de un campo "llenado" previamente(filtro para un "select"). Si tal campo no tiene valores correctos, la A.B. No debe "generarse". - Modificar los valores de los campos de una dynpro sin pasar por el Process After Input (Antes de presionar "enter" o algún botón), y consecuentemente, antes del siguiente Process Before Output. - Opcional: Leer los campos de una dynpro SIN usar la conexión implícita con el código ABAP, es decir, Antes del PAI o después del PBO. (cuando un campo de una dynpro tiene el mismo nombre de una variable ABAP, y además tienen un tipo de datos compatible, Durante el PAI se hace un transporte de datos Dynpro -> ABAP, y durante el PBO: ABAP -> Dynpro). Para comodidad de quien lea esto, dividiré el código por respuestas a este mismo mensaje, resolviendo cada objetivo. Úlima edición por romyggar fecha: 28/06/12 a las 17:11:13. |
#2
|
|||
|
|||
Primer Objetivo: Mediante código Asociar una ayuda de búsqueda(A.B.) del diccionario
Primer Objetivo: Mediante código Asociar una ayuda de búsqueda(A.B.) del diccionario, a un campo de una dynpro.
-------------------------------------------------------------------------------------------------------------------------------------------------- El Evento en donde se debe poner los módulos a desarrollar es: PROCESS ON VALUE-REQUEST. FIELD P9900-MARCA MODULE F4_asociar. -------------------------------------------------------------------------------------------------------------------------------------------------- El código del módulo es el siguiente: MODULE F4_asociar. DATA return_tab LIKE ddshretval OCCURS 0 WITH HEADER LINE. Función ------------------------------------------------------------------------------------------------------------------------------------ CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST' EXPORTING tabname = space fieldname = space searchhelp = 'SRM_F4_DATUM' * SHLPPARAM = ' ' * DYNPPROG = ' ' * DYNPNR = ' ' * DYNPROFIELD = ' ' * STEPL = 0 value = 'P9900-FECHA' * MULTIPLE_CHOICE = ' ' * DISPLAY = ' ' TABLES return_tab = return_tab EXCEPTIONS field_not_found = 1 no_help_for_field = 2 inconsistent_help = 3 no_values_found = 4 OTHERS = 5. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. EXIT. ENDIF. Explicación --------------------------------------------------------------------------------------------------------------------------------- 'P9900-FECHA': es el campo de la dynpro al cual se le va a "pegar" la ayuda de búsqueda del diccionario. return_tab: La función necesita una tabla en donde se retornen los valores elegidos en la A.B. 'SRM_F4_DATUM': La A.B. creada previamente en el Diccionario de datos (mediante la SE11). Notas ------------------------------------------------------------------------------------------------------------------------------------------- Nuevamente hay que poner los nombres en MAYÚSCULAS. ENDMODULE. "F4_asociar. Úlima edición por romyggar fecha: 28/06/12 a las 16:56:02. Razón: Ajuste de código (soy novato en esto) |
#3
|
|||
|
|||
Crear una ayuda de búsqueda en Tiempo de ejecución
Segundo objetivo: Crear una ayuda de búsqueda en Tiempo de ejecución
Supongo que ya hay algun hilo con etsa función, pero pienso que no sobra hacer el aporte, puede que resuelva alguna duda que en otros hilos no se resolvió.... -------------------------------------------------------------------------------------------------------------------------------------------------- El Evento en donde se debe poner los módulos a desarrollar es: PROCESS ON VALUE-REQUEST. FIELD P9900-MARCA MODULE F4_tabla_int. -------------------------------------------------------------------------------------------------------------------------------------------------- El código del módulo es el siguiente: MODULE F4_tabla_int. Declaración de Datos ----------------------------------------------------------------------------------------------------------------------- Asi se debería declarar it_return1, y itab (la cual puede ser como se requiera). DATA : it_return1 LIKE ddshretval OCCURS 0 WITH HEADER LINE. DATA: BEGIN OF itab OCCURS 0, marca LIKE tka01-kokrs, bezei LIKE tka01-bezei, END OF itab. Función: ------------------------------------------------------------------------------------------------------------------------------------ Esta funcion sirve para generar una ayuda de búsqueda en tiempo de ejecución, además también permite indicar a que campo, dynpro y programa debe asignarse. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'MARCA' value_org = 'S' dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'P9900-MARCA' TABLES value_tab = itab return_tab = it_return1 EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. Explicación --------------------------------------------------------------------------------------------------------------------------------- 'P9900-MARCA': Campo de la dynpro que se le pegará la ayuda de búsqueda 'MARCA': Campo de la ayuda de búsqueda que se exporta a la dynpro desde donde fue llamada. itab: Tabla interna con los datos a visualizar en la ayuda de busqueda it_return1: tabla que obtiene el valor elegido en la ayuda de busqueda. Notas -------------------------------------------------------------------------------------------------------------------------------------- Los nombres entre tildes o comas flotantes sencillas, deben estar en MAYÚSCULAS. Obviamente se debe "llenar" la tabla interna antes de llamar a la función. |
#4
|
|||
|
|||
Modificar los valores de los campos de una dynpro sin PAI ó PBO
Tercer Objetivo: Modificar los valores de los campos de una dynpro sin pasar por el Process After Input.
-------------------------------------------------------------------------------------------------------------------------------------------------- El Evento en donde se debe poner los módulos a desarrollar es: PROCESS ON VALUE-REQUEST. FIELD P9900-MARCA MODULE F4_QQQQ. "Cualquier otro módulo útil" -------------------------------------------------------------------------------------------------------------------------------------------------- El código del módulo es el siguiente: MODULE F4_QQQQ. Declaración de variables: -------------------------------------------------------------------------------------------------------------------- DATA dynpfields LIKE dynpread OCCURS 0 WITH HEADER LINE. ..... ..... Código del módulo que realiza otra función (o funciones) ..... ..... Preparación "Mini PBO": ---------------------------------------------------------------------------------------------------------------------- Aquí se esta tratando una dynpro con 2 campos llamados 'P9900-MARCA' y 'TXT_INFO'. " nombre del campo en la dynpro dynpfields-fieldname = 'P9900-MARCA'. "txt_info. " Nuevo valor del campo escribir. dynpfields-fieldvalue = it_return1-fieldval. " Realizar Actualización Inmediatamente dynpfields-fieldinp = 'X'. APPEND dynpfields. dynpfields-fieldname = 'TXT_INFO'. "txt_info. dynpfields-fieldvalue = txt_info. dynpfields-fieldinp = 'X'. APPEND dynpfields. Función: ------------------------------------------------------------------------------------------------------------------------------------ CALL FUNCTION 'DYNP_VALUES_UPDATE' " EXPORTING dyname = sy-repid dynumb = sy-dynnr TABLES dynpfields = dynpfields EXCEPTIONS OTHERS = 8. Explicación: --------------------------------------------------------------------------------------------------------------------------------- dynpfields: Es una Tabla que tiene cada campo (con su respectivo valor) a actualizar. Cada registro que tenga la tabla corresponde a un campo en la diynpro indicada por sy-dynnr. |
#5
|
|||
|
|||
Leer los campos de una dynpro SIN usar la conexión implícita
Objetivo Opcional: Leer los campos de una dynpro SIN usar la conexión implícita con el código ABAP, es decir, Antes del PAI o después del PBO.
-------------------------------------------------------------------------------------------------------------------------------------------------- Este es un programa que desarrollé justamente para el foro, es sencillo y corto. REPORT YAVQZ_READDYNP_1. Declaración de Variables: ------------------------------------------------------------------------------------------------------------------- DATA: dynpro_values TYPE TABLE OF dynpread WITH HEADER LINE, field_value LIKE LINE OF dynpro_values. Creación de una Dynpro mediante código: --------------------------------------------------------------------------------------------------- PARAMETERS: s_SFLI TYPE SFLIGHT-CARRID, s_SCARR TYPE SCARR-CARRNAME. * Este es el Process After Input mediante código AT SELECTION-SCREEN. s_SCARR = s_SFLI. * Este es el PROCESS ON VALUE-REQUEST mediante código AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_SCARR. PERFORM f4_for_portfolios. -------------------------------------------------------------------------------------------------------------------------------------------------- FORM f4_for_portfolios. * Se le indica cuales son los campos a leer desde la dynpro, en este caso solamente es S_SFLI. dynpro_values-fieldname = 'S_SFLI'. APPEND dynpro_values. Función: ------------------------------------------------------------------------------------------------------------------------------------ CALL FUNCTION 'DYNP_VALUES_READ' EXPORTING dyname = sy-repid dynumb = sy-dynnr " '1000' translate_to_upper = 'X' TABLES dynpfields = dynpro_values. * Esta linea puede omitirse si se desea. READ TABLE dynpro_values INDEX 1. *BREAK-POINT. ENDFORM. "get_portfolios Explicación: --------------------------------------------------------------------------------------------------------------------------------- dynpro_values: es una estructura/tabla que tiene los campos a "Leer". Previamente debe ser "llenada" con tales campos. Nota: -------------------------------------------------------------------------------------------------------------------------------------- Para visualizar el efecto, se debe habilitar el BREAK-POINT., o en su defecto presionar "Enter" despues de haber usado la ayuda de búsqueda para el campo 'S_SFLI'. Bueno, espero y estos algoritmos le sirvan a alguien. Salu2 |
#6
|
|||
|
|||
Muchísimas gracias por el tema... me ha sido de muchísima utilidad tu ejemplo del tema 2. Había estado buscando y no había entendido bien como era que se tenía que hacer y ahora ya me funcionó mi programita. De casulidad tu sabes como puedo hacer que SAP lea los parámetros anteriores aunque el usuario no haya dado un Enter?.
|
#7
|
|||
|
|||
La respuesta está ahi arriba
Amigo MagnaF, Mira la respuesta en el primer mensaje que publiqué: Si puedes modificarlos, también puedes leerlos!. PD: estoy respondiendo 1 año después de que el colega hizo su pregunta, pero quizá alguien más tenga esa duda. Salu2!. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|