MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 28/06/12, 16:28:47
romyggar romyggar is offline
Junior Member
 
Fecha de Ingreso: jun 2011
Mensajes: 14
Thumbs up 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.
Responder Con Cita
  #2  
Viejo 28/06/12, 16:55:02
romyggar romyggar is offline
Junior Member
 
Fecha de Ingreso: jun 2011
Mensajes: 14
Post 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)
Responder Con Cita
  #3  
Viejo 28/06/12, 16:59:03
romyggar romyggar is offline
Junior Member
 
Fecha de Ingreso: jun 2011
Mensajes: 14
Post 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.

Responder Con Cita
  #4  
Viejo 28/06/12, 17:10:30
romyggar romyggar is offline
Junior Member
 
Fecha de Ingreso: jun 2011
Mensajes: 14
Post 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.
Responder Con Cita
  #5  
Viejo 28/06/12, 17:43:36
romyggar romyggar is offline
Junior Member
 
Fecha de Ingreso: jun 2011
Mensajes: 14
Post 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
Responder Con Cita
  #6  
Viejo 27/08/12, 22:25:53
MagnaF MagnaF is offline
Senior Member
 
Fecha de Ingreso: dic 2009
Mensajes: 117
Thumbs up

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

Responder Con Cita
  #7  
Viejo 24/09/13, 19:59:42
romyggar romyggar is offline
Junior Member
 
Fecha de Ingreso: jun 2011
Mensajes: 14
Thumbs up 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!.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 16:32:27.


www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web