PDA

Ver la Versión Completa : Problema Eventos ALV Grid DATA_CHANGED_FINISHED


luise32
06/10/14, 23:15:47
Buenas tardes a todos, el día de hoy tuve que trabajar en un requerimiento el cual consiste en lo siguiente:

Antes que nada los pongo en contexto: Tengo un ALV editable con algunos eventos que invocan un hotspot y ayudas de entrada F4. Todos funcionaban perfectamente pero al momento de implementar el evento DATA_CHANGED_FINISHED estos eventos dejaron de funcionar.

La ayuda de busqueda F4 si la invoco en la fila 10 para que me auto complete el valor con el que escoja el usuario siempre lo pone en la fila 1.

Por otra parte el hotspot también al momento de invocarlo en la fila 5 por ejemplo, el llama según lo que exista en la fila 1.

En ambos casos es por que supongo se pierde la posición en la cual el usuario dio clic.

Alguna idea de como debo llamar estos eventos sin evitar su correcto funcionamiento dentro del ALV?

Mil gracias!

luise32
07/10/14, 21:41:01
Buenas tardes a todos!

Por fin pude dar con el problema y lo comparto por si a alguien le llegase a pasar lo mismo.

En el evento DATA_CHANGED_FINISHED hacia unos calculos para que me actualice un campo dentro de la tabla, una vez realizado el calculo tenia que actualizar la grilla con el metodo: (este codigo estaba dentro del DATA_CHANGED_FINISHED)


CALL METHOD g_grid->refresh_table_display
EXCEPTIONS
finished = 1
OTHERS = 2.


Al invocar el metodo de refresh siempre que llamaba el host_spot o la ayuda F4 provocaba que se pierdan los datos de celda actual y es por eso que siempre lo colocaba en la primera fila.

Ya para solucionarlo hice lo siguiente: solo invoco la rutina que me hace el calculo siempre y cuando la celda actual sea la del valor con la siguiente instruccion.


g_grid->get_current_cell(
IMPORTING es_col_id = l_colid
e_col = l_col
).

IF l_colid = 'VALOR' .
* Mi codigo....
* Y cuando voy a mostrar por pantalla al usuario el resultado del calculo
* llamo el refresh
CALL METHOD g_grid->refresh_table_display
EXCEPTIONS
finished = 1
OTHERS = 2.
ENDIF.


Espero que a alguien le sirva.

Cordial saludo para todos!