MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Refrescar ALV OO - refresh_table_display (foro/showthread.php?t=38705)

Jambi 09/09/10 10:09:27

Refrescar ALV OO - refresh_table_display
 
Buenas,

Tengo un elemento de datos Status, con los valores, p.e.: "OF" con la descripción "Offen", etc. En la tabla Z se almacena el valor "OF" pero en un grid ALV se muestra "Offen", al modificarlo por código en la tabla interna del ALV antes del set_table_for_first_display.

Hasta ahí todo bien, el problema viene al modificar este valor en el ALV, se trata de un columna modificable, pretendo que al tomar el valor, se muestre la descripción, en vez del valor. Para ello, al instanciar el ALV indico que el evento data_change se lance al modificar una celda y no al dar enter:

call method gr_alvgrid->register_edit_event
exporting
i_event_id = cl_gui_alv_grid=>mc_evt_modified



Y trato los cambios de las celdas y actualizo la tabla
interna que paso al ALV, en el evento data_changed:

form handle_data_changed using rr_data_changed type ref to
cl_alv_changed_data_protocol.

loop at p_data->mt_mod_cells into ls_mod_cell.
when 'SCHSTATUS'.

READ TABLE TA_ITAB INTO WA_ITAB INDEX ls_mod_cells-ROW_ID.

CASE ls_mod_cells-VALUE.
WHEN 'OF'.
WA_ITAB-SCHSTATUS = 'Offen'.
WHEN 'IB'.
WA_ITAB-SCHSTATUS = 'in Bearbeitung'.
WHEN 'ER'.
WA_ITAB-SCHSTATUS = 'Erledigt'.
WHEN 'EN'.
WA_ITAB-SCHSTATUS = 'Entfällt'.
ENDCASE.

MODIFY TA_ITAB INDEX ls_mod_cells-ROW_ID FROM WA_ITAB.

data: posicion type lvc_s_stbl.

posicion-row = 'X'.
posicion-col = 'X'.

CALL METHOD obj_grid->refresh_table_display
exporting is_stable = posicion.

endloop.

endform. " handle_data_changed


Pero sigue apareciendo en el ALV el valor "OF" (p.e.) y de hecho en la tabla interna TA_ITAB toma ese valor, cuando al debuggear compruebo que toma la descripcion en el data_changed (!).

Me falta algo? no es el proceso adecuado? he encontrado que se puede hacer tambien a través de user_command, indicando rs_selfield-refresh = 'X', pero con REUSE_ALV_GRID_DISPLAY, en vez de set_table_for_first_display, lo probé también pero sin éxito. Además ya conseguí que el ALV tuviera la apariencia y funcionalidad deseada con set_table_for_first_display, y preferiría no tener que adaptarlo.

Muchas gracias de antemano y un saludo,
Javi

Jambi 09/09/10 11:20:11

quieto parao!

lo he conseguido con MODIFY_CELL:


call method rr_data_changed->MODIFY_CELL
exporting i_row_id = ls_mod_cells-row_id
i_fieldname = 'SCHSTATUS'
i_value = c_texto.


gracias de todas maneras a los que lo hayais leido, saludos
Javi

JoNhNaTaN 24/10/13 17:54:49

estimado tu variable ls_mod_cells es de tipo LVC_S_ROID, lo haz declarado asi:

ls_mod_cells type LVC_S_ROID.

Estoy en lo correcto, ademas que valor toma esa variable (estructura) de donde lo tomas??


Husos Horarios son GMT. La hora en este momento es 19:08:25.

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