PDA

Ver la Versión Completa : evento ENTER o Cambio de datos en ALV (no OO)


wlade
26/02/08, 17:49:16
Buenas,

Tengo una alv editable, utilizando el MF "REUSE_ALV_GRID_DISPLAY". Me gustaria comprobar cuando el usuario pulsa el ENTER o cambiar datos de una celda. Como puedo hacerlo?

RECORDAD: NO es una OO ALV, se esta utilizando un modulo de funciones.

Saludos

LouieBoy
27/02/08, 08:01:17
Buenas, por desgracia en los alvs por funcion no son muy versatiles, como mucho creo que podras registrar lo del enter, pero olvidate del evento on change.. a menos que no lo programes tu con un par de tablas internas y comparando, la cual cosa me parece una matada teniendo los objects....
Para lo el ok code enter, deberias asignarle al enter un ok code desde el status, con eso y si sabes como funcionan los user command con los alvs por funcion deberias tener suficiente.

Saludos,

LouieBoy

robert_milan
27/02/08, 08:11:03
Para los datos de la celda, deberias guardar los datos en una tabla interna auxiliar para despeus compara. por que asi tan facil no es :D

LouieBoy
27/02/08, 08:19:30
Lo que yo digo... una matada.... :D reinventemos la rueda señores.. :cool:

Saludos,

LouieBoy

sanckok
11/03/08, 10:29:18
Hola,

Perdona mi ignorancia ;) Me podrias decir como le pongo el enter al ok code?

Muchas gracias

robert_milan
11/03/08, 10:49:00
hola hasta donde yo se el enter es nulo o blanco, si viene blanco es que le an dado enter al teclado.

saludos

sanckok
11/03/08, 10:57:15
Si, pero cuando le doy a enter, no me hace nada el programa, es como si no detectase que he pulsado el enter

robert_milan
11/03/08, 11:19:36
cuando el cursor se encuentra dentro del ALV, sap no entiende la instruccion enter, lo que debes hacer es poner o posicionar el cursor en el cuadro de comandos o de transacciones y luego darle enter.

logicamente no es lo correcto pero no se me ocurre nada. Es mejor un doble clic :D

sanckok
11/03/08, 11:23:03
Ok, gracias, no me sirve.
Ahora he encontrado una cosa y lo estoy probando
En la funcion REUSE_ALV_GRID_DISPLAY
he encontrado (o mejor dicho he visto) uno de los parametros que es I_GRID_SETTINGS, que tiene un campo EDT_CLL_CB que parece que puede tener algo que ver con lo que quiero.

vickxo
11/03/08, 14:28:36
Mira, posteron esto ams arriba y es buena opcion, segun yo


Primero agrego el evento DATA_CHANGED a la llamada del alv, en tu codigo seria en el gt_events[]
FORM eventtab_build USING it_events TYPE slis_t_event.

DATA: l_event TYPE slis_alv_event.

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = it_events.


l_event-name = 'DATA_CHANGED'.
l_event-form = 'DATA_CHANGED'.
APPEND l_event TO it_events.
ENDFORM. "eventtab_build

Luego creo la rutina DATA_CHANGED para efectuar los cambios necesarios. El evento salta con el INTRO

FORM data_changed USING rr_data TYPE REF TO cl_alv_changed_data_protocol.
DATA : ls_mod_cell TYPE lvc_s_modi,
lv_value TYPE lvc_value .
data c_texto like tj30t-txt30.
* Inicialitzacions
data rs_selfield TYPE slis_selfield.

* Tractament de les dades modificades
SORT rr_data->mt_mod_cells BY row_id .
LOOP AT rr_data->mt_mod_cells INTO ls_mod_cell.
IF ls_mod_cell-fieldname = 'ESTAT'.
SELECT SINGLE txt30 INTO c_texto
FROM tj30t
WHERE stsma = 'ZCSIORD'
AND estat = ls_mod_cell-value
AND spras = sy-langu.
READ TABLE g_mseg index ls_mod_cell-row_id .
if sy-subrc = 0.
g_mseg-txt30 = c_texto.
modify g_mseg index ls_mod_cell-row_id.
call method rr_data->MODIFY_CELL
exporting i_row_id = ls_mod_cell-row_id
i_fieldname = 'TXT30'
i_value = c_texto.
ENDIF.
ENDIF.
ENDLOOP.
* MESSAGE i300.
ENDFORM.


Revisa de todos modos el posteo de modificar un alv...bye

http://www.mundosap.com/foro/showthread.php?t=11687