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 11/03/08, 09:46:20
sanckok sanckok is offline
Member
 
Fecha de Ingreso: oct 2007
Mensajes: 40
Capturar eventos en alv

Hola a todos,

Antes de nada, pedir perdon por postear con anterioridad este mensage en un tema que no tocaba, lo vuelvo a poner aqui.

Es la primera vez que posteo, ya que normalmente encuentro lo que necesito.
Ahora se me presenta un problema y no se como solucionarlo
En un ALV tengo una columna que es editable. Necesito saber cuando se modifica para poder hacer un calculo en ese mismo momento.
Entiendo que tengo que capturar el evento DATA_CHANGED o LIST_MODIFY, pero no me hace el efecto deseado.

A alguien se le ocurre como puedo hacer esto, si voy bien encaminado o mejor hacerlo de otra forma.

He mirado de hacerlo con objetos, pero tendria que modificar todo el programa y no quiero, ya que lo tienen en produccion.

Muchas gracias por leerme
Responder Con Cita
  #2  
Viejo 11/03/08, 12:47:57
ibecerra
 
Mensajes: n/a
Que tal, lo podrias hacer con un enter, es decir te creas un status "Menu" lo invocas desde el alv.
pero debes hacer algo especial en el status.. en el boton que tiene un
√ poner la palabra enter o ok.
luego cuando estes en la celda editables y des enter se accionara el
USER_COMMAND
ejemplo..
si llamo a la funcion para displayar el alv
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = g_repid
i_callback_pf_status_set = 'SET_STATUS' ---LLAMADA DEL MENU
i_callback_user_command = 'USER_COMMAND' -- ,, DEL USERCOMMAD
i_structure_name = 'TI_INTERNA'
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
IT_EXCLUDING = gs_exclude[]
i_save = g_save
is_variant = g_variant
it_events = gt_events[]
is_print = gs_print
TABLES
t_outtab = TI_INTERNA
EXCEPTIONS
program_error = 1
OTHERS = 2.



FORM user_command USING pa_ucomm LIKE sy-ucomm
pa_tabla TYPE slis_selfield.
CASE pa_ucomm.
when 'ENTER'.

CHECK NOT pa_tabla-value IS INITIAL.
READ TABLE TI_INTERNA INDEX pa_tabla-tabindex. "Te indica en la posicion q se encuentra.
IF SY-SUBRC EQ 0.
aqui pones tu logica de calculo.... y actualizas tu tabla interna
ENDIF.
* y por ultimo para refrescarla ejecutas la siguiente sentencia
pa_tabla-refresh = 'X'.
pa_tabla-col_stable = 'X'.
pa_tabla-row_stable = 'X'.

encase.
espero poder haberte ayudado.
saludos

Responder Con Cita
  #3  
Viejo 11/03/08, 14:12:02
sanckok sanckok is offline
Member
 
Fecha de Ingreso: oct 2007
Mensajes: 40
Muchas gracias,
La verdad es que al final lo he conseguido. Pongo aqui como lo he hecho, ya que creo que le puede ir bien a alguien

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.


Muchas gracias de nuevo
Responder Con Cita
  #4  
Viejo 11/03/08, 15:27:03
sanckok sanckok is offline
Member
 
Fecha de Ingreso: oct 2007
Mensajes: 40
Perdon, para que funcione, se me ha olvidado decir una cosa
En la funcion REUSE_ALV_GRID_DISPLAY se le ha de pasar un parametro:
i_grid_settings = i_lvc_s_glay

Y llenarlo con:
DATA i_lvc_s_glay LIKE lvc_s_glay.

i_lvc_s_glay-edt_cll_cb = 'X'.
Responder Con Cita
  #5  
Viejo 27/05/09, 16:02:04
sanvic sanvic is offline
Member
 
Fecha de Ingreso: nov 2007
Mensajes: 32
Hola, use el change data y me sirvio pero lo uso para recuperar la descripción del campo que se acaba de modificar, y claro como no pasa despues por el user command no se actualiza, sabe alguien como arreglarlo.

Gracias,
Salu2
Responder Con Cita
  #6  
Viejo 27/05/09, 17:08:00
Avatar de negrogho
negrogho negrogho is offline
Member
 
Fecha de Ingreso: ene 2007
Mensajes: 65
Wink

Sanvic

el metodo para modificar la celda en el Alv tambien te lo pusieron en el ejemplo

call method rr_data->MODIFY_CELL
exporting i_row_id = ls_mod_cell-row_id
i_fieldname = 'TXT30'
i_value = c_texto.


saludos
Responder Con Cita
  #7  
Viejo 28/05/09, 07:42:57
sanvic sanvic is offline
Member
 
Fecha de Ingreso: nov 2007
Mensajes: 32
Smile

Muchas gracias, a veces parezco un poco cieguita :P
Responder Con Cita
  #8  
Viejo 05/01/10, 17:30:28
ksper ksper is offline
Junior Member
 
Fecha de Ingreso: nov 2007
Mensajes: 13
Yo tengo un reporte ALV, donde solo una columna es editable, le pongo el valor que quiero y le doy enter y de manera de visualizar se ven los campos que cambie y demas... pero no se como actualizar mi tabla Z...

osea como actualizo mi tabla interna para que tome los nuvos valores introducidos y de ahi actualizar mi tabla z....

espero me puedan ayudar..

saludos..
Responder Con Cita
  #9  
Viejo 05/01/10, 18:05:11
ksper ksper is offline
Junior Member
 
Fecha de Ingreso: nov 2007
Mensajes: 13



Oye una duda, que es G_MSEG??

esa tabla donde la llenas?? No me quedo claro esa parte,
agredeceria tu ayuda........
Responder Con Cita
  #10  
Viejo 23/06/10, 14:03:32
sponsor sponsor is offline
Senior Member
 
Fecha de Ingreso: may 2010
Mensajes: 108
a mi este codigo no me hace nada, y no tengo claro que es lo que le tengo k pasar al import it_event de la llamada al alv grid.. hay que ponerle tab_events[]??

donde se deben colocar los performs de estos forms?

Poniendole eso no hace nada...

Úlima edición por sponsor fecha: 23/06/10 a las 14:12:10.
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 17:38:21.


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