PDA

Ver la Versión Completa : ALV GRID con POP UP


zurfero
22/04/09, 16:02:47
Hola.
Bueno, la duda es la siguiente..., tengo un ALV, y en ese ALV tengo unas celdas que son editables..., pero quiero que la información que hay en esas celdas se cargue de forma similar a un matchcode.
Qué quiero decir con esto..., Al pinchar en el matchcode, debería aparecer una pantalla con unos datos que yo debo de cargar y que no puedo ir a consultar a una tabla, ya que es un join complejo que depende de una serie de caracteristicas del objeto...

Como plantearíais esto??...
Hay alguna forma de que aparezca un popup..., o de crear una celda con matchcode...o algo así...???

Me podeis dar alguna idea??

Gracias.

DavidXD_XD
23/04/09, 03:35:21
Hola, si creo q es lo q entendi esta algo complejo, quieres una ayuda dentro de la celda editable de tu ALV y al mismo tiempo que la ayuda muestre los campos que vas agregando en las celdas???

Si ese es el caso entonces creo q por programa no se puede hacer mucho pero si es posible, nunca lo he hecho pero se me ocurre primero activar el campo del catalogo del ALV llamado CHECKTABLE, eso esta dentro de la estructura LVC_S_FCAT (Catalogo con OO), en ese campo se debe indicar una tabla de BD el cual mostrara los valores que tienes, ahora yo deberia crear una tabla Z con un solo campo el cual sera el campo que quiero q aparezca en el matchcode, a medida que voy llenando los datos en las celdas editables voy agregando datos en la tabla Z y asi en linea iran apareciendo los datos que agregaste en tu ayuda de busqueda, eso se puede hacer con ALV OO con el evento handle_data_changed, espero te sirva la info y la idea, si entendi mal xfa explicar mejor para q asi podamos ayudart entre todos :D

zurfero
23/04/09, 06:34:20
Hola David.
Efectivamente es algo lioso..., a ver si esta vez consigo explicarme mejor.

El problema , es que esos datos que tengo que presentar para que rellenen esa celda son dinámicos..., no puedo tenerlos almacenados en una tabla , ni una vista...,como dices para asociar a dicho campo una ayuda de búsqueda...,

La idea sería poder indicar (si se puede) en el catálogo de campos que esa celda tiene matchcode (sin que tenga asociado dicho campo ayuda de busqueda)..., y poder detectar el evento al clickar ahí, para que yo pueda realizar el proceso necesario y mostrar una nueva ventana tipo pop up (Me podéis decir qué funcion puedo utilizar para hacer esto??) ..., con los datos que he cargado y que desde ahí se seleccione y se cargue en la celda.

Gracias por la ayuda.

eljota
07/05/09, 21:50:39
Creo q ya entendi lo q intentas hacer y si se puede:

Primero debes capturar la accion d dar doble clic a la celda q quieres editar, para eso debes asegurarte q:

q tu layout tenga asignado un valor en el campo F2CODE.

GS_LAYOUT-F2CODE = 'MATCHCODE'.

q tu llamado a alv grid tenga como export este layout y el user_command:

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
*
*
*
IS_LAYOUT = GS_LAYOUT
TABLES
T_OUTTAB = 'tu_tabla_interna'
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.

Luego implementar tu user_command:

FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.

CHECK NOT RS_SELFIELD-TABNAME IS INITIAL.
CASE R_UCOMM.
WHEN 'MATCHCODE'.
IF RS_SELFIELD-FIELDNAME EQ 'nombre_campo_editable'.
" Aqui va la funcionalidad una vez q hiciste doble clic al campo

" Llamado al pop up tipo matchcode
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'CAMPO-TABLA-POPUP'
WINDOW_TITLE = 'TITULO POP-UP'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = 'tabla interna con valores popup'
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.
tu_tabla_interna-nombre_campo_editable = IT_MATCH-FIELDVAL.
ENDIF.
" Actualizacion del campo con el valor dl pop up
MODIFY tu_tabla_interna INDEX RS_SELFIELD-TABINDEX.

rs_selfield-refresh = 'X'.
clear i_ucomm.
ENDIF.
ENDCASE.
ENDFORM.

Necesitaras declarar la tabla interna:
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.

Esto lo hice sin compilar pero he hecho programas q hacen esto, asi q si tienes alguna duda, me avisas.

salu2

zurfero
08/05/09, 06:22:35
Hola eljota.

Voy a intentar lo que dices, pues aún no conseguí hacerlo.

Gracias.